TestShellActivity.java revision 977f7691e5c852b188ac9131443bff10bc91c635
19f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/* 29f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Copyright (C) 2007 The Android Open Source Project 39f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 49f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Licensed under the Apache License, Version 2.0 (the "License"); 59f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * you may not use this file except in compliance with the License. 69f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * You may obtain a copy of the License at 79f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 89f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 99f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Unless required by applicable law or agreed to in writing, software 119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * See the License for the specific language governing permissions and 149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * limitations under the License. 159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpackage com.android.dumprendertree; 189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport com.android.dumprendertree.forwarder.ForwardService; 209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport android.app.Activity; 229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport android.app.AlertDialog; 239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport android.content.Context; 249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport android.content.DialogInterface; 259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport android.content.Intent; 269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport android.content.DialogInterface.OnClickListener; 279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport android.graphics.Bitmap; 289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport android.net.http.SslError; 299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport android.os.Bundle; 309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport android.os.Handler; 319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport android.os.Message; 329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport android.util.Log; 339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport android.view.ViewGroup; 349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport android.webkit.GeolocationPermissions; 359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport android.webkit.HttpAuthHandler; 369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport android.webkit.JsPromptResult; 379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport android.webkit.JsResult; 389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport android.webkit.SslErrorHandler; 399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport android.webkit.WebChromeClient; 409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport android.webkit.WebSettings; 419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport android.webkit.WebStorage; 429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport android.webkit.WebView; 439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport android.webkit.WebViewClient; 449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport android.widget.LinearLayout; 459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.io.BufferedReader; 479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.io.File; 489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.io.FileOutputStream; 499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.io.FileReader; 509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.io.IOException; 519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.net.MalformedURLException; 529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.net.URL; 539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.util.HashMap; 549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.util.Map; 559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.util.Vector; 569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpublic class TestShellActivity extends Activity implements LayoutTestController { 589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson static enum DumpDataType {DUMP_AS_TEXT, EXT_REPR, NO_OP} 609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public class AsyncHandler extends Handler { 629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson @Override 639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void handleMessage(Message msg) { 649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (msg.what == MSG_TIMEOUT) { 659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mTimedOut = true; 669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(mCallback != null) 679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mCallback.timedOut(mWebView.getUrl()); 689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson requestWebKitData(); 699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return; 709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } else if (msg.what == MSG_WEBKIT_DATA) { 719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson TestShellActivity.this.dump(mTimedOut, (String)msg.obj); 729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return; 739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super.handleMessage(msg); 769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void requestWebKitData() { 809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Message callback = mHandler.obtainMessage(MSG_WEBKIT_DATA); 819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (mRequestedWebKitData) 839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new AssertionError("Requested webkit data twice: " + mWebView.getUrl()); 849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mRequestedWebKitData = true; 869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson switch (mDumpDataType) { 879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson case DUMP_AS_TEXT: 889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mWebView.documentAsText(callback); 899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson break; 909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson case EXT_REPR: 919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mWebView.externalRepresentation(callback); 929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson break; 939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson default: 949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson finished(); 959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson break; 969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void clearCache() { 1009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mWebView.freeMemory(); 1019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson @Override 1049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected void onCreate(Bundle icicle) { 1059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super.onCreate(icicle); 1069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson LinearLayout contentView = new LinearLayout(this); 1089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson contentView.setOrientation(LinearLayout.VERTICAL); 1099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setContentView(contentView); 1109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mWebView = new WebView(this); 1129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mEventSender = new WebViewEventSender(mWebView); 1139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mCallbackProxy = new CallbackProxy(mEventSender, this); 1149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mWebView.addJavascriptInterface(mCallbackProxy, "layoutTestController"); 1169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mWebView.addJavascriptInterface(mCallbackProxy, "eventSender"); 1179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setupWebViewForLayoutTests(mWebView, mCallbackProxy); 1189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson contentView.addView(mWebView, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT, 0.0f)); 1209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mWebView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL); 1229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Expose window.gc function to JavaScript. JSC build exposes 1249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // this function by default, but V8 requires the flag to turn it on. 1259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // WebView::setJsFlags is noop in JSC build. 1269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mWebView.setJsFlags("--expose_gc"); 1279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mHandler = new AsyncHandler(); 1299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Intent intent = getIntent(); 1319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (intent != null) { 1329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson executeIntent(intent); 1339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson @Override 1379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected void onNewIntent(Intent intent) { 1389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super.onNewIntent(intent); 1399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson executeIntent(intent); 1409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private void executeIntent(Intent intent) { 1439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson resetTestStatus(); 1449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!Intent.ACTION_VIEW.equals(intent.getAction())) { 1459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return; 1469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mTestUrl = intent.getStringExtra(TEST_URL); 1499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (mTestUrl == null) { 1509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mUiAutoTestPath = intent.getStringExtra(UI_AUTO_TEST); 1519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(mUiAutoTestPath != null) { 1529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson beginUiAutoTest(); 1539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return; 1559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mResultFile = intent.getStringExtra(RESULT_FILE); 1589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mTimeoutInMillis = intent.getIntExtra(TIMEOUT_IN_MILLIS, 0); 1599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Log.v(LOGTAG, " Loading " + mTestUrl); 1619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mWebView.loadUrl(mTestUrl); 1629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (mTimeoutInMillis > 0) { 1649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Create a timeout timer 1659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Message m = mHandler.obtainMessage(MSG_TIMEOUT); 1669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mHandler.sendMessageDelayed(m, mTimeoutInMillis); 1679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private void beginUiAutoTest() { 1719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try { 1729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mTestListReader = new BufferedReader( 1739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson new FileReader(mUiAutoTestPath)); 1749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } catch (IOException ioe) { 1759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Log.e(LOGTAG, "Failed to open test list for read.", ioe); 1769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson finishUiAutoTest(); 1779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return; 1789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson moveToNextTest(); 1809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private void finishUiAutoTest() { 1839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try { 1849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(mTestListReader != null) 1859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mTestListReader.close(); 1869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } catch (IOException ioe) { 1879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Log.w(LOGTAG, "Failed to close test list file.", ioe); 1889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ForwardService.getForwardService().stopForwardService(); 1909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson finished(); 1919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private void moveToNextTest() { 1949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String url = null; 1959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try { 1969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson url = mTestListReader.readLine(); 1979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } catch (IOException ioe) { 1989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Log.e(LOGTAG, "Failed to read next test.", ioe); 1999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson finishUiAutoTest(); 2009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return; 2019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (url == null) { 2039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mUiAutoTestPath = null; 2049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson finishUiAutoTest(); 2059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson AlertDialog.Builder builder = new AlertDialog.Builder(this); 2069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson builder.setMessage("All tests finished. Exit?") 2079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson .setCancelable(false) 2089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson .setPositiveButton("Yes", new OnClickListener(){ 2099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void onClick(DialogInterface dialog, int which) { 2109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson TestShellActivity.this.finish(); 2119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson }) 2139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson .setNegativeButton("No", new OnClickListener(){ 2149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void onClick(DialogInterface dialog, int which) { 2159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson dialog.cancel(); 2169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson }); 2189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson builder.create().show(); 2199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return; 2209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Intent intent = new Intent(Intent.ACTION_VIEW); 2229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 2239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson intent.putExtra(TestShellActivity.TEST_URL, FsUtils.getTestUrl(url)); 2249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson intent.putExtra(TIMEOUT_IN_MILLIS, 10000); 2259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson executeIntent(intent); 2269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson @Override 2299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected void onStop() { 2309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super.onStop(); 2319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mWebView.stopLoading(); 2329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson @Override 2359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected void onDestroy() { 2369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super.onDestroy(); 2379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mWebView.destroy(); 2389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mWebView = null; 2399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson @Override 2429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void onLowMemory() { 2439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super.onLowMemory(); 2449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Log.e(LOGTAG, "Low memory, clearing caches"); 2459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mWebView.freeMemory(); 2469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Dump the page 2499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void dump(boolean timeout, String webkitData) { 2509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (mResultFile == null || mResultFile.length() == 0) { 2519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson finished(); 2529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return; 2539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try { 2569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson File parentDir = new File(mResultFile).getParentFile(); 2579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!parentDir.exists()) { 2589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson parentDir.mkdirs(); 2599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson FileOutputStream os = new FileOutputStream(mResultFile); 2629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (timeout) { 2639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Log.w("Layout test: Timeout", mResultFile); 2649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson os.write(TIMEOUT_STR.getBytes()); 2659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson os.write('\n'); 2669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (mDumpTitleChanges) 2689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson os.write(mTitleChanges.toString().getBytes()); 2699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (mDialogStrings != null) 2709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson os.write(mDialogStrings.toString().getBytes()); 2719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mDialogStrings = null; 2729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (mDatabaseCallbackStrings != null) 2739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson os.write(mDatabaseCallbackStrings.toString().getBytes()); 2749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mDatabaseCallbackStrings = null; 2759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (mConsoleMessages != null) 2769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson os.write(mConsoleMessages.toString().getBytes()); 2779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mConsoleMessages = null; 2789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (webkitData != null) 2799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson os.write(webkitData.getBytes()); 2809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson os.flush(); 2819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson os.close(); 2829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } catch (IOException ex) { 2839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Log.e(LOGTAG, "Cannot write to " + mResultFile + ", " + ex.getMessage()); 2849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson finished(); 2879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setCallback(TestShellCallback callback) { 2909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mCallback = callback; 2919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void finished() { 2949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (mTestPageLoaded) { 2959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (mUiAutoTestPath != null) { 2969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson //don't really finish here 2979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson moveToNextTest(); 2989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } else { 2999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (mCallback != null) { 3009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mCallback.finished(); 3019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } else { 3049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // The test is complete but the page has not completed loading. We 3059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // can't continue to the next test until both the test is finished 3069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // and the page has stopped loading. 3079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mReadyForNextTest = true; 3089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setDefaultDumpDataType(DumpDataType defaultDumpDataType) { 3129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mDefaultDumpDataType = defaultDumpDataType; 3139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // ....................................... 3169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // LayoutTestController Functions 3179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void dumpAsText() { 3189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mDumpDataType = DumpDataType.DUMP_AS_TEXT; 3199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (mWebView != null) { 3209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String url = mWebView.getUrl(); 3219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Log.v(LOGTAG, "dumpAsText called: "+url); 3229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void waitUntilDone() { 3269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mWaitUntilDone = true; 3279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String url = mWebView.getUrl(); 3289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Log.v(LOGTAG, "waitUntilDone called: " + url); 3299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void notifyDone() { 3329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String url = mWebView.getUrl(); 3339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Log.v(LOGTAG, "notifyDone called: " + url); 3349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (mWaitUntilDone) { 3359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mWaitUntilDone = false; 3369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mChromeClient.onProgressChanged(mWebView, 100); 3379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void display() { 3419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mWebView.invalidate(); 3429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void clearBackForwardList() { 3459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mWebView.clearHistory(); 3469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void dumpBackForwardList() { 3509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson //printf("\n============== Back Forward List ==============\n"); 3519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // mWebHistory 3529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson //printf("===============================================\n"); 3539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void dumpChildFrameScrollPositions() { 3579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // TODO Auto-generated method stub 3589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void dumpEditingCallbacks() { 3629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // TODO Auto-generated method stub 3639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void dumpSelectionRect() { 3679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // TODO Auto-generated method stub 3689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void dumpTitleChanges() { 3729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!mDumpTitleChanges) { 3739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mTitleChanges = new StringBuffer(); 3749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mDumpTitleChanges = true; 3769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void keepWebHistory() { 3799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!mKeepWebHistory) { 3809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mWebHistory = new Vector(); 3819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mKeepWebHistory = true; 3839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void queueBackNavigation(int howfar) { 3869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // TODO Auto-generated method stub 3879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void queueForwardNavigation(int howfar) { 3919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // TODO Auto-generated method stub 3929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void queueLoad(String Url, String frameTarget) { 3969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // TODO Auto-generated method stub 3979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void queueReload() { 4019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mWebView.reload(); 4029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void queueScript(String scriptToRunInCurrentContext) { 4059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mWebView.loadUrl("javascript:"+scriptToRunInCurrentContext); 4069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void repaintSweepHorizontally() { 4099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // TODO Auto-generated method stub 4109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setAcceptsEditing(boolean b) { 4149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // TODO Auto-generated method stub 4159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setMainFrameIsFirstResponder(boolean b) { 4199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // TODO Auto-generated method stub 4209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setWindowIsKey(boolean b) { 4249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // This is meant to show/hide the window. The best I can find 4259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // is setEnabled() 4269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mWebView.setEnabled(b); 4279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void testRepaint() { 4309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mWebView.invalidate(); 4319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void dumpDatabaseCallbacks() { 4349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Log.v(LOGTAG, "dumpDatabaseCallbacks called."); 4359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mDumpDatabaseCallbacks = true; 4369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setCanOpenWindows() { 4399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Log.v(LOGTAG, "setCanOpenWindows called."); 4409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mCanOpenWindows = true; 4419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Sets the Geolocation permission state to be used for all future requests. 4459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setGeolocationPermission(boolean allow) { 4479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mGeolocationPermissionSet = true; 4489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mGeolocationPermission = allow; 4499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private final WebViewClient mViewClient = new WebViewClient(){ 4529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson @Override 4539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void onPageFinished(WebView view, String url) { 4549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Log.v(LOGTAG, "onPageFinished, url=" + url); 4559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mTestPageLoaded = true; 4569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super.onPageFinished(view, url); 4579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson @Override 4609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void onPageStarted(WebView view, String url, Bitmap favicon) { 4619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Log.v(LOGTAG, "onPageStarted, url=" + url); 4629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mTestPageLoaded = false; 4639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super.onPageStarted(view, url, favicon); 4649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson @Override 4679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void onReceivedError(WebView view, int errorCode, String description, 4689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String failingUrl) { 4699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Log.v(LOGTAG, "onReceivedError, errorCode=" + errorCode 4709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson + ", desc=" + description + ", url=" + failingUrl); 4719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super.onReceivedError(view, errorCode, description, failingUrl); 4729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson @Override 4759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, 4769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String host, String realm) { 4779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson handler.cancel(); 4789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson @Override 4819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void onReceivedSslError(WebView view, SslErrorHandler handler, 4829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson SslError error) { 4839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson handler.proceed(); 4849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson }; 4869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private final WebChromeClient mChromeClient = new WebChromeClient() { 4899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson @Override 4909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void onProgressChanged(WebView view, int newProgress) { 4919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (newProgress == 100) { 4929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (mReadyForNextTest) { 4949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // In this case, the test has completed (i.e. called 4959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // layoutTestController.notifyDone) before the page finished loading. This 4969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // usually happens if the test is not invoked by an onload handler, rather 4979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // directly in a script tag. Now that the page has finished loading, it is 4989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // safe for DRT to go to the next test. 4999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson finished(); 5009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return; 5019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!mTimedOut && !mWaitUntilDone && !mRequestedWebKitData) { 5049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String url = mWebView.getUrl(); 5059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Log.v(LOGTAG, "Finished: "+ url); 5069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mHandler.removeMessages(MSG_TIMEOUT); 5079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson requestWebKitData(); 5089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } else { 5099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String url = mWebView.getUrl(); 5109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (mTimedOut) { 5119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Log.v(LOGTAG, "Timed out before finishing: " + url); 5129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } else if (mWaitUntilDone) { 5139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Log.v(LOGTAG, "Waiting for notifyDone: " + url); 5149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } else if (mRequestedWebKitData) { 5159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Log.v(LOGTAG, "Requested webkit data ready: " + url); 5169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson @Override 5229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void onReceivedTitle(WebView view, String title) { 5239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (title.length() > 30) 5249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson title = "..."+title.substring(title.length()-30); 5259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setTitle(title); 5269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (mDumpTitleChanges) { 5279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mTitleChanges.append("TITLE CHANGED: "); 5289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mTitleChanges.append(title); 5299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mTitleChanges.append("\n"); 5309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson @Override 5349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean onJsAlert(WebView view, String url, String message, 5359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson JsResult result) { 5369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (mDialogStrings == null) { 5379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mDialogStrings = new StringBuffer(); 5389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mDialogStrings.append("ALERT: "); 5409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mDialogStrings.append(message); 5419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mDialogStrings.append('\n'); 5429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson result.confirm(); 5439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return true; 5449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson @Override 5479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean onJsConfirm(WebView view, String url, String message, 5489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson JsResult result) { 5499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (mDialogStrings == null) { 5509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mDialogStrings = new StringBuffer(); 5519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mDialogStrings.append("CONFIRM: "); 5539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mDialogStrings.append(message); 5549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mDialogStrings.append('\n'); 5559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson result.confirm(); 5569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return true; 5579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson @Override 5609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean onJsPrompt(WebView view, String url, String message, 5619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String defaultValue, JsPromptResult result) { 5629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (mDialogStrings == null) { 5639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mDialogStrings = new StringBuffer(); 5649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mDialogStrings.append("PROMPT: "); 5669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mDialogStrings.append(message); 5679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mDialogStrings.append(", default text: "); 5689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mDialogStrings.append(defaultValue); 5699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mDialogStrings.append('\n'); 5709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson result.confirm(); 5719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return true; 5729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson @Override 5759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean onJsTimeout() { 5769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Log.v(LOGTAG, "JavaScript timeout"); 5779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 5789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson @Override 5819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void onExceededDatabaseQuota(String url_str, 5829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String databaseIdentifier, long currentQuota, 5839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson long estimatedSize, long totalUsedQuota, 5849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson WebStorage.QuotaUpdater callback) { 5859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (mDumpDatabaseCallbacks) { 5869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (mDatabaseCallbackStrings == null) { 5879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mDatabaseCallbackStrings = new StringBuffer(); 5889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String protocol = ""; 5919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String host = ""; 5929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int port = 0; 5939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try { 5959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson URL url = new URL(url_str); 5969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protocol = url.getProtocol(); 5979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson host = url.getHost(); 5989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (url.getPort() > -1) { 5999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson port = url.getPort(); 6009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } catch (MalformedURLException e) {} 6029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String databaseCallbackString = 6049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson "UI DELEGATE DATABASE CALLBACK: " + 6059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson "exceededDatabaseQuotaForSecurityOrigin:{" + protocol + 6069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ", " + host + ", " + port + "} database:" + 6079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson databaseIdentifier + "\n"; 6089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Log.v(LOGTAG, "LOG: "+databaseCallbackString); 6099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mDatabaseCallbackStrings.append(databaseCallbackString); 6109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Give 5MB more quota. 6129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson callback.updateQuota(currentQuota + 1024 * 1024 * 5); 6139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Instructs the client to show a prompt to ask the user to set the 6179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Geolocation permission state for the specified origin. 6189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson @Override 6209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void onGeolocationPermissionsShowPrompt(String origin, 6219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson GeolocationPermissions.Callback callback) { 6229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (mGeolocationPermissionSet) { 6239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson callback.invoke(origin, mGeolocationPermission, false); 6249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson @Override 6289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void addMessageToConsole(String message, int lineNumber, 6299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String sourceID) { 6309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (mConsoleMessages == null) { 6319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mConsoleMessages = new StringBuffer(); 6329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String consoleMessage = "CONSOLE MESSAGE: line " 6349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson + lineNumber +": "+ message +"\n"; 6359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mConsoleMessages.append(consoleMessage); 6369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Log.v(LOGTAG, "LOG: "+consoleMessage); 6379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson @Override 6409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean onCreateWindow(WebView view, boolean dialog, 6419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean userGesture, Message resultMsg) { 6429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (!mCanOpenWindows) { 6439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 6449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // We never display the new window, just create the view and 6479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // allow it's content to execute and be recorded by the test 6489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // runner. 6499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson HashMap<String, Object> jsIfaces = new HashMap<String, Object>(); 6519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson jsIfaces.put("layoutTestController", mCallbackProxy); 6529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson jsIfaces.put("eventSender", mCallbackProxy); 6539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson WebView newWindowView = new NewWindowWebView(TestShellActivity.this, jsIfaces); 6549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setupWebViewForLayoutTests(newWindowView, mCallbackProxy); 6559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson WebView.WebViewTransport transport = 6569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson (WebView.WebViewTransport) resultMsg.obj; 6579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson transport.setWebView(newWindowView); 6589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson resultMsg.sendToTarget(); 6599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return true; 6609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson }; 6629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private static class NewWindowWebView extends WebView { 6649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public NewWindowWebView(Context context, Map<String, Object> jsIfaces) { 6659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super(context, null, 0, jsIfaces); 6669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private void resetTestStatus() { 6709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mWaitUntilDone = false; 6719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mDumpDataType = mDefaultDumpDataType; 6729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mTimedOut = false; 6739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mDumpTitleChanges = false; 6749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mRequestedWebKitData = false; 6759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mDumpDatabaseCallbacks = false; 6769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mCanOpenWindows = false; 6779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mEventSender.resetMouse(); 6789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mTestPageLoaded = false; 6799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson mReadyForNextTest = false; 6809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private void setupWebViewForLayoutTests(WebView webview, CallbackProxy callbackProxy) { 6839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (webview == null) { 6849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return; 6859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson WebSettings settings = webview.getSettings(); 6889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson settings.setAppCacheEnabled(true); 6899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson settings.setAppCachePath(getApplicationContext().getCacheDir().getPath()); 6909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson settings.setAppCacheMaxSize(Long.MAX_VALUE); 6919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson settings.setJavaScriptEnabled(true); 6929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson settings.setJavaScriptCanOpenWindowsAutomatically(true); 6939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson settings.setSupportMultipleWindows(true); 6949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL); 6959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson settings.setDatabaseEnabled(true); 6969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson settings.setDatabasePath(getDir("databases",0).getAbsolutePath()); 6979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson settings.setDomStorageEnabled(true); 6989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson settings.setWorkersEnabled(false); 6999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson webview.setWebChromeClient(mChromeClient); 7019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson webview.setWebViewClient(mViewClient); 7029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private WebView mWebView; 7059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private WebViewEventSender mEventSender; 7069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private AsyncHandler mHandler; 7079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private TestShellCallback mCallback; 7089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private CallbackProxy mCallbackProxy; 7109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private String mTestUrl; 7129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private String mResultFile; 7139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private int mTimeoutInMillis; 7149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private String mUiAutoTestPath; 7159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private BufferedReader mTestListReader; 7169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // States 7189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private boolean mTimedOut; 7199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private boolean mRequestedWebKitData; 7209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private boolean mFinishedRunning; 7219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Layout test controller variables. 7239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private DumpDataType mDumpDataType; 7249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private DumpDataType mDefaultDumpDataType = DumpDataType.EXT_REPR; 7259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private boolean mWaitUntilDone; 7269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private boolean mDumpTitleChanges; 7279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private StringBuffer mTitleChanges; 7289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private StringBuffer mDialogStrings; 7299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private boolean mKeepWebHistory; 7309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private Vector mWebHistory; 7319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private boolean mDumpDatabaseCallbacks; 7329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private StringBuffer mDatabaseCallbackStrings; 7339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private StringBuffer mConsoleMessages; 7349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private boolean mCanOpenWindows; 7359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private boolean mTestPageLoaded = false; 7379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private boolean mReadyForNextTest = false; 7389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson static final String TIMEOUT_STR = "**Test timeout"; 7409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson static final int MSG_TIMEOUT = 0; 7429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson static final int MSG_WEBKIT_DATA = 1; 7439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson static final String LOGTAG="TestShell"; 7459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson static final String TEST_URL = "TestUrl"; 7479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson static final String RESULT_FILE = "ResultFile"; 7489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson static final String TIMEOUT_IN_MILLIS = "TimeoutInMillis"; 7499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson static final String UI_AUTO_TEST = "UiAutoTest"; 7509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private boolean mGeolocationPermissionSet; 7529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private boolean mGeolocationPermission; 7539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson} 7549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson