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

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

Issue 2608443003: Redirect to play store app for web play store URL fallback. (Closed)
Patch Set: Fallback to package name as market referrer. Created 3 years, 12 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandlerTest.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java
index 4fee2a0f9a65da1cb578ca28d35b9cbdf9e7840b..221c47a3f336bac9582e2d4b744a9a21fc89deb0 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandler.java
@@ -338,54 +338,18 @@ public class ExternalNavigationHandler {
// check whether the intent can be resolved. If not, we will see
// whether we can download it from the Market.
if (!canResolveActivity) {
- Pair<String, String> appInfo = null;
if (hasBrowserFallbackUrl) {
- // If the fallback URL is a link to Play Store, send the user to Play Store app
- // instead: crbug.com/638672.
- appInfo = maybeGetPlayStoreAppIdAndReferrer(browserFallbackUrl);
- if (appInfo == null) {
- return clobberCurrentTabWithFallbackUrl(browserFallbackUrl, params);
- }
+ return clobberCurrentTabWithFallbackUrl(browserFallbackUrl, params);
}
- String packagename = appInfo != null ? appInfo.first : intent.getPackage();
- if (packagename != null) {
- String marketReferrer = appInfo != null ? appInfo.second :
- IntentUtils.safeGetStringExtra(intent, EXTRA_MARKET_REFERRER);
+ if (intent.getPackage() != null) {
+ String marketReferrer = IntentUtils.safeGetStringExtra(
+ intent, EXTRA_MARKET_REFERRER);
if (TextUtils.isEmpty(marketReferrer)) {
marketReferrer = mDelegate.getPackageName();
}
- try {
- Uri marketUri = new Uri.Builder()
- .scheme("market")
- .authority("details")
- .appendQueryParameter(PLAY_PACKAGE_PARAM, packagename)
- .appendQueryParameter(PLAY_REFERRER_PARAM, Uri.decode(marketReferrer))
- .build();
- intent = new Intent(Intent.ACTION_VIEW, marketUri);
- intent.addCategory(Intent.CATEGORY_BROWSABLE);
- intent.setPackage("com.android.vending");
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- if (params.getReferrerUrl() != null) {
- intent.putExtra(Intent.EXTRA_REFERRER, Uri.parse(params.getReferrerUrl()));
- }
- if (params.isIncognito()) {
- mDelegate.startIncognitoIntent(intent, params.getReferrerUrl(),
- hasBrowserFallbackUrl ? browserFallbackUrl : null, params.getTab(),
- params.shouldCloseContentsOnOverrideUrlLoadingAndLaunchIntent(),
- false);
- return OverrideUrlLoadingResult.OVERRIDE_WITH_ASYNC_ACTION;
- } else {
- mDelegate.startActivity(intent, false);
- return OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT;
- }
- } catch (ActivityNotFoundException ex) {
- // ignore the error on devices that does not have
- // play market installed.
- return OverrideUrlLoadingResult.NO_OVERRIDE;
- }
+ return sendIntentToMarket(intent.getPackage(), marketReferrer, params);
}
-
return OverrideUrlLoadingResult.NO_OVERRIDE;
}
@@ -559,6 +523,42 @@ public class ExternalNavigationHandler {
}
/**
+ * @return OVERRIDE_WITH_EXTERNAL_INTENT when we successfully started market activity,
+ * NO_OVERRIDE otherwise.
+ */
+ private OverrideUrlLoadingResult sendIntentToMarket(String packageName, String marketReferrer,
+ ExternalNavigationParams params) {
+ try {
+ Uri marketUri = new Uri.Builder()
+ .scheme("market")
+ .authority("details")
+ .appendQueryParameter(PLAY_PACKAGE_PARAM, packageName)
+ .appendQueryParameter(PLAY_REFERRER_PARAM, Uri.decode(marketReferrer))
+ .build();
+ Intent intent = new Intent(Intent.ACTION_VIEW, marketUri);
+ intent.addCategory(Intent.CATEGORY_BROWSABLE);
+ intent.setPackage("com.android.vending");
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ if (params.getReferrerUrl() != null) {
+ intent.putExtra(Intent.EXTRA_REFERRER, Uri.parse(params.getReferrerUrl()));
+ }
+ if (params.isIncognito()) {
+ mDelegate.startIncognitoIntent(intent, params.getReferrerUrl(), null,
+ params.getTab(),
+ params.shouldCloseContentsOnOverrideUrlLoadingAndLaunchIntent(), false);
+ return OverrideUrlLoadingResult.OVERRIDE_WITH_ASYNC_ACTION;
+ } else {
+ mDelegate.startActivity(intent, false);
+ return OverrideUrlLoadingResult.OVERRIDE_WITH_EXTERNAL_INTENT;
+ }
+ } catch (ActivityNotFoundException ex) {
+ // ignore the error on devices that does not have
+ // play market installed.
+ return OverrideUrlLoadingResult.NO_OVERRIDE;
+ }
+ }
+
+ /**
* Checks whether {@param intent} is for an Instant App. Considers both package and actions that
* would resolve to Supervisor.
* @return Whether the given intent is going to open an Instant App.
@@ -585,6 +585,15 @@ public class ExternalNavigationHandler {
*/
private OverrideUrlLoadingResult clobberCurrentTabWithFallbackUrl(
String browserFallbackUrl, ExternalNavigationParams params) {
+ // If the fallback URL is a link to Play Store, send the user to Play Store app
+ // instead: crbug.com/638672.
+ Pair<String, String> appInfo = maybeGetPlayStoreAppIdAndReferrer(browserFallbackUrl);
+ if (appInfo != null) {
+ String marketReferrer = TextUtils.isEmpty(appInfo.second) ? mDelegate.getPackageName()
+ : appInfo.second;
+ return sendIntentToMarket(appInfo.first, marketReferrer, params);
+ }
+
// For subframes, we don't support fallback url for now.
// http://crbug.com/364522.
if (!params.isMainFrame()) return OverrideUrlLoadingResult.NO_OVERRIDE;
« no previous file with comments | « no previous file | chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/ExternalNavigationHandlerTest.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698