Commit 216396d9 authored by Christian Sadilek's avatar Christian Sadilek Committed by Emily Kager
Browse files

For #12353: URL copied to clipboard should not be extension/reader URL

parent 9ae1aa6f
Loading
Loading
Loading
Loading
+14 −8
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@ import android.view.ViewGroup
import android.widget.LinearLayout
import android.widget.PopupWindow
import androidx.annotation.LayoutRes
import androidx.annotation.VisibleForTesting
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
@@ -29,6 +30,8 @@ import kotlinx.android.synthetic.main.component_browser_top_toolbar.*
import kotlinx.android.synthetic.main.component_browser_top_toolbar.view.*
import mozilla.components.browser.domains.autocomplete.ShippedDomainsProvider
import mozilla.components.browser.session.Session
import mozilla.components.browser.state.selector.selectedTab
import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.browser.toolbar.BrowserToolbar
import mozilla.components.browser.toolbar.behavior.BrowserToolbarBottomBehavior
import mozilla.components.browser.toolbar.display.DisplayToolbar
@@ -94,9 +97,6 @@ class BrowserToolbarView(
                view.context.resources.getDimensionPixelSize(R.dimen.context_menu_height),
                true
            )

            val selectedSession = container.context.components.core.sessionManager.selectedSession

            popupWindow.elevation =
                view.context.resources.getDimension(R.dimen.mozac_browser_menu_elevation)

@@ -110,11 +110,7 @@ class BrowserToolbarView(

            customView.copy.setOnClickListener {
                popupWindow.dismiss()
                if (isCustomTabSession) {
                    clipboard.text = customTabSession?.url
                } else {
                    clipboard.text = selectedSession?.url
                }
                clipboard.text = getUrlForClipboard(it.context.components.core.store, customTabSession)

                FenixSnackbar.make(
                    view = view,
@@ -300,5 +296,15 @@ class BrowserToolbarView(

    companion object {
        private const val TOOLBAR_ELEVATION = 16

        @VisibleForTesting
        internal fun getUrlForClipboard(store: BrowserStore, customTabSession: Session? = null): String? {
            return if (customTabSession != null) {
                customTabSession.url
            } else {
                val selectedTab = store.state.selectedTab
                selectedTab?.readerState?.activeUrl ?: selectedTab?.content?.url
            }
        }
    }
}
+43 −0
Original line number Diff line number Diff line
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

package org.mozilla.fenix.components.toolbar

import io.mockk.every
import io.mockk.mockk
import mozilla.components.browser.session.Session
import mozilla.components.browser.state.state.BrowserState
import mozilla.components.browser.state.state.ReaderState
import mozilla.components.browser.state.state.createTab
import mozilla.components.browser.state.store.BrowserStore
import org.junit.Assert.assertEquals
import org.junit.Test
import org.junit.runner.RunWith
import org.mozilla.fenix.components.toolbar.BrowserToolbarView.Companion.getUrlForClipboard
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner

@RunWith(FenixRobolectricTestRunner::class)
class BrowserToolbarViewTest {

    @Test
    fun getUrlForClipboard() {
        val customTabSession: Session = mockk()
        every { customTabSession.url } returns "https://mozilla.org"

        // Custom tab
        assertEquals("https://mozilla.org", getUrlForClipboard(mockk(), customTabSession))

        // Regular tab
        val regularTab = createTab(url = "http://firefox.com")
        var store = BrowserStore(BrowserState(tabs = listOf(regularTab), selectedTabId = regularTab.id))
        assertEquals(regularTab.content.url, getUrlForClipboard(store))

        // Reader Tab
        val readerTab = createTab(url = "moz-extension://1234",
            readerState = ReaderState(active = true, activeUrl = "https://blog.mozilla.org/123")
        )
        store = BrowserStore(BrowserState(tabs = listOf(readerTab), selectedTabId = readerTab.id))
        assertEquals(readerTab.readerState.activeUrl, getUrlForClipboard(store))
    }
}