Enable storage tests in Dump Render Tree so we can run Database and DOM Storage layout tests.
This commit is contained in:
@@ -18,6 +18,7 @@ package com.android.dumprendertree;
|
||||
|
||||
import android.os.Handler;
|
||||
import android.os.Message;
|
||||
import android.webkit.WebStorage;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
@@ -25,7 +26,7 @@ public class CallbackProxy extends Handler implements EventSender, LayoutTestCon
|
||||
|
||||
private EventSender mEventSender;
|
||||
private LayoutTestController mLayoutTestController;
|
||||
|
||||
|
||||
private static final int EVENT_DOM_LOG = 1;
|
||||
private static final int EVENT_FIRE_KBD = 2;
|
||||
private static final int EVENT_KEY_DOWN_1 = 3;
|
||||
@@ -57,6 +58,8 @@ public class CallbackProxy extends Handler implements EventSender, LayoutTestCon
|
||||
private static final int LAYOUT_SET_WINDOW_KEY = 38;
|
||||
private static final int LAYOUT_TEST_REPAINT = 39;
|
||||
private static final int LAYOUT_WAIT_UNTIL_DONE = 40;
|
||||
private static final int LAYOUT_DUMP_DATABASE_CALLBACKS = 41;
|
||||
private static final int LAYOUT_SET_CAN_OPEN_WINDOWS = 42;
|
||||
|
||||
CallbackProxy(EventSender eventSender,
|
||||
LayoutTestController layoutTestController) {
|
||||
@@ -190,6 +193,14 @@ public class CallbackProxy extends Handler implements EventSender, LayoutTestCon
|
||||
case LAYOUT_WAIT_UNTIL_DONE:
|
||||
mLayoutTestController.waitUntilDone();
|
||||
break;
|
||||
|
||||
case LAYOUT_DUMP_DATABASE_CALLBACKS:
|
||||
mLayoutTestController.dumpDatabaseCallbacks();
|
||||
break;
|
||||
|
||||
case LAYOUT_SET_CAN_OPEN_WINDOWS:
|
||||
mLayoutTestController.setCanOpenWindows();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -325,4 +336,20 @@ public class CallbackProxy extends Handler implements EventSender, LayoutTestCon
|
||||
obtainMessage(LAYOUT_WAIT_UNTIL_DONE).sendToTarget();
|
||||
}
|
||||
|
||||
public void dumpDatabaseCallbacks() {
|
||||
obtainMessage(LAYOUT_DUMP_DATABASE_CALLBACKS).sendToTarget();
|
||||
}
|
||||
|
||||
public void clearAllDatabases() {
|
||||
WebStorage.getInstance().deleteAllDatabases();
|
||||
}
|
||||
|
||||
public void setDatabaseQuota(long quota) {
|
||||
WebStorage.getInstance().setQuotaForOrigin("file://", quota);
|
||||
}
|
||||
|
||||
public void setCanOpenWindows() {
|
||||
obtainMessage(LAYOUT_SET_CAN_OPEN_WINDOWS).sendToTarget();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -87,7 +87,15 @@ public class FileFilter {
|
||||
"fast/regex/test1.html",
|
||||
"fast/regex/slow.html",
|
||||
// RegExp is too large, causing OOM
|
||||
"fast/js/regexp-charclass-crash.html"
|
||||
"fast/js/regexp-charclass-crash.html",
|
||||
// The Android browser has no notion of private browsing.
|
||||
"storage/private-browsing-readonly.html",
|
||||
"storage/domstorage/localstorage/private-browsing-affects-storage.html",
|
||||
"storage/domstorage/sessionstorage/private-browsing-affects-storage.html",
|
||||
// Android layout tests are stored in "layout_tests". The following two
|
||||
// tests expect "LayoutTests" in their output.
|
||||
"storage/domstorage/localstorage/iframe-events.html",
|
||||
"storage/domstorage/sessionstorage/iframe-events.html"
|
||||
};
|
||||
|
||||
static void fillIgnoreResultSet() {
|
||||
|
||||
@@ -58,5 +58,8 @@ public interface LayoutTestController {
|
||||
public void queueLoad(String Url, String frameTarget);
|
||||
|
||||
public void setAcceptsEditing(boolean b);
|
||||
|
||||
|
||||
// For storage tests
|
||||
public void dumpDatabaseCallbacks();
|
||||
public void setCanOpenWindows();
|
||||
}
|
||||
|
||||
@@ -31,6 +31,7 @@ import android.webkit.JsResult;
|
||||
import android.webkit.SslErrorHandler;
|
||||
import android.webkit.WebChromeClient;
|
||||
import android.webkit.WebSettings;
|
||||
import android.webkit.WebStorage;
|
||||
import android.webkit.WebView;
|
||||
import android.webkit.WebViewClient;
|
||||
import android.widget.LinearLayout;
|
||||
@@ -38,6 +39,8 @@ import android.widget.LinearLayout;
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.Vector;
|
||||
|
||||
public class TestShellActivity extends Activity implements LayoutTestController {
|
||||
@@ -90,52 +93,13 @@ public class TestShellActivity extends Activity implements LayoutTestController
|
||||
setContentView(contentView);
|
||||
|
||||
mWebView = new WebView(this);
|
||||
mWebView.getSettings().setJavaScriptEnabled(true);
|
||||
mWebView.setWebChromeClient(mChromeClient);
|
||||
mWebView.setWebViewClient(new WebViewClient(){
|
||||
|
||||
@Override
|
||||
public void onPageFinished(WebView view, String url) {
|
||||
Log.v(LOGTAG, "onPageFinished, url=" + url);
|
||||
super.onPageFinished(view, url);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageStarted(WebView view, String url, Bitmap favicon) {
|
||||
Log.v(LOGTAG, "onPageStarted, url=" + url);
|
||||
super.onPageStarted(view, url, favicon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceivedError(WebView view, int errorCode, String description,
|
||||
String failingUrl) {
|
||||
Log.v(LOGTAG, "onReceivedError, errorCode=" + errorCode
|
||||
+ ", desc=" + description + ", url=" + failingUrl);
|
||||
super.onReceivedError(view, errorCode, description, failingUrl);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler,
|
||||
String host, String realm) {
|
||||
handler.cancel();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceivedSslError(WebView view, SslErrorHandler handler,
|
||||
SslError error) {
|
||||
handler.proceed();
|
||||
}
|
||||
|
||||
});
|
||||
mEventSender = new WebViewEventSender(mWebView);
|
||||
mCallbackProxy = new CallbackProxy(mEventSender, this);
|
||||
|
||||
mWebView.addJavascriptInterface(mCallbackProxy, "layoutTestController");
|
||||
mWebView.addJavascriptInterface(mCallbackProxy, "eventSender");
|
||||
setupWebViewForLayoutTests(mWebView, mCallbackProxy);
|
||||
|
||||
contentView.addView(mWebView, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT, 0.0f));
|
||||
|
||||
mWebView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL);
|
||||
|
||||
mHandler = new AsyncHandler();
|
||||
|
||||
Intent intent = getIntent();
|
||||
@@ -217,6 +181,12 @@ public class TestShellActivity extends Activity implements LayoutTestController
|
||||
if (mDialogStrings != null)
|
||||
os.write(mDialogStrings.toString().getBytes());
|
||||
mDialogStrings = null;
|
||||
if (mDatabaseCallbackStrings != null)
|
||||
os.write(mDatabaseCallbackStrings.toString().getBytes());
|
||||
mDatabaseCallbackStrings = null;
|
||||
if (mConsoleMessages != null)
|
||||
os.write(mConsoleMessages.toString().getBytes());
|
||||
mConsoleMessages = null;
|
||||
if (webkitData != null)
|
||||
os.write(webkitData.getBytes());
|
||||
os.flush();
|
||||
@@ -359,7 +329,52 @@ public class TestShellActivity extends Activity implements LayoutTestController
|
||||
public void testRepaint() {
|
||||
mWebView.invalidate();
|
||||
}
|
||||
|
||||
|
||||
public void dumpDatabaseCallbacks() {
|
||||
Log.v(LOGTAG, "dumpDatabaseCallbacks called.");
|
||||
mDumpDatabaseCallbacks = true;
|
||||
}
|
||||
|
||||
public void setCanOpenWindows() {
|
||||
Log.v(LOGTAG, "setCanOpenWindows called.");
|
||||
mCanOpenWindows = true;
|
||||
}
|
||||
|
||||
private final WebViewClient mViewClient = new WebViewClient(){
|
||||
@Override
|
||||
public void onPageFinished(WebView view, String url) {
|
||||
Log.v(LOGTAG, "onPageFinished, url=" + url);
|
||||
super.onPageFinished(view, url);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPageStarted(WebView view, String url, Bitmap favicon) {
|
||||
Log.v(LOGTAG, "onPageStarted, url=" + url);
|
||||
super.onPageStarted(view, url, favicon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceivedError(WebView view, int errorCode, String description,
|
||||
String failingUrl) {
|
||||
Log.v(LOGTAG, "onReceivedError, errorCode=" + errorCode
|
||||
+ ", desc=" + description + ", url=" + failingUrl);
|
||||
super.onReceivedError(view, errorCode, description, failingUrl);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler,
|
||||
String host, String realm) {
|
||||
handler.cancel();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceivedSslError(WebView view, SslErrorHandler handler,
|
||||
SslError error) {
|
||||
handler.proceed();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
private final WebChromeClient mChromeClient = new WebChromeClient() {
|
||||
@Override
|
||||
public void onProgressChanged(WebView view, int newProgress) {
|
||||
@@ -434,6 +449,72 @@ public class TestShellActivity extends Activity implements LayoutTestController
|
||||
result.confirm();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onExceededDatabaseQuota(String url_str,
|
||||
String databaseIdentifier, long currentQuota,
|
||||
WebStorage.QuotaUpdater callback) {
|
||||
if (mDumpDatabaseCallbacks) {
|
||||
if (mDatabaseCallbackStrings == null) {
|
||||
mDatabaseCallbackStrings = new StringBuffer();
|
||||
}
|
||||
|
||||
String protocol = "";
|
||||
String host = "";
|
||||
int port = 0;
|
||||
|
||||
try {
|
||||
URL url = new URL(url_str);
|
||||
protocol = url.getProtocol();
|
||||
host = url.getHost();
|
||||
if (url.getPort() > -1) {
|
||||
port = url.getPort();
|
||||
}
|
||||
} catch (MalformedURLException e) {}
|
||||
|
||||
String databaseCallbackString =
|
||||
"UI DELEGATE DATABASE CALLBACK: " +
|
||||
"exceededDatabaseQuotaForSecurityOrigin:{" + protocol +
|
||||
", " + host + ", " + port + "} database:" +
|
||||
databaseIdentifier + "\n";
|
||||
Log.v(LOGTAG, "LOG: "+databaseCallbackString);
|
||||
mDatabaseCallbackStrings.append(databaseCallbackString);
|
||||
}
|
||||
// Give 5MB more quota.
|
||||
callback.updateQuota(currentQuota + 1024 * 1024 * 5);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addMessageToConsole(String message, int lineNumber,
|
||||
String sourceID) {
|
||||
if (mConsoleMessages == null) {
|
||||
mConsoleMessages = new StringBuffer();
|
||||
}
|
||||
String consoleMessage = "CONSOLE MESSAGE: line "
|
||||
+ lineNumber +": "+ message +"\n";
|
||||
mConsoleMessages.append(consoleMessage);
|
||||
Log.v(LOGTAG, "LOG: "+consoleMessage);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateWindow(WebView view, boolean dialog,
|
||||
boolean userGesture, Message resultMsg) {
|
||||
if (!mCanOpenWindows) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// We never display the new window, just create the view and
|
||||
// allow it's content to execute and be recorded by the test
|
||||
// runner.
|
||||
|
||||
WebView newWindowView = new WebView(TestShellActivity.this);
|
||||
setupWebViewForLayoutTests(newWindowView, mCallbackProxy);
|
||||
WebView.WebViewTransport transport =
|
||||
(WebView.WebViewTransport) resultMsg.obj;
|
||||
transport.setWebView(newWindowView);
|
||||
resultMsg.sendToTarget();
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
private void resetTestStatus() {
|
||||
@@ -442,9 +523,32 @@ public class TestShellActivity extends Activity implements LayoutTestController
|
||||
mTimedOut = false;
|
||||
mDumpTitleChanges = false;
|
||||
mRequestedWebKitData = false;
|
||||
mDumpDatabaseCallbacks = false;
|
||||
mCanOpenWindows = false;
|
||||
mEventSender.resetMouse();
|
||||
}
|
||||
|
||||
|
||||
private void setupWebViewForLayoutTests(WebView webview, CallbackProxy callbackProxy) {
|
||||
if (webview == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
WebSettings settings = webview.getSettings();
|
||||
settings.setJavaScriptEnabled(true);
|
||||
settings.setJavaScriptCanOpenWindowsAutomatically(true);
|
||||
settings.setSupportMultipleWindows(true);
|
||||
settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL);
|
||||
settings.setDatabaseEnabled(true);
|
||||
settings.setDatabasePath(getDir("databases",0).getAbsolutePath());
|
||||
settings.setDomStorageEnabled(true);
|
||||
|
||||
webview.addJavascriptInterface(callbackProxy, "layoutTestController");
|
||||
webview.addJavascriptInterface(callbackProxy, "eventSender");
|
||||
|
||||
webview.setWebChromeClient(mChromeClient);
|
||||
webview.setWebViewClient(mViewClient);
|
||||
}
|
||||
|
||||
private WebView mWebView;
|
||||
private WebViewEventSender mEventSender;
|
||||
private AsyncHandler mHandler;
|
||||
@@ -470,6 +574,10 @@ public class TestShellActivity extends Activity implements LayoutTestController
|
||||
private StringBuffer mDialogStrings;
|
||||
private boolean mKeepWebHistory;
|
||||
private Vector mWebHistory;
|
||||
private boolean mDumpDatabaseCallbacks;
|
||||
private StringBuffer mDatabaseCallbackStrings;
|
||||
private StringBuffer mConsoleMessages;
|
||||
private boolean mCanOpenWindows;
|
||||
|
||||
static final String TIMEOUT_STR = "**Test timeout";
|
||||
|
||||
|
||||
Reference in New Issue
Block a user