Skip to content

Commit cdee9ff

Browse files
committed
Pause WebView before updating scripts
1 parent 010155a commit cdee9ff

File tree

3 files changed

+44
-0
lines changed

3 files changed

+44
-0
lines changed

app/src/androidTest/java/com/duckduckgo/app/browser/BrowserTabViewModelTest.kt

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7015,6 +7015,32 @@ class BrowserTabViewModelTest {
70157015
assertEquals(1, fakeAddDocumentStartJavaScriptPlugins.otherPlugin.countInitted)
70167016
}
70177017

7018+
@Test
7019+
fun whenPrivacyProtectionsUpdatedAndPauseWebViewBeforeUpdatingScriptEnabledThenWebViewPausedBeforeAddingScript() =
7020+
runTest {
7021+
fakeAndroidConfigBrowserFeature.updateScriptOnPageFinished().setRawStoredState(State(true))
7022+
fakeAndroidConfigBrowserFeature.pauseWebViewBeforeUpdatingScript().setRawStoredState(State(true))
7023+
7024+
testee.privacyProtectionsUpdated(mockWebView)
7025+
7026+
verify(mockWebView).stopLoading()
7027+
verify(mockWebView).pauseTimers()
7028+
verify(mockWebView).resumeTimers()
7029+
}
7030+
7031+
@Test
7032+
fun whenPrivacyProtectionsUpdatedAndPauseWebViewBeforeUpdatingScriptDisabledThenDoNotWebViewPausedBeforeAddingScript() =
7033+
runTest {
7034+
fakeAndroidConfigBrowserFeature.updateScriptOnPageFinished().setRawStoredState(State(true))
7035+
fakeAndroidConfigBrowserFeature.pauseWebViewBeforeUpdatingScript().setRawStoredState(State(false))
7036+
7037+
testee.privacyProtectionsUpdated(mockWebView)
7038+
7039+
verify(mockWebView, never()).stopLoading()
7040+
verify(mockWebView, never()).pauseTimers()
7041+
verify(mockWebView, never()).resumeTimers()
7042+
}
7043+
70187044
@Test
70197045
fun whenPrivacyProtectionsUpdatedAndAndUpdateScriptOnPageFinishedDisabledThenAddDocumentStartJavaScriptOnlyOnCSS() =
70207046
runTest {

app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4257,6 +4257,17 @@ class BrowserTabViewModel @Inject constructor(
42574257
}
42584258

42594259
suspend fun privacyProtectionsUpdated(webView: WebView) {
4260+
val pauseWebViewBeforeUpdatingScript = withContext(dispatchers.io()) {
4261+
androidBrowserConfig.pauseWebViewBeforeUpdatingScript().isEnabled()
4262+
}
4263+
4264+
if (pauseWebViewBeforeUpdatingScript) {
4265+
withContext(dispatchers.main()) {
4266+
webView.stopLoading()
4267+
webView.pauseTimers()
4268+
}
4269+
}
4270+
42604271
if (withContext(dispatchers.io()) { !androidBrowserConfig.updateScriptOnPageFinished().isEnabled() }) {
42614272
addDocumentStartJavascriptPlugins
42624273
.getPlugins()
@@ -4268,6 +4279,10 @@ class BrowserTabViewModel @Inject constructor(
42684279
} else {
42694280
addDocumentStartJavaScript(webView)
42704281
}
4282+
4283+
if (pauseWebViewBeforeUpdatingScript) {
4284+
webView.resumeTimers()
4285+
}
42714286
}
42724287

42734288
fun onUserDismissedAutoCompleteInAppMessage() {

app/src/main/java/com/duckduckgo/app/pixels/remoteconfig/AndroidBrowserConfigFeature.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,4 +191,7 @@ interface AndroidBrowserConfigFeature {
191191

192192
@Toggle.DefaultValue(TRUE)
193193
fun updateScriptOnPageFinished(): Toggle
194+
195+
@Toggle.DefaultValue(TRUE)
196+
fun pauseWebViewBeforeUpdatingScript(): Toggle
194197
}

0 commit comments

Comments
 (0)