| Index: chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java
|
| index e0e242be504ec625522842e3e5b488246395c6e3..6815b74aab893e2f7c689c96a70e0866d764085c 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java
|
| @@ -226,6 +226,11 @@ public class IntentHandler {
|
| private final String mPackageName;
|
| private KeyguardManager mKeyguardManager;
|
|
|
| + /**
|
| + * Receiver for screen unlock broadcast.
|
| + */
|
| + private DelayedScreenLockIntentHandler mDelayedScreenIntentHandler;
|
| +
|
| public static enum TabOpenType {
|
| OPEN_NEW_TAB,
|
| // Tab is reused only if the URLs perfectly match.
|
| @@ -331,13 +336,26 @@ public class IntentHandler {
|
| }
|
| }
|
|
|
| + private void updateDeferredIntent(Intent intent) {
|
| + if (mDelayedScreenIntentHandler == null && intent != null) {
|
| + mDelayedScreenIntentHandler = new DelayedScreenLockIntentHandler();
|
| + }
|
| +
|
| + if (mDelayedScreenIntentHandler != null) {
|
| + mDelayedScreenIntentHandler.updateDeferredIntent(intent);
|
| + }
|
| + }
|
| +
|
| /**
|
| * Handles an Intent after the ChromeTabbedActivity decides that it shouldn't ignore the
|
| * Intent.
|
| - *
|
| + * @param context Android Context.
|
| + * @param intent Target intent.
|
| * @return Whether the Intent was successfully handled.
|
| */
|
| boolean onNewIntent(Context context, Intent intent) {
|
| + updateDeferredIntent(null);
|
| +
|
| assert intentHasValidUrl(intent);
|
| String url = getUrlFromIntent(intent);
|
| boolean hasUserGesture =
|
| @@ -688,7 +706,11 @@ public class IntentHandler {
|
| // We must check for screen state at this point.
|
| // These might be slow.
|
| boolean internalOrVisible = isInternal || isIntentUserVisible(context);
|
| - return !internalOrVisible;
|
| + if (!internalOrVisible) {
|
| + updateDeferredIntent(intent);
|
| + return true;
|
| + }
|
| + return false;
|
| } catch (Throwable t) {
|
| return true;
|
| }
|
| @@ -761,7 +783,8 @@ public class IntentHandler {
|
| return false;
|
| }
|
|
|
| - private boolean isIntentUserVisible(Context context) {
|
| + @VisibleForTesting
|
| + boolean isIntentUserVisible(Context context) {
|
| // Only process Intents if the screen is on and the device is unlocked;
|
| // i.e. the user will see what is going on.
|
| if (mKeyguardManager == null) {
|
|
|