Skip to content

Commit fd87da6

Browse files
committed
Pause WebView before updating scripts
1 parent 1ff382e commit fd87da6

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
@@ -7016,6 +7016,32 @@ class BrowserTabViewModelTest {
70167016
assertEquals(1, fakeAddDocumentStartJavaScriptPlugins.otherPlugin.countInitted)
70177017
}
70187018

7019+
@Test
7020+
fun whenPrivacyProtectionsUpdatedAndPauseWebViewBeforeUpdatingScriptEnabledThenWebViewPausedBeforeAddingScript() =
7021+
runTest {
7022+
fakeAndroidConfigBrowserFeature.updateScriptOnPageFinished().setRawStoredState(State(true))
7023+
fakeAndroidConfigBrowserFeature.pauseWebViewBeforeUpdatingScript().setRawStoredState(State(true))
7024+
7025+
testee.privacyProtectionsUpdated(mockWebView)
7026+
7027+
verify(mockWebView).stopLoading()
7028+
verify(mockWebView).pauseTimers()
7029+
verify(mockWebView).resumeTimers()
7030+
}
7031+
7032+
@Test
7033+
fun whenPrivacyProtectionsUpdatedAndPauseWebViewBeforeUpdatingScriptDisabledThenDoNotWebViewPausedBeforeAddingScript() =
7034+
runTest {
7035+
fakeAndroidConfigBrowserFeature.updateScriptOnPageFinished().setRawStoredState(State(true))
7036+
fakeAndroidConfigBrowserFeature.pauseWebViewBeforeUpdatingScript().setRawStoredState(State(false))
7037+
7038+
testee.privacyProtectionsUpdated(mockWebView)
7039+
7040+
verify(mockWebView, never()).stopLoading()
7041+
verify(mockWebView, never()).pauseTimers()
7042+
verify(mockWebView, never()).resumeTimers()
7043+
}
7044+
70197045
@Test
70207046
fun whenPrivacyProtectionsUpdatedAndUpdateScriptOnPageFinishedTrueAndUpdateScriptOnProtectionsChangedFalseThenNotAddDocumentStartJavaScript() =
70217047
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
@@ -4261,6 +4261,17 @@ class BrowserTabViewModel @Inject constructor(
42614261
return
42624262
}
42634263

4264+
val pauseWebViewBeforeUpdatingScript = withContext(dispatchers.io()) {
4265+
androidBrowserConfig.pauseWebViewBeforeUpdatingScript().isEnabled()
4266+
}
4267+
4268+
if (pauseWebViewBeforeUpdatingScript) {
4269+
withContext(dispatchers.main()) {
4270+
webView.stopLoading()
4271+
webView.pauseTimers()
4272+
}
4273+
}
4274+
42644275
if (withContext(dispatchers.io()) { !androidBrowserConfig.updateScriptOnPageFinished().isEnabled() }) {
42654276
addDocumentStartJavascriptPlugins
42664277
.getPlugins()
@@ -4272,6 +4283,10 @@ class BrowserTabViewModel @Inject constructor(
42724283
} else {
42734284
addDocumentStartJavaScript(webView)
42744285
}
4286+
4287+
if (pauseWebViewBeforeUpdatingScript) {
4288+
webView.resumeTimers()
4289+
}
42754290
}
42764291

42774292
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
@@ -194,4 +194,7 @@ interface AndroidBrowserConfigFeature {
194194

195195
@Toggle.DefaultValue(TRUE)
196196
fun updateScriptOnProtectionsChanged(): Toggle
197+
198+
@Toggle.DefaultValue(TRUE)
199+
fun pauseWebViewBeforeUpdatingScript(): Toggle
197200
}

0 commit comments

Comments
 (0)