diff options
author | Jonathan Dixon <joth@google.com> | 2013-08-25 19:35:27 -0700 |
---|---|---|
committer | Jonathan Dixon <joth@google.com> | 2013-08-25 20:07:02 -0700 |
commit | f9e1705d4012706664a2bdf63a50b8a784b833dd (patch) | |
tree | 9cf92ff971c6cd8124391da966f208db2f588baa /tests/src | |
parent | 56b5495f6761d5800918682a5b6bdd282019f14b (diff) | |
download | packages_apps_Browser-f9e1705d4012706664a2bdf63a50b8a784b833dd.tar.gz packages_apps_Browser-f9e1705d4012706664a2bdf63a50b8a784b833dd.tar.bz2 packages_apps_Browser-f9e1705d4012706664a2bdf63a50b8a784b833dd.zip |
De-classicify Android Browser part 2
Bug: 10427705
Allows Browser to compile even when WebViewClassic is no longer in
frameworks/base. The deleted functionality was already disabled at
runtime when using non-classic webview.
Change-Id: I21b58ec52ac059c699b49a2dd80008d9a9e6791a
Diffstat (limited to 'tests/src')
-rw-r--r-- | tests/src/com/android/browser/PopularUrlsTest.java | 583 | ||||
-rw-r--r-- | tests/src/com/android/browser/TestWebViewClient.java | 15 |
2 files changed, 1 insertions, 597 deletions
diff --git a/tests/src/com/android/browser/PopularUrlsTest.java b/tests/src/com/android/browser/PopularUrlsTest.java deleted file mode 100644 index 566d74b87..000000000 --- a/tests/src/com/android/browser/PopularUrlsTest.java +++ /dev/null @@ -1,583 +0,0 @@ -/* - * Copyright (C) 2010 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.browser; - -import android.app.Instrumentation; -import android.content.Intent; -import android.net.Uri; -import android.net.http.SslError; -import android.os.Environment; -import android.provider.Browser; -import android.test.ActivityInstrumentationTestCase2; -import android.text.TextUtils; -import android.util.Log; -import android.webkit.ClientCertRequestHandler; -import android.webkit.DownloadListener; -import android.webkit.HttpAuthHandler; -import android.webkit.JsPromptResult; -import android.webkit.JsResult; -import android.webkit.SslErrorHandler; -import android.webkit.WebView; -import android.webkit.WebViewClassic; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; - -/** - * - * Iterates over a list of URLs from a file and outputs the time to load each. - */ -public class PopularUrlsTest extends ActivityInstrumentationTestCase2<BrowserActivity> { - - private final static String TAG = "PopularUrlsTest"; - private final static String newLine = System.getProperty("line.separator"); - private final static String sInputFile = "popular_urls.txt"; - private final static String sOutputFile = "test_output.txt"; - private final static String sStatusFile = "test_status.txt"; - private final static File sExternalStorage = Environment.getExternalStorageDirectory(); - - private final static int PERF_LOOPCOUNT = 10; - private final static int STABILITY_LOOPCOUNT = 1; - private final static int PAGE_LOAD_TIMEOUT = 120000; // 2 minutes - - private BrowserActivity mActivity = null; - private Controller mController = null; - private Instrumentation mInst = null; - private CountDownLatch mLatch = new CountDownLatch(1); - private RunStatus mStatus; - private boolean pageLoadFinishCalled, pageProgressFull; - - public PopularUrlsTest() { - super(BrowserActivity.class); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - - Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("about:blank")); - i.putExtra(Controller.NO_CRASH_RECOVERY, true); - setActivityIntent(i); - mActivity = getActivity(); - mController = mActivity.getController(); - mInst = getInstrumentation(); - mInst.waitForIdleSync(); - - mStatus = RunStatus.load(); - } - - @Override - protected void tearDown() throws Exception { - if (mStatus != null) { - mStatus.cleanUp(); - } - - super.tearDown(); - } - - BufferedReader getInputStream() throws FileNotFoundException { - return getInputStream(sInputFile); - } - - BufferedReader getInputStream(String inputFile) throws FileNotFoundException { - FileReader fileReader = new FileReader(new File(sExternalStorage, inputFile)); - BufferedReader bufferedReader = new BufferedReader(fileReader); - - return bufferedReader; - } - - OutputStreamWriter getOutputStream() throws IOException { - return getOutputStream(sOutputFile); - } - - OutputStreamWriter getOutputStream(String outputFile) throws IOException { - return new FileWriter(new File(sExternalStorage, outputFile), mStatus.getIsRecovery()); - } - - /** - * Gets the browser ready for testing by starting the application - * and wrapping the WebView's helper clients. - */ - void setUpBrowser() { - mInst.runOnMainSync(new Runnable() { - @Override - public void run() { - setupBrowserInternal(); - } - }); - } - - void setupBrowserInternal() { - Tab tab = mController.getTabControl().getCurrentTab(); - WebView webView = tab.getWebView(); - - webView.setWebChromeClient(new TestWebChromeClient( - WebViewClassic.fromWebView(webView).getWebChromeClient()) { - - @Override - public void onProgressChanged(WebView view, int newProgress) { - super.onProgressChanged(view, newProgress); - if (newProgress >= 100) { - if (!pageProgressFull) { - // void duplicate calls - pageProgressFull = true; - if (pageLoadFinishCalled) { - //reset latch and move forward only if both indicators are true - resetLatch(); - } - } - } - } - - /** - * Dismisses and logs Javascript alerts. - */ - @Override - public boolean onJsAlert(WebView view, String url, String message, - JsResult result) { - String logMsg = String.format("JS Alert '%s' received from %s", message, url); - Log.w(TAG, logMsg); - result.confirm(); - - return true; - } - - /** - * Confirms and logs Javascript alerts. - */ - @Override - public boolean onJsConfirm(WebView view, String url, String message, - JsResult result) { - String logMsg = String.format("JS Confirmation '%s' received from %s", - message, url); - Log.w(TAG, logMsg); - result.confirm(); - - return true; - } - - /** - * Confirms and logs Javascript alerts, providing the default value. - */ - @Override - public boolean onJsPrompt(WebView view, String url, String message, - String defaultValue, JsPromptResult result) { - String logMsg = String.format("JS Prompt '%s' received from %s; " + - "Giving default value '%s'", message, url, defaultValue); - Log.w(TAG, logMsg); - result.confirm(defaultValue); - - return true; - } - - /* - * Skip the unload confirmation - */ - @Override - public boolean onJsBeforeUnload( - WebView view, String url, String message, JsResult result) { - result.confirm(); - return true; - } - }); - - webView.setWebViewClient(new TestWebViewClient( - WebViewClassic.fromWebView(webView).getWebViewClient()) { - - /** - * Bypasses and logs errors. - */ - @Override - public void onReceivedError(WebView view, int errorCode, - String description, String failingUrl) { - String message = String.format("Error '%s' (%d) loading url: %s", - description, errorCode, failingUrl); - Log.w(TAG, message); - } - - /** - * Ignores and logs SSL errors. - */ - @Override - public void onReceivedSslError(WebView view, SslErrorHandler handler, - SslError error) { - Log.w(TAG, "SSL error: " + error); - handler.proceed(); - } - - /** - * Ignores and logs SSL client certificate requests. - */ - @Override - public void onReceivedClientCertRequest(WebView view, ClientCertRequestHandler handler, - String host_and_port) { - Log.w(TAG, "SSL client certificate request: " + host_and_port); - handler.cancel(); - } - - /** - * Ignores http auth with dummy username and password - */ - @Override - public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, - String host, String realm) { - handler.proceed("user", "passwd"); - } - - /* (non-Javadoc) - * @see com.android.browser.TestWebViewClient#onPageFinished(android.webkit.WebView, java.lang.String) - */ - @Override - public void onPageFinished(WebView view, String url) { - super.onPageFinished(view, url); - if (!pageLoadFinishCalled) { - pageLoadFinishCalled = true; - if (pageProgressFull) { - //reset latch and move forward only if both indicators are true - resetLatch(); - } - } - } - - @Override - public boolean shouldOverrideUrlLoading(WebView view, String url) { - if (!(url.startsWith("http://") || url.startsWith("https://"))) { - Log.v(TAG, String.format("suppressing non-http url scheme: %s", url)); - return true; - } - return super.shouldOverrideUrlLoading(view, url); - } - }); - - webView.setDownloadListener(new DownloadListener() { - - @Override - public void onDownloadStart(String url, String userAgent, String contentDisposition, - String mimetype, long contentLength) { - Log.v(TAG, String.format("Download request ignored: %s", url)); - } - }); - } - - void resetLatch() { - if (mLatch.getCount() != 1) { - Log.w(TAG, "Expecting latch to be 1, but it's not!"); - } else { - mLatch.countDown(); - } - } - - void resetForNewPage() { - mLatch = new CountDownLatch(1); - pageLoadFinishCalled = false; - pageProgressFull = false; - } - - void waitForLoad() throws InterruptedException { - boolean timedout = !mLatch.await(PAGE_LOAD_TIMEOUT, TimeUnit.MILLISECONDS); - if (timedout) { - Log.w(TAG, "page timeout. trying to stop."); - // try to stop page load - mInst.runOnMainSync(new Runnable(){ - public void run() { - mController.getTabControl().getCurrentTab().getWebView().stopLoading(); - } - }); - // try to wait for count down latch again - timedout = !mLatch.await(5000, TimeUnit.MILLISECONDS); - if (timedout) { - throw new RuntimeException("failed to stop timedout site, is browser pegged?"); - } - } - } - - private static class RunStatus { - private File mFile; - private int iteration; - private int page; - private String url; - private boolean isRecovery; - private boolean allClear; - - private RunStatus(File file) throws IOException { - mFile = file; - FileReader input = null; - BufferedReader reader = null; - isRecovery = false; - allClear = false; - iteration = 0; - page = 0; - try { - input = new FileReader(mFile); - isRecovery = true; - reader = new BufferedReader(input); - String line = reader.readLine(); - if (line == null) - return; - iteration = Integer.parseInt(line); - line = reader.readLine(); - if (line == null) - return; - page = Integer.parseInt(line); - } catch (FileNotFoundException ex) { - return; - } catch (NumberFormatException nfe) { - Log.wtf(TAG, "unexpected data in status file, will start from begining"); - return; - } finally { - try { - if (reader != null) { - reader.close(); - } - } finally { - if (input != null) { - input.close(); - } - } - } - } - - public static RunStatus load() throws IOException { - return load(sStatusFile); - } - - public static RunStatus load(String file) throws IOException { - return new RunStatus(new File(sExternalStorage, file)); - } - - public void write() throws IOException { - FileWriter output = null; - if (mFile.exists()) { - mFile.delete(); - } - try { - output = new FileWriter(mFile); - output.write(iteration + newLine); - output.write(page + newLine); - output.write(url + newLine); - } finally { - if (output != null) { - output.close(); - } - } - } - - public void cleanUp() { - // only perform cleanup when allClear flag is set - // i.e. when the test was not interrupted by a Java crash - if (mFile.exists() && allClear) { - mFile.delete(); - } - } - - public void resetPage() { - page = 0; - } - - public void incrementPage() { - ++page; - allClear = true; - } - - public void incrementIteration() { - ++iteration; - } - - public int getPage() { - return page; - } - - public int getIteration() { - return iteration; - } - - public boolean getIsRecovery() { - return isRecovery; - } - - public void setUrl(String url) { - this.url = url; - allClear = false; - } - } - - /** - * Loops over a list of URLs, points the browser to each one, and records the time elapsed. - * - * @param input the reader from which to get the URLs. - * @param writer the writer to which to output the results. - * @param clearCache determines whether the cache is cleared before loading each page - * @param loopCount the number of times to loop through the list of pages - * @throws IOException unable to read from input or write to writer. - * @throws InterruptedException the thread was interrupted waiting for the page to load. - */ - void loopUrls(BufferedReader input, OutputStreamWriter writer, - boolean clearCache, int loopCount) - throws IOException, InterruptedException { - Tab tab = mController.getTabControl().getCurrentTab(); - WebView webView = tab.getWebView(); - - List<String> pages = new LinkedList<String>(); - - String page; - while (null != (page = input.readLine())) { - if (!TextUtils.isEmpty(page)) { - pages.add(page); - } - } - - Iterator<String> iterator = pages.iterator(); - for (int i = 0; i < mStatus.getPage(); ++i) { - iterator.next(); - } - - if (mStatus.getIsRecovery()) { - Log.e(TAG, "Recovering after crash: " + iterator.next()); - mStatus.incrementPage(); - } - - while (mStatus.getIteration() < loopCount) { - if (clearCache) { - clearCacheUiThread(webView, true); - } - while(iterator.hasNext()) { - page = iterator.next(); - mStatus.setUrl(page); - mStatus.write(); - Log.i(TAG, "start: " + page); - Uri uri = Uri.parse(page); - final Intent intent = new Intent(Intent.ACTION_VIEW, uri); - intent.putExtra(Browser.EXTRA_APPLICATION_ID, - getInstrumentation().getTargetContext().getPackageName()); - - long startTime = System.currentTimeMillis(); - resetForNewPage(); - mInst.runOnMainSync(new Runnable() { - - public void run() { - mActivity.onNewIntent(intent); - } - - }); - waitForLoad(); - long stopTime = System.currentTimeMillis(); - - String url = getUrlUiThread(webView); - Log.i(TAG, "finish: " + url); - - if (writer != null) { - writer.write(page + "|" + (stopTime - startTime) + newLine); - writer.flush(); - } - - mStatus.incrementPage(); - } - mStatus.incrementIteration(); - mStatus.resetPage(); - iterator = pages.iterator(); - } - } - - public void testLoadPerformance() throws IOException, InterruptedException { - setUpBrowser(); - - OutputStreamWriter writer = getOutputStream(); - try { - BufferedReader bufferedReader = getInputStream(); - try { - loopUrls(bufferedReader, writer, true, PERF_LOOPCOUNT); - } finally { - if (bufferedReader != null) { - bufferedReader.close(); - } - } - } catch (FileNotFoundException fnfe) { - Log.e(TAG, fnfe.getMessage(), fnfe); - fail("Test environment not setup correctly"); - } finally { - if (writer != null) { - writer.close(); - } - } - } - - public void testStability() throws IOException, InterruptedException { - setUpBrowser(); - - BufferedReader bufferedReader = getInputStream(); - try { - loopUrls(bufferedReader, null, true, STABILITY_LOOPCOUNT); - } catch (FileNotFoundException fnfe) { - Log.e(TAG, fnfe.getMessage(), fnfe); - fail("Test environment not setup correctly"); - } finally { - if (bufferedReader != null) { - bufferedReader.close(); - } - } - } - - private void clearCacheUiThread(final WebView webView, final boolean includeDiskFiles) { - Runnable runner = new Runnable() { - - @Override - public void run() { - webView.clearCache(includeDiskFiles); - } - }; - getInstrumentation().runOnMainSync(runner); - } - - private String getUrlUiThread(final WebView webView) { - WebViewUrlGetter urlGetter = new WebViewUrlGetter(webView); - getInstrumentation().runOnMainSync(urlGetter); - return urlGetter.getUrl(); - } - - private class WebViewUrlGetter implements Runnable { - - private WebView mWebView; - private String mUrl; - - public WebViewUrlGetter(WebView webView) { - mWebView = webView; - } - - @Override - public void run() { - mUrl = null; - mUrl = mWebView.getUrl(); - } - - public String getUrl() { - if (mUrl != null) { - return mUrl; - } else - throw new IllegalStateException("url has not been fetched yet"); - } - } -} diff --git a/tests/src/com/android/browser/TestWebViewClient.java b/tests/src/com/android/browser/TestWebViewClient.java index 6ab40dd59..7159a7ec1 100644 --- a/tests/src/com/android/browser/TestWebViewClient.java +++ b/tests/src/com/android/browser/TestWebViewClient.java @@ -20,12 +20,10 @@ import android.graphics.Bitmap; import android.net.http.SslError; import android.os.Message; import android.view.KeyEvent; -import android.webkit.ClientCertRequestHandler; import android.webkit.HttpAuthHandler; import android.webkit.SslErrorHandler; import android.webkit.WebView; import android.webkit.WebViewClient; -import android.webkit.WebViewClientClassicExt; /** * @@ -34,7 +32,7 @@ import android.webkit.WebViewClientClassicExt; * Wraps around existing client so that specific methods can be overridden if needed. * */ -abstract class TestWebViewClient extends WebViewClientClassicExt { +abstract class TestWebViewClient extends WebViewClient { private WebViewClient mWrappedClient; @@ -104,17 +102,6 @@ abstract class TestWebViewClient extends WebViewClientClassicExt { /** {@inheritDoc} */ @Override - public void onReceivedClientCertRequest(WebView view, ClientCertRequestHandler handler, - String host_and_port) { - if (mWrappedClient instanceof WebViewClientClassicExt) { - ((WebViewClientClassicExt) mWrappedClient).onReceivedClientCertRequest(view, handler, host_and_port); - } else { - super.onReceivedClientCertRequest(view, handler, host_and_port); - } - } - - /** {@inheritDoc} */ - @Override public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) { mWrappedClient.onReceivedHttpAuthRequest(view, handler, host, realm); |