diff --git a/components/browser/engine-gecko-beta/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt b/components/browser/engine-gecko-beta/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt index ba14955bc72..c262cc45399 100644 --- a/components/browser/engine-gecko-beta/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt +++ b/components/browser/engine-gecko-beta/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt @@ -559,6 +559,10 @@ class GeckoEngine( get() = defaultSettings?.suspendMediaWhenInactive ?: false set(value) { defaultSettings?.suspendMediaWhenInactive = value } + override var clearColor: Int? + get() = defaultSettings?.clearColor + set(value) { defaultSettings?.clearColor = value } + override var fontInflationEnabled: Boolean? get() = runtime.settings.fontInflationEnabled set(value) { @@ -609,6 +613,7 @@ class GeckoEngine( this.fontSizeFactor = it.fontSizeFactor this.forceUserScalableContent = it.forceUserScalableContent this.loginAutofillEnabled = it.loginAutofillEnabled + this.clearColor = it.clearColor } } diff --git a/components/browser/engine-gecko-beta/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngineSession.kt b/components/browser/engine-gecko-beta/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngineSession.kt index f86fc19dcee..515500c3b45 100644 --- a/components/browser/engine-gecko-beta/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngineSession.kt +++ b/components/browser/engine-gecko-beta/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngineSession.kt @@ -1036,6 +1036,7 @@ class GeckoEngineSession( defaultSettings?.testingModeEnabled?.let { geckoSession.settings.fullAccessibilityTree = it } defaultSettings?.userAgentString?.let { geckoSession.settings.userAgentOverride = it } defaultSettings?.suspendMediaWhenInactive?.let { geckoSession.settings.suspendMediaWhenInactive = it } + defaultSettings?.clearColor?.let { geckoSession.compositorController.clearColor = it } if (shouldOpen) { geckoSession.open(runtime) diff --git a/components/browser/engine-gecko-beta/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineSessionTest.kt b/components/browser/engine-gecko-beta/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineSessionTest.kt index 0f1c611e163..b31c009dfdf 100644 --- a/components/browser/engine-gecko-beta/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineSessionTest.kt +++ b/components/browser/engine-gecko-beta/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineSessionTest.kt @@ -5,6 +5,7 @@ package mozilla.components.browser.engine.gecko import android.content.Intent +import android.graphics.Color import android.os.Handler import android.os.Message import android.view.WindowManager @@ -1315,6 +1316,25 @@ class GeckoEngineSessionTest { verify(geckoSession.settings).suspendMediaWhenInactive = true } + @Test + fun settingClearColorDefault() { + whenever(geckoSession.compositorController).thenReturn(mock()) + + GeckoEngineSession(runtime, geckoSessionProvider = geckoSessionProvider) + + verify(geckoSession.compositorController, never()).clearColor = anyInt() + + GeckoEngineSession(runtime, + geckoSessionProvider = geckoSessionProvider, + defaultSettings = DefaultSettings()) + verify(geckoSession.compositorController, never()).clearColor = anyInt() + + GeckoEngineSession(runtime, + geckoSessionProvider = geckoSessionProvider, + defaultSettings = DefaultSettings(clearColor = Color.BLUE)) + verify(geckoSession.compositorController).clearColor = Color.BLUE + } + @Test fun unsupportedSettings() { val settings = GeckoEngineSession(runtime, diff --git a/components/browser/engine-gecko-beta/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineTest.kt b/components/browser/engine-gecko-beta/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineTest.kt index 1156713f7e5..fea7b929e18 100644 --- a/components/browser/engine-gecko-beta/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineTest.kt +++ b/components/browser/engine-gecko-beta/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineTest.kt @@ -6,6 +6,7 @@ package mozilla.components.browser.engine.gecko import android.app.Activity import android.content.Context +import android.graphics.Color import androidx.test.ext.junit.runners.AndroidJUnit4 import mozilla.components.browser.engine.gecko.ext.getAntiTrackingPolicy import mozilla.components.browser.engine.gecko.mediaquery.toGeckoValue @@ -258,6 +259,10 @@ class GeckoEngineTest { engine.settings.suspendMediaWhenInactive = true assertEquals(true, engine.settings.suspendMediaWhenInactive) + assertNull(engine.settings.clearColor) + engine.settings.clearColor = Color.BLUE + assertEquals(Color.BLUE, engine.settings.clearColor) + // Specifying no ua-string default should result in GeckoView's default. assertEquals(GeckoSession.getDefaultUserAgent(), engine.settings.userAgentString) // It also should be possible to read and set a new default. diff --git a/components/browser/engine-gecko-nightly/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt b/components/browser/engine-gecko-nightly/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt index ba14955bc72..595ff107b33 100644 --- a/components/browser/engine-gecko-nightly/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt +++ b/components/browser/engine-gecko-nightly/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt @@ -559,6 +559,10 @@ class GeckoEngine( get() = defaultSettings?.suspendMediaWhenInactive ?: false set(value) { defaultSettings?.suspendMediaWhenInactive = value } + override var clearColor: Int? + get() = defaultSettings?.clearColor + set(value) { defaultSettings?.clearColor = value } + override var fontInflationEnabled: Boolean? get() = runtime.settings.fontInflationEnabled set(value) { @@ -608,6 +612,7 @@ class GeckoEngine( this.fontInflationEnabled = it.fontInflationEnabled this.fontSizeFactor = it.fontSizeFactor this.forceUserScalableContent = it.forceUserScalableContent + this.clearColor = it.clearColor this.loginAutofillEnabled = it.loginAutofillEnabled } } diff --git a/components/browser/engine-gecko-nightly/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngineSession.kt b/components/browser/engine-gecko-nightly/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngineSession.kt index f86fc19dcee..515500c3b45 100644 --- a/components/browser/engine-gecko-nightly/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngineSession.kt +++ b/components/browser/engine-gecko-nightly/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngineSession.kt @@ -1036,6 +1036,7 @@ class GeckoEngineSession( defaultSettings?.testingModeEnabled?.let { geckoSession.settings.fullAccessibilityTree = it } defaultSettings?.userAgentString?.let { geckoSession.settings.userAgentOverride = it } defaultSettings?.suspendMediaWhenInactive?.let { geckoSession.settings.suspendMediaWhenInactive = it } + defaultSettings?.clearColor?.let { geckoSession.compositorController.clearColor = it } if (shouldOpen) { geckoSession.open(runtime) diff --git a/components/browser/engine-gecko-nightly/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineSessionTest.kt b/components/browser/engine-gecko-nightly/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineSessionTest.kt index 0f1c611e163..b31c009dfdf 100644 --- a/components/browser/engine-gecko-nightly/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineSessionTest.kt +++ b/components/browser/engine-gecko-nightly/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineSessionTest.kt @@ -5,6 +5,7 @@ package mozilla.components.browser.engine.gecko import android.content.Intent +import android.graphics.Color import android.os.Handler import android.os.Message import android.view.WindowManager @@ -1315,6 +1316,25 @@ class GeckoEngineSessionTest { verify(geckoSession.settings).suspendMediaWhenInactive = true } + @Test + fun settingClearColorDefault() { + whenever(geckoSession.compositorController).thenReturn(mock()) + + GeckoEngineSession(runtime, geckoSessionProvider = geckoSessionProvider) + + verify(geckoSession.compositorController, never()).clearColor = anyInt() + + GeckoEngineSession(runtime, + geckoSessionProvider = geckoSessionProvider, + defaultSettings = DefaultSettings()) + verify(geckoSession.compositorController, never()).clearColor = anyInt() + + GeckoEngineSession(runtime, + geckoSessionProvider = geckoSessionProvider, + defaultSettings = DefaultSettings(clearColor = Color.BLUE)) + verify(geckoSession.compositorController).clearColor = Color.BLUE + } + @Test fun unsupportedSettings() { val settings = GeckoEngineSession(runtime, diff --git a/components/browser/engine-gecko-nightly/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineTest.kt b/components/browser/engine-gecko-nightly/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineTest.kt index 1156713f7e5..fea7b929e18 100644 --- a/components/browser/engine-gecko-nightly/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineTest.kt +++ b/components/browser/engine-gecko-nightly/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineTest.kt @@ -6,6 +6,7 @@ package mozilla.components.browser.engine.gecko import android.app.Activity import android.content.Context +import android.graphics.Color import androidx.test.ext.junit.runners.AndroidJUnit4 import mozilla.components.browser.engine.gecko.ext.getAntiTrackingPolicy import mozilla.components.browser.engine.gecko.mediaquery.toGeckoValue @@ -258,6 +259,10 @@ class GeckoEngineTest { engine.settings.suspendMediaWhenInactive = true assertEquals(true, engine.settings.suspendMediaWhenInactive) + assertNull(engine.settings.clearColor) + engine.settings.clearColor = Color.BLUE + assertEquals(Color.BLUE, engine.settings.clearColor) + // Specifying no ua-string default should result in GeckoView's default. assertEquals(GeckoSession.getDefaultUserAgent(), engine.settings.userAgentString) // It also should be possible to read and set a new default. diff --git a/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt b/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt index 2aa4b70aa8c..4dfe36e651f 100644 --- a/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt +++ b/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngine.kt @@ -566,6 +566,10 @@ class GeckoEngine( get() = defaultSettings?.suspendMediaWhenInactive ?: false set(value) { defaultSettings?.suspendMediaWhenInactive = value } + override var clearColor: Int? + get() = defaultSettings?.clearColor + set(value) { defaultSettings?.clearColor = value } + override var fontInflationEnabled: Boolean? get() = runtime.settings.fontInflationEnabled set(value) { @@ -616,6 +620,7 @@ class GeckoEngine( this.fontSizeFactor = it.fontSizeFactor this.forceUserScalableContent = it.forceUserScalableContent this.loginAutofillEnabled = it.loginAutofillEnabled + this.clearColor = it.clearColor } } diff --git a/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngineSession.kt b/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngineSession.kt index 7199d8c4f22..2caccbade12 100644 --- a/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngineSession.kt +++ b/components/browser/engine-gecko/src/main/java/mozilla/components/browser/engine/gecko/GeckoEngineSession.kt @@ -980,6 +980,7 @@ class GeckoEngineSession( defaultSettings?.testingModeEnabled?.let { geckoSession.settings.fullAccessibilityTree = it } defaultSettings?.userAgentString?.let { geckoSession.settings.userAgentOverride = it } defaultSettings?.suspendMediaWhenInactive?.let { geckoSession.settings.suspendMediaWhenInactive = it } + defaultSettings?.clearColor?.let { geckoSession.compositorController.clearColor = it } if (shouldOpen) { geckoSession.open(runtime) diff --git a/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineSessionTest.kt b/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineSessionTest.kt index 5918197f722..26601ea275d 100644 --- a/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineSessionTest.kt +++ b/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineSessionTest.kt @@ -5,6 +5,7 @@ package mozilla.components.browser.engine.gecko import android.content.Intent +import android.graphics.Color import android.os.Handler import android.os.Message import android.view.WindowManager @@ -1282,6 +1283,25 @@ class GeckoEngineSessionTest { verify(geckoSession.settings).suspendMediaWhenInactive = true } + @Test + fun settingClearColorDefault() { + whenever(geckoSession.compositorController).thenReturn(mock()) + + GeckoEngineSession(runtime, geckoSessionProvider = geckoSessionProvider) + + verify(geckoSession.compositorController, never()).clearColor = anyInt() + + GeckoEngineSession(runtime, + geckoSessionProvider = geckoSessionProvider, + defaultSettings = DefaultSettings()) + verify(geckoSession.compositorController, never()).clearColor = anyInt() + + GeckoEngineSession(runtime, + geckoSessionProvider = geckoSessionProvider, + defaultSettings = DefaultSettings(clearColor = Color.BLUE)) + verify(geckoSession.compositorController).clearColor = Color.BLUE + } + @Test fun unsupportedSettings() { val settings = GeckoEngineSession(runtime, diff --git a/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineTest.kt b/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineTest.kt index 365aaf54fdb..08b79c30720 100644 --- a/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineTest.kt +++ b/components/browser/engine-gecko/src/test/java/mozilla/components/browser/engine/gecko/GeckoEngineTest.kt @@ -6,6 +6,7 @@ package mozilla.components.browser.engine.gecko import android.app.Activity import android.content.Context +import android.graphics.Color import androidx.test.ext.junit.runners.AndroidJUnit4 import mozilla.components.browser.engine.gecko.ext.getAntiTrackingPolicy import mozilla.components.browser.engine.gecko.mediaquery.toGeckoValue @@ -259,6 +260,10 @@ class GeckoEngineTest { engine.settings.suspendMediaWhenInactive = true assertEquals(true, engine.settings.suspendMediaWhenInactive) + assertNull(engine.settings.clearColor) + engine.settings.clearColor = Color.BLUE + assertEquals(Color.BLUE, engine.settings.clearColor) + // Specifying no ua-string default should result in GeckoView's default. assertEquals(GeckoSession.getDefaultUserAgent(), engine.settings.userAgentString) // It also should be possible to read and set a new default. diff --git a/components/concept/engine/src/main/java/mozilla/components/concept/engine/Settings.kt b/components/concept/engine/src/main/java/mozilla/components/concept/engine/Settings.kt index 760c4284725..dfbe560edb7 100644 --- a/components/concept/engine/src/main/java/mozilla/components/concept/engine/Settings.kt +++ b/components/concept/engine/src/main/java/mozilla/components/concept/engine/Settings.kt @@ -174,6 +174,11 @@ abstract class Settings { * Setting to force the ability to scale the content */ open var forceUserScalableContent: Boolean by UnsupportedSetting() + + /** + * Setting to control the clear color while drawing. + */ + open var clearColor: Int? by UnsupportedSetting() } /** @@ -208,7 +213,8 @@ data class DefaultSettings( override var fontInflationEnabled: Boolean? = null, override var fontSizeFactor: Float? = null, override var forceUserScalableContent: Boolean = false, - override var loginAutofillEnabled: Boolean = false + override var loginAutofillEnabled: Boolean = false, + override var clearColor: Int? = null ) : Settings() class UnsupportedSetting { diff --git a/components/concept/engine/src/test/java/mozilla/components/concept/engine/SettingsTest.kt b/components/concept/engine/src/test/java/mozilla/components/concept/engine/SettingsTest.kt index e35a93db740..f80fe9e59c6 100644 --- a/components/concept/engine/src/test/java/mozilla/components/concept/engine/SettingsTest.kt +++ b/components/concept/engine/src/test/java/mozilla/components/concept/engine/SettingsTest.kt @@ -4,6 +4,7 @@ package mozilla.components.concept.engine +import android.graphics.Color import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy import mozilla.components.concept.engine.history.HistoryTrackingDelegate import mozilla.components.concept.engine.mediaquery.PreferredColorScheme @@ -80,7 +81,9 @@ class SettingsTest { { settings.forceUserScalableContent }, { settings.forceUserScalableContent = true }, { settings.loginAutofillEnabled }, - { settings.loginAutofillEnabled = false } + { settings.loginAutofillEnabled = false }, + { settings.clearColor }, + { settings.clearColor = Color.BLUE } ) } @@ -121,6 +124,7 @@ class SettingsTest { assertNull(settings.fontSizeFactor) assertFalse(settings.forceUserScalableContent) assertFalse(settings.loginAutofillEnabled) + assertNull(settings.clearColor) val interceptor: RequestInterceptor = mock() val historyTrackingDelegate: HistoryTrackingDelegate = mock() @@ -154,7 +158,8 @@ class SettingsTest { fontInflationEnabled = false, fontSizeFactor = 2.0F, forceUserScalableContent = true, - loginAutofillEnabled = true + loginAutofillEnabled = true, + clearColor = Color.BLUE ) assertFalse(defaultSettings.domStorageEnabled) @@ -186,5 +191,6 @@ class SettingsTest { assertEquals(2.0F, defaultSettings.fontSizeFactor) assertTrue(defaultSettings.forceUserScalableContent) assertTrue(defaultSettings.loginAutofillEnabled) + assertEquals(Color.BLUE, defaultSettings.clearColor) } } \ No newline at end of file diff --git a/docs/changelog.md b/docs/changelog.md index 53314e47182..ebb1eeb7a50 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -11,6 +11,9 @@ permalink: /changelog/ * [Gecko](https://github.com/mozilla-mobile/android-components/blob/master/buildSrc/src/main/java/Gecko.kt) * [Configuration](https://github.com/mozilla-mobile/android-components/blob/master/.config.yml) +* **browser-engine-gecko**, **browser-engine-gecko-beta**, **browser-engine-gecko-nightly** + * Exposes GeckoView `CompositorController#ClearColor` as Setting + # 63.0.0 * [Commits](https://github.com/mozilla-mobile/android-components/compare/v62.0.0...v63.0.0)