Commit ab56149e authored by Sebastian Kaspari's avatar Sebastian Kaspari
Browse files

Issue #6872: (Merge day) browser-engine-gecko-nightly (77) -> browser-engine-gecko-beta (77)

parent b3fa7b2d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -11,7 +11,7 @@ internal object GeckoVersions {
    /**
     * GeckoView Beta Version.
     */
    const val beta_version = "76.0.20200424000239"
    const val beta_version = "77.0.20200504222419"

    /**
     * GeckoView Release Version.
+16 −2
Original line number Diff line number Diff line
@@ -5,6 +5,8 @@
package mozilla.components.browser.engine.gecko

import android.annotation.SuppressLint
import android.os.Build
import android.view.WindowManager
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
@@ -354,6 +356,8 @@ class GeckoEngineSession(
            if (initialLoad && url == ABOUT_BLANK) {
                return
            }

            currentUrl = url
            initialLoad = false
            isIgnoredForTrackingProtection { ignored ->
                notifyObservers {
@@ -477,8 +481,6 @@ class GeckoEngineSession(
        }

        override fun onPageStart(session: GeckoSession, url: String) {
            currentUrl = url

            notifyObservers {
                onProgress(PROGRESS_START)
                onLoadingStateChange(true)
@@ -681,6 +683,18 @@ class GeckoEngineSession(
                notifyObservers { onWebAppManifestLoaded(parsed.manifest) }
            }
        }

        override fun onMetaViewportFitChange(session: GeckoSession, viewportFit: String) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
                val layoutInDisplayCutoutMode = when (viewportFit) {
                    "cover" -> WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
                    "contain" -> WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
                    else -> WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
                }

                notifyObservers { onMetaViewportFitChanged(layoutInDisplayCutoutMode) }
            }
        }
    }

    private fun createContentBlockingDelegate() = object : ContentBlocking.Delegate {
+57 −5
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@ package mozilla.components.browser.engine.gecko
import android.content.Intent
import android.os.Handler
import android.os.Message
import android.view.WindowManager
import androidx.test.ext.junit.runners.AndroidJUnit4
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.test.runBlockingTest
@@ -52,6 +53,7 @@ import org.mockito.ArgumentMatchers.anyInt
import org.mockito.ArgumentMatchers.anyList
import org.mockito.ArgumentMatchers.anyString
import org.mockito.Mockito.never
import org.mockito.Mockito.reset
import org.mockito.Mockito.times
import org.mockito.Mockito.verify
import org.mockito.Mockito.verifyZeroInteractions
@@ -566,7 +568,7 @@ class GeckoEngineSessionTest {
    }

    @Test
    fun `keeps track of current url via onPageStart events`() {
    fun `do not keep track of current url via onPageStart events`() {
        val engineSession = GeckoEngineSession(mock(),
                geckoSessionProvider = geckoSessionProvider)

@@ -574,20 +576,43 @@ class GeckoEngineSessionTest {

        assertNull(engineSession.currentUrl)
        progressDelegate.value.onPageStart(geckoSession, "https://www.mozilla.org")
        assertEquals("https://www.mozilla.org", engineSession.currentUrl)
        assertNull(engineSession.currentUrl)

        progressDelegate.value.onPageStart(geckoSession, "https://www.firefox.com")
        assertNull(engineSession.currentUrl)
    }

    @Test
    fun `keeps track of current url via onLocationChange events`() {
        val mockedContentBlockingController = mock<ContentBlockingController>()
        val engineSession = GeckoEngineSession(runtime, geckoSessionProvider = geckoSessionProvider)
        var geckoResult = GeckoResult<Boolean?>()
        whenever(runtime.contentBlockingController).thenReturn(mockedContentBlockingController)
        whenever(mockedContentBlockingController.checkException(any())).thenReturn(geckoResult)

        captureDelegates()
        geckoResult.complete(true)

        assertNull(engineSession.currentUrl)
        navigationDelegate.value.onLocationChange(geckoSession, "https://www.mozilla.org")
        assertEquals("https://www.mozilla.org", engineSession.currentUrl)

        navigationDelegate.value.onLocationChange(geckoSession, "https://www.firefox.com")
        assertEquals("https://www.firefox.com", engineSession.currentUrl)
    }

    @Test
    fun `notifies configured history delegate of title changes`() = runBlockingTest {
        val engineSession = GeckoEngineSession(mock(),
                geckoSessionProvider = geckoSessionProvider,
        val mockedContentBlockingController = mock<ContentBlockingController>()
        val engineSession = GeckoEngineSession(runtime, geckoSessionProvider = geckoSessionProvider,
            context = coroutineContext)
        val historyTrackingDelegate: HistoryTrackingDelegate = mock()
        var geckoResult = GeckoResult<Boolean?>()
        whenever(runtime.contentBlockingController).thenReturn(mockedContentBlockingController)
        whenever(mockedContentBlockingController.checkException(any())).thenReturn(geckoResult)

        captureDelegates()
        geckoResult.complete(true)

        // Nothing breaks if history delegate isn't configured.
        contentDelegate.value.onTitleChange(geckoSession, "Hello World!")
@@ -598,7 +623,7 @@ class GeckoEngineSessionTest {
        verify(historyTrackingDelegate, never()).onTitleChanged(anyString(), anyString())

        // This sets the currentUrl.
        progressDelegate.value.onPageStart(geckoSession, "https://www.mozilla.com")
        navigationDelegate.value.onLocationChange(geckoSession, "https://www.mozilla.com")

        contentDelegate.value.onTitleChange(geckoSession, "Hello World!")
        verify(historyTrackingDelegate).onTitleChanged(eq("https://www.mozilla.com"), eq("Hello World!"))
@@ -1748,6 +1773,33 @@ class GeckoEngineSessionTest {
        verify(geckoSession).exitFullScreen()
    }

    @Test
    fun viewportFitChangeTranslateValuesCorrectly() {
        val engineSession = GeckoEngineSession(mock(),
            geckoSessionProvider = geckoSessionProvider)
        val observer: EngineSession.Observer = mock()

        // Verify the call to the observer.
        engineSession.register(observer)
        captureDelegates()

        contentDelegate.value.onMetaViewportFitChange(geckoSession, "test")
        verify(observer).onMetaViewportFitChanged(WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT)
        reset(observer)

        contentDelegate.value.onMetaViewportFitChange(geckoSession, "auto")
        verify(observer).onMetaViewportFitChanged(WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT)
        reset(observer)

        contentDelegate.value.onMetaViewportFitChange(geckoSession, "cover")
        verify(observer).onMetaViewportFitChanged(WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES)
        reset(observer)

        contentDelegate.value.onMetaViewportFitChange(geckoSession, "contain")
        verify(observer).onMetaViewportFitChanged(WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER)
        reset(observer)
    }

    @Test
    fun clearData() {
        val engineSession = GeckoEngineSession(runtime, geckoSessionProvider = geckoSessionProvider)
+0 −20
Original line number Diff line number Diff line
@@ -123,26 +123,6 @@ class GeckoMediaTest {
        assertEquals(-1.0, media.metadata.duration, 0.0001)
    }

    @Test
    fun `GeckoMedia exposes Volume`() {
        val mediaElement: MediaElement = mock()

        val media = GeckoMedia(mediaElement)

        val captor = argumentCaptor<MediaElement.Delegate>()
        verify(mediaElement).delegate = captor.capture()

        assertEquals(media.volume.muted, false)

        val delegate = captor.value

        delegate.onVolumeChange(mediaElement, 1.0, true)
        assertEquals(true, media.volume.muted)

        delegate.onVolumeChange(mediaElement, 1.0, false)
        assertEquals(false, media.volume.muted)
    }

    @Test
    fun `GeckoMedia notifies observer when metadata changes`() {
        val media = GeckoMedia(mock())
+4 −4
Original line number Diff line number Diff line
@@ -420,7 +420,7 @@ class GeckoWebExtensionTest {
        assertNull(extensionWithoutMetadata.getMetadata())

        val metaDataBundle = GeckoBundle()
        metaDataBundle.putStringArray("permissions", arrayOf("p1", "p2"))
        metaDataBundle.putStringArray("promptPermissions", arrayOf("p1", "p2"))
        metaDataBundle.putStringArray("origins", arrayOf("o1", "o2"))
        metaDataBundle.putString("description", "desc")
        metaDataBundle.putString("version", "1.0")
@@ -469,7 +469,7 @@ class GeckoWebExtensionTest {
        assertNull(extensionWithoutMetadata.getMetadata())

        val metaDataBundle = GeckoBundle()
        metaDataBundle.putStringArray("permissions", arrayOf("p1", "p2"))
        metaDataBundle.putStringArray("promptPermissions", arrayOf("p1", "p2"))
        metaDataBundle.putStringArray("origins", arrayOf("o1", "o2"))
        metaDataBundle.putString("version", "1.0")
        val bundle = GeckoBundle()
+2 −2

File changed.

Contains only whitespace changes.

Loading