Skip to content

Commit a66981d

Browse files
committed
Keep fallback for subscription events
1 parent 0aa6479 commit a66981d

File tree

5 files changed

+38
-15
lines changed

5 files changed

+38
-15
lines changed

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

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1214,27 +1214,33 @@ class BrowserTabFragment :
12141214
private fun onOmnibarCustomTabPrivacyDashboardPressed() {
12151215
val params = PrivacyDashboardPrimaryScreen(tabId)
12161216
val intent = globalActivityStarter.startIntent(requireContext(), params)
1217-
adsJsContentScopeScripts.postMessage(createBreakageReportingEventData())
1218-
// contentScopeScripts.sendSubscriptionEvent(createBreakageReportingEventData())
1217+
postBreakageReportingEvent()
12191218
intent?.let { activityResultPrivacyDashboard.launch(intent) }
12201219
pixel.fire(CustomTabPixelNames.CUSTOM_TABS_PRIVACY_DASHBOARD_OPENED)
12211220
}
12221221

1222+
private fun postBreakageReportingEvent() {
1223+
appCoroutineScope.launch {
1224+
val eventData = createBreakageReportingEventData()
1225+
if (!adsJsContentScopeScripts.postMessage(eventData)) {
1226+
contentScopeScripts.sendSubscriptionEvent(eventData)
1227+
}
1228+
}
1229+
}
1230+
12231231
private fun onFireButtonPressed() {
12241232
val isFocusedNtp = omnibar.viewMode == ViewMode.NewTab && omnibar.getText().isEmpty() && omnibar.omnibarTextInput.hasFocus()
12251233
browserActivity?.launchFire(launchedFromFocusedNtp = isFocusedNtp)
12261234
viewModel.onFireMenuSelected()
12271235
}
12281236

12291237
private fun onBrowserMenuButtonPressed() {
1230-
adsJsContentScopeScripts.postMessage(createBreakageReportingEventData())
1231-
// contentScopeScripts.sendSubscriptionEvent(createBreakageReportingEventData())
1238+
postBreakageReportingEvent()
12321239
viewModel.onBrowserMenuClicked(isCustomTab = isActiveCustomTab())
12331240
}
12341241

12351242
private fun onOmnibarPrivacyShieldButtonPressed() {
1236-
adsJsContentScopeScripts.postMessage(createBreakageReportingEventData())
1237-
// contentScopeScripts.sendSubscriptionEvent(createBreakageReportingEventData())
1243+
postBreakageReportingEvent()
12381244
viewModel.onOmnibarPrivacyShieldButtonPressed()
12391245
launchPrivacyDashboard(toggle = false)
12401246
}

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -487,10 +487,13 @@ class RealDuckDuckGoWebView : DuckDuckGoWebView, NestedScrollingChild3 {
487487
override suspend fun safePostMessage(
488488
replyProxy: JavaScriptReplyProxy,
489489
response: String,
490-
) {
491-
runCatching {
492-
if (webViewCapabilityChecker.isSupported(WebViewCapability.WebMessageListener)) {
490+
): Boolean {
491+
return runCatching {
492+
return if (webViewCapabilityChecker.isSupported(WebViewCapability.WebMessageListener)) {
493493
replyProxy.postMessage(response)
494+
true
495+
} else {
496+
false
494497
}
495498
}.getOrElse { exception ->
496499
logcat(ERROR) { "Error posting message: ${exception.asLog()}" }

browser-api/src/main/java/com/duckduckgo/app/browser/api/DuckDuckGoWebView.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,15 @@ abstract class DuckDuckGoWebView(
5858

5959
abstract fun isDestroyed(): Boolean
6060

61+
/**
62+
* Sends a message to the specified JavaScriptReplyProxy.
63+
*
64+
* @param replyProxy The proxy to send the message to.
65+
* @param response The message content to send.
66+
* @return `true` if the message was sent successfully, `false` otherwise.
67+
*/
6168
abstract suspend fun safePostMessage(
6269
replyProxy: JavaScriptReplyProxy,
6370
response: String,
64-
)
71+
): Boolean
6572
}

content-scope-scripts/content-scope-scripts-impl/src/main/java/com/duckduckgo/contentscopescripts/impl/messaging/AdsjsContentScopeMessaging.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,8 @@ class AdsjsContentScopeMessaging @Inject constructor(
168168
}
169169
}
170170

171-
override fun postMessage(subscriptionEventData: SubscriptionEventData) {
172-
runCatching {
171+
override suspend fun postMessage(subscriptionEventData: SubscriptionEventData): Boolean {
172+
return runCatching {
173173
val subscriptionEvent = SubscriptionEvent(
174174
context = context,
175175
featureName = subscriptionEventData.featureName,
@@ -179,14 +179,16 @@ class AdsjsContentScopeMessaging @Inject constructor(
179179
moshi.adapter(SubscriptionEvent::class.java).toJson(it)
180180
}
181181

182-
appCoroutineScope.launch(dispatcherProvider.main()) {
182+
withContext(dispatcherProvider.main()) {
183183
globalReplyProxy?.let {
184184
(webView as? DuckDuckGoWebView)?.safePostMessage(
185185
it,
186186
subscriptionEvent,
187187
)
188-
}
188+
} ?: false
189189
}
190+
}.getOrElse {
191+
false
190192
}
191193
}
192194
}

js-messaging/js-messaging-api/src/main/java/com/duckduckgo/js/messaging/api/AdsjsMessaging.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,12 @@ interface AdsjsMessaging {
3030
)
3131
suspend fun unregister(webView: WebView)
3232

33-
fun postMessage(subscriptionEventData: SubscriptionEventData)
33+
/**
34+
* Sends a message to the JS layer.
35+
* @param subscriptionEventData Data to be sent.
36+
* @return true if the message was sent successfully, false otherwise.
37+
*/
38+
suspend fun postMessage(subscriptionEventData: SubscriptionEventData): Boolean
3439

3540
/**
3641
* Context name

0 commit comments

Comments
 (0)