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

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/tab/TabContextMenuItemDelegate.java

Issue 2663373003: [Android] Add options in the context menu of CCT to open in a new Chrome tab or incoginto tab (Closed)
Patch Set: Fix failure for test cases Created 3 years, 10 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.tab; 5 package org.chromium.chrome.browser.tab;
6 6
7 import android.app.Activity;
7 import android.content.Context; 8 import android.content.Context;
8 import android.content.Intent; 9 import android.content.Intent;
10 import android.content.pm.PackageManager;
11 import android.content.pm.ResolveInfo;
9 import android.net.MailTo; 12 import android.net.MailTo;
10 import android.net.Uri; 13 import android.net.Uri;
14 import android.os.AsyncTask;
15 import android.provider.Browser;
11 import android.provider.ContactsContract; 16 import android.provider.ContactsContract;
12 17
13 import org.chromium.base.metrics.RecordUserAction; 18 import org.chromium.base.metrics.RecordUserAction;
19 import org.chromium.chrome.R;
14 import org.chromium.chrome.browser.IntentHandler; 20 import org.chromium.chrome.browser.IntentHandler;
15 import org.chromium.chrome.browser.UrlConstants; 21 import org.chromium.chrome.browser.UrlConstants;
16 import org.chromium.chrome.browser.contextmenu.ContextMenuItemDelegate; 22 import org.chromium.chrome.browser.contextmenu.ContextMenuItemDelegate;
23 import org.chromium.chrome.browser.document.ChromeLauncherActivity;
17 import org.chromium.chrome.browser.multiwindow.MultiWindowUtils; 24 import org.chromium.chrome.browser.multiwindow.MultiWindowUtils;
18 import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings; 25 import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings;
19 import org.chromium.chrome.browser.preferences.PrefServiceBridge; 26 import org.chromium.chrome.browser.preferences.PrefServiceBridge;
20 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType; 27 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
21 import org.chromium.chrome.browser.tabmodel.document.TabDelegate; 28 import org.chromium.chrome.browser.tabmodel.document.TabDelegate;
22 import org.chromium.chrome.browser.util.IntentUtils; 29 import org.chromium.chrome.browser.util.IntentUtils;
23 import org.chromium.chrome.browser.util.UrlUtilities; 30 import org.chromium.chrome.browser.util.UrlUtilities;
24 import org.chromium.content_public.browser.LoadUrlParams; 31 import org.chromium.content_public.browser.LoadUrlParams;
25 import org.chromium.content_public.common.Referrer; 32 import org.chromium.content_public.common.Referrer;
26 import org.chromium.ui.base.Clipboard; 33 import org.chromium.ui.base.Clipboard;
27 import org.chromium.ui.base.PageTransition; 34 import org.chromium.ui.base.PageTransition;
28 35
29 import java.net.URI; 36 import java.net.URI;
30 import java.util.Locale; 37 import java.util.Locale;
38 import java.util.concurrent.ExecutionException;
31 39
32 /** 40 /**
33 * A default {@link ContextMenuItemDelegate} that supports the context menu func tionality in Tab. 41 * A default {@link ContextMenuItemDelegate} that supports the context menu func tionality in Tab.
34 */ 42 */
35 public class TabContextMenuItemDelegate implements ContextMenuItemDelegate { 43 public class TabContextMenuItemDelegate implements ContextMenuItemDelegate {
36 public static final String PAGESPEED_PASSTHROUGH_HEADERS = 44 public static final String PAGESPEED_PASSTHROUGH_HEADERS =
37 "Chrome-Proxy: pass-through\nCache-Control: no-cache"; 45 "Chrome-Proxy: pass-through\nCache-Control: no-cache";
46 private static final String SAMPLE_URL = "https://www.google.com";
38 47
39 private final Clipboard mClipboard; 48 private final Clipboard mClipboard;
40 private final Tab mTab; 49 private final Tab mTab;
50 private final AsyncTask<Void, Void, String> mDefaultBrowserFetcher;
41 51
42 /** 52 /**
43 * Builds a {@link TabContextMenuItemDelegate} instance. 53 * Builds a {@link TabContextMenuItemDelegate} instance.
44 */ 54 */
45 public TabContextMenuItemDelegate(Tab tab) { 55 public TabContextMenuItemDelegate(Tab tab) {
46 mTab = tab; 56 mTab = tab;
47 mClipboard = new Clipboard(mTab.getApplicationContext()); 57 mClipboard = new Clipboard(mTab.getApplicationContext());
58 mDefaultBrowserFetcher = new AsyncTask<Void, Void, String>() {
Ted C 2017/02/11 00:08:46 This is the same as in CustomTabAppMenuPropertiesD
Maria 2017/02/11 00:55:57 I agree that having this in one place would be nic
ltian 2017/02/14 01:43:44 Done.
59 @Override
60 protected String doInBackground(Void... params) {
61 String packageLabel = null;
62 Activity activity = mTab.getActivity();
63 Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(SAMPLE_ URL));
64 PackageManager pm = activity.getPackageManager();
65 ResolveInfo info = pm.resolveActivity(intent, 0);
66 if (info != null && info.match != 0) {
67 packageLabel = info.loadLabel(pm).toString();
68 }
69
70 return packageLabel == null
71 ? activity.getString(R.string.menu_open_in_product_defau lt)
72 : activity.getString(R.string.menu_open_in_product, pack ageLabel);
73 }
74 }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
48 } 75 }
49 76
50 @Override 77 @Override
51 public boolean isIncognito() { 78 public boolean isIncognito() {
52 return mTab.isIncognito(); 79 return mTab.isIncognito();
53 } 80 }
54 81
55 @Override 82 @Override
56 public boolean isIncognitoSupported() { 83 public boolean isIncognitoSupported() {
57 return PrefServiceBridge.getInstance().isIncognitoModeEnabled(); 84 return PrefServiceBridge.getInstance().isIncognitoModeEnabled();
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 } 252 }
226 253
227 if (!activityStarted) { 254 if (!activityStarted) {
228 Context context = mTab.getActivity(); 255 Context context = mTab.getActivity();
229 if (context == null) context = mTab.getApplicationContext(); 256 if (context == null) context = mTab.getApplicationContext();
230 context.startActivity(chromeIntent); 257 context.startActivity(chromeIntent);
231 activityStarted = true; 258 activityStarted = true;
232 } 259 }
233 } 260 }
234 261
262 @Override
263 public void onOpenInNewChromeTabFromCCT(String linkUrl, boolean isIncognito) {
264 Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(linkUrl));
265 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
266 intent.setPackage(mTab.getApplicationContext().getPackageName());
267 intent.putExtra(ChromeLauncherActivity.EXTRA_IS_ALLOWED_TO_RETURN_TO_PAR ENT, false);
268 if (isIncognito) {
269 intent.putExtra(IntentHandler.EXTRA_OPEN_NEW_INCOGNITO_TAB, true);
270 intent.putExtra(
271 Browser.EXTRA_APPLICATION_ID, mTab.getApplicationContext().g etPackageName());
272 IntentHandler.addTrustedIntentExtras(intent);
273 }
274 IntentUtils.safeStartActivity(mTab.getActivity(), intent);
275 }
276
277 @Override
278 public String getTitleForOpenTabInExternalApp() {
279 try {
280 return mDefaultBrowserFetcher.get();
281 } catch (InterruptedException | ExecutionException e) {
282 return mTab.getActivity().getString(R.string.menu_open_in_product_de fault);
283 }
284 }
285
286 @Override
287 public void onOpenInDefaultBrowser(String url) {
288 Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
Ted C 2017/02/11 00:08:46 I think we want NEW_TASK here too
ltian 2017/02/14 01:43:44 Done.
289 IntentUtils.safeStartActivity(mTab.getActivity(), intent);
290 }
291
235 /** 292 /**
236 * Checks if spdy proxy is enabled for input url. 293 * Checks if spdy proxy is enabled for input url.
237 * @param url Input url to check for spdy setting. 294 * @param url Input url to check for spdy setting.
238 * @return true if url is enabled for spdy proxy. 295 * @return true if url is enabled for spdy proxy.
239 */ 296 */
240 private boolean isSpdyProxyEnabledForUrl(String url) { 297 private boolean isSpdyProxyEnabledForUrl(String url) {
241 if (DataReductionProxySettings.getInstance().isDataReductionProxyEnabled () 298 if (DataReductionProxySettings.getInstance().isDataReductionProxyEnabled ()
242 && url != null && !url.toLowerCase(Locale.US).startsWith( 299 && url != null && !url.toLowerCase(Locale.US).startsWith(
243 UrlConstants.HTTPS_URL_PREFIX) 300 UrlConstants.HTTPS_URL_PREFIX)
244 && !isIncognito()) { 301 && !isIncognito()) {
245 return true; 302 return true;
246 } 303 }
247 return false; 304 return false;
248 } 305 }
249 306
250 } 307 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698