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

Side by Side Diff: android_webview/java/src/org/chromium/android_webview/AwContents.java

Issue 1424263003: Reland "Use resource throttle to implement shouldOverrideUrlLoading, core change" (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Revert unnecessary change for making XHR test thread-safe (it was safe before the change). Created 5 years, 1 month 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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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.android_webview; 5 package org.chromium.android_webview;
6 6
7 import android.annotation.SuppressLint; 7 import android.annotation.SuppressLint;
8 import android.app.Activity; 8 import android.app.Activity;
9 import android.content.ComponentCallbacks2; 9 import android.content.ComponentCallbacks2;
10 import android.content.Context; 10 import android.content.Context;
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 282
283 private AwAutofillClient mAwAutofillClient; 283 private AwAutofillClient mAwAutofillClient;
284 284
285 private AwPdfExporter mAwPdfExporter; 285 private AwPdfExporter mAwPdfExporter;
286 286
287 private AwViewMethods mAwViewMethods; 287 private AwViewMethods mAwViewMethods;
288 private final FullScreenTransitionsState mFullScreenTransitionsState; 288 private final FullScreenTransitionsState mFullScreenTransitionsState;
289 289
290 private PostMessageSender mPostMessageSender; 290 private PostMessageSender mPostMessageSender;
291 291
292 // This flag indicates that ShouldOverrideUrlNavigation should be posted
293 // through the resourcethrottle. This is only used for popup windows.
294 private boolean mDeferredShouldOverrideUrlLoadingIsPendingForPopup;
295
296 // This is a workaround for some qualcomm devices discarding buffer on 292 // This is a workaround for some qualcomm devices discarding buffer on
297 // Activity restore. 293 // Activity restore.
298 private boolean mInvalidateRootViewOnNextDraw; 294 private boolean mInvalidateRootViewOnNextDraw;
299 295
300 // The framework may temporarily detach our container view, for example duri ng layout if 296 // The framework may temporarily detach our container view, for example duri ng layout if
301 // we are a child of a ListView. This may cause many toggles of View focus, which we suppress 297 // we are a child of a ListView. This may cause many toggles of View focus, which we suppress
302 // when in this state. 298 // when in this state.
303 private boolean mTemporarilyDetached; 299 private boolean mTemporarilyDetached;
304 300
305 private Handler mHandler; 301 private Handler mHandler;
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 // callback to the correct WebViewClient that is associated with the WebView . 491 // callback to the correct WebViewClient that is associated with the WebView .
496 // Otherwise, use this delegate only to post onPageStarted messages. 492 // Otherwise, use this delegate only to post onPageStarted messages.
497 // 493 //
498 // We are not using WebContentsObserver.didStartLoading because of stale URL s, out of order 494 // We are not using WebContentsObserver.didStartLoading because of stale URL s, out of order
499 // onPageStarted's and double onPageStarted's. 495 // onPageStarted's and double onPageStarted's.
500 // 496 //
501 private class InterceptNavigationDelegateImpl implements InterceptNavigation Delegate { 497 private class InterceptNavigationDelegateImpl implements InterceptNavigation Delegate {
502 @Override 498 @Override
503 public boolean shouldIgnoreNavigation(NavigationParams navigationParams) { 499 public boolean shouldIgnoreNavigation(NavigationParams navigationParams) {
504 final String url = navigationParams.url; 500 final String url = navigationParams.url;
501
502 final int transitionType = navigationParams.pageTransitionType;
503 final boolean isLoadUrl = (transitionType & PageTransition.FROM_API) != 0;
504 final boolean isBackForward = (transitionType & PageTransition.FORWA RD_BACK) != 0;
505 final boolean isReload =
506 (transitionType & PageTransition.CORE_MASK) == PageTransitio n.RELOAD;
507 final boolean isRedirect = navigationParams.isRedirect;
508
505 boolean ignoreNavigation = false; 509 boolean ignoreNavigation = false;
506 if (mDeferredShouldOverrideUrlLoadingIsPendingForPopup) { 510 // Any navigation from loadUrl, goBack/Forward, or reload, are consi dered application
507 mDeferredShouldOverrideUrlLoadingIsPendingForPopup = false; 511 // initiated and hence will not yield a shouldOverrideUrlLoading() c allback.
508 // If this is used for all navigations in future, cases for appl ication initiated 512 if ((!isLoadUrl || isRedirect) && !isBackForward && !isReload
509 // load, redirect and backforward should also be filtered out. 513 && !navigationParams.isPost) {
510 if (!navigationParams.isPost) { 514 ignoreNavigation = mContentsClient.shouldIgnoreNavigation(mConte xt, url,
511 ignoreNavigation = mContentsClient.shouldIgnoreNavigation( 515 navigationParams.isMainFrame,
512 mContext, url, navigationParams.isMainFrame, 516 navigationParams.hasUserGesture || navigationParams.hasU serGestureCarryover,
513 navigationParams.hasUserGesture 517 navigationParams.isRedirect);
514 || navigationParams.hasUserGestureCarryover,
515 navigationParams.isRedirect);
516 }
517 } 518 }
519
518 // The shouldOverrideUrlLoading call might have resulted in posting messages to the 520 // The shouldOverrideUrlLoading call might have resulted in posting messages to the
519 // UI thread. Using sendMessage here (instead of calling onPageStart ed directly) 521 // UI thread. Using sendMessage here (instead of calling onPageStart ed directly)
520 // will allow those to run in order. 522 // will allow those to run in order.
521 if (!ignoreNavigation) { 523 if (isRedirect) {
524 mContentsClient.getCallbackHelper().postOnPageStarted(url);
525 // We can post onPageFinished here since we know that the naviga tion will fail.
526 // Also AwWebContentsObserver.didFail does not call OnPageFinish ed when the
527 // navigation is overridden because we don't want an onPageFinis hed for such a
528 // navigation unless it is a redirect.
529 if (ignoreNavigation) {
530 mContentsClient.getCallbackHelper().postOnPageFinished(url);
531 }
532 } else if (!ignoreNavigation) {
522 mContentsClient.getCallbackHelper().postOnPageStarted(url); 533 mContentsClient.getCallbackHelper().postOnPageStarted(url);
523 } 534 }
524 return ignoreNavigation; 535 return ignoreNavigation;
525 } 536 }
526 } 537 }
527 538
528 //-------------------------------------------------------------------------- ------------------ 539 //-------------------------------------------------------------------------- ------------------
529 private class AwLayoutSizerDelegate implements AwLayoutSizer.Delegate { 540 private class AwLayoutSizerDelegate implements AwLayoutSizer.Delegate {
530 @Override 541 @Override
531 public void requestLayout() { 542 public void requestLayout() {
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after
1000 nativeDestroy(popupNativeAwContents); 1011 nativeDestroy(popupNativeAwContents);
1001 return; 1012 return;
1002 } 1013 }
1003 1014
1004 newContents.receivePopupContents(popupNativeAwContents); 1015 newContents.receivePopupContents(popupNativeAwContents);
1005 } 1016 }
1006 1017
1007 // Recap: supplyContentsForPopup() is called on the parent window's content, this method is 1018 // Recap: supplyContentsForPopup() is called on the parent window's content, this method is
1008 // called on the popup window's content. 1019 // called on the popup window's content.
1009 private void receivePopupContents(long popupNativeAwContents) { 1020 private void receivePopupContents(long popupNativeAwContents) {
1010 mDeferredShouldOverrideUrlLoadingIsPendingForPopup = true;
1011 // Save existing view state. 1021 // Save existing view state.
1012 final boolean wasAttached = mIsAttachedToWindow; 1022 final boolean wasAttached = mIsAttachedToWindow;
1013 final boolean wasViewVisible = mIsViewVisible; 1023 final boolean wasViewVisible = mIsViewVisible;
1014 final boolean wasWindowVisible = mIsWindowVisible; 1024 final boolean wasWindowVisible = mIsWindowVisible;
1015 final boolean wasPaused = mIsPaused; 1025 final boolean wasPaused = mIsPaused;
1016 final boolean wasFocused = mContainerViewFocused; 1026 final boolean wasFocused = mContainerViewFocused;
1017 final boolean wasWindowFocused = mWindowFocused; 1027 final boolean wasWindowFocused = mWindowFocused;
1018 1028
1019 // Properly clean up existing mContentViewCore and mNativeAwContents. 1029 // Properly clean up existing mContentViewCore and mNativeAwContents.
1020 if (wasFocused) onFocusChanged(false, 0, null); 1030 if (wasFocused) onFocusChanged(false, 0, null);
(...skipping 2209 matching lines...) Expand 10 before | Expand all | Expand 10 after
3230 long resources); 3240 long resources);
3231 3241
3232 private native void nativePostMessageToFrame(long nativeAwContents, String f rameId, 3242 private native void nativePostMessageToFrame(long nativeAwContents, String f rameId,
3233 String message, String targetOrigin, int[] msgPorts); 3243 String message, String targetOrigin, int[] msgPorts);
3234 3244
3235 private native void nativeCreateMessageChannel(long nativeAwContents, AwMess agePort[] ports); 3245 private native void nativeCreateMessageChannel(long nativeAwContents, AwMess agePort[] ports);
3236 3246
3237 private native void nativeGrantFileSchemeAccesstoChildProcess(long nativeAwC ontents); 3247 private native void nativeGrantFileSchemeAccesstoChildProcess(long nativeAwC ontents);
3238 private native void nativeResumeLoadingCreatedPopupWebContents(long nativeAw Contents); 3248 private native void nativeResumeLoadingCreatedPopupWebContents(long nativeAw Contents);
3239 } 3249 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698