Commit 25ad81ca authored by Peter E Conn's avatar Peter E Conn Committed by Commit Bot

📎 Move TwaRegistrar out of Verifier and into Coordinator.

One fewer TWA specific classes in the Verifier.

Bug: 1017114
Change-Id: Ie4602b9b120f9e39efe1bd0cca2b9e9b76c104c2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1890430Reviewed-by: default avatarPavel Shmakov <pshmakov@chromium.org>
Reviewed-by: default avatarPeter Kotwicz <pkotwicz@chromium.org>
Commit-Queue: Peter Conn <peconn@chromium.org>
Cr-Commit-Position: refs/heads/master@{#711173}
parent e22c454c
...@@ -8,6 +8,7 @@ import org.chromium.chrome.browser.browserservices.TrustedWebActivityUmaRecorder ...@@ -8,6 +8,7 @@ import org.chromium.chrome.browser.browserservices.TrustedWebActivityUmaRecorder
import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.TrustedWebActivityBrowserControlsVisibilityManager; import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.TrustedWebActivityBrowserControlsVisibilityManager;
import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.TrustedWebActivityDisclosureController; import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.TrustedWebActivityDisclosureController;
import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.TrustedWebActivityOpenTimeRecorder; import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.TrustedWebActivityOpenTimeRecorder;
import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.TwaRegistrar;
import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.Verifier; import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.Verifier;
import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.Verifier.VerificationStatus; import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.Verifier.VerificationStatus;
import org.chromium.chrome.browser.browserservices.trustedwebactivityui.splashscreen.TwaSplashController; import org.chromium.chrome.browser.browserservices.trustedwebactivityui.splashscreen.TwaSplashController;
...@@ -35,6 +36,7 @@ public class TrustedWebActivityCoordinator implements InflationObserver { ...@@ -35,6 +36,7 @@ public class TrustedWebActivityCoordinator implements InflationObserver {
private TrustedWebActivityBrowserControlsVisibilityManager mBrowserControlsVisibilityManager; private TrustedWebActivityBrowserControlsVisibilityManager mBrowserControlsVisibilityManager;
private final CustomTabStatusBarColorProvider mStatusBarColorProvider; private final CustomTabStatusBarColorProvider mStatusBarColorProvider;
private final Lazy<ImmersiveModeController> mImmersiveModeController; private final Lazy<ImmersiveModeController> mImmersiveModeController;
private final TwaRegistrar mTwaRegistrar;
private boolean mInTwaMode = true; private boolean mInTwaMode = true;
...@@ -51,13 +53,15 @@ public class TrustedWebActivityCoordinator implements InflationObserver { ...@@ -51,13 +53,15 @@ public class TrustedWebActivityCoordinator implements InflationObserver {
CustomTabStatusBarColorProvider statusBarColorProvider, CustomTabStatusBarColorProvider statusBarColorProvider,
ActivityLifecycleDispatcher lifecycleDispatcher, ActivityLifecycleDispatcher lifecycleDispatcher,
TrustedWebActivityBrowserControlsVisibilityManager browserControlsVisibilityManager, TrustedWebActivityBrowserControlsVisibilityManager browserControlsVisibilityManager,
Lazy<ImmersiveModeController> immersiveModeController) { Lazy<ImmersiveModeController> immersiveModeController,
TwaRegistrar twaRegistrar) {
// We don't need to do anything with most of the classes above, we just need to resolve them // We don't need to do anything with most of the classes above, we just need to resolve them
// so they start working. // so they start working.
mVerifier = verifier; mVerifier = verifier;
mBrowserControlsVisibilityManager = browserControlsVisibilityManager; mBrowserControlsVisibilityManager = browserControlsVisibilityManager;
mStatusBarColorProvider = statusBarColorProvider; mStatusBarColorProvider = statusBarColorProvider;
mImmersiveModeController = immersiveModeController; mImmersiveModeController = immersiveModeController;
mTwaRegistrar = twaRegistrar;
navigationController.setLandingPageOnCloseCriterion(verifier::isPageOnVerifiedOrigin); navigationController.setLandingPageOnCloseCriterion(verifier::isPageOnVerifiedOrigin);
initSplashScreen(splashController, intentDataProvider, umaRecorder); initSplashScreen(splashController, intentDataProvider, umaRecorder);
...@@ -97,6 +101,14 @@ public class TrustedWebActivityCoordinator implements InflationObserver { ...@@ -97,6 +101,14 @@ public class TrustedWebActivityCoordinator implements InflationObserver {
private void onVerificationUpdate() { private void onVerificationUpdate() {
Verifier.VerificationState state = mVerifier.getState(); Verifier.VerificationState state = mVerifier.getState();
// The state will start off as null and progress to PENDING then SUCCESS/FAILURE. We only
// want to register the clients once the state reaches SUCCESS, however we are happy to
// show the TWA UI while the state is null or pending.
if (state != null && state.status == VerificationStatus.SUCCESS) {
mTwaRegistrar.registerClient(mVerifier.getClientPackageName(), state.origin);
}
boolean inTwaMode = state == null || state.status != VerificationStatus.FAILURE; boolean inTwaMode = state == null || state.status != VerificationStatus.FAILURE;
if (inTwaMode == mInTwaMode) return; if (inTwaMode == mInTwaMode) return;
mInTwaMode = inTwaMode; mInTwaMode = inTwaMode;
......
...@@ -60,7 +60,7 @@ public class TwaRegistrar { ...@@ -60,7 +60,7 @@ public class TwaRegistrar {
* for PostMessage). Only at step 4 do we know that Chrome should associate the browsing data * for PostMessage). Only at step 4 do we know that Chrome should associate the browsing data
* for that origin with that app. * for that origin with that app.
*/ */
void registerClient(String packageName, Origin origin) { public void registerClient(String packageName, Origin origin) {
if (mRegisteredOrigins.contains(origin)) return; if (mRegisteredOrigins.contains(origin)) return;
// Register that we should wipe data for this origin when the client app is uninstalled. // Register that we should wipe data for this origin when the client app is uninstalled.
......
...@@ -45,8 +45,6 @@ public class Verifier implements NativeInitObserver { ...@@ -45,8 +45,6 @@ public class Verifier implements NativeInitObserver {
private final TabObserverRegistrar mTabObserverRegistrar; private final TabObserverRegistrar mTabObserverRegistrar;
private final BrowserServicesIntentDataProvider mIntentDataProvider; private final BrowserServicesIntentDataProvider mIntentDataProvider;
private final VerifierDelegate mDelegate; private final VerifierDelegate mDelegate;
// TODO(peconn): Move this up into the coordinator.
private final TwaRegistrar mTwaRegistrar;
// These origins need to be verified via OriginVerifier#start, bypassing cache. // These origins need to be verified via OriginVerifier#start, bypassing cache.
private final Set<Origin> mOriginsToVerify = new HashSet<>(); private final Set<Origin> mOriginsToVerify = new HashSet<>();
...@@ -101,15 +99,13 @@ public class Verifier implements NativeInitObserver { ...@@ -101,15 +99,13 @@ public class Verifier implements NativeInitObserver {
TabObserverRegistrar tabObserverRegistrar, TabObserverRegistrar tabObserverRegistrar,
CustomTabActivityTabProvider tabProvider, CustomTabActivityTabProvider tabProvider,
CustomTabIntentDataProvider intentDataProvider, CustomTabIntentDataProvider intentDataProvider,
VerifierDelegate delegate, VerifierDelegate delegate) {
TwaRegistrar twaRegistrar) {
// TODO(peconn): Change the CustomTabIntentDataProvider to a BrowserServices... once // TODO(peconn): Change the CustomTabIntentDataProvider to a BrowserServices... once
// https://chromium-review.googlesource.com/c/chromium/src/+/1877600 has landed. // https://chromium-review.googlesource.com/c/chromium/src/+/1877600 has landed.
mTabProvider = tabProvider; mTabProvider = tabProvider;
mTabObserverRegistrar = tabObserverRegistrar; mTabObserverRegistrar = tabObserverRegistrar;
mIntentDataProvider = intentDataProvider; mIntentDataProvider = intentDataProvider;
mDelegate = delegate; mDelegate = delegate;
mTwaRegistrar = twaRegistrar;
tabObserverRegistrar.registerTabObserver(mVerifyOnPageLoadObserver); tabObserverRegistrar.registerTabObserver(mVerifyOnPageLoadObserver);
tabProvider.addObserver(mVerifyOnTabSwitchObserver); tabProvider.addObserver(mVerifyOnTabSwitchObserver);
...@@ -145,6 +141,11 @@ public class Verifier implements NativeInitObserver { ...@@ -145,6 +141,11 @@ public class Verifier implements NativeInitObserver {
@Override @Override
public void onFinishNativeInitialization() { public void onFinishNativeInitialization() {
Origin initialOrigin = new Origin(mIntentDataProvider.getUrlToLoad()); Origin initialOrigin = new Origin(mIntentDataProvider.getUrlToLoad());
if (!initialOrigin.isValid()) {
mTabObserverRegistrar.unregisterTabObserver(mVerifyOnPageLoadObserver);
updateState(initialOrigin, VerificationStatus.FAILURE);
return;
}
collectTrustedOrigins(initialOrigin); collectTrustedOrigins(initialOrigin);
verifyVisitedOrigin(initialOrigin); verifyVisitedOrigin(initialOrigin);
...@@ -212,10 +213,6 @@ public class Verifier implements NativeInitObserver { ...@@ -212,10 +213,6 @@ public class Verifier implements NativeInitObserver {
} }
private void updateState(Origin origin, @VerificationStatus int status) { private void updateState(Origin origin, @VerificationStatus int status) {
if (status == VerificationStatus.SUCCESS) {
mTwaRegistrar.registerClient(mDelegate.getClientPackageName(), origin);
}
mState = new VerificationState(origin, status); mState = new VerificationState(origin, status);
for (Runnable observer : mObservers) { for (Runnable observer : mObservers) {
observer.run(); observer.run();
......
...@@ -65,7 +65,6 @@ public class VerifierTest { ...@@ -65,7 +65,6 @@ public class VerifierTest {
@Mock CustomTabActivityTabProvider mTabProvider; @Mock CustomTabActivityTabProvider mTabProvider;
@Mock CustomTabIntentDataProvider mIntentDataProvider; @Mock CustomTabIntentDataProvider mIntentDataProvider;
@Mock Tab mTab; @Mock Tab mTab;
@Mock TwaRegistrar mTwaRegistrar;
@Captor ArgumentCaptor<TabObserver> mTabObserverCaptor; @Captor ArgumentCaptor<TabObserver> mTabObserverCaptor;
TestVerifierDelegate mVerifierDelegate = new TestVerifierDelegate(PACKAGE_NAME); TestVerifierDelegate mVerifierDelegate = new TestVerifierDelegate(PACKAGE_NAME);
...@@ -80,7 +79,7 @@ public class VerifierTest { ...@@ -80,7 +79,7 @@ public class VerifierTest {
when(mIntentDataProvider.getTrustedWebActivityAdditionalOrigins()) when(mIntentDataProvider.getTrustedWebActivityAdditionalOrigins())
.thenReturn(Collections.singletonList("https://www.origin2.com/")); .thenReturn(Collections.singletonList("https://www.origin2.com/"));
mVerifier = new Verifier(mLifecycleDispatcher, mTabObserverRegistrar, mVerifier = new Verifier(mLifecycleDispatcher, mTabObserverRegistrar,
mTabProvider, mIntentDataProvider, mVerifierDelegate, mTwaRegistrar); mTabProvider, mIntentDataProvider, mVerifierDelegate);
// TODO(peconn): Add check on permission updated being updated. // TODO(peconn): Add check on permission updated being updated.
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment