Changeset 99229 in webkit


Ignore:
Timestamp:
Nov 3, 2011 12:41:31 PM (12 years ago)
Author:
commit-queue@webkit.org
Message:

IndexedDB result of deleting a record should be true or false
https://bugs.webkit.org/show_bug.cgi?id=60197

Patch by Joshua Bell <jsbell@chromium.org> on 2011-11-03
Reviewed by David Levin.

Source/WebCore:

IDBObjectStore.delete() was incorrectly firing an error if there
was no record to remove. Match the spec, and return true/false
as success values instead. Bring JSC binding implementation of
SerializedScriptValue more in line with V8 version for methods
called from IDB code.

Test: storage/indexeddb/mozilla/delete-result.html

  • bindings/js/SerializedScriptValue.cpp:

(WebCore::SerializedScriptValue::createFromWire):
(WebCore::SerializedScriptValue::undefinedValue):
(WebCore::SerializedScriptValue::booleanValue):

  • bindings/js/SerializedScriptValue.h:
  • bindings/v8/SerializedScriptValue.cpp:

(WebCore::SerializedScriptValue::nullValue):
(WebCore::SerializedScriptValue::undefinedValue):
(WebCore::SerializedScriptValue::booleanValue):

  • bindings/v8/SerializedScriptValue.h:
  • storage/IDBObjectStoreBackendImpl.cpp:

(WebCore::IDBObjectStoreBackendImpl::deleteInternal):

LayoutTests:

Add tests for IDBObjectStore.delete() - should succeed if
record exists or not, and return true/false as success value.

  • storage/indexeddb/mozilla/delete-result-expected.txt: Added.
  • storage/indexeddb/mozilla/delete-result.html: Added.
  • storage/indexeddb/objectstore-basics-expected.txt:
  • storage/indexeddb/objectstore-basics.html:
Location:
trunk
Files:
2 added
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r99228 r99229  
     12011-11-03  Joshua Bell  <jsbell@chromium.org>
     2
     3        IndexedDB result of deleting a record should be true or false
     4        https://bugs.webkit.org/show_bug.cgi?id=60197
     5
     6        Reviewed by David Levin.
     7
     8        Add tests for IDBObjectStore.delete() - should succeed if
     9        record exists or not, and return true/false as success value.
     10
     11        * storage/indexeddb/mozilla/delete-result-expected.txt: Added.
     12        * storage/indexeddb/mozilla/delete-result.html: Added.
     13        * storage/indexeddb/objectstore-basics-expected.txt:
     14        * storage/indexeddb/objectstore-basics.html:
     15
    1162011-11-03  Adam Barth  <abarth@webkit.org>
    217
  • trunk/LayoutTests/storage/indexeddb/objectstore-basics-expected.txt

    r98563 r99229  
    9191store.delete('key')
    9292removeSuccess():
    93 PASS event.target.result is null
     93PASS event.target.result is true
     94store.delete('key')
     95removeSuccessButFalse():
     96PASS event.target.result is false
    9497store = event.target.source
    9598Passing an invalid key into store.get().
  • trunk/LayoutTests/storage/indexeddb/objectstore-basics.html

    r99220 r99229  
    237237{
    238238    debug("removeSuccess():");
    239     shouldBeNull("event.target.result");
     239    shouldBe("event.target.result", "true");
     240
     241    request = evalAndLog("store.delete('key')");
     242    request.onsuccess = removeSuccessButFalse;
     243    request.onerror = unexpectedErrorCallback;
     244}
     245
     246function removeSuccessButFalse()
     247{
     248    debug("removeSuccessButFalse():");
     249    shouldBe("event.target.result", "false");
    240250    var store = evalAndLog("store = event.target.source");
    241251
  • trunk/Source/WebCore/ChangeLog

    r99228 r99229  
     12011-11-03  Joshua Bell  <jsbell@chromium.org>
     2
     3        IndexedDB result of deleting a record should be true or false
     4        https://bugs.webkit.org/show_bug.cgi?id=60197
     5
     6        Reviewed by David Levin.
     7
     8        IDBObjectStore.delete() was incorrectly firing an error if there
     9        was no record to remove. Match the spec, and return true/false
     10        as success values instead. Bring JSC binding implementation of
     11        SerializedScriptValue more in line with V8 version for methods
     12        called from IDB code.
     13
     14        Test: storage/indexeddb/mozilla/delete-result.html
     15
     16        * bindings/js/SerializedScriptValue.cpp:
     17        (WebCore::SerializedScriptValue::createFromWire):
     18        (WebCore::SerializedScriptValue::undefinedValue):
     19        (WebCore::SerializedScriptValue::booleanValue):
     20        * bindings/js/SerializedScriptValue.h:
     21        * bindings/v8/SerializedScriptValue.cpp:
     22        (WebCore::SerializedScriptValue::nullValue):
     23        (WebCore::SerializedScriptValue::undefinedValue):
     24        (WebCore::SerializedScriptValue::booleanValue):
     25        * bindings/v8/SerializedScriptValue.h:
     26        * storage/IDBObjectStoreBackendImpl.cpp:
     27        (WebCore::IDBObjectStoreBackendImpl::deleteInternal):
     28
    1292011-11-03  Adam Barth  <abarth@webkit.org>
    230
  • trunk/Source/WebCore/bindings/js/SerializedScriptValue.cpp

    r99126 r99229  
    127127 *    | ZeroTag
    128128 *    | OneTag
     129 *    | FalseTag
     130 *    | TrueTag
    129131 *    | DoubleTag <value:double>
    130132 *    | DateTag <value:double>
     
    271273        writeLittleEndian(out, s.length());
    272274        return writeLittleEndian(out, s.impl()->characters(), s.length());
     275    }
     276
     277    static void serializeUndefined(Vector<uint8_t>& out)
     278    {
     279        writeLittleEndian(out, CurrentVersion);
     280        writeLittleEndian<uint8_t>(out, UndefinedTag);
     281    }
     282
     283    static void serializeBoolean(bool value, Vector<uint8_t>& out)
     284    {
     285        writeLittleEndian(out, CurrentVersion);
     286        writeLittleEndian<uint8_t>(out, value ? TrueTag : FalseTag);
    273287    }
    274288
     
    14671481}
    14681482
     1483PassRefPtr<SerializedScriptValue> SerializedScriptValue::undefinedValue()
     1484{
     1485    Vector<uint8_t> buffer;
     1486    CloneSerializer::serializeUndefined(buffer);
     1487    return adoptRef(new SerializedScriptValue(buffer));
     1488}
     1489
     1490PassRefPtr<SerializedScriptValue> SerializedScriptValue::booleanValue(bool value)
     1491{
     1492    Vector<uint8_t> buffer;
     1493    CloneSerializer::serializeBoolean(value, buffer);
     1494    return adoptRef(new SerializedScriptValue(buffer));
     1495}
     1496
    14691497void SerializedScriptValue::maybeThrowExceptionIfSerializationFailed(ExecState* exec, SerializationReturnCode code)
    14701498{
  • trunk/Source/WebCore/bindings/js/SerializedScriptValue.h

    r97576 r99229  
    6969    static PassRefPtr<SerializedScriptValue> create();
    7070    static SerializedScriptValue* nullValue();
     71    static PassRefPtr<SerializedScriptValue> undefinedValue();
     72    static PassRefPtr<SerializedScriptValue> booleanValue(bool value);
    7173
    7274    String toString();
  • trunk/Source/WebCore/bindings/v8/SerializedScriptValue.cpp

    r98316 r99229  
    19321932SerializedScriptValue* SerializedScriptValue::nullValue()
    19331933{
     1934    // FIXME: This is not thread-safe. Move caching to callers.
     1935    // https://bugs.webkit.org/show_bug.cgi?id=70833
    19341936    DEFINE_STATIC_LOCAL(RefPtr<SerializedScriptValue>, nullValue, (0));
    19351937    if (!nullValue) {
     
    19421944}
    19431945
    1944 SerializedScriptValue* SerializedScriptValue::undefinedValue()
     1946PassRefPtr<SerializedScriptValue> SerializedScriptValue::undefinedValue()
    19451947{
    1946     DEFINE_STATIC_LOCAL(RefPtr<SerializedScriptValue>, undefinedValue, (0));
    1947     if (!undefinedValue) {
    1948         Writer writer;
    1949         writer.writeUndefined();
    1950         String wireData = StringImpl::adopt(writer.data());
    1951         undefinedValue = adoptRef(new SerializedScriptValue(wireData));
    1952     }
    1953     return undefinedValue.get();
     1948    Writer writer;
     1949    writer.writeUndefined();
     1950    String wireData = StringImpl::adopt(writer.data());
     1951    return adoptRef(new SerializedScriptValue(wireData));
     1952}
     1953
     1954PassRefPtr<SerializedScriptValue> SerializedScriptValue::booleanValue(bool value)
     1955{
     1956    Writer writer;
     1957    if (value)
     1958        writer.writeTrue();
     1959    else
     1960        writer.writeFalse();
     1961    String wireData = StringImpl::adopt(writer.data());
     1962    return adoptRef(new SerializedScriptValue(wireData));
    19541963}
    19551964
  • trunk/Source/WebCore/bindings/v8/SerializedScriptValue.h

    r97516 r99229  
    6161
    6262    static SerializedScriptValue* nullValue();
    63     static SerializedScriptValue* undefinedValue();
     63    static PassRefPtr<SerializedScriptValue> undefinedValue();
     64    static PassRefPtr<SerializedScriptValue> booleanValue(bool value);
    6465
    6566    PassRefPtr<SerializedScriptValue> release();
  • trunk/Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp

    r98278 r99229  
    315315    RefPtr<IDBBackingStore::ObjectStoreRecordIdentifier> recordIdentifier = objectStore->m_backingStore->createInvalidRecordIdentifier();
    316316    if (!objectStore->m_backingStore->keyExistsInObjectStore(objectStore->m_databaseId, objectStore->id(), *key, recordIdentifier.get())) {
    317         callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::NOT_FOUND_ERR, "Key does not exist in the object store."));
     317        callbacks->onSuccess(SerializedScriptValue::booleanValue(false));
    318318        return;
    319319    }
     
    328328
    329329    objectStore->m_backingStore->deleteObjectStoreRecord(objectStore->m_databaseId, objectStore->id(), recordIdentifier.get());
    330     callbacks->onSuccess(SerializedScriptValue::nullValue());
     330    callbacks->onSuccess(SerializedScriptValue::booleanValue(true));
    331331}
    332332
Note: See TracChangeset for help on using the changeset viewer.