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

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/document/ChromeLauncherActivity.java

Issue 1243253004: Pass user gesture bit when chrome handles an intent fired by itself (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix findbugs warning Created 5 years, 4 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.document; 5 package org.chromium.chrome.browser.document;
6 6
7 import android.annotation.SuppressLint; 7 import android.annotation.SuppressLint;
8 import android.annotation.TargetApi; 8 import android.annotation.TargetApi;
9 import android.app.Activity; 9 import android.app.Activity;
10 import android.app.ActivityManager; 10 import android.app.ActivityManager;
(...skipping 21 matching lines...) Expand all
32 import org.chromium.chrome.browser.ChromeApplication; 32 import org.chromium.chrome.browser.ChromeApplication;
33 import org.chromium.chrome.browser.ChromeTabbedActivity; 33 import org.chromium.chrome.browser.ChromeTabbedActivity;
34 import org.chromium.chrome.browser.IntentHandler; 34 import org.chromium.chrome.browser.IntentHandler;
35 import org.chromium.chrome.browser.IntentHandler.TabOpenType; 35 import org.chromium.chrome.browser.IntentHandler.TabOpenType;
36 import org.chromium.chrome.browser.ShortcutHelper; 36 import org.chromium.chrome.browser.ShortcutHelper;
37 import org.chromium.chrome.browser.ShortcutSource; 37 import org.chromium.chrome.browser.ShortcutSource;
38 import org.chromium.chrome.browser.UrlConstants; 38 import org.chromium.chrome.browser.UrlConstants;
39 import org.chromium.chrome.browser.WarmupManager; 39 import org.chromium.chrome.browser.WarmupManager;
40 import org.chromium.chrome.browser.WebappAuthenticator; 40 import org.chromium.chrome.browser.WebappAuthenticator;
41 import org.chromium.chrome.browser.customtabs.CustomTabActivity; 41 import org.chromium.chrome.browser.customtabs.CustomTabActivity;
42 import org.chromium.chrome.browser.externalnav.IntentWithGesturesHandler;
42 import org.chromium.chrome.browser.firstrun.FirstRunFlowSequencer; 43 import org.chromium.chrome.browser.firstrun.FirstRunFlowSequencer;
43 import org.chromium.chrome.browser.metrics.LaunchHistogram; 44 import org.chromium.chrome.browser.metrics.LaunchHistogram;
44 import org.chromium.chrome.browser.metrics.LaunchMetrics; 45 import org.chromium.chrome.browser.metrics.LaunchMetrics;
45 import org.chromium.chrome.browser.multiwindow.MultiWindowUtils; 46 import org.chromium.chrome.browser.multiwindow.MultiWindowUtils;
46 import org.chromium.chrome.browser.notifications.NotificationUIManager; 47 import org.chromium.chrome.browser.notifications.NotificationUIManager;
47 import org.chromium.chrome.browser.partnercustomizations.HomepageManager; 48 import org.chromium.chrome.browser.partnercustomizations.HomepageManager;
48 import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomiza tions; 49 import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomiza tions;
49 import org.chromium.chrome.browser.preferences.ChromePreferenceManager; 50 import org.chromium.chrome.browser.preferences.ChromePreferenceManager;
50 import org.chromium.chrome.browser.preferences.DocumentModeManager; 51 import org.chromium.chrome.browser.preferences.DocumentModeManager;
51 import org.chromium.chrome.browser.tab.Tab; 52 import org.chromium.chrome.browser.tab.Tab;
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
247 } 248 }
248 249
249 @Override 250 @Override
250 public void processWebSearchIntent(String query) { 251 public void processWebSearchIntent(String query) {
251 assert false; 252 assert false;
252 } 253 }
253 254
254 @Override 255 @Override
255 public void processUrlViewIntent(String url, String referer, String headers, 256 public void processUrlViewIntent(String url, String referer, String headers,
256 IntentHandler.TabOpenType tabOpenType, String externalAppId, 257 IntentHandler.TabOpenType tabOpenType, String externalAppId,
257 int tabIdToBringToFront, Intent intent) { 258 int tabIdToBringToFront, boolean hasUserGesture, Intent intent) {
258 assert false; 259 assert false;
259 } 260 }
260 261
261 /** 262 /**
262 * Handles launching a {@link CustomTabActivity}, which will sit on top of a client's activity 263 * Handles launching a {@link CustomTabActivity}, which will sit on top of a client's activity
263 * in the same task. 264 * in the same task.
264 * @return True if the intent is handled here. 265 * @return True if the intent is handled here.
265 */ 266 */
266 private boolean handleCustomTabActivityIntent() { 267 private boolean handleCustomTabActivityIntent() {
267 if (getIntent() == null || !getIntent().hasExtra(CustomTabsIntent.EXTRA_ SESSION)) { 268 if (getIntent() == null || !getIntent().hasExtra(CustomTabsIntent.EXTRA_ SESSION)) {
(...skipping 25 matching lines...) Expand all
293 @TargetApi(Build.VERSION_CODES.LOLLIPOP) 294 @TargetApi(Build.VERSION_CODES.LOLLIPOP)
294 private void handleDocumentActivityIntent() { 295 private void handleDocumentActivityIntent() {
295 if (getIntent() == null || mIntentHandler.shouldIgnoreIntent(this, getIn tent())) { 296 if (getIntent() == null || mIntentHandler.shouldIgnoreIntent(this, getIn tent())) {
296 Log.e(TAG, "Ignoring intent: " + getIntent()); 297 Log.e(TAG, "Ignoring intent: " + getIntent());
297 mIsFinishNeeded = true; 298 mIsFinishNeeded = true;
298 return; 299 return;
299 } 300 }
300 301
301 maybePrefetchDnsInBackground(); 302 maybePrefetchDnsInBackground();
302 303
304 boolean hasUserGesture =
305 IntentWithGesturesHandler.getInstance().getUserGestureAndClear(g etIntent());
306
303 // Increment the Tab ID counter at this point since this Activity may no t appear in 307 // Increment the Tab ID counter at this point since this Activity may no t appear in
304 // getAppTasks() when DocumentTabModelSelector is initialized. This can potentially happen 308 // getAppTasks() when DocumentTabModelSelector is initialized. This can potentially happen
305 // when Chrome is launched via the GSA/e200 search box and they relinqui sh their task. 309 // when Chrome is launched via the GSA/e200 search box and they relinqui sh their task.
306 TabIdManager.getInstance().incrementIdCounterTo(getTaskId() + 1); 310 TabIdManager.getInstance().incrementIdCounterTo(getTaskId() + 1);
307 311
308 // Handle MAIN Intent actions, usually fired when the user starts Chrome via the launcher. 312 // Handle MAIN Intent actions, usually fired when the user starts Chrome via the launcher.
309 // Some launchers start Chrome by firing a VIEW Intent with an empty URL (crbug.com/459349); 313 // Some launchers start Chrome by firing a VIEW Intent with an empty URL (crbug.com/459349);
310 // treat it as a MAIN Intent. 314 // treat it as a MAIN Intent.
311 String url = IntentHandler.getUrlFromIntent(getIntent()); 315 String url = IntentHandler.getUrlFromIntent(getIntent());
312 if ((url == null && TextUtils.equals(getIntent().getAction(), Intent.ACT ION_VIEW)) 316 if ((url == null && TextUtils.equals(getIntent().getAction(), Intent.ACT ION_VIEW))
313 || TextUtils.equals(getIntent().getAction(), Intent.ACTION_MAIN) ) { 317 || TextUtils.equals(getIntent().getAction(), Intent.ACTION_MAIN) ) {
314 handleMainDocumentIntent(); 318 handleMainDocumentIntent();
315 return; 319 return;
316 } 320 }
317 321
318 // Sometimes an Intent requests that the current Document get clobbered. 322 // Sometimes an Intent requests that the current Document get clobbered.
319 if (clobberCurrentDocument(url)) return; 323 if (clobberCurrentDocument(url, hasUserGesture)) return;
320 324
321 // Try to retarget existing Documents before creating a new one. 325 // Try to retarget existing Documents before creating a new one.
322 boolean incognito = IntentUtils.safeGetBooleanExtra(getIntent(), 326 boolean incognito = IntentUtils.safeGetBooleanExtra(getIntent(),
323 IntentHandler.EXTRA_OPEN_NEW_INCOGNITO_TAB, false); 327 IntentHandler.EXTRA_OPEN_NEW_INCOGNITO_TAB, false);
324 boolean append = IntentUtils.safeGetBooleanExtra( 328 boolean append = IntentUtils.safeGetBooleanExtra(
325 getIntent(), IntentHandler.EXTRA_APPEND_TASK, false); 329 getIntent(), IntentHandler.EXTRA_APPEND_TASK, false);
326 boolean reuse = IntentUtils.safeGetBooleanExtra( 330 boolean reuse = IntentUtils.safeGetBooleanExtra(
327 getIntent(), BookmarkUtils.REUSE_URL_MATCHING_TAB_ELSE_NEW_TAB, false); 331 getIntent(), BookmarkUtils.REUSE_URL_MATCHING_TAB_ELSE_NEW_TAB, false);
328 boolean affiliated = IntentUtils.safeGetBooleanExtra( 332 boolean affiliated = IntentUtils.safeGetBooleanExtra(
329 getIntent(), IntentHandler.EXTRA_OPEN_IN_BG, false); 333 getIntent(), IntentHandler.EXTRA_OPEN_IN_BG, false);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 launchDocumentInstance(ChromeLauncherActivity.this, false, async Params); 383 launchDocumentInstance(ChromeLauncherActivity.this, false, async Params);
380 384
381 if (mIsFinishNeeded) finish(); 385 if (mIsFinishNeeded) finish();
382 } 386 }
383 }, INITIAL_DOCUMENT_ACTIVITY_LAUNCH_TIMEOUT_MS); 387 }, INITIAL_DOCUMENT_ACTIVITY_LAUNCH_TIMEOUT_MS);
384 } 388 }
385 389
386 /** 390 /**
387 * If necessary, attempts to clobber the current DocumentActivity's tab with the given URL. 391 * If necessary, attempts to clobber the current DocumentActivity's tab with the given URL.
388 * @param url URL to display. 392 * @param url URL to display.
393 * @param hasUserGesture Whether the intent is launched from a previous user gesture.
389 * @return Whether or not the clobber was successful. 394 * @return Whether or not the clobber was successful.
390 */ 395 */
391 private boolean clobberCurrentDocument(String url) { 396 private boolean clobberCurrentDocument(String url, boolean hasUserGesture) {
392 boolean shouldOpenNewTab = IntentUtils.safeGetBooleanExtra( 397 boolean shouldOpenNewTab = IntentUtils.safeGetBooleanExtra(
393 getIntent(), Browser.EXTRA_CREATE_NEW_TAB, false); 398 getIntent(), Browser.EXTRA_CREATE_NEW_TAB, false);
394 String applicationId = 399 String applicationId =
395 IntentUtils.safeGetStringExtra(getIntent(), Browser.EXTRA_APPLIC ATION_ID); 400 IntentUtils.safeGetStringExtra(getIntent(), Browser.EXTRA_APPLIC ATION_ID);
396 if (shouldOpenNewTab || !getPackageName().equals(applicationId)) return false; 401 if (shouldOpenNewTab || !getPackageName().equals(applicationId)) return false;
397 402
398 // Check if there's a Tab that can be clobbered. 403 // Check if there's a Tab that can be clobbered.
399 int tabId = ChromeApplication.getDocumentTabModelSelector().getCurrentTa bId(); 404 int tabId = ChromeApplication.getDocumentTabModelSelector().getCurrentTa bId();
400 if (tabId == Tab.INVALID_TAB_ID) return false; 405 if (tabId == Tab.INVALID_TAB_ID) return false;
401 406
402 // Try to clobber the page. 407 // Try to clobber the page.
408 LoadUrlParams params = new LoadUrlParams(
409 url, PageTransition.LINK | PageTransition.FROM_API);
410 params.setHasUserGesture(hasUserGesture);
403 AsyncTabCreationParams data = 411 AsyncTabCreationParams data =
404 new AsyncTabCreationParams(new LoadUrlParams(url), new Intent(ge tIntent())); 412 new AsyncTabCreationParams(params, new Intent(getIntent()));
405 AsyncTabCreationParamsManager.add(tabId, data); 413 AsyncTabCreationParamsManager.add(tabId, data);
406 if (!relaunchTask(tabId)) { 414 if (!relaunchTask(tabId)) {
407 // Were not able to clobber, will fall through to handle in a new do cument. 415 // Were not able to clobber, will fall through to handle in a new do cument.
408 AsyncTabCreationParamsManager.remove(tabId); 416 AsyncTabCreationParamsManager.remove(tabId);
409 return false; 417 return false;
410 } 418 }
411 419
412 return true; 420 return true;
413 } 421 }
414 422
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after
834 return true; 842 return true;
835 } 843 }
836 844
837 /** 845 /**
838 * Send the number of times an exception was caught when trying to move a ta sk back to front. 846 * Send the number of times an exception was caught when trying to move a ta sk back to front.
839 */ 847 */
840 public static void sendExceptionCount() { 848 public static void sendExceptionCount() {
841 sMoveToFrontExceptionHistogram.commitHistogram(); 849 sMoveToFrontExceptionHistogram.commitHistogram();
842 } 850 }
843 } 851 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698