WebKitTools:
authorbeidson@apple.com <beidson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 13 Feb 2008 18:47:14 +0000 (18:47 +0000)
committerbeidson@apple.com <beidson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 13 Feb 2008 18:47:14 +0000 (18:47 +0000)
        Reviewed by Darin Adler

        Add some much needed Database support to DRT

        * DumpRenderTree/LayoutTestController.cpp:
        (LayoutTestController::LayoutTestController):
        (dumpDatabaseCallbacksCallback): Flag to control if the UIDelegate methods related to
          databases are called
        (clearAllDatabasesCallback): Allow a test to delete all databases
        (setDatabaseQuotaCallback): Allow a test to set the quota new origins will get
        (LayoutTestController::staticFunctions):

        * DumpRenderTree/LayoutTestController.h:
        (LayoutTestController::dumpDatabaseCallbacks):
        (LayoutTestController::setDumpDatabaseCallbacks):

        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
        (LayoutTestController::clearAllDatabases):
        (LayoutTestController::setDatabaseQuota):

        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
        (LayoutTestController::clearAllDatabases): Stubbed out
        (LayoutTestController::setDatabaseQuota): Ditto
        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
        (LayoutTestController::clearAllDatabases): Stubbed out with error message
        (LayoutTestController::setDatabaseQuota): Ditto

        * DumpRenderTree/mac/UIDelegate.mm:
        (-[UIDelegate webView:frame:exceededDatabaseQuotaForSecurityOrigin:database:]): Print a
          message with details about the event then return a 5mb quota like before

LayoutTests:

        Reviewed by Darin Adler

        Added layout tests to cover
        http://trac.webkit.org/projects/webkit/changeset/29983
        and
        http://trac.webkit.org/projects/webkit/changeset/30184

        * platform/gtk/Skipped:
        * platform/qt/Skipped:
        * platform/win/Skipped:
        * storage/quota-tracking-expected.txt: Added.
        * storage/quota-tracking.html: Added.
        * storage/success-callback-expected.txt: Added.
        * storage/success-callback.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@30205 268f45cc-cd09-0410-ab3c-d52691b4dbfc

15 files changed:
LayoutTests/ChangeLog
LayoutTests/platform/gtk/Skipped
LayoutTests/platform/qt/Skipped
LayoutTests/platform/win/Skipped
LayoutTests/storage/quota-tracking-expected.txt [new file with mode: 0644]
LayoutTests/storage/quota-tracking.html [new file with mode: 0644]
LayoutTests/storage/success-callback-expected.txt [new file with mode: 0644]
LayoutTests/storage/success-callback.html [new file with mode: 0644]
WebKitTools/ChangeLog
WebKitTools/DumpRenderTree/LayoutTestController.cpp
WebKitTools/DumpRenderTree/LayoutTestController.h
WebKitTools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp
WebKitTools/DumpRenderTree/mac/LayoutTestControllerMac.mm
WebKitTools/DumpRenderTree/mac/UIDelegate.mm
WebKitTools/DumpRenderTree/win/LayoutTestControllerWin.cpp

index af7c6e4..df3c3ec 100644 (file)
@@ -1,3 +1,20 @@
+2008-02-13  Brady Eidson  <beidson@apple.com>
+
+        Reviewed by Darin Adler
+
+        Added layout tests to cover
+        http://trac.webkit.org/projects/webkit/changeset/29983
+        and
+        http://trac.webkit.org/projects/webkit/changeset/30184
+
+        * platform/gtk/Skipped:
+        * platform/qt/Skipped:
+        * platform/win/Skipped:
+        * storage/quota-tracking-expected.txt: Added.
+        * storage/quota-tracking.html: Added.
+        * storage/success-callback-expected.txt: Added.
+        * storage/success-callback.html: Added.
+
 2008-02-13  Darin Adler  <darin@apple.com>
 
         * platform/mac/svg/hixie/perf/001-expected.txt: Removed.
index ea683bd..3f82ae9 100644 (file)
@@ -1,2 +1,5 @@
 # print dialog hangs DRT
 editing/execCommand/print.html
+# Missing LayoutTestController implementations and database related delegate callback
+storage/quota-tracking.html
+storage/success-callback.html
index 7b3c65e..d5d0fcf 100644 (file)
@@ -881,3 +881,8 @@ webarchive/loading/test-loading-archive.html
 
 # ------- <video> support
 media
+
+# ------- storage support
+# Missing LayoutTestController implementations and database related delegate callback
+storage/quota-tracking.html
+storage/success-callback.html
index 1064f40..505877b 100644 (file)
@@ -362,3 +362,7 @@ http/tests/xmlhttprequest/failed-auth.html
 http/tests/xmlhttprequest/connection-error-sync.html
 plugins/netscape-plugin-setwindow-size.html
 svg/custom/gradient-stop-style-change.svg
+
+# Missing LayoutTestController implementations and database related delegate callback
+storage/quota-tracking.html
+storage/success-callback.html
diff --git a/LayoutTests/storage/quota-tracking-expected.txt b/LayoutTests/storage/quota-tracking-expected.txt
new file mode 100644 (file)
index 0000000..1243889
--- /dev/null
@@ -0,0 +1,11 @@
+UI DELEGATE DATABASE CALLBACK: exceededDatabaseQuotaForSecurityOrigin:{file, , 0} database:QuotaManagementDatabase2
+This test checks to make sure that quotas are enforced per-origin instead of per-database, as they were prior to http://trac.webkit.org/projects/webkit/changeset/29983.
+The test clears all databases, sets the quota for the origin to 32k, then tries to insert 17k of data into two databases. If things go as planned, the UI Delegate will be informed of the exceeded quota.
+Adding a table
+Inserting some data
+Done adding data
+Adding a table
+Inserting some data
+Done adding data
+Test Complete
+
diff --git a/LayoutTests/storage/quota-tracking.html b/LayoutTests/storage/quota-tracking.html
new file mode 100644 (file)
index 0000000..730ccb2
--- /dev/null
@@ -0,0 +1,83 @@
+<html>
+<head>
+<script>
+var database1;
+var database2;
+
+function log(message)
+{
+    document.getElementById("console").innerHTML += message + "<br>";
+}
+
+function finishTest()
+{
+    log("Test Complete");
+    if (window.layoutTestController)
+        layoutTestController.notifyDone();
+}
+
+function errorFunction(tx, error)
+{
+    log("Test failed - " + error.message);
+    finishTest();
+}
+
+function checkCompletion(db)
+{
+    log("Done adding data");
+
+    db.complete = true;
+    if (database1.complete && database2.complete)
+        finishTest();
+    else
+        testDatabase(database2);
+}
+
+function addData(db)
+{
+    db.transaction(function(tx) { 
+        log("Inserting some data");
+        tx.executeSql("INSERT INTO DataTest (randomData) VALUES (randomblob(17408))", [], function(tx, result) { }, errorFunction); 
+    }, errorFunction, function() { 
+        checkCompletion(db); 
+    });
+}
+
+function testDatabase(db)
+{
+    db.transaction(function(tx) {
+        log("Adding a table");
+        tx.executeSql("CREATE TABLE DataTest (randomData)", [], function(tx, result) { }, errorFunction); 
+    }, errorFunction, function() { 
+        addData(db); 
+    });
+}
+
+function runTest() {
+    if (window.layoutTestController) {
+        layoutTestController.clearAllDatabases();
+        layoutTestController.dumpDatabaseCallbacks();
+        layoutTestController.setDatabaseQuota(32768);
+        layoutTestController.dumpAsText();
+        layoutTestController.waitUntilDone();
+    }
+    
+    database1 = openDatabase("QuotaManagementDatabase1", "1.0", "Test for quota management <rdar://5628468>", 1);
+    database2 = openDatabase("QuotaManagementDatabase2", "1.0", "Test for quota management <rdar://5628468>", 1);
+    database1.complete = false;
+    database2.complete = false;
+    
+    testDatabase(database1);
+}
+
+</script>
+</head>
+
+<body onload="runTest()">
+This test checks to make sure that quotas are enforced per-origin instead of per-database, as they were prior to http://trac.webkit.org/projects/webkit/changeset/29983.<br>
+The test clears all databases, sets the quota for the origin to 32k, then tries to insert 17k of data into two databases.  If things go as planned, the UI Delegate will be informed of the exceeded quota.
+<pre id="console">
+</pre>
+</body>
+
+</html>
diff --git a/LayoutTests/storage/success-callback-expected.txt b/LayoutTests/storage/success-callback-expected.txt
new file mode 100644 (file)
index 0000000..7619024
--- /dev/null
@@ -0,0 +1,5 @@
+This test confirms that a successful transaction - both with and without a statement - receives its successCallback
+Transaction succeeded - Transaction with one statement
+Transaction succeeded - Empty transaction
+Test Complete
+
diff --git a/LayoutTests/storage/success-callback.html b/LayoutTests/storage/success-callback.html
new file mode 100644 (file)
index 0000000..2ac1898
--- /dev/null
@@ -0,0 +1,53 @@
+<html>
+<head>
+<script>
+
+function log(message)
+{
+    document.getElementById("console").innerHTML += message + "<br>";
+}
+
+function finishTest()
+{
+    log("Test Complete");
+    if (window.layoutTestController)
+        layoutTestController.notifyDone();
+}
+
+function errorFunction(tx, error)
+{
+    log("Test failed - " + error.message);
+    finishTest();
+}
+
+var successCount = 0;
+
+function successFunction(message)
+{
+    log("Transaction succeeded - " + message);
+    if (++successCount == 2)
+        finishTest();
+}
+
+function runTest() {
+    if (window.layoutTestController) {
+        layoutTestController.clearAllDatabases();
+        layoutTestController.dumpAsText();
+        layoutTestController.waitUntilDone();
+    }
+    
+    var database = openDatabase("SuccessCallbackDatabase", "1.0", "Test for success callback <rdar://5737692>", 1);
+    database.transaction(function(tx) { tx.executeSql("CREATE TABLE IF NOT EXISTS SuccessCallbackTest (randomData)", []); }, errorFunction, function() { successFunction("Transaction with one statement"); });
+    database.transaction(function(tx) { }, errorFunction, function() { successFunction("Empty transaction"); });
+}
+
+</script>
+</head>
+
+<body onload="runTest()">
+This test confirms that a successful transaction - both with and without a statement - receives its successCallback
+<pre id="console">
+</pre>
+</body>
+
+</html>
index 9c1b124..c457f9c 100644 (file)
@@ -1,3 +1,37 @@
+2008-02-13  Brady Eidson  <beidson@apple.com>
+
+        Reviewed by Darin Adler
+
+        Add some much needed Database support to DRT
+
+        * DumpRenderTree/LayoutTestController.cpp:
+        (LayoutTestController::LayoutTestController):
+        (dumpDatabaseCallbacksCallback): Flag to control if the UIDelegate methods related to
+          databases are called
+        (clearAllDatabasesCallback): Allow a test to delete all databases
+        (setDatabaseQuotaCallback): Allow a test to set the quota new origins will get
+        (LayoutTestController::staticFunctions):
+
+        * DumpRenderTree/LayoutTestController.h:
+        (LayoutTestController::dumpDatabaseCallbacks):
+        (LayoutTestController::setDumpDatabaseCallbacks):
+
+        * DumpRenderTree/mac/LayoutTestControllerMac.mm:
+        (LayoutTestController::clearAllDatabases):
+        (LayoutTestController::setDatabaseQuota):
+
+        * DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:
+        (LayoutTestController::clearAllDatabases): Stubbed out
+        (LayoutTestController::setDatabaseQuota): Ditto
+        * DumpRenderTree/win/LayoutTestControllerWin.cpp:
+        (LayoutTestController::clearAllDatabases): Stubbed out with error message
+        (LayoutTestController::setDatabaseQuota): Ditto
+
+        * DumpRenderTree/mac/UIDelegate.mm:
+        (-[UIDelegate webView:frame:exceededDatabaseQuotaForSecurityOrigin:database:]): Print a
+          message with details about the event then return a 5mb quota like before
+
+
 2008-02-12  Steve Falkenburg  <sfalken@apple.com>
 
         Changes to support merged MIDL output.
index bda93ce..6409f5b 100644 (file)
@@ -38,6 +38,7 @@ LayoutTestController::LayoutTestController(bool testRepaintDefault, bool testRep
     , m_dumpBackForwardList(false)
     , m_dumpChildFrameScrollPositions(false)
     , m_dumpChildFramesAsText(false)
+    , m_dumpDatabaseCallbacks(false)
     , m_dumpDOMAsWebArchive(false)
     , m_dumpSelectionRect(false)
     , m_dumpSourceAsWebArchive(false)
@@ -87,6 +88,13 @@ static JSValueRef dumpChildFrameScrollPositionsCallback(JSContextRef context, JS
     return JSValueMakeUndefined(context);
 }
 
+static JSValueRef dumpDatabaseCallbacksCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+    LayoutTestController* controller = reinterpret_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject));
+    controller->setDumpDatabaseCallbacks(true);
+    return JSValueMakeUndefined(context);
+}
+
 static JSValueRef dumpDOMAsWebArchiveCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
 {
     LayoutTestController* controller = reinterpret_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject));
@@ -215,6 +223,15 @@ static JSValueRef addDisallowedURLCallback(JSContextRef context, JSObjectRef fun
     return JSValueMakeUndefined(context);
 }
 
+static JSValueRef clearAllDatabasesCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+    // Has mac & windows implementation
+    LayoutTestController* controller = reinterpret_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject));
+    controller->clearAllDatabases();
+
+    return JSValueMakeUndefined(context);
+}
+
 static JSValueRef clearBackForwardListCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
 {
     // Has mac & windows implementation
@@ -432,6 +449,22 @@ static JSValueRef setCustomPolicyDelegateCallback(JSContextRef context, JSObject
     return JSValueMakeUndefined(context);
 }
 
+static JSValueRef setDatabaseQuotaCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+    // Has mac implementation
+    if (argumentCount < 1)
+        return JSValueMakeUndefined(context);
+
+    LayoutTestController* controller = reinterpret_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject));
+
+    double quota = JSValueToNumber(context, arguments[0], NULL);
+    if (!isnan(quota))
+        controller->setDatabaseQuota(static_cast<unsigned long long>(quota));
+        
+    return JSValueMakeUndefined(context);
+
+}
+
 static JSValueRef setMainFrameIsFirstResponderCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
 {
     // Has mac implementation
@@ -621,6 +654,7 @@ JSStaticFunction* LayoutTestController::staticFunctions()
     static JSStaticFunction staticFunctions[] = {
         { "addDisallowedURL", addDisallowedURLCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "addFileToPasteboardOnDrag", addFileToPasteboardOnDragCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+        { "clearAllDatabases", clearAllDatabasesCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "clearBackForwardList", clearBackForwardListCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "clearPersistentUserStyleSheet", clearPersistentUserStyleSheetCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "decodeHostName", decodeHostNameCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
@@ -629,6 +663,7 @@ JSStaticFunction* LayoutTestController::staticFunctions()
         { "dumpBackForwardList", dumpBackForwardListCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "dumpChildFramesAsText", dumpChildFramesAsTextCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "dumpChildFrameScrollPositions", dumpChildFrameScrollPositionsCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+        { "dumpDatabaseCallbacks", dumpDatabaseCallbacksCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "dumpDOMAsWebArchive", dumpDOMAsWebArchiveCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "dumpEditingCallbacks", dumpEditingCallbacksCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "dumpFrameLoadCallbacks", dumpFrameLoadCallbacksCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
@@ -653,6 +688,7 @@ JSStaticFunction* LayoutTestController::staticFunctions()
         { "setCanOpenWindows", setCanOpenWindowsCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "setCloseRemainingWindowsWhenComplete", setCloseRemainingWindowsWhenCompleteCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "setCustomPolicyDelegate", setCustomPolicyDelegateCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+        { "setDatabaseQuota", setDatabaseQuotaCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete }, 
         { "setMainFrameIsFirstResponder", setMainFrameIsFirstResponderCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "setPersistentUserStyleSheetLocation", setPersistentUserStyleSheetLocationCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "setPrivateBrowsingEnabled", setPrivateBrowsingEnabledCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
index 9677ffa..87e24f6 100644 (file)
@@ -40,6 +40,7 @@ public:
 
     // Controller Methods - platfrom independant implementations
     void addDisallowedURL(JSStringRef url);
+    void clearAllDatabases();
     void clearBackForwardList();
     JSStringRef copyDecodedHostName(JSStringRef name);
     JSStringRef copyEncodedHostName(JSStringRef name);
@@ -56,6 +57,7 @@ public:
     void setAcceptsEditing(bool acceptsEditing);
     void setAuthorAndUserStylesEnabled(bool);
     void setCustomPolicyDelegate(bool setDelegate);
+    void setDatabaseQuota(unsigned long long quota);
     void setMainFrameIsFirstResponder(bool flag);
     void setPrivateBrowsingEnabled(bool flag);
     void setPopupBlockingEnabled(bool flag);
@@ -79,6 +81,9 @@ public:
     bool dumpChildFramesAsText() const { return m_dumpChildFramesAsText; }
     void setDumpChildFramesAsText(bool dumpChildFramesAsText) { m_dumpChildFramesAsText = dumpChildFramesAsText; }
 
+    bool dumpDatabaseCallbacks() const { return m_dumpDatabaseCallbacks; }
+    void setDumpDatabaseCallbacks(bool dumpDatabaseCallbacks) { m_dumpDatabaseCallbacks = dumpDatabaseCallbacks; }
+
     bool dumpDOMAsWebArchive() const { return m_dumpDOMAsWebArchive; }
     void setDumpDOMAsWebArchive(bool dumpDOMAsWebArchive) { m_dumpDOMAsWebArchive = dumpDOMAsWebArchive; }
 
@@ -132,6 +137,7 @@ private:
     bool m_dumpBackForwardList;
     bool m_dumpChildFrameScrollPositions;
     bool m_dumpChildFramesAsText;
+    bool m_dumpDatabaseCallbacks;
     bool m_dumpDOMAsWebArchive;
     bool m_dumpSelectionRect;
     bool m_dumpSourceAsWebArchive;
index fead119..eae73db 100644 (file)
@@ -210,3 +210,14 @@ void LayoutTestController::clearPersistentUserStyleSheet()
 {
     // FIXME: implement
 }
+
+void LayoutTestController::clearAllDatabases()
+{
+    // FIXME: implement
+}
+void LayoutTestController::setDatabaseQuota(unsigned long long quota)
+{    
+    // FIXME: implement
+}
+
index b321319..4774310 100644 (file)
 #import <JavaScriptCore/JSStringRef.h>
 #import <JavaScriptCore/JSStringRefCF.h>
 #import <WebKit/WebBackForwardList.h>
+#import <WebKit/WebDatabaseManagerPrivate.h>
 #import <WebKit/WebFrame.h>
 #import <WebKit/WebHTMLViewPrivate.h>
 #import <WebKit/WebHistory.h>
 #import <WebKit/WebNSURLExtras.h>
 #import <WebKit/WebPreferences.h>
 #import <WebKit/WebPreferencesPrivate.h>
+#import <WebKit/WebSecurityOriginPrivate.h>
 #import <WebKit/WebView.h>
 #import <WebKit/WebViewPrivate.h>
 #import <wtf/RetainPtr.h>
@@ -65,6 +67,11 @@ void LayoutTestController::addDisallowedURL(JSStringRef url)
     CFSetAddValue(disallowedURLs, [request URL]);
 }
 
+void LayoutTestController::clearAllDatabases()
+{
+    [[WebDatabaseManager sharedWebDatabaseManager] deleteAllDatabases];
+}
+
 void LayoutTestController::clearBackForwardList()
 {
     WebBackForwardList *backForwardList = [[mainFrame webView] backForwardList];
@@ -170,6 +177,13 @@ void LayoutTestController::setCustomPolicyDelegate(bool setDelegate)
         [[mainFrame webView] setPolicyDelegate:nil];
 }
 
+void LayoutTestController::setDatabaseQuota(unsigned long long quota)
+{    
+    WebSecurityOrigin *origin = [[WebSecurityOrigin alloc] initWithProtocol:@"file" domain:nil];
+    [origin setQuota:quota];
+    [origin release];
+}
+
 void LayoutTestController::setMainFrameIsFirstResponder(bool flag)
 {
     NSView *documentView = [[mainFrame frameView] documentView];
index 29f3ddd..dd804a6 100644 (file)
@@ -128,7 +128,11 @@ DumpRenderTreeDraggingInfo *draggingInfo = nil;
 
 - (void)webView:(WebView *)sender frame:(WebFrame *)frame exceededDatabaseQuotaForSecurityOrigin:(WebSecurityOrigin *)origin database:(NSString *)databaseIdentifier
 {
-    static const unsigned long long defaultQuota = 5 * 1024 * 1024;
+    if (!done && layoutTestController->dumpDatabaseCallbacks())
+        printf("UI DELEGATE DATABASE CALLBACK: exceededDatabaseQuotaForSecurityOrigin:{%s, %s, %i} database:%s\n", [[origin protocol] UTF8String], [[origin domain] UTF8String], 
+            [origin port], [databaseIdentifier UTF8String]);
+
+    static const unsigned long long defaultQuota = 5 * 1024 * 1024;    
     [origin setQuota:defaultQuota];
 }
 
index 340138d..373091b 100644 (file)
@@ -551,3 +551,13 @@ void LayoutTestController::execCommand(JSStringRef name, JSStringRef value)
     SysFreeString(nameBSTR);
     SysFreeString(valueBSTR);
 }
+
+void LayoutTestController::clearAllDatabases()
+{
+    printf("ERROR: LayoutTestController::clearAllDatabases() not implemented\n");
+}
+void LayoutTestController::setDatabaseQuota(unsigned long long quota)
+{    
+    printf("ERROR: LayoutTestController::setDatabaseQuota() not implemented\n");
+}