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

Side by Side Diff: content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java

Issue 297973002: Navigation transitions: Block first response until after transitions have run. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 6 years, 6 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 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.content.browser; 5 package org.chromium.content.browser;
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.app.SearchManager; 9 import android.app.SearchManager;
10 import android.content.ContentResolver; 10 import android.content.ContentResolver;
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 } 206 }
207 207
208 /** 208 /**
209 * An interface that allows the embedder to be notified when the results of 209 * An interface that allows the embedder to be notified when the results of
210 * extractSmartClipData are available. 210 * extractSmartClipData are available.
211 */ 211 */
212 public interface SmartClipDataListener { 212 public interface SmartClipDataListener {
213 public void onSmartClipDataExtracted(String result); 213 public void onSmartClipDataExtracted(String result);
214 } 214 }
215 215
216 /**
217 * An interface that allows the embedder to be notified of navigation transi tion
218 * related events and respond to them.
219 */
220 public interface NavigationTransitionDelegate {
221 /**
222 * Called when the navigation is deferred immediately after the response started.
223 */
224 public void didDeferAfterResponseStarted();
225
226 /**
227 * Called when a navigation transition has been detected, and we need to check
228 * if it's supported.
229 */
230 public boolean willHandleDeferAfterResponseStarted();
231 }
232
216 private final Context mContext; 233 private final Context mContext;
217 private ViewGroup mContainerView; 234 private ViewGroup mContainerView;
218 private InternalAccessDelegate mContainerViewInternals; 235 private InternalAccessDelegate mContainerViewInternals;
219 private WebContents mWebContents; 236 private WebContents mWebContents;
220 private WebContentsObserverAndroid mWebContentsObserver; 237 private WebContentsObserverAndroid mWebContentsObserver;
221 238
222 private ContentViewClient mContentViewClient; 239 private ContentViewClient mContentViewClient;
223 240
224 private ContentSettings mContentSettings; 241 private ContentSettings mContentSettings;
225 242
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 private boolean mTouchScrollInProgress; 328 private boolean mTouchScrollInProgress;
312 329
313 // The outstanding fling start events that hasn't got fling end yet. It may be > 1 because 330 // The outstanding fling start events that hasn't got fling end yet. It may be > 1 because
314 // onNativeFlingStopped() is called asynchronously. 331 // onNativeFlingStopped() is called asynchronously.
315 private int mPotentiallyActiveFlingCount; 332 private int mPotentiallyActiveFlingCount;
316 333
317 private ViewAndroid mViewAndroid; 334 private ViewAndroid mViewAndroid;
318 335
319 private SmartClipDataListener mSmartClipDataListener = null; 336 private SmartClipDataListener mSmartClipDataListener = null;
320 337
338 private NavigationTransitionDelegate mNavigationTransitionDelegate = null;
339
321 // This holds the state of editable text (e.g. contents of <input>, contente ditable) of 340 // This holds the state of editable text (e.g. contents of <input>, contente ditable) of
322 // a focused element. 341 // a focused element.
323 // Every time the user, IME, javascript (Blink), autofill etc. modifies the content, the new 342 // Every time the user, IME, javascript (Blink), autofill etc. modifies the content, the new
324 // state must be reflected to this to keep consistency. 343 // state must be reflected to this to keep consistency.
325 private final Editable mEditable; 344 private final Editable mEditable;
326 345
327 /** 346 /**
328 * PID used to indicate an invalid render process. 347 * PID used to indicate an invalid render process.
329 */ 348 */
330 // Keep in sync with the value returned from ContentViewCoreImpl::GetCurrent RendererProcessId() 349 // Keep in sync with the value returned from ContentViewCoreImpl::GetCurrent RendererProcessId()
(...skipping 2682 matching lines...) Expand 10 before | Expand all | Expand 10 after
3013 public void setSmartClipDataListener(SmartClipDataListener listener) { 3032 public void setSmartClipDataListener(SmartClipDataListener listener) {
3014 mSmartClipDataListener = listener; 3033 mSmartClipDataListener = listener;
3015 } 3034 }
3016 3035
3017 public void setBackgroundOpaque(boolean opaque) { 3036 public void setBackgroundOpaque(boolean opaque) {
3018 if (mNativeContentViewCore != 0) { 3037 if (mNativeContentViewCore != 0) {
3019 nativeSetBackgroundOpaque(mNativeContentViewCore, opaque); 3038 nativeSetBackgroundOpaque(mNativeContentViewCore, opaque);
3020 } 3039 }
3021 } 3040 }
3022 3041
3042 @CalledByNative
3043 private void didDeferAfterResponseStarted() {
3044 if (mNavigationTransitionDelegate != null ) {
3045 mNavigationTransitionDelegate.didDeferAfterResponseStarted();
3046 }
3047 }
3048
3049 @CalledByNative
3050 private boolean willHandleDeferAfterResponseStarted() {
3051 if (mNavigationTransitionDelegate == null) return false;
3052 return mNavigationTransitionDelegate.willHandleDeferAfterResponseStarted ();
3053 }
3054
3055 @VisibleForTesting
3056 void setHasPendingNavigationTransitionForTesting() {
3057 if (mNativeContentViewCore == 0) return;
3058 nativeSetHasPendingNavigationTransitionForTesting(mNativeContentViewCore );
3059 }
3060
3061 public void setNavigationTransitionDelegate(NavigationTransitionDelegate del egate) {
3062 mNavigationTransitionDelegate = delegate;
3063 }
3064
3023 /** 3065 /**
3024 * Offer a long press gesture to the embedding View, primarily for WebView c ompatibility. 3066 * Offer a long press gesture to the embedding View, primarily for WebView c ompatibility.
3025 * 3067 *
3026 * @return true if the embedder handled the event. 3068 * @return true if the embedder handled the event.
3027 */ 3069 */
3028 private boolean offerLongPressToEmbedder() { 3070 private boolean offerLongPressToEmbedder() {
3029 return mContainerView.performLongClick(); 3071 return mContainerView.performLongClick();
3030 } 3072 }
3031 3073
3032 /** 3074 /**
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
3067 if (mPotentiallyActiveFlingCount <= 0) return; 3109 if (mPotentiallyActiveFlingCount <= 0) return;
3068 mPotentiallyActiveFlingCount--; 3110 mPotentiallyActiveFlingCount--;
3069 updateGestureStateListener(GestureEventType.FLING_END); 3111 updateGestureStateListener(GestureEventType.FLING_END);
3070 } 3112 }
3071 3113
3072 @Override 3114 @Override
3073 public void onScreenOrientationChanged(int orientation) { 3115 public void onScreenOrientationChanged(int orientation) {
3074 sendOrientationChangeEvent(orientation); 3116 sendOrientationChangeEvent(orientation);
3075 } 3117 }
3076 3118
3119 public void resumeResponseDeferredAtStart() {
3120 if (mNativeContentViewCore == 0) return;
3121 nativeResumeResponseDeferredAtStart(mNativeContentViewCore);
3122 }
3123
3077 private native WebContents nativeGetWebContentsAndroid(long nativeContentVie wCoreImpl); 3124 private native WebContents nativeGetWebContentsAndroid(long nativeContentVie wCoreImpl);
3078 3125
3079 private native void nativeOnJavaContentViewCoreDestroyed(long nativeContentV iewCoreImpl); 3126 private native void nativeOnJavaContentViewCoreDestroyed(long nativeContentV iewCoreImpl);
3080 3127
3081 private native void nativeLoadUrl( 3128 private native void nativeLoadUrl(
3082 long nativeContentViewCoreImpl, 3129 long nativeContentViewCoreImpl,
3083 String url, 3130 String url,
3084 int loadUrlType, 3131 int loadUrlType,
3085 int transitionType, 3132 int transitionType,
3086 String referrerUrl, 3133 String referrerUrl,
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
3228 boolean enableHiding, boolean enableShowing, boolean animate); 3275 boolean enableHiding, boolean enableShowing, boolean animate);
3229 3276
3230 private native void nativeShowImeIfNeeded(long nativeContentViewCoreImpl); 3277 private native void nativeShowImeIfNeeded(long nativeContentViewCoreImpl);
3231 3278
3232 private native void nativeSetAccessibilityEnabled( 3279 private native void nativeSetAccessibilityEnabled(
3233 long nativeContentViewCoreImpl, boolean enabled); 3280 long nativeContentViewCoreImpl, boolean enabled);
3234 3281
3235 private native void nativeExtractSmartClipData(long nativeContentViewCoreImp l, 3282 private native void nativeExtractSmartClipData(long nativeContentViewCoreImp l,
3236 int x, int y, int w, int h); 3283 int x, int y, int w, int h);
3237 private native void nativeSetBackgroundOpaque(long nativeContentViewCoreImpl , boolean opaque); 3284 private native void nativeSetBackgroundOpaque(long nativeContentViewCoreImpl , boolean opaque);
3285
3286 private native void nativeResumeResponseDeferredAtStart(
3287 long nativeContentViewCoreImpl);
3288 private native void nativeSetHasPendingNavigationTransitionForTesting(
3289 long nativeContentViewCoreImpl);
3238 } 3290 }
OLDNEW
« no previous file with comments | « content/content_tests.gypi ('k') | content/public/android/javatests/src/org/chromium/content/browser/TransitionTest.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698