Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(879)

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java

Issue 2727483002: Instant Apps: refactor logic to encapsulate in the Instant Apps Handler. (Closed)
Patch Set: Fix findbugs issue. Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.chrome.browser.externalnav; 5 package org.chromium.chrome.browser.externalnav;
6 6
7 import android.content.ActivityNotFoundException; 7 import android.content.ActivityNotFoundException;
8 import android.content.ComponentName; 8 import android.content.ComponentName;
9 import android.content.Intent; 9 import android.content.Intent;
10 import android.content.pm.ResolveInfo; 10 import android.content.pm.ResolveInfo;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 private static final String SMS_SCHEME = "sms"; 52 private static final String SMS_SCHEME = "sms";
53 53
54 private static final String PLAY_PACKAGE_PARAM = "id"; 54 private static final String PLAY_PACKAGE_PARAM = "id";
55 private static final String PLAY_REFERRER_PARAM = "referrer"; 55 private static final String PLAY_REFERRER_PARAM = "referrer";
56 private static final String PLAY_APP_PATH = "/store/apps/details"; 56 private static final String PLAY_APP_PATH = "/store/apps/details";
57 private static final String PLAY_HOSTNAME = "play.google.com"; 57 private static final String PLAY_HOSTNAME = "play.google.com";
58 58
59 @VisibleForTesting 59 @VisibleForTesting
60 static final String EXTRA_BROWSER_FALLBACK_URL = "browser_fallback_url"; 60 static final String EXTRA_BROWSER_FALLBACK_URL = "browser_fallback_url";
61 61
62 @VisibleForTesting
63 static final String SUPERVISOR_PKG = "com.google.android.instantapps.supervi sor";
64 @VisibleForTesting
65 static final String[] SUPERVISOR_START_ACTIONS = {
66 "com.google.android.instantapps.START",
67 "com.google.android.instantapps.nmr1.INSTALL",
68 "com.google.android.instantapps.nmr1.VIEW" };
69
70 // An extra that may be specified on an intent:// URL that contains an encod ed value for the 62 // An extra that may be specified on an intent:// URL that contains an encod ed value for the
71 // referrer field passed to the market:// URL in the case where the app is n ot present. 63 // referrer field passed to the market:// URL in the case where the app is n ot present.
72 @VisibleForTesting 64 @VisibleForTesting
73 static final String EXTRA_MARKET_REFERRER = "market_referrer"; 65 static final String EXTRA_MARKET_REFERRER = "market_referrer";
74 66
75 private final ExternalNavigationDelegate mDelegate; 67 private final ExternalNavigationDelegate mDelegate;
76 68
77 /** 69 /**
78 * Result types for checking if we should override URL loading. 70 * Result types for checking if we should override URL loading.
79 * NOTE: this enum is used in UMA, do not reorder values. Changes should be append only. 71 * NOTE: this enum is used in UMA, do not reorder values. Changes should be append only.
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 if (previousIntent != null 455 if (previousIntent != null
464 && resolversSubsetOf(resolvingInfos, 456 && resolversSubsetOf(resolvingInfos,
465 mDelegate.queryIntentActivities(previousInte nt))) { 457 mDelegate.queryIntentActivities(previousInte nt))) {
466 if (DEBUG) Log.i(TAG, "NO_OVERRIDE: Same host, no new re solvers"); 458 if (DEBUG) Log.i(TAG, "NO_OVERRIDE: Same host, no new re solvers");
467 return OverrideUrlLoadingResult.NO_OVERRIDE; 459 return OverrideUrlLoadingResult.NO_OVERRIDE;
468 } 460 }
469 } 461 }
470 } 462 }
471 } 463 }
472 464
473 boolean isDirectInstantAppsIntent = isExternalProtocol && isIntentToInst antApp(intent); 465 boolean isDirectInstantAppsIntent =
466 isExternalProtocol && InstantAppsHandler.isIntentToInstantApp(in tent);
474 boolean shouldProxyForInstantApps = isDirectInstantAppsIntent 467 boolean shouldProxyForInstantApps = isDirectInstantAppsIntent
475 && mDelegate.isSerpReferrer(params.getTab()); 468 && mDelegate.isSerpReferrer(params.getTab());
476 if (shouldProxyForInstantApps) { 469 if (shouldProxyForInstantApps) {
477 intent.putExtra(InstantAppsHandler.IS_GOOGLE_SEARCH_REFERRER, true); 470 intent.putExtra(InstantAppsHandler.IS_GOOGLE_SEARCH_REFERRER, true);
478 } else if (isDirectInstantAppsIntent) { 471 } else if (isDirectInstantAppsIntent) {
479 // For security reasons, we disable all intent:// URLs to Instant Ap ps that are 472 // For security reasons, we disable all intent:// URLs to Instant Ap ps that are
480 // not coming from SERP. 473 // not coming from SERP.
481 if (DEBUG) Log.i(TAG, "NO_OVERRIDE: Intent URL to an Instant App"); 474 if (DEBUG) Log.i(TAG, "NO_OVERRIDE: Intent URL to an Instant App");
482 return OverrideUrlLoadingResult.NO_OVERRIDE; 475 return OverrideUrlLoadingResult.NO_OVERRIDE;
483 } else { 476 } else {
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
586 return OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT; 579 return OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT;
587 } 580 }
588 } catch (ActivityNotFoundException ex) { 581 } catch (ActivityNotFoundException ex) {
589 // ignore the error on devices that does not have Play Store install ed. 582 // ignore the error on devices that does not have Play Store install ed.
590 if (DEBUG) Log.i(TAG, "NO_OVERRIDE: Play Store not installed"); 583 if (DEBUG) Log.i(TAG, "NO_OVERRIDE: Play Store not installed");
591 return OverrideUrlLoadingResult.NO_OVERRIDE; 584 return OverrideUrlLoadingResult.NO_OVERRIDE;
592 } 585 }
593 } 586 }
594 587
595 /** 588 /**
596 * Checks whether {@param intent} is for an Instant App. Considers both pack age and actions that
597 * would resolve to Supervisor.
598 * @return Whether the given intent is going to open an Instant App.
599 */
600 private boolean isIntentToInstantApp(Intent intent) {
601 if (SUPERVISOR_PKG.equals(intent.getPackage())) return true;
602
603 String intentAction = intent.getAction();
604 for (String action: SUPERVISOR_START_ACTIONS) {
605 if (action.equals(intentAction)) {
606 return true;
607 }
608 }
609 return false;
610 }
611
612 /**
613 * Clobber the current tab with fallback URL. 589 * Clobber the current tab with fallback URL.
614 * 590 *
615 * @param browserFallbackUrl The fallback URL. 591 * @param browserFallbackUrl The fallback URL.
616 * @param params The external navigation params. 592 * @param params The external navigation params.
617 * @return {@link OverrideUrlLoadingResult} if the tab was clobbered, or we launched an 593 * @return {@link OverrideUrlLoadingResult} if the tab was clobbered, or we launched an
618 * intent. 594 * intent.
619 */ 595 */
620 private OverrideUrlLoadingResult clobberCurrentTabWithFallbackUrl( 596 private OverrideUrlLoadingResult clobberCurrentTabWithFallbackUrl(
621 String browserFallbackUrl, ExternalNavigationParams params) { 597 String browserFallbackUrl, ExternalNavigationParams params) {
622 // If the fallback URL is a link to Play Store, send the user to Play St ore app 598 // If the fallback URL is a link to Play Store, send the user to Play St ore app
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
691 if (defaultSmsPackageName == null) return null; 667 if (defaultSmsPackageName == null) return null;
692 // Makes sure that the default SMS app actually resolves the intent. 668 // Makes sure that the default SMS app actually resolves the intent.
693 for (ResolveInfo resolveInfo : resolvingComponentNames) { 669 for (ResolveInfo resolveInfo : resolvingComponentNames) {
694 if (defaultSmsPackageName.equals(resolveInfo.activityInfo.packageNam e)) { 670 if (defaultSmsPackageName.equals(resolveInfo.activityInfo.packageNam e)) {
695 return defaultSmsPackageName; 671 return defaultSmsPackageName;
696 } 672 }
697 } 673 }
698 return null; 674 return null;
699 } 675 }
700 } 676 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698