Changeset 56572 in webkit


Ignore:
Timestamp:
Mar 25, 2010 3:29:39 PM (14 years ago)
Author:
dumi@chromium.org
Message:

WebCore: Changing the V8 and JSC implementations of
SQLStatementErrorCallback to interpret as false all results that
could be converted to a false boolean. Pretty much a revert of
r54981.

Reviewed by Dimitri Glazkov.

https://bugs.webkit.org/show_bug.cgi?id=36569

  • bindings/js/JSCustomSQLStatementErrorCallback.cpp:

(WebCore::JSCustomSQLStatementErrorCallback::handleEvent):

  • bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:

(WebCore::V8CustomSQLStatementErrorCallback::handleEvent):

  • bindings/v8/custom/V8CustomVoidCallback.cpp:

(WebCore::invokeCallback):

  • bindings/v8/custom/V8CustomVoidCallback.h:

LayoutTests: Updating the test to conform to the latest spec changes.

Reviewed by Dimitri Glazkov.

  • storage/statement-error-callback-expected.txt:
  • storage/statement-error-callback.html:
Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r56567 r56572  
     12010-03-24  Dumitru Daniliuc  <dumi@chromium.org>
     2
     3        Reviewed by Dimitri Glazkov.
     4
     5        Updating the test to conform to the latest spec changes.
     6
     7        * storage/statement-error-callback-expected.txt:
     8        * storage/statement-error-callback.html:
     9
    1102010-03-25  Ojan Vafai  <ojan@chromium.org>
    211
  • trunk/LayoutTests/storage/statement-error-callback-expected.txt

    r54981 r56572  
    77PASS - the transaction error callback was invoked.
    88PASS - the transaction error callback was invoked.
    9 PASS - the transaction error callback was invoked.
     9PASS - the transaction success callback was invoked.
     10PASS - the transaction success callback was invoked.
     11PASS - the transaction success callback was invoked.
     12PASS - the transaction success callback was invoked.
    1013Test Complete
    1114
  • trunk/LayoutTests/storage/statement-error-callback.html

    r54981 r56572  
    1616
    1717var txCallbackCount = 0;
    18 var NUMBER_OF_TRANSACTIONS = 7;
     18var NUMBER_OF_TRANSACTIONS = 10;
    1919var database;
    2020
    21 function transactionErrorFunction(error)
    22 {
    23     log("PASS - the transaction error callback was invoked.");
    24     if (++txCallbackCount == NUMBER_OF_TRANSACTIONS)
    25         finishTest();
    26 }
    27 
    28 function transactionSuccessFunction(message)
    29 {
    30     log("FAIL - the transaction success callback should not be invoked.");
    31     if (++txCallbackCount == NUMBER_OF_TRANSACTIONS)
    32         finishTest();
    33 }
    34 
    35 function runTransactionExpectedToFail(statementErrorCallback)
     21function runTransaction(expectedToFail, statementErrorCallback)
    3622{
    3723    database.transaction(function(tx) {
    38         tx.executeSql("CREATE TABLE IF NOT EXISTS StatementErrorCallbackTest (randomData)");
    39         tx.executeSql("INSERT INTO StatementErrorCallbackTest (randomData) VALUES (?)", ['test']);
     24        tx.executeSql("CREATE TABLE IF NOT EXISTS TestTable (RandomData TEXT)");
     25        tx.executeSql("INSERT INTO TestTable VALUES (?)", ['test']);
    4026        tx.executeSql("THIS STATEMENT WILL FAIL", [],
    4127            function(tx, data) {
     
    4329                finishTest();
    4430            }, statementErrorCallback);
    45         tx.executeSql("INSERT INTO StatementErrorCallbackTest (randomData) VALUES (?)", ['test1'],
    46             function(error) { log("FAIL - This statement should not have been executed"); },
    47             function() { log("FAIL - This statement should not have been executed"); });
    48     }, transactionErrorFunction, transactionSuccessFunction);
     31        tx.executeSql("INSERT INTO TestTable VALUES (?)", ['test1'],
     32            function(error) {
     33                if (expectedToFail)
     34                    log("FAIL - This statement should not have been executed");
     35            }, function() {
     36                if (expectedToFail)
     37                    log("FAIL - This statement should not have been executed");
     38            });
     39    }, function(error) {
     40        if (expectedToFail)
     41            log("PASS - the transaction error callback was invoked.");
     42        else
     43            log("FAIL - the transaction error callback should not have been invoked.");
     44        if (++txCallbackCount == NUMBER_OF_TRANSACTIONS)
     45            finishTest();
     46    }, function() {
     47        if (expectedToFail)
     48            log("FAIL - the transaction success callback should not have been invoked.");
     49        else
     50            log("PASS - the transaction success callback was invoked.");
     51        if (++txCallbackCount == NUMBER_OF_TRANSACTIONS)
     52            finishTest();
     53    });
    4954}
    5055
     
    5762    }
    5863
    59     database = openDatabase("bug-28872", "1.0", "statement error callback test", 1024);
    60     database.transaction(function(tx) {
    61         tx.executeSql("CREATE TABLE IF NOT EXISTS StatementErrorCallbackTest (randomData)");
    62         tx.executeSql("INSERT INTO StatementErrorCallbackTest (randomData) VALUES (?)", ['test']);
    63         tx.executeSql("THIS STATEMENT WILL FAIL", [],
    64             function(tx, data) {
    65                 log("FAIL - this statement should have failed");
    66                 finishTest();
    67             }, function(tx, error) { return false; });
    68         tx.executeSql("INSERT INTO StatementErrorCallbackTest (randomData) VALUES (?)", ['test1'],
    69             function(tx, data) { },
    70             function(tx, error) { log("FAIL - This statement should not have caused an error"); });
    71     }, function(error) { log("FAIL - The transaction error callback should not have been invoked"); },
    72     function() { });
     64    database = openDatabase("StatementErrorCallbackTest", "1.0", "statement error callback test", 1024);
    7365
    74     runTransactionExpectedToFail(function(error) { return true; });
    75     runTransactionExpectedToFail(function(error) { throw "Exception in statement error callback"; return false; });
    76     runTransactionExpectedToFail(function(error) {});
    77     runTransactionExpectedToFail(function(error) { return null; });
    78     runTransactionExpectedToFail(function(error) { return "some string"; });
    79     runTransactionExpectedToFail(function(error) { return 1234; });
    80     runTransactionExpectedToFail(function(error) { return {a: 2, b: "abc"}; });
     66    runTransaction(true, function(error) { return true; });
     67    runTransaction(true, function(error) { throw "Exception in statement error callback"; return false; });
     68    runTransaction(true, function(error) { return "some string"; });
     69    runTransaction(true, function(error) { return 1234; });
     70    runTransaction(true, function(error) { return {a: 2, b: "abc"}; });
     71    runTransaction(true, function(error) { return "false"; });
     72    runTransaction(false, function(error) {});
     73    runTransaction(false, function(error) { return false; });
     74    runTransaction(false, function(error) { return 0; });
     75    runTransaction(false, function(error) { return null; });
    8176}
    8277
  • trunk/WebCore/ChangeLog

    r56570 r56572  
     12010-03-24  Dumitru Daniliuc  <dumi@chromium.org>
     2
     3        Reviewed by Dimitri Glazkov.
     4
     5        Changing the V8 and JSC implementations of
     6        SQLStatementErrorCallback to interpret as false all results that
     7        could be converted to a false boolean. Pretty much a revert of
     8        r54981.
     9
     10        https://bugs.webkit.org/show_bug.cgi?id=36569
     11
     12        * bindings/js/JSCustomSQLStatementErrorCallback.cpp:
     13        (WebCore::JSCustomSQLStatementErrorCallback::handleEvent):
     14        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:
     15        (WebCore::V8CustomSQLStatementErrorCallback::handleEvent):
     16        * bindings/v8/custom/V8CustomVoidCallback.cpp:
     17        (WebCore::invokeCallback):
     18        * bindings/v8/custom/V8CustomVoidCallback.h:
     19
    1202010-03-25  Dmitry Titov  <dimich@chromium.org>
    221
  • trunk/WebCore/bindings/js/JSCustomSQLStatementErrorCallback.cpp

    r54981 r56572  
    7878        return true;
    7979    }
    80     return !result.isFalse();
     80    return result.toBoolean(exec);
    8181}
    8282
  • trunk/WebCore/bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp

    r54981 r56572  
    7676    // the error callback did not return false, or there was no error callback.
    7777    // Jump to the last step in the overall steps.
    78     return invokeCallbackTreatOnlyExplicitFalseAsFalse(m_callback, 2, argv, callbackReturnValue) || callbackReturnValue;
     78    return invokeCallback(m_callback, 2, argv, callbackReturnValue) || callbackReturnValue;
    7979}
    8080
  • trunk/WebCore/bindings/v8/custom/V8CustomVoidCallback.cpp

    r54981 r56572  
    3030
    3131#include "config.h"
    32 #include "V8Binding.h"
    3332#include "V8CustomVoidCallback.h"
    3433
    3534#include "Frame.h"
     35#include "V8Binding.h"
    3636
    3737namespace WebCore {
     
    6565}
    6666
    67 static bool invokeCallbackHelper(v8::Persistent<v8::Object> callback, int argc, v8::Handle<v8::Value> argv[], v8::Handle<v8::Value>& returnValue)
     67bool invokeCallback(v8::Persistent<v8::Object> callback, int argc, v8::Handle<v8::Value> argv[], bool& callbackReturnValue)
    6868{
    6969    v8::TryCatch exceptionCatcher;
     
    7474    } else if (callback->IsObject()) {
    7575        v8::Local<v8::Value> handleEventFunction = callback->Get(v8::String::NewSymbol("handleEvent"));
    76         if (handleEventFunction->IsFunction()) {
     76        if (handleEventFunction->IsFunction())
    7777            callbackFunction = v8::Local<v8::Function>::Cast(handleEventFunction);
    78         }
    7978    } else
    8079        return false;
     
    8887    ASSERT(proxy);
    8988
    90     returnValue = proxy->callFunction(callbackFunction, thisObject, argc, argv);
     89    v8::Handle<v8::Value> result = proxy->callFunction(callbackFunction, thisObject, argc, argv);
     90    callbackReturnValue = !result.IsEmpty() && result->IsBoolean() && result->BooleanValue();
    9191
    9292    if (exceptionCatcher.HasCaught()) {
     
    9999}
    100100
    101 bool invokeCallback(v8::Persistent<v8::Object> callback, int argc, v8::Handle<v8::Value> argv[], bool& callbackReturnValue)
    102 {
    103     v8::Handle<v8::Value> returnValue;
    104     bool result = invokeCallbackHelper(callback, argc, argv, returnValue);
    105     callbackReturnValue = !returnValue.IsEmpty() && returnValue->IsBoolean() && returnValue->BooleanValue();
    106     return result;
    107 }
    108 
    109 bool invokeCallbackTreatOnlyExplicitFalseAsFalse(v8::Persistent<v8::Object> callback, int argc, v8::Handle<v8::Value> argv[], bool& callbackReturnValue)
    110 {
    111     v8::Handle<v8::Value> returnValue;
    112     bool result = invokeCallbackHelper(callback, argc, argv, returnValue);
    113     callbackReturnValue = !returnValue.IsEmpty() && !returnValue->IsFalse();
    114     return result;
    115 }
    116 
    117101} // namespace WebCore
  • trunk/WebCore/bindings/v8/custom/V8CustomVoidCallback.h

    r54981 r56572  
    6161// Returns false if callback failed (null, wrong type, or threw exception).
    6262bool invokeCallback(v8::Persistent<v8::Object> callback, int argc, v8::Handle<v8::Value> argv[], bool& callbackReturnValue);
    63 bool invokeCallbackTreatOnlyExplicitFalseAsFalse(v8::Persistent<v8::Object> callback, int argc, v8::Handle<v8::Value> argv[], bool& callbackReturnValue);
    6463
    6564} // namespace WebCore
Note: See TracChangeset for help on using the changeset viewer.