Skip to content

Commit 3c90952

Browse files
author
Jonathan Dixon
committed
Refactor WebView to be a thin proxy class
Splits interface and implementation; all client calls are forwarded to an abstract WebViewProvider interface, and the existing implementation moved into the WebViewClassic implementor of this interface. Originally taken from a snapshot from the development branch, by: git diff HEAD 9a4c328a54cc05e5 | git apply - but then rebased to keep up to date with master Interdepends on webkit and Browser changes: https://android-git.corp.google.com/g/158979 https://android-git.corp.google.com/g/167911 Change-Id: I91403f32654ff308934e95c832d17b292a7d9b2e
1 parent 0dc0da6 commit 3c90952

32 files changed

+2006
-11326
lines changed

core/java/android/webkit/AccessibilityInjector.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,8 @@ class AccessibilityInjector {
7979
private static ArrayList<AccessibilityWebContentKeyBinding> sBindings =
8080
new ArrayList<AccessibilityWebContentKeyBinding>();
8181

82-
// handle to the WebView this injector is associated with.
83-
private final WebView mWebView;
82+
// handle to the WebViewClassic this injector is associated with.
83+
private final WebViewClassic mWebView;
8484

8585
// events scheduled for sending as soon as we receive the selected text
8686
private final Stack<AccessibilityEvent> mScheduledEventStack = new Stack<AccessibilityEvent>();
@@ -98,11 +98,11 @@ class AccessibilityInjector {
9898
private int mLastDirection;
9999

100100
/**
101-
* Creates a new injector associated with a given {@link WebView}.
101+
* Creates a new injector associated with a given {@link WebViewClassic}.
102102
*
103-
* @param webView The associated WebView.
103+
* @param webView The associated WebViewClassic.
104104
*/
105-
public AccessibilityInjector(WebView webView) {
105+
public AccessibilityInjector(WebViewClassic webView) {
106106
mWebView = webView;
107107
ensureWebContentKeyBindings();
108108
}
@@ -327,7 +327,7 @@ private AccessibilityEvent getPartialyPopulatedAccessibilityEvent() {
327327
AccessibilityEvent event = AccessibilityEvent.obtain(AccessibilityEvent.TYPE_VIEW_SELECTED);
328328
event.setClassName(mWebView.getClass().getName());
329329
event.setPackageName(mWebView.getContext().getPackageName());
330-
event.setEnabled(mWebView.isEnabled());
330+
event.setEnabled(mWebView.getWebView().isEnabled());
331331
return event;
332332
}
333333

core/java/android/webkit/BrowserFrame.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ class BrowserFrame extends Handler {
7070
private final static int MAX_OUTSTANDING_REQUESTS = 300;
7171

7272
private final CallbackProxy mCallbackProxy;
73-
private final WebSettings mSettings;
73+
private final WebSettingsClassic mSettings;
7474
private final Context mContext;
7575
private final WebViewDatabase mDatabase;
7676
private final WebViewCore mWebViewCore;
@@ -200,7 +200,7 @@ public void onLowMemory() {}
200200
* XXX: Called by WebCore thread.
201201
*/
202202
public BrowserFrame(Context context, WebViewCore w, CallbackProxy proxy,
203-
WebSettings settings, Map<String, Object> javascriptInterfaces) {
203+
WebSettingsClassic settings, Map<String, Object> javascriptInterfaces) {
204204

205205
Context appContext = context.getApplicationContext();
206206

core/java/android/webkit/CallbackProxy.java

Lines changed: 35 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ class CallbackProxy extends Handler {
6161
private volatile WebViewClient mWebViewClient;
6262
// Instance of WebChromeClient for handling all chrome functions.
6363
private volatile WebChromeClient mWebChromeClient;
64-
// Instance of WebView for handling UI requests.
65-
private final WebView mWebView;
64+
// Instance of WebViewClassic for handling UI requests.
65+
private final WebViewClassic mWebView;
6666
// Client registered callback listener for download events
6767
private volatile DownloadListener mDownloadListener;
6868
// Keep track of multiple progress updates.
@@ -148,7 +148,7 @@ public synchronized E getResult() {
148148
/**
149149
* Construct a new CallbackProxy.
150150
*/
151-
public CallbackProxy(Context context, WebView w) {
151+
public CallbackProxy(Context context, WebViewClassic w) {
152152
// Used to start a default activity.
153153
mContext = context;
154154
mWebView = w;
@@ -221,7 +221,7 @@ public boolean uiOverrideUrlLoading(String overrideUrl) {
221221
}
222222
boolean override = false;
223223
if (mWebViewClient != null) {
224-
override = mWebViewClient.shouldOverrideUrlLoading(mWebView,
224+
override = mWebViewClient.shouldOverrideUrlLoading(mWebView.getWebView(),
225225
overrideUrl);
226226
} else {
227227
Intent intent = new Intent(Intent.ACTION_VIEW,
@@ -248,7 +248,7 @@ public boolean uiOverrideUrlLoading(String overrideUrl) {
248248
*/
249249
public boolean uiOverrideKeyEvent(KeyEvent event) {
250250
if (mWebViewClient != null) {
251-
return mWebViewClient.shouldOverrideKeyEvent(mWebView, event);
251+
return mWebViewClient.shouldOverrideKeyEvent(mWebView.getWebView(), event);
252252
}
253253
return false;
254254
}
@@ -264,34 +264,35 @@ public void handleMessage(Message msg) {
264264
String startedUrl = msg.getData().getString("url");
265265
mWebView.onPageStarted(startedUrl);
266266
if (mWebViewClient != null) {
267-
mWebViewClient.onPageStarted(mWebView, startedUrl, (Bitmap) msg.obj);
267+
mWebViewClient.onPageStarted(mWebView.getWebView(), startedUrl,
268+
(Bitmap) msg.obj);
268269
}
269270
break;
270271

271272
case PAGE_FINISHED:
272273
String finishedUrl = (String) msg.obj;
273274
mWebView.onPageFinished(finishedUrl);
274275
if (mWebViewClient != null) {
275-
mWebViewClient.onPageFinished(mWebView, finishedUrl);
276+
mWebViewClient.onPageFinished(mWebView.getWebView(), finishedUrl);
276277
}
277278
break;
278279

279280
case RECEIVED_ICON:
280281
if (mWebChromeClient != null) {
281-
mWebChromeClient.onReceivedIcon(mWebView, (Bitmap) msg.obj);
282+
mWebChromeClient.onReceivedIcon(mWebView.getWebView(), (Bitmap) msg.obj);
282283
}
283284
break;
284285

285286
case RECEIVED_TOUCH_ICON_URL:
286287
if (mWebChromeClient != null) {
287-
mWebChromeClient.onReceivedTouchIconUrl(mWebView,
288+
mWebChromeClient.onReceivedTouchIconUrl(mWebView.getWebView(),
288289
(String) msg.obj, msg.arg1 == 1);
289290
}
290291
break;
291292

292293
case RECEIVED_TITLE:
293294
if (mWebChromeClient != null) {
294-
mWebChromeClient.onReceivedTitle(mWebView,
295+
mWebChromeClient.onReceivedTitle(mWebView.getWebView(),
295296
(String) msg.obj);
296297
}
297298
break;
@@ -301,7 +302,7 @@ public void handleMessage(Message msg) {
301302
int reasonCode = msg.arg1;
302303
final String description = msg.getData().getString("description");
303304
final String failUrl = msg.getData().getString("failingUrl");
304-
mWebViewClient.onReceivedError(mWebView, reasonCode,
305+
mWebViewClient.onReceivedError(mWebView.getWebView(), reasonCode,
305306
description, failUrl);
306307
}
307308
break;
@@ -312,7 +313,7 @@ public void handleMessage(Message msg) {
312313
Message dontResend =
313314
(Message) msg.getData().getParcelable("dontResend");
314315
if (mWebViewClient != null) {
315-
mWebViewClient.onFormResubmission(mWebView, dontResend,
316+
mWebViewClient.onFormResubmission(mWebView.getWebView(), dontResend,
316317
resend);
317318
} else {
318319
dontResend.sendToTarget();
@@ -335,7 +336,7 @@ public void handleMessage(Message msg) {
335336
HttpAuthHandler handler = (HttpAuthHandler) msg.obj;
336337
String host = msg.getData().getString("host");
337338
String realm = msg.getData().getString("realm");
338-
mWebViewClient.onReceivedHttpAuthRequest(mWebView, handler,
339+
mWebViewClient.onReceivedHttpAuthRequest(mWebView.getWebView(), handler,
339340
host, realm);
340341
}
341342
break;
@@ -344,15 +345,15 @@ public void handleMessage(Message msg) {
344345
if (mWebViewClient != null) {
345346
HashMap<String, Object> map =
346347
(HashMap<String, Object>) msg.obj;
347-
mWebViewClient.onReceivedSslError(mWebView,
348+
mWebViewClient.onReceivedSslError(mWebView.getWebView(),
348349
(SslErrorHandler) map.get("handler"),
349350
(SslError) map.get("error"));
350351
}
351352
break;
352353

353354
case PROCEEDED_AFTER_SSL_ERROR:
354355
if (mWebViewClient != null) {
355-
mWebViewClient.onProceededAfterSslError(mWebView,
356+
mWebViewClient.onProceededAfterSslError(mWebView.getWebView(),
356357
(SslError) msg.obj);
357358
}
358359
break;
@@ -361,7 +362,7 @@ public void handleMessage(Message msg) {
361362
if (mWebViewClient != null) {
362363
HashMap<String, Object> map =
363364
(HashMap<String, Object>) msg.obj;
364-
mWebViewClient.onReceivedClientCertRequest(mWebView,
365+
mWebViewClient.onReceivedClientCertRequest(mWebView.getWebView(),
365366
(ClientCertRequestHandler) map.get("handler"),
366367
(String) map.get("host_and_port"));
367368
}
@@ -373,7 +374,7 @@ public void handleMessage(Message msg) {
373374
// changed.
374375
synchronized (this) {
375376
if (mWebChromeClient != null) {
376-
mWebChromeClient.onProgressChanged(mWebView,
377+
mWebChromeClient.onProgressChanged(mWebView.getWebView(),
377378
mLatestProgress);
378379
}
379380
mProgressUpdatePending = false;
@@ -382,14 +383,14 @@ public void handleMessage(Message msg) {
382383

383384
case UPDATE_VISITED:
384385
if (mWebViewClient != null) {
385-
mWebViewClient.doUpdateVisitedHistory(mWebView,
386+
mWebViewClient.doUpdateVisitedHistory(mWebView.getWebView(),
386387
(String) msg.obj, msg.arg1 != 0);
387388
}
388389
break;
389390

390391
case LOAD_RESOURCE:
391392
if (mWebViewClient != null) {
392-
mWebViewClient.onLoadResource(mWebView, (String) msg.obj);
393+
mWebViewClient.onLoadResource(mWebView.getWebView(), (String) msg.obj);
393394
}
394395
break;
395396

@@ -409,7 +410,7 @@ public void handleMessage(Message msg) {
409410

410411
case CREATE_WINDOW:
411412
if (mWebChromeClient != null) {
412-
if (!mWebChromeClient.onCreateWindow(mWebView,
413+
if (!mWebChromeClient.onCreateWindow(mWebView.getWebView(),
413414
msg.arg1 == 1, msg.arg2 == 1,
414415
(Message) msg.obj)) {
415416
synchronized (this) {
@@ -422,13 +423,13 @@ public void handleMessage(Message msg) {
422423

423424
case REQUEST_FOCUS:
424425
if (mWebChromeClient != null) {
425-
mWebChromeClient.onRequestFocus(mWebView);
426+
mWebChromeClient.onRequestFocus(mWebView.getWebView());
426427
}
427428
break;
428429

429430
case CLOSE_WINDOW:
430431
if (mWebChromeClient != null) {
431-
mWebChromeClient.onCloseWindow((WebView) msg.obj);
432+
mWebChromeClient.onCloseWindow(((WebViewClassic) msg.obj).getWebView());
432433
}
433434
break;
434435

@@ -449,7 +450,7 @@ public void handleMessage(Message msg) {
449450

450451
case ASYNC_KEYEVENTS:
451452
if (mWebViewClient != null) {
452-
mWebViewClient.onUnhandledKeyEvent(mWebView,
453+
mWebViewClient.onUnhandledKeyEvent(mWebView.getWebView(),
453454
(KeyEvent) msg.obj);
454455
}
455456
break;
@@ -516,7 +517,7 @@ public void handleMessage(Message msg) {
516517
final JsResult res = (JsResult) msg.obj;
517518
String message = msg.getData().getString("message");
518519
String url = msg.getData().getString("url");
519-
if (!mWebChromeClient.onJsAlert(mWebView, url, message,
520+
if (!mWebChromeClient.onJsAlert(mWebView.getWebView(), url, message,
520521
res)) {
521522
if (!canShowAlertDialog()) {
522523
res.cancel();
@@ -552,7 +553,7 @@ public void onCancel(
552553
final JsResult res = (JsResult) msg.obj;
553554
String message = msg.getData().getString("message");
554555
String url = msg.getData().getString("url");
555-
if (!mWebChromeClient.onJsConfirm(mWebView, url, message,
556+
if (!mWebChromeClient.onJsConfirm(mWebView.getWebView(), url, message,
556557
res)) {
557558
if (!canShowAlertDialog()) {
558559
res.cancel();
@@ -597,7 +598,7 @@ public void onCancel(
597598
String message = msg.getData().getString("message");
598599
String defaultVal = msg.getData().getString("default");
599600
String url = msg.getData().getString("url");
600-
if (!mWebChromeClient.onJsPrompt(mWebView, url, message,
601+
if (!mWebChromeClient.onJsPrompt(mWebView.getWebView(), url, message,
601602
defaultVal, res)) {
602603
if (!canShowAlertDialog()) {
603604
res.cancel();
@@ -653,7 +654,7 @@ public void onCancel(
653654
final JsResult res = (JsResult) msg.obj;
654655
String message = msg.getData().getString("message");
655656
String url = msg.getData().getString("url");
656-
if (!mWebChromeClient.onJsBeforeUnload(mWebView, url,
657+
if (!mWebChromeClient.onJsBeforeUnload(mWebView.getWebView(), url,
657658
message, res)) {
658659
if (!canShowAlertDialog()) {
659660
res.cancel();
@@ -710,7 +711,7 @@ public void onClick(
710711

711712
case SCALE_CHANGED:
712713
if (mWebViewClient != null) {
713-
mWebViewClient.onScaleChanged(mWebView, msg.getData()
714+
mWebViewClient.onScaleChanged(mWebView.getWebView(), msg.getData()
714715
.getFloat("old"), msg.getData().getFloat("new"));
715716
}
716717
break;
@@ -817,7 +818,7 @@ public void onClick(
817818
String realm = msg.getData().getString("realm");
818819
String account = msg.getData().getString("account");
819820
String args = msg.getData().getString("args");
820-
mWebViewClient.onReceivedLoginRequest(mWebView, realm,
821+
mWebViewClient.onReceivedLoginRequest(mWebView.getWebView(), realm,
821822
account, args);
822823
}
823824
break;
@@ -1074,7 +1075,7 @@ WebResourceResponse shouldInterceptRequest(String url) {
10741075
}
10751076
// Note: This method does _not_ send a message.
10761077
WebResourceResponse r =
1077-
mWebViewClient.shouldInterceptRequest(mWebView, url);
1078+
mWebViewClient.shouldInterceptRequest(mWebView.getWebView(), url);
10781079
if (r == null) {
10791080
sendMessage(obtainMessage(LOAD_RESOURCE, url));
10801081
}
@@ -1219,7 +1220,8 @@ public BrowserFrame createWindow(boolean dialog, boolean userGesture) {
12191220
return null;
12201221
}
12211222

1222-
WebView.WebViewTransport transport = mWebView.new WebViewTransport();
1223+
WebView.WebViewTransport transport =
1224+
mWebView.getWebView().new WebViewTransport();
12231225
final Message msg = obtainMessage(NOTIFY);
12241226
msg.obj = transport;
12251227
synchronized (this) {
@@ -1234,7 +1236,7 @@ public BrowserFrame createWindow(boolean dialog, boolean userGesture) {
12341236
}
12351237
}
12361238

1237-
WebView w = transport.getWebView();
1239+
WebViewClassic w = WebViewClassic.fromWebView(transport.getWebView());
12381240
if (w != null) {
12391241
WebViewCore core = w.getWebViewCore();
12401242
// If WebView.destroy() has been called, core may be null. Skip
@@ -1257,7 +1259,7 @@ public void onRequestFocus() {
12571259
sendEmptyMessage(REQUEST_FOCUS);
12581260
}
12591261

1260-
public void onCloseWindow(WebView window) {
1262+
public void onCloseWindow(WebViewClassic window) {
12611263
// Do an unsynchronized quick check to avoid posting if no callback has
12621264
// been set.
12631265
if (mWebChromeClient == null) {

core/java/android/webkit/FindActionModeCallback.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class FindActionModeCallback implements ActionMode.Callback, TextWatcher,
3838
private View mCustomView;
3939
private EditText mEditText;
4040
private TextView mMatches;
41-
private WebView mWebView;
41+
private WebViewClassic mWebView;
4242
private InputMethodManager mInput;
4343
private Resources mResources;
4444
private boolean mMatchesFound;
@@ -90,7 +90,7 @@ void setText(String text) {
9090
* Set the WebView to search. Must be non null, and set before calling
9191
* startActionMode.
9292
*/
93-
void setWebView(WebView webView) {
93+
void setWebView(WebViewClassic webView) {
9494
if (null == webView) {
9595
throw new AssertionError("WebView supplied to "
9696
+ "FindActionModeCallback cannot be null");
@@ -218,7 +218,7 @@ public boolean onCreateActionMode(ActionMode mode, Menu menu) {
218218
public void onDestroyActionMode(ActionMode mode) {
219219
mActionMode = null;
220220
mWebView.notifyFindDialogDismissed();
221-
mInput.hideSoftInputFromWindow(mWebView.getWindowToken(), 0);
221+
mInput.hideSoftInputFromWindow(mWebView.getWebView().getWindowToken(), 0);
222222
}
223223

224224
@Override
@@ -232,7 +232,7 @@ public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
232232
throw new AssertionError(
233233
"No WebView for FindActionModeCallback::onActionItemClicked");
234234
}
235-
mInput.hideSoftInputFromWindow(mWebView.getWindowToken(), 0);
235+
mInput.hideSoftInputFromWindow(mWebView.getWebView().getWindowToken(), 0);
236236
switch(item.getItemId()) {
237237
case com.android.internal.R.id.find_prev:
238238
findNext(false);

core/java/android/webkit/GeolocationService.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import android.location.LocationProvider;
2525
import android.os.Bundle;
2626
import android.util.Log;
27-
import android.webkit.WebView;
2827
import android.webkit.WebViewCore;
2928

3029

core/java/android/webkit/HTML5Audio.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public void run() {
9292
private class IsPrivateBrowsingEnabledGetter {
9393
private boolean mIsReady;
9494
private boolean mIsPrivateBrowsingEnabled;
95-
IsPrivateBrowsingEnabledGetter(Looper uiThreadLooper, final WebView webView) {
95+
IsPrivateBrowsingEnabledGetter(Looper uiThreadLooper, final WebViewClassic webView) {
9696
new Handler(uiThreadLooper).post(new Runnable() {
9797
@Override
9898
public void run() {

core/java/android/webkit/HTML5VideoFullScreen.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ public void onCustomViewHidden() {
236236

237237
@Override
238238
public void enterFullScreenVideoState(int layerId,
239-
HTML5VideoViewProxy proxy, WebView webView) {
239+
HTML5VideoViewProxy proxy, WebViewClassic webView) {
240240
mFullScreenMode = FULLSCREEN_SURFACECREATING;
241241
mCurrentBufferPercentage = 0;
242242
mPlayer.setOnBufferingUpdateListener(mBufferingUpdateListener);

0 commit comments

Comments
 (0)