| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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.content.Context; | |
| 8 import android.content.pm.ActivityInfo; | 7 import android.content.pm.ActivityInfo; |
| 9 import android.graphics.Bitmap; | 8 import android.graphics.Bitmap; |
| 10 import android.graphics.Picture; | 9 import android.graphics.Picture; |
| 11 import android.graphics.Rect; | |
| 12 import android.graphics.RectF; | |
| 13 import android.net.http.SslError; | 10 import android.net.http.SslError; |
| 14 import android.os.Handler; | |
| 15 import android.os.Looper; | 11 import android.os.Looper; |
| 16 import android.os.Message; | 12 import android.os.Message; |
| 17 import android.util.Log; | |
| 18 import android.view.KeyEvent; | 13 import android.view.KeyEvent; |
| 19 import android.view.View; | 14 import android.view.View; |
| 20 import android.webkit.ConsoleMessage; | 15 import android.webkit.ConsoleMessage; |
| 21 import android.webkit.GeolocationPermissions; | 16 import android.webkit.GeolocationPermissions; |
| 22 import android.webkit.SslErrorHandler; | |
| 23 import android.webkit.ValueCallback; | 17 import android.webkit.ValueCallback; |
| 24 import android.webkit.WebChromeClient; | 18 import android.webkit.WebChromeClient; |
| 25 | 19 |
| 26 import org.chromium.content.browser.ContentVideoView; | |
| 27 import org.chromium.content.browser.ContentVideoViewClient; | |
| 28 import org.chromium.content.browser.ContentVideoViewControls; | |
| 29 import org.chromium.content.browser.ContentViewClient; | |
| 30 import org.chromium.content.browser.ContentViewCore; | 20 import org.chromium.content.browser.ContentViewCore; |
| 31 import org.chromium.content.browser.WebContentsObserverAndroid; | 21 import org.chromium.content.browser.WebContentsObserverAndroid; |
| 32 import org.chromium.net.NetError; | 22 import org.chromium.net.NetError; |
| 33 | 23 |
| 34 /** | 24 /** |
| 35 * Base-class that an AwContents embedder derives from to receive callbacks. | 25 * Base-class that an AwContents embedder derives from to receive callbacks. |
| 36 * This extends ContentViewClient, as in many cases we want to pass-thru Content
ViewCore | 26 * This extends ContentViewClient, as in many cases we want to pass-thru Content
ViewCore |
| 37 * callbacks right to our embedder, and this setup facilities that. | 27 * callbacks right to our embedder, and this setup facilities that. |
| 38 * For any other callbacks we need to make transformations of (e.g. adapt parame
ters | 28 * For any other callbacks we need to make transformations of (e.g. adapt parame
ters |
| 39 * or perform filtering) we can provide final overrides for methods here, and th
en introduce | 29 * or perform filtering) we can provide final overrides for methods here, and th
en introduce |
| 40 * new abstract methods that the our own client must implement. | 30 * new abstract methods that the our own client must implement. |
| 41 * i.e.: all methods in this class should either be final, or abstract. | 31 * i.e.: all methods in this class should either be final, or abstract. |
| 42 */ | 32 */ |
| 43 public abstract class AwContentsClient { | 33 public abstract class AwContentsClient { |
| 44 | 34 |
| 45 private static final String TAG = "AwContentsClient"; | 35 private static final String TAG = "AwContentsClient"; |
| 46 private final AwContentsClientCallbackHelper mCallbackHelper; | 36 private final AwContentsClientCallbackHelper mCallbackHelper; |
| 47 | 37 |
| 48 private AwWebContentsObserver mWebContentsObserver; | 38 private AwWebContentsObserver mWebContentsObserver; |
| 49 | 39 |
| 50 private AwContentViewClient mContentViewClient = new AwContentViewClient(); | |
| 51 | |
| 52 // Last background color reported from the renderer. Holds the sentinal valu
e INVALID_COLOR | 40 // Last background color reported from the renderer. Holds the sentinal valu
e INVALID_COLOR |
| 53 // if not valid. | 41 // if not valid. |
| 54 private int mCachedRendererBackgroundColor = INVALID_COLOR; | 42 private int mCachedRendererBackgroundColor = INVALID_COLOR; |
| 55 | 43 |
| 56 private static final int INVALID_COLOR = 0; | 44 private static final int INVALID_COLOR = 0; |
| 57 | 45 |
| 58 public AwContentsClient() { | 46 public AwContentsClient() { |
| 59 this(Looper.myLooper()); | 47 this(Looper.myLooper()); |
| 60 } | 48 } |
| 61 | 49 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 94 ErrorCodeConversionHelper.convertErrorCode(errorCode), descr
iption, failingUrl); | 82 ErrorCodeConversionHelper.convertErrorCode(errorCode), descr
iption, failingUrl); |
| 95 } | 83 } |
| 96 | 84 |
| 97 @Override | 85 @Override |
| 98 public void didNavigateAnyFrame(String url, String baseUrl, boolean isRe
load) { | 86 public void didNavigateAnyFrame(String url, String baseUrl, boolean isRe
load) { |
| 99 AwContentsClient.this.doUpdateVisitedHistory(url, isReload); | 87 AwContentsClient.this.doUpdateVisitedHistory(url, isReload); |
| 100 } | 88 } |
| 101 | 89 |
| 102 } | 90 } |
| 103 | 91 |
| 104 private class AwContentViewClient extends ContentViewClient { | |
| 105 @Override | |
| 106 public void onBackgroundColorChanged(int color) { | |
| 107 // Avoid storing the sentinal INVALID_COLOR (note that both 0 and 1
are both | |
| 108 // fully transparent so this transpose makes no visible difference). | |
| 109 mCachedRendererBackgroundColor = color == INVALID_COLOR ? 1 : color; | |
| 110 } | |
| 111 | |
| 112 @Override | |
| 113 public void onStartContentIntent(Context context, String contentUrl) { | |
| 114 // Callback when detecting a click on a content link. | |
| 115 AwContentsClient.this.shouldOverrideUrlLoading(contentUrl); | |
| 116 } | |
| 117 | |
| 118 @Override | |
| 119 public void onUpdateTitle(String title) { | |
| 120 AwContentsClient.this.onReceivedTitle(title); | |
| 121 } | |
| 122 | |
| 123 @Override | |
| 124 public boolean shouldOverrideKeyEvent(KeyEvent event) { | |
| 125 return AwContentsClient.this.shouldOverrideKeyEvent(event); | |
| 126 } | |
| 127 | |
| 128 @Override | |
| 129 final public ContentVideoViewClient getContentVideoViewClient() { | |
| 130 return new AwContentVideoViewClient(); | |
| 131 } | |
| 132 } | |
| 133 | |
| 134 final void installWebContentsObserver(ContentViewCore contentViewCore) { | 92 final void installWebContentsObserver(ContentViewCore contentViewCore) { |
| 135 if (mWebContentsObserver != null) { | 93 if (mWebContentsObserver != null) { |
| 136 mWebContentsObserver.detachFromWebContents(); | 94 mWebContentsObserver.detachFromWebContents(); |
| 137 } | 95 } |
| 138 mWebContentsObserver = new AwWebContentsObserver(contentViewCore); | 96 mWebContentsObserver = new AwWebContentsObserver(contentViewCore); |
| 139 } | 97 } |
| 140 | 98 |
| 141 private class AwContentVideoViewClient implements ContentVideoViewClient { | |
| 142 @Override | |
| 143 public void onShowCustomView(View view) { | |
| 144 WebChromeClient.CustomViewCallback cb = new WebChromeClient.CustomVi
ewCallback() { | |
| 145 @Override | |
| 146 public void onCustomViewHidden() { | |
| 147 ContentVideoView contentVideoView = ContentVideoView.getCont
entVideoView(); | |
| 148 if (contentVideoView != null) | |
| 149 contentVideoView.exitFullscreen(false); | |
| 150 } | |
| 151 }; | |
| 152 AwContentsClient.this.onShowCustomView(view, cb); | |
| 153 } | |
| 154 | |
| 155 @Override | |
| 156 public void onDestroyContentVideoView() { | |
| 157 AwContentsClient.this.onHideCustomView(); | |
| 158 } | |
| 159 | |
| 160 @Override | |
| 161 public View getVideoLoadingProgressView() { | |
| 162 return AwContentsClient.this.getVideoLoadingProgressView(); | |
| 163 } | |
| 164 | |
| 165 @Override | |
| 166 public ContentVideoViewControls createControls() { | |
| 167 return null; | |
| 168 } | |
| 169 } | |
| 170 | |
| 171 final AwContentsClientCallbackHelper getCallbackHelper() { | 99 final AwContentsClientCallbackHelper getCallbackHelper() { |
| 172 return mCallbackHelper; | 100 return mCallbackHelper; |
| 173 } | 101 } |
| 174 | 102 |
| 175 final ContentViewClient getContentViewClient() { | |
| 176 return mContentViewClient; | |
| 177 } | |
| 178 | |
| 179 final int getCachedRendererBackgroundColor() { | 103 final int getCachedRendererBackgroundColor() { |
| 180 assert isCachedRendererBackgroundColorValid(); | 104 assert isCachedRendererBackgroundColorValid(); |
| 181 return mCachedRendererBackgroundColor; | 105 return mCachedRendererBackgroundColor; |
| 182 } | 106 } |
| 183 | 107 |
| 184 final boolean isCachedRendererBackgroundColorValid() { | 108 final boolean isCachedRendererBackgroundColorValid() { |
| 185 return mCachedRendererBackgroundColor != INVALID_COLOR; | 109 return mCachedRendererBackgroundColor != INVALID_COLOR; |
| 186 } | 110 } |
| 187 | 111 |
| 112 final void onBackgroundColorChanged(int color) { |
| 113 // Avoid storing the sentinal INVALID_COLOR (note that both 0 and 1 are
both |
| 114 // fully transparent so this transpose makes no visible difference). |
| 115 mCachedRendererBackgroundColor = color == INVALID_COLOR ? 1 : color; |
| 116 } |
| 117 |
| 188 //--------------------------------------------------------------------------
------------------ | 118 //--------------------------------------------------------------------------
------------------ |
| 189 // WebView specific methods that map directly to WebViewClient /
WebChromeClient | 119 // WebView specific methods that map directly to WebViewClient /
WebChromeClient |
| 190 //--------------------------------------------------------------------------
------------------ | 120 //--------------------------------------------------------------------------
------------------ |
| 191 | 121 |
| 192 public static class FileChooserParams { | 122 public static class FileChooserParams { |
| 193 public int mode; | 123 public int mode; |
| 194 public String acceptTypes; | 124 public String acceptTypes; |
| 195 public String title; | 125 public String title; |
| 196 public String defaultFilename; | 126 public String defaultFilename; |
| 197 public boolean capture; | 127 public boolean capture; |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 291 public abstract void onFindResultReceived(int activeMatchOrdinal, int number
OfMatches, | 221 public abstract void onFindResultReceived(int activeMatchOrdinal, int number
OfMatches, |
| 292 boolean isDoneCounting); | 222 boolean isDoneCounting); |
| 293 | 223 |
| 294 /** | 224 /** |
| 295 * Called whenever there is a new content picture available. | 225 * Called whenever there is a new content picture available. |
| 296 * @param picture New picture. | 226 * @param picture New picture. |
| 297 */ | 227 */ |
| 298 public abstract void onNewPicture(Picture picture); | 228 public abstract void onNewPicture(Picture picture); |
| 299 | 229 |
| 300 } | 230 } |
| OLD | NEW |