[fenix] For https://github.com/mozilla-mobile/fenix/issues/16249 - ClipboardHandler cleans up returned text

pull/600/head
Mugurell 4 years ago
parent 90eb9cfad5
commit 8fd1fbcb80

@ -7,7 +7,9 @@ package org.mozilla.fenix.utils
import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context
import androidx.annotation.VisibleForTesting
import androidx.core.content.getSystemService
import mozilla.components.support.utils.SafeUrl
import mozilla.components.support.utils.WebURLFinder
private const val MIME_TYPE_TEXT_PLAIN = "text/plain"
@ -16,7 +18,7 @@ private const val MIME_TYPE_TEXT_HTML = "text/html"
/**
* A clipboard utility class that allows copying and pasting links/text to & from the clipboard
*/
class ClipboardHandler(context: Context) {
class ClipboardHandler(val context: Context) {
private val clipboard = context.getSystemService<ClipboardManager>()!!
var text: String?
@ -25,7 +27,7 @@ class ClipboardHandler(context: Context) {
(clipboard.isPrimaryClipPlainText() ||
clipboard.isPrimaryClipHtmlText())
) {
return clipboard.firstPrimaryClipItem?.text.toString()
return firstSafePrimaryClipItemText
}
return null
}
@ -51,4 +53,8 @@ class ClipboardHandler(context: Context) {
private val ClipboardManager.firstPrimaryClipItem: ClipData.Item?
get() = primaryClip?.getItemAt(0)
@VisibleForTesting
internal val firstSafePrimaryClipItemText: String?
get() = SafeUrl.stripUnsafeUrlSchemes(context, clipboard.firstPrimaryClipItem?.text)
}

@ -30,4 +30,13 @@
<item>@string/all</item>
<item>@string/private_string</item>
</string-array>
<string name="resource_scheme">"resource://"</string>
<string name="chrome_scheme">"chrome://</string>
<string name="about_scheme">"about:"</string>
<string-array name="mozac_url_schemes_blocklist" >
<item>@string/resource_scheme</item>
<item>@string/chrome_scheme</item>
<item>@string/about_scheme</item>
</string-array>
</resources>

@ -7,7 +7,13 @@ package org.mozilla.fenix.utils
import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context
import io.mockk.every
import io.mockk.mockkObject
import io.mockk.spyk
import io.mockk.unmockkObject
import io.mockk.verify
import mozilla.components.support.test.robolectric.testContext
import mozilla.components.support.utils.SafeUrl
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
@ -59,4 +65,33 @@ class ClipboardHandlerTest {
clipboard.setPrimaryClip(ClipData.newHtmlText("Html", clipboardUrl, clipboardUrl))
assertEquals(clipboardUrl, clipboardHandler.url)
}
@Test
fun `text should return firstSafePrimaryClipItemText`() {
val safeResult = "safeResult"
clipboard.setPrimaryClip(ClipData.newPlainText(clipboardUrl, clipboardText))
clipboardHandler = spyk(clipboardHandler)
every { clipboardHandler getProperty "firstSafePrimaryClipItemText" } propertyType String::class returns safeResult
val result = clipboardHandler.text
verify { clipboardHandler getProperty "firstSafePrimaryClipItemText" }
assertEquals(safeResult, result)
}
@Test
fun `firstSafePrimaryClipItemText should return the result of SafeUrl#stripUnsafeUrlSchemes`() {
mockkObject(SafeUrl)
try {
every { SafeUrl.stripUnsafeUrlSchemes(any(), any()) } returns "safeResult"
clipboard.setPrimaryClip(ClipData.newHtmlText("Html", clipboardUrl, clipboardUrl))
val result = clipboardHandler.firstSafePrimaryClipItemText
verify { SafeUrl.stripUnsafeUrlSchemes(testContext, clipboardUrl) }
assertEquals("safeResult", result)
} finally {
unmockkObject(SafeUrl)
}
}
}

Loading…
Cancel
Save