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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java

Issue 1311963005: dbg Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Switch to an existing tab experiment Created 5 years 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/ntp/NewTabPage.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java
index 2c10a2fddc5da0ca3308550895b1434d171be0cc..2db0ad3226b4af44974001814654c65556dc9881 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/NewTabPage.java
@@ -4,13 +4,17 @@
package org.chromium.chrome.browser.ntp;
+import android.annotation.TargetApi;
import android.app.Activity;
+import android.app.ActivityManager;
import android.app.Dialog;
import android.content.Context;
+import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Rect;
+import android.os.Build;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.Menu;
@@ -23,11 +27,13 @@ import org.chromium.base.VisibleForTesting;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.chrome.R;
+import org.chromium.chrome.browser.ChromeApplication;
import org.chromium.chrome.browser.ChromeSwitches;
import org.chromium.chrome.browser.NativePage;
import org.chromium.chrome.browser.UrlConstants;
import org.chromium.chrome.browser.compositor.layouts.content.InvalidationAwareThumbnailProvider;
import org.chromium.chrome.browser.document.DocumentMetricIds;
+import org.chromium.chrome.browser.document.DocumentUtils;
import org.chromium.chrome.browser.enhancedbookmarks.EnhancedBookmarkUtils;
import org.chromium.chrome.browser.favicon.FaviconHelper;
import org.chromium.chrome.browser.favicon.FaviconHelper.FaviconImageCallback;
@@ -52,9 +58,14 @@ import org.chromium.chrome.browser.search_engines.TemplateUrlService.TemplateUrl
import org.chromium.chrome.browser.tab.EmptyTabObserver;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabObserver;
+import org.chromium.chrome.browser.tabmodel.TabModel;
import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
import org.chromium.chrome.browser.tabmodel.TabModelSelector;
+import org.chromium.chrome.browser.tabmodel.TabModelUtils;
+import org.chromium.chrome.browser.tabmodel.document.ActivityDelegate;
+import org.chromium.chrome.browser.tabmodel.document.DocumentTabModel;
import org.chromium.chrome.browser.util.FeatureUtilities;
+import org.chromium.chrome.browser.util.UrlUtilities;
import org.chromium.content_public.browser.LoadUrlParams;
import org.chromium.net.NetworkChangeNotifier;
import org.chromium.ui.base.DeviceFormFactor;
@@ -255,7 +266,51 @@ public class NewTabPage
public void open(MostVisitedItem item) {
if (mIsDestroyed) return;
recordOpenedMostVisitedItem(item);
- open(item.getUrl());
+ String url = item.getUrl();
+ if (!switchToExistingTab(url)) open(url);
+ }
+
+ @TargetApi(Build.VERSION_CODES.LOLLIPOP)
+ private boolean switchToExistingTab(String url) {
+ String matchPattern = CommandLine.getInstance().getSwitchValue(
+ ChromeSwitches.NTP_SWITCH_TO_EXISTING_TAB);
+ boolean matchByHost;
+ if ("url".equals(matchPattern)) {
+ matchByHost = false;
+ } else if ("host".equals(matchPattern)) {
+ matchByHost = true;
+ } else {
+ return false;
+ }
+ if (FeatureUtilities.isDocumentMode(mActivity)) {
+ ActivityManager am =
+ (ActivityManager) mActivity.getSystemService(Activity.ACTIVITY_SERVICE);
+ DocumentTabModel tabModel =
+ ChromeApplication.getDocumentTabModelSelector().getModel(false);
+ for (ActivityManager.AppTask task : am.getAppTasks()) {
+ Intent baseIntent = DocumentUtils.getBaseIntentFromTask(task);
+ int tabId = ActivityDelegate.getTabIdFromIntent(baseIntent);
+ String tabUrl = tabModel.getCurrentUrlForDocument(tabId);
+ if (matchURLs(tabUrl, url, matchByHost)) {
+ task.moveToFront();
+ return true;
+ }
+ }
+ } else {
+ TabModel tabModel = mTabModelSelector.getModel(false);
+ for (int i = tabModel.getCount() - 1; i >= 0; --i) {
+ if (matchURLs(tabModel.getTabAt(i).getUrl(), url, matchByHost)) {
+ TabModelUtils.setIndex(tabModel, i);
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private boolean matchURLs(String url1, String url2, boolean matchByHost) {
+ if (url1 == null || url2 == null) return false;
+ return matchByHost ? UrlUtilities.sameHost(url1, url2) : url1.equals(url2);
}
@Override

Powered by Google App Engine
This is Rietveld 408576698