Skip to content

Commit ada7866

Browse files
authored
PIR: Implement handshake message (#6609)
Task/Issue URL: https://app.asana.com/1/137249556945/project/1203581873609357/task/1211075568938202?focus=true ### Description Add proper implementation for the ´handshake´ message that Web sends. ### Steps to test this PR https://app.asana.com/1/137249556945/project/1203581873609357/task/1211088339515451?focus=true ### UI changes No UI changes
1 parent 205e592 commit ada7866

File tree

2 files changed

+29
-8
lines changed

2 files changed

+29
-8
lines changed

pir/pir-impl/src/main/java/com/duckduckgo/pir/impl/dashboard/messaging/handlers/PirWebHandshakeMessageHandler.kt

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,19 @@
1616

1717
package com.duckduckgo.pir.impl.dashboard.messaging.handlers
1818

19+
import com.duckduckgo.app.di.AppCoroutineScope
20+
import com.duckduckgo.common.utils.DispatcherProvider
1921
import com.duckduckgo.di.scopes.ActivityScope
2022
import com.duckduckgo.js.messaging.api.JsMessage
2123
import com.duckduckgo.js.messaging.api.JsMessageCallback
2224
import com.duckduckgo.js.messaging.api.JsMessaging
2325
import com.duckduckgo.pir.impl.dashboard.messaging.PirDashboardWebMessages
2426
import com.duckduckgo.pir.impl.dashboard.messaging.model.PirWebMessageResponse
27+
import com.duckduckgo.subscriptions.api.Subscriptions
2528
import com.squareup.anvil.annotations.ContributesMultibinding
2629
import javax.inject.Inject
30+
import kotlinx.coroutines.CoroutineScope
31+
import kotlinx.coroutines.launch
2732
import logcat.logcat
2833

2934
/**
@@ -33,7 +38,11 @@ import logcat.logcat
3338
scope = ActivityScope::class,
3439
boundType = PirWebJsMessageHandler::class,
3540
)
36-
class PirWebHandshakeMessageHandler @Inject constructor() : PirWebJsMessageHandler() {
41+
class PirWebHandshakeMessageHandler @Inject constructor(
42+
private val subscriptions: Subscriptions,
43+
private val dispatcherProvider: DispatcherProvider,
44+
@AppCoroutineScope private val appCoroutineScope: CoroutineScope,
45+
) : PirWebJsMessageHandler() {
3746

3847
override val message = PirDashboardWebMessages.HANDSHAKE
3948

@@ -44,14 +53,25 @@ class PirWebHandshakeMessageHandler @Inject constructor() : PirWebJsMessageHandl
4453
) {
4554
logcat { "PIR-WEB: PirWebHandshakeMessageHandler: process $jsMessage" }
4655

47-
jsMessaging.sendResponse(
48-
jsMessage = jsMessage,
49-
response = PirWebMessageResponse.HandshakeResponse(
50-
success = true,
51-
userData = PirWebMessageResponse.HandshakeResponse.UserData(
52-
isAuthenticatedUser = true,
56+
appCoroutineScope.launch(dispatcherProvider.io()) {
57+
// Web request contains the version of the API the web uses, but no version check comparison is needed
58+
// per https://app.asana.com/1/137249556945/task/1205606257846476/comment/1211089906912712?focus=true
59+
// (PIR is backwards and forwards compatible)
60+
61+
jsMessaging.sendResponse(
62+
jsMessage = jsMessage,
63+
response = PirWebMessageResponse.HandshakeResponse(
64+
success = true,
65+
userData = getHandshakeUserData(),
5366
),
54-
),
67+
)
68+
}
69+
}
70+
71+
private suspend fun getHandshakeUserData(): PirWebMessageResponse.HandshakeResponse.UserData {
72+
return PirWebMessageResponse.HandshakeResponse.UserData(
73+
isAuthenticatedUser = subscriptions.getAccessToken() != null,
74+
isUserEligibleForFreeTrial = subscriptions.isFreeTrialEligible(),
5575
)
5676
}
5777
}

pir/pir-impl/src/main/java/com/duckduckgo/pir/impl/dashboard/messaging/model/PirWebMessageResponse.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ sealed interface PirWebMessageResponse {
4141

4242
data class UserData(
4343
val isAuthenticatedUser: Boolean,
44+
val isUserEligibleForFreeTrial: Boolean,
4445
)
4546
}
4647

0 commit comments

Comments
 (0)