Index: android_webview/java/src/org/chromium/android_webview/AwContents.java |
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java |
index f166d99d6d895eb3aeecda8da6cdf05eeed601cf..d1574e73f9b0f0b3bf5f9e3a09aae6ee18cb0df8 100644 |
--- a/android_webview/java/src/org/chromium/android_webview/AwContents.java |
+++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java |
@@ -49,6 +49,7 @@ import org.chromium.content.browser.ContentViewStatics; |
import org.chromium.content.browser.LoadUrlParams; |
import org.chromium.content.browser.NavigationHistory; |
import org.chromium.content.browser.PageTransitionTypes; |
+import org.chromium.content.browser.WebContentsObserverAndroid; |
import org.chromium.content.common.CleanupReference; |
import org.chromium.content_public.Referrer; |
import org.chromium.content_public.browser.GestureStateListener; |
@@ -201,6 +202,7 @@ public class AwContents { |
// Bound method for suppling Picture instances to the AwContentsClient. Will be null if the |
// picture listener API has not yet been enabled, or if it is using invalidation-only mode. |
private Callable<Picture> mPictureListenerContentProvider; |
+ private boolean mDoDraw; |
private boolean mContainerViewFocused; |
private boolean mWindowFocused; |
@@ -549,6 +551,8 @@ public class AwContents { |
return contentViewCore; |
} |
+ private WebContentsObserverAndroid mWebContentsObserver; |
+ |
/** |
* Common initialization routine for adopting a native AwContents instance into this |
* java instance. |
@@ -579,6 +583,13 @@ public class AwContents { |
new AwGestureStateListener(), mContentViewClient, mZoomControls); |
nativeSetJavaPeers(mNativeAwContents, this, mWebContentsDelegate, mContentsClientBridge, |
mIoThreadClient, mInterceptNavigationDelegate); |
+ mWebContentsObserver = new WebContentsObserverAndroid(mContentViewCore) { |
+ @Override |
+ public void didFirstVisuallyNonEmptyPaint(int pageId) { |
+ mDoDraw = true; |
+ mContainerView.invalidate(); |
+ } |
+ }; |
mContentsClient.installWebContentsObserver(mContentViewCore); |
mSettings.setWebContents(nativeWebContents); |
nativeSetDipScale(mNativeAwContents, (float) mDIPScale); |
@@ -779,6 +790,9 @@ public class AwContents { |
canvas.drawColor(getEffectiveBackgroundColor()); |
} |
+ if (!mDoDraw) |
+ canvas.drawColor(0x88aaaaaa, android.graphics.PorterDuff.Mode.XOR); |
+ |
if (mOverScrollGlow != null && mOverScrollGlow.drawEdgeGlows(canvas, |
mScrollOffsetManager.computeMaximumHorizontalScrollOffset(), |
mScrollOffsetManager.computeMaximumVerticalScrollOffset())) { |
@@ -881,6 +895,8 @@ public class AwContents { |
* @param params Parameters for this load. |
*/ |
public void loadUrl(LoadUrlParams params) { |
+ mDoDraw = false; |
+ |
if (params.getLoadUrlType() == LoadUrlParams.LOAD_TYPE_DATA && |
!params.isBaseUrlDataScheme()) { |
// This allows data URLs with a non-data base URL access to file:///android_asset/ and |