diff options
| author | Jonathan Dixon <joth@google.com> | 2012-02-28 18:45:06 +0000 |
|---|---|---|
| committer | Jonathan Dixon <joth@google.com> | 2012-03-02 11:17:47 +0000 |
| commit | 3c90952036a5ff7ddb2946c643f1a0bf1c31d53a (patch) | |
| tree | 974ef2a94c60a2c72b8fbd804613792480a9c3e5 /tests | |
| parent | 0dc0da67d9775b2364a38d015e0610492708a02e (diff) | |
| download | frameworks_base-3c90952036a5ff7ddb2946c643f1a0bf1c31d53a.zip frameworks_base-3c90952036a5ff7ddb2946c643f1a0bf1c31d53a.tar.gz frameworks_base-3c90952036a5ff7ddb2946c643f1a0bf1c31d53a.tar.bz2 | |
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
Diffstat (limited to 'tests')
4 files changed, 62 insertions, 46 deletions
diff --git a/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java b/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java index 83c9c3d..856ebcc 100644 --- a/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java +++ b/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java @@ -45,8 +45,10 @@ import android.webkit.JsResult; import android.webkit.SslErrorHandler; import android.webkit.WebChromeClient; import android.webkit.WebSettings; +import android.webkit.WebSettingsClassic; import android.webkit.WebStorage; import android.webkit.WebView; +import android.webkit.WebViewClassic; import android.webkit.WebViewClient; import android.widget.LinearLayout; @@ -112,10 +114,10 @@ public class TestShellActivity extends Activity implements LayoutTestController case DUMP_AS_TEXT: callback.arg1 = mDumpTopFrameAsText ? 1 : 0; callback.arg2 = mDumpChildFramesAsText ? 1 : 0; - mWebView.documentAsText(callback); + mWebViewClassic.documentAsText(callback); break; case EXT_REPR: - mWebView.externalRepresentation(callback); + mWebViewClassic.externalRepresentation(callback); break; default: finished(); @@ -144,6 +146,7 @@ public class TestShellActivity extends Activity implements LayoutTestController CookieManager.setAcceptFileSchemeCookies(true); mWebView = new WebView(this); + mWebViewClassic = WebViewClassic.fromWebView(mWebView); mEventSender = new WebViewEventSender(mWebView); mCallbackProxy = new CallbackProxy(mEventSender, this); @@ -158,7 +161,7 @@ public class TestShellActivity extends Activity implements LayoutTestController // Expose window.gc function to JavaScript. JSC build exposes // this function by default, but V8 requires the flag to turn it on. // WebView::setJsFlags is noop in JSC build. - mWebView.setJsFlags("--expose_gc"); + mWebViewClassic.setJsFlags("--expose_gc"); mHandler = new AsyncHandler(); @@ -168,7 +171,7 @@ public class TestShellActivity extends Activity implements LayoutTestController } // This is asynchronous, but it gets processed by WebCore before it starts loading pages. - mWebView.useMockDeviceOrientation(); + mWebViewClassic.useMockDeviceOrientation(); } @Override @@ -290,6 +293,7 @@ public class TestShellActivity extends Activity implements LayoutTestController super.onDestroy(); mWebView.destroy(); mWebView = null; + mWebViewClassic = null; } @Override @@ -531,8 +535,8 @@ public class TestShellActivity extends Activity implements LayoutTestController public void setMockDeviceOrientation(boolean canProvideAlpha, double alpha, boolean canProvideBeta, double beta, boolean canProvideGamma, double gamma) { - mWebView.setMockDeviceOrientation(canProvideAlpha, alpha, canProvideBeta, beta, - canProvideGamma, gamma); + WebViewClassic.fromWebView(mWebView).setMockDeviceOrientation(canProvideAlpha, alpha, + canProvideBeta, beta, canProvideGamma, gamma); } public void overridePreference(String key, boolean value) { @@ -541,10 +545,10 @@ public class TestShellActivity extends Activity implements LayoutTestController // WebView for the main frame. EventSender suffers from the same // problem. if (WEBKIT_OFFLINE_WEB_APPLICATION_CACHE_ENABLED.equals(key)) { - mWebView.getSettings().setAppCacheEnabled(value); + mWebViewClassic.getSettings().setAppCacheEnabled(value); } else if (WEBKIT_USES_PAGE_CACHE_PREFERENCE_KEY.equals(key)) { // Cache the maximum possible number of pages. - mWebView.getSettings().setPageCacheCapacity(Integer.MAX_VALUE); + mWebViewClassic.getSettings().setPageCacheCapacity(Integer.MAX_VALUE); } else { Log.w(LOGTAG, "LayoutTestController.overridePreference(): " + "Unsupported preference '" + key + "'"); @@ -552,7 +556,7 @@ public class TestShellActivity extends Activity implements LayoutTestController } public void setXSSAuditorEnabled (boolean flag) { - mWebView.getSettings().setXSSAuditorEnabled(flag); + mWebViewClassic.getSettings().setXSSAuditorEnabled(flag); } private final WebViewClient mViewClient = new WebViewClient(){ @@ -855,7 +859,7 @@ public class TestShellActivity extends Activity implements LayoutTestController Bitmap bitmap = Bitmap.createBitmap(view.getContentWidth(), view.getContentHeight(), Config.ARGB_8888); canvas.setBitmap(bitmap); - view.drawPage(canvas); + WebViewClassic.fromWebView(view).drawPage(canvas); try { FileOutputStream fos = new FileOutputStream(fileName); if(!bitmap.compress(CompressFormat.PNG, 90, fos)) { @@ -885,11 +889,11 @@ public class TestShellActivity extends Activity implements LayoutTestController // single event rather than a stream of events (like what would generally happen in // a real use of touch events in a WebView) and so if the WebView drops the event, // the test will fail as the test expects one callback for every touch it synthesizes. - webview.setTouchInterval(-1); + WebViewClassic.fromWebView(webview).setTouchInterval(-1); } public void setDefaultWebSettings(WebView webview) { - WebSettings settings = webview.getSettings(); + WebSettingsClassic settings = WebViewClassic.fromWebView(webview).getSettings(); settings.setAppCacheEnabled(true); settings.setAppCachePath(getApplicationContext().getCacheDir().getPath()); settings.setAppCacheMaxSize(Long.MAX_VALUE); @@ -906,6 +910,7 @@ public class TestShellActivity extends Activity implements LayoutTestController settings.setProperty("use_minimal_memory", "false"); } + private WebViewClassic mWebViewClassic; private WebView mWebView; private WebViewEventSender mEventSender; private AsyncHandler mHandler; diff --git a/tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestsExecutor.java b/tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestsExecutor.java index f59da37..fc22472 100644 --- a/tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestsExecutor.java +++ b/tests/DumpRenderTree2/src/com/android/dumprendertree2/LayoutTestsExecutor.java @@ -41,9 +41,11 @@ import android.webkit.JsResult; import android.webkit.SslErrorHandler; import android.webkit.WebChromeClient; import android.webkit.WebSettings; +import android.webkit.WebSettingsClassic; import android.webkit.WebStorage; import android.webkit.WebStorage.QuotaUpdater; import android.webkit.WebView; +import android.webkit.WebViewClassic; import android.webkit.WebViewClient; import java.lang.Thread.UncaughtExceptionHandler; @@ -369,11 +371,12 @@ public class LayoutTestsExecutor extends Activity { * a real use of touch events in a WebView) and so if the WebView drops the event, * the test will fail as the test expects one callback for every touch it synthesizes. */ - webView.setTouchInterval(-1); + WebViewClassic webViewClassic = WebViewClassic.fromWebView(webView); + webViewClassic.setTouchInterval(-1); - webView.clearCache(true); + webViewClassic.clearCache(true); - WebSettings webViewSettings = webView.getSettings(); + WebSettingsClassic webViewSettings = webViewClassic.getSettings(); webViewSettings.setAppCacheEnabled(true); webViewSettings.setAppCachePath(getApplicationContext().getCacheDir().getPath()); // Use of larger values causes unexplained AppCache database corruption. @@ -391,7 +394,7 @@ public class LayoutTestsExecutor extends Activity { webViewSettings.setPageCacheCapacity(0); // This is asynchronous, but it gets processed by WebCore before it starts loading pages. - mCurrentWebView.useMockDeviceOrientation(); + WebViewClassic.fromWebView(mCurrentWebView).useMockDeviceOrientation(); // Must do this after setting the AppCache path. WebStorage.getInstance().deleteAllData(); @@ -625,10 +628,12 @@ public class LayoutTestsExecutor extends Activity { String key = msg.getData().getString("key"); boolean value = msg.getData().getBoolean("value"); if (WEBKIT_OFFLINE_WEB_APPLICATION_CACHE_ENABLED.equals(key)) { - mCurrentWebView.getSettings().setAppCacheEnabled(value); + WebViewClassic.fromWebView(mCurrentWebView).getSettings(). + setAppCacheEnabled(value); } else if (WEBKIT_USES_PAGE_CACHE_PREFERENCE_KEY.equals(key)) { // Cache the maximum possible number of pages. - mCurrentWebView.getSettings().setPageCacheCapacity(Integer.MAX_VALUE); + WebViewClassic.fromWebView(mCurrentWebView).getSettings(). + setPageCacheCapacity(Integer.MAX_VALUE); } else { Log.w(LOG_TAG, "LayoutTestController.overridePreference(): " + "Unsupported preference '" + key + "'"); @@ -656,7 +661,8 @@ public class LayoutTestsExecutor extends Activity { break; case MSG_SET_XSS_AUDITOR_ENABLED: - mCurrentWebView.getSettings().setXSSAuditorEnabled(msg.arg1 == 1); + WebViewClassic.fromWebView(mCurrentWebView).getSettings(). + setXSSAuditorEnabled(msg.arg1 == 1); break; case MSG_WAIT_UNTIL_DONE: @@ -728,8 +734,8 @@ public class LayoutTestsExecutor extends Activity { Log.i(LOG_TAG, mCurrentTestRelativePath + ": setMockDeviceOrientation(" + canProvideAlpha + ", " + alpha + ", " + canProvideBeta + ", " + beta + ", " + canProvideGamma + ", " + gamma + ")"); - mCurrentWebView.setMockDeviceOrientation(canProvideAlpha, alpha, canProvideBeta, beta, - canProvideGamma, gamma); + WebViewClassic.fromWebView(mCurrentWebView).setMockDeviceOrientation(canProvideAlpha, + alpha, canProvideBeta, beta, canProvideGamma, gamma); } public void setXSSAuditorEnabled(boolean flag) { diff --git a/tests/DumpRenderTree2/src/com/android/dumprendertree2/TextResult.java b/tests/DumpRenderTree2/src/com/android/dumprendertree2/TextResult.java index 3d2b98b..fd1c0ad 100644 --- a/tests/DumpRenderTree2/src/com/android/dumprendertree2/TextResult.java +++ b/tests/DumpRenderTree2/src/com/android/dumprendertree2/TextResult.java @@ -20,6 +20,7 @@ import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.webkit.WebView; +import android.webkit.WebViewClassic; import name.fraser.neil.plaintext.diff_match_patch; @@ -233,7 +234,7 @@ public class TextResult extends AbstractResult { */ msg.arg1 = 1; msg.arg2 = mDumpChildFramesAsText ? 1 : 0; - webview.documentAsText(msg); + WebViewClassic.fromWebView(webview).documentAsText(msg); } @Override diff --git a/tests/TileBenchmark/src/com/test/tilebenchmark/ProfiledWebView.java b/tests/TileBenchmark/src/com/test/tilebenchmark/ProfiledWebView.java index a38ac25..87baf76 100644 --- a/tests/TileBenchmark/src/com/test/tilebenchmark/ProfiledWebView.java +++ b/tests/TileBenchmark/src/com/test/tilebenchmark/ProfiledWebView.java @@ -20,8 +20,9 @@ import android.content.Context; import android.os.CountDownTimer; import android.util.AttributeSet; import android.util.Log; -import android.webkit.WebSettings; +import android.webkit.WebSettingsClassic; import android.webkit.WebView; +import android.webkit.WebViewClassic; import android.widget.Toast; import java.util.ArrayList; @@ -29,7 +30,7 @@ import java.util.ArrayList; import com.test.tilebenchmark.ProfileActivity.ProfileCallback; import com.test.tilebenchmark.RunData.TileData; -public class ProfiledWebView extends WebView { +public class ProfiledWebView extends WebView implements WebViewClassic.PageSwapDelegate { private static final String LOGTAG = "ProfiledWebView"; private int mSpeed; @@ -80,7 +81,7 @@ public class ProfiledWebView extends WebView { } public void init(Context c) { - WebSettings settings = getSettings(); + WebSettingsClassic settings = getWebViewClassic().getSettings(); settings.setJavaScriptEnabled(true); settings.setSupportZoom(true); settings.setEnableSmoothTransition(true); @@ -118,7 +119,7 @@ public class ProfiledWebView extends WebView { mCallback = callback; mIsTesting = false; mIsScrolling = false; - WebSettings settings = getSettings(); + WebSettingsClassic settings = getWebViewClassic().getSettings(); settings.setProperty("tree_updates", "0"); @@ -134,7 +135,7 @@ public class ProfiledWebView extends WebView { // invalidate all content, and kick off redraw Log.d("ProfiledWebView", "kicking off test with callback registration, and tile discard..."); - discardAllTextures(); + getWebViewClassic().discardAllTextures(); invalidate(); mIsScrolling = true; mContentInvalMillis = System.currentTimeMillis(); @@ -142,30 +143,29 @@ public class ProfiledWebView extends WebView { }.start(); } else { mIsTesting = true; - tileProfilingStart(); + getWebViewClassic().tileProfilingStart(); } } /* * Called after the manual contentInvalidateAll, after the tiles have all * been redrawn. + * From PageSwapDelegate. */ @Override - protected void pageSwapCallback(boolean startAnim) { - super.pageSwapCallback(startAnim); - + public void onPageSwapOccurred(boolean startAnim) { if (!mIsTesting && mIsScrolling) { // kick off testing mContentInvalMillis = System.currentTimeMillis() - mContentInvalMillis; Log.d("ProfiledWebView", "REDRAW TOOK " + mContentInvalMillis + "millis"); mIsTesting = true; invalidate(); // ensure a redraw so that auto-scrolling can occur - tileProfilingStart(); + getWebViewClassic().tileProfilingStart(); } } private double animFramerate() { - WebSettings settings = getSettings(); + WebSettingsClassic settings = getWebViewClassic().getSettings(); String updatesString = settings.getProperty("tree_updates"); int updates = (updatesString == null) ? -1 : Integer.parseInt(updatesString); @@ -180,7 +180,7 @@ public class ProfiledWebView extends WebView { } public void setDoubleBuffering(boolean useDoubleBuffering) { - WebSettings settings = getSettings(); + WebSettingsClassic settings = getWebViewClassic().getSettings(); settings.setProperty("use_double_buffering", useDoubleBuffering ? "true" : "false"); } @@ -188,15 +188,15 @@ public class ProfiledWebView extends WebView { * Called once the page has stopped scrolling */ public void stopScrollTest() { - tileProfilingStop(); + getWebViewClassic().tileProfilingStop(); mIsTesting = false; if (mCallback == null) { - tileProfilingClear(); + getWebViewClassic().tileProfilingClear(); return; } - RunData data = new RunData(super.tileProfilingNumFrames()); + RunData data = new RunData(getWebViewClassic().tileProfilingNumFrames()); // record the time spent (before scrolling) rendering the page data.singleStats.put(getResources().getString(R.string.render_millis), (double)mContentInvalMillis); @@ -209,24 +209,24 @@ public class ProfiledWebView extends WebView { for (int frame = 0; frame < data.frames.length; frame++) { data.frames[frame] = new TileData[ - tileProfilingNumTilesInFrame(frame)]; + getWebViewClassic().tileProfilingNumTilesInFrame(frame)]; for (int tile = 0; tile < data.frames[frame].length; tile++) { - int left = tileProfilingGetInt(frame, tile, "left"); - int top = tileProfilingGetInt(frame, tile, "top"); - int right = tileProfilingGetInt(frame, tile, "right"); - int bottom = tileProfilingGetInt(frame, tile, "bottom"); + int left = getWebViewClassic().tileProfilingGetInt(frame, tile, "left"); + int top = getWebViewClassic().tileProfilingGetInt(frame, tile, "top"); + int right = getWebViewClassic().tileProfilingGetInt(frame, tile, "right"); + int bottom = getWebViewClassic().tileProfilingGetInt(frame, tile, "bottom"); - boolean isReady = super.tileProfilingGetInt( + boolean isReady = getWebViewClassic().tileProfilingGetInt( frame, tile, "isReady") == 1; - int level = tileProfilingGetInt(frame, tile, "level"); + int level = getWebViewClassic().tileProfilingGetInt(frame, tile, "level"); - float scale = tileProfilingGetFloat(frame, tile, "scale"); + float scale = getWebViewClassic().tileProfilingGetFloat(frame, tile, "scale"); data.frames[frame][tile] = data.new TileData(left, top, right, bottom, isReady, level, scale); } } - tileProfilingClear(); + getWebViewClassic().tileProfilingClear(); mCallback.profileCallback(data); } @@ -244,4 +244,8 @@ public class ProfiledWebView extends WebView { public void setAutoScrollSpeed(int speedInt) { mSpeed = speedInt; } + + public WebViewClassic getWebViewClassic() { + return WebViewClassic.fromWebView(this); + } } |
