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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/instantapps/InstantAppsHandler.java

Issue 2379783002: Instant App Banner logic. (Closed)
Patch Set: Fixing tests. Created 4 years, 2 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
Index: chrome/android/java/src/org/chromium/chrome/browser/instantapps/InstantAppsHandler.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/instantapps/InstantAppsHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/instantapps/InstantAppsHandler.java
index 7ba6e0b2fdd5476fb7e22402f4cfca2df8102d8d..7989ef8e11c20b7631eadb1ba4058c323c975b36 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/instantapps/InstantAppsHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/instantapps/InstantAppsHandler.java
@@ -10,13 +10,11 @@ import android.net.Uri;
import android.os.StrictMode;
import android.os.SystemClock;
import android.provider.Browser;
-import android.text.TextUtils;
import org.chromium.base.CommandLine;
import org.chromium.base.ContextUtils;
import org.chromium.base.FieldTrialList;
import org.chromium.base.Log;
-import org.chromium.base.metrics.RecordUserAction;
import org.chromium.chrome.browser.ChromeApplication;
import org.chromium.chrome.browser.ChromeSwitches;
import org.chromium.chrome.browser.IntentHandler;
@@ -24,9 +22,8 @@ import org.chromium.chrome.browser.externalnav.ExternalNavigationDelegateImpl;
import org.chromium.chrome.browser.metrics.LaunchMetrics.TimesHistogramSample;
import org.chromium.chrome.browser.preferences.ChromePreferenceManager;
import org.chromium.chrome.browser.util.IntentUtils;
+import org.chromium.content_public.browser.WebContents;
-import java.util.HashSet;
-import java.util.Set;
import java.util.concurrent.TimeUnit;
/** A launcher for Instant Apps. */
@@ -36,15 +33,25 @@ public class InstantAppsHandler {
private static final Object INSTANCE_LOCK = new Object();
private static InstantAppsHandler sInstance;
- private static final String DO_NOT_LAUNCH_EXTRA =
- "com.google.android.gms.instantapps.DO_NOT_LAUNCH_INSTANT_APP";
-
private static final String CUSTOM_APPS_INSTANT_APP_EXTRA =
"android.support.customtabs.extra.EXTRA_ENABLE_INSTANT_APPS";
private static final String INSTANT_APP_START_TIME_EXTRA =
"org.chromium.chrome.INSTANT_APP_START_TIME";
+ // TODO(mariakhomenko): Depend directly on the constants once we roll to v8 libraries.
+ private static final String DO_NOT_LAUNCH_EXTRA =
+ "com.google.android.gms.instantapps.DO_NOT_LAUNCH_INSTANT_APP";
+
+ protected static final String IS_REFERRER_TRUSTED_EXTRA =
+ "com.google.android.gms.instantapps.IS_REFERRER_TRUSTED";
+
+ protected static final String IS_USER_CONFIRMED_LAUNCH_EXTRA =
+ "com.google.android.gms.instantapps.IS_USER_CONFIRMED_LAUNCH";
+
+ protected static final String TRUSTED_REFERRER_PKG_EXTRA =
+ "com.google.android.gms.instantapps.TRUSTED_REFERRER_PKG";
+
/** Finch experiment name. */
private static final String INSTANT_APPS_EXPERIMENT_NAME = "InstantApps";
@@ -66,9 +73,6 @@ public class InstantAppsHandler {
private static final TimesHistogramSample sInstantAppsApiCallTimes = new TimesHistogramSample(
"Android.InstantApps.ApiCallDuration", TimeUnit.MILLISECONDS);
- /** A set of hosts for which Instant Apps are launched by default without prompt. */
- private Set<String> mOptInHosts = new HashSet<>();
-
/** @return The singleton instance of {@link InstantAppsHandler}. */
public static InstantAppsHandler getInstance() {
synchronized (INSTANCE_LOCK) {
@@ -218,22 +222,21 @@ public class InstantAppsHandler {
* App banner.
* @return Whether an Instant App intent was started.
*/
- public boolean handleNavigation(Context context, String url, Uri referrer) {
+ public boolean handleNavigation(Context context, String url, Uri referrer,
+ WebContents webContents) {
if (!isEnabled(context)) return false;
- String host = Uri.parse(url).getHost();
- if (TextUtils.isEmpty(host)) return false;
- if (mOptInHosts.contains(host)) {
- RecordUserAction.record("Android.InstantApps.LaunchedByDefault");
+ if (InstantAppsSettings.isInstantAppDefault(webContents, url)) {
return launchInstantAppForNavigation(context, url, referrer);
}
- return startCheckForInstantApps(context, url, referrer);
+ return startCheckForInstantApps(context, url, referrer, webContents);
}
/**
* Checks if an Instant App banner should be shown for the page we are loading.
*/
- protected boolean startCheckForInstantApps(final Context context, String url, Uri referrer) {
+ protected boolean startCheckForInstantApps(Context context, String url, Uri referrer,
+ WebContents webContents) {
return false;
}
@@ -266,11 +269,27 @@ public class InstantAppsHandler {
}
/**
- * Records that a particular hostname should open the associated Instant App by default.
+ * Launches the Instant App from the infobar banner.
*/
- public void recordDefaultOpen(String hostname) {
- mOptInHosts.add(hostname);
- // TODO(mariakhomenko): Implement persistence for optInHosts.
+ public void launchFromBanner(InstantAppsBannerData data) {
+ if (data.getIntent() == null) return;
+
+ Intent iaIntent = data.getIntent();
+ if (data.getReferrer() != null) {
+ iaIntent.putExtra(Intent.EXTRA_REFERRER, data.getReferrer());
+ iaIntent.putExtra(IS_REFERRER_TRUSTED_EXTRA, true);
+ }
+
+ Context appContext = ContextUtils.getApplicationContext();
+ iaIntent.putExtra(TRUSTED_REFERRER_PKG_EXTRA, appContext.getPackageName());
+ iaIntent.putExtra(IS_USER_CONFIRMED_LAUNCH_EXTRA, true);
+
+ try {
+ appContext.startActivity(iaIntent);
+ InstantAppsSettings.setInstantAppDefault(data.getWebContents(), data.getUrl());
+ } catch (Exception e) {
+ Log.e(TAG, "Could not launch instant app intent", e);
+ }
}
/**

Powered by Google App Engine
This is Rietveld 408576698