Changeset 105137 in webkit


Ignore:
Timestamp:
Jan 17, 2012 2:51:55 AM (12 years ago)
Author:
jsbell@chromium.org
Message:

IndexedDB: IDBIndex.get/getKey should yield undefined, not an error
https://bugs.webkit.org/show_bug.cgi?id=76116

Source/WebCore:

Pass an undefined value (for IDBIndex.get()) or a null key
(for IDBIndex.getKey()) back as the result, rather than raising
an exception.

Reviewed by Adam Barth.

Tests: storage/indexeddb/index-basics.html

storage/indexeddb/cursor-index-delete.html
storage/indexeddb/duplicates.html

  • storage/IDBIndexBackendImpl.cpp:

(WebCore::IDBIndexBackendImpl::getInternal):

  • storage/IDBRequest.cpp:

(WebCore::IDBRequest::onSuccess):

LayoutTests:

Reviewed by Adam Barth.

  • storage/indexeddb/cursor-index-delete-expected.txt:
  • storage/indexeddb/cursor-index-delete.html:
  • storage/indexeddb/duplicates-expected.txt:
  • storage/indexeddb/duplicates.html:
  • storage/indexeddb/index-basics-expected.txt:
  • storage/indexeddb/index-basics.html:
Location:
trunk
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r105136 r105137  
     12012-01-17  Joshua Bell  <jsbell@chromium.org>
     2
     3        IndexedDB: IDBIndex.get/getKey should yield undefined, not an error
     4        https://bugs.webkit.org/show_bug.cgi?id=76116
     5
     6        Reviewed by Adam Barth.
     7
     8        * storage/indexeddb/cursor-index-delete-expected.txt:
     9        * storage/indexeddb/cursor-index-delete.html:
     10        * storage/indexeddb/duplicates-expected.txt:
     11        * storage/indexeddb/duplicates.html:
     12        * storage/indexeddb/index-basics-expected.txt:
     13        * storage/indexeddb/index-basics.html:
     14
    1152012-01-17  Philippe Normand  <pnormand@igalia.com>
    216
  • trunk/LayoutTests/storage/indexeddb/cursor-index-delete-expected.txt

    r80171 r105137  
    4444event.target.result.delete()
    4545index.get(1)
    46 event.preventDefault()
     46PASS event.target.result is undefined
    4747PASS successfullyParsed is true
    4848
  • trunk/LayoutTests/storage/indexeddb/cursor-index-delete.html

    r99258 r105137  
    105105    evalAndLog("event.target.result.delete()");
    106106    request = evalAndLog("index.get(1)");
    107     request.onsuccess = unexpectedSuccessCallback;
    108     request.onerror = verifyObjectDeleted;
     107    request.onsuccess = verifyObjectDeleted;
     108    request.onerror = unexpectedErrorCallback;
    109109}
    110110
    111111function verifyObjectDeleted()
    112112{
    113     evalAndLog("event.preventDefault()");
     113    shouldBe("event.target.result", "undefined");
    114114    done();
    115115}
  • trunk/LayoutTests/storage/indexeddb/duplicates-expected.txt

    r80171 r105137  
    2121PASS event.target.result.y is "zzz"
    2222indexObject.getKey('does not exist')
    23 PASS event.target.errorCode is webkitIDBDatabaseException.NOT_FOUND_ERR
    24 event.preventDefault()
     23PASS event.target.result is undefined
    2524indexObject.get('does not exist')
    26 PASS event.target.errorCode is webkitIDBDatabaseException.NOT_FOUND_ERR
    27 event.preventDefault()
     25PASS event.target.result is undefined
    2826indexObject.openKeyCursor()
    2927PASS event.target.result === null is false
     
    6563PASS event.target.result.y is "zzz"
    6664indexObject.getKey('does not exist')
    67 PASS event.target.errorCode is webkitIDBDatabaseException.NOT_FOUND_ERR
    68 event.preventDefault()
     65PASS event.target.result is undefined
    6966indexObject.get('does not exist')
    70 PASS event.target.errorCode is webkitIDBDatabaseException.NOT_FOUND_ERR
    71 event.preventDefault()
     67PASS event.target.result is undefined
    7268indexObject.openKeyCursor()
    7369PASS event.target.result === null is false
  • trunk/LayoutTests/storage/indexeddb/duplicates.html

    r99258 r105137  
    8383
    8484    request = evalAndLog("indexObject.getKey('does not exist')");
    85     request.onsuccess = unexpectedSuccessCallback;
    86     request.onerror = getObjectDataFail;
     85    request.onsuccess = getObjectDataFail;
     86    request.onerror = unexpectedErrorCallback;
    8787}
    8888
    8989function getObjectDataFail()
    9090{
    91     shouldBe("event.target.errorCode", "webkitIDBDatabaseException.NOT_FOUND_ERR");
    92 
    93     evalAndLog("event.preventDefault()");
     91    shouldBe("event.target.result", "undefined");
    9492
    9593    request = evalAndLog("indexObject.get('does not exist')");
    96     request.onsuccess = unexpectedSuccessCallback;
    97     request.onerror = openKeyCursor;
     94    request.onsuccess = openKeyCursor;
     95    request.onerror = unexpectedErrorCallback;
    9896}
    9997
    10098function openKeyCursor()
    10199{
    102     shouldBe("event.target.errorCode", "webkitIDBDatabaseException.NOT_FOUND_ERR");
    103 
    104     evalAndLog("event.preventDefault()");
     100    shouldBe("event.target.result", "undefined");
    105101
    106102    window.request = evalAndLog("indexObject.openKeyCursor()");
  • trunk/LayoutTests/storage/indexeddb/index-basics-expected.txt

    r103100 r105137  
    5050PASS event.target.result.y is "zzz"
    5151indexObject.getKey('does not exist')
    52 PASS event.target.errorCode is webkitIDBDatabaseException.NOT_FOUND_ERR
    53 event.preventDefault()
     52PASS event.target.result is undefined
    5453indexObject.get('does not exist')
    55 PASS event.target.errorCode is webkitIDBDatabaseException.NOT_FOUND_ERR
    56 event.preventDefault()
     54PASS event.target.result is undefined
    5755indexObject4.getKey('value2')
    5856PASS event.target.result is "key2"
  • trunk/LayoutTests/storage/indexeddb/index-basics.html

    r103100 r105137  
    1010
    1111description("Test the basics of IndexedDB's webkitIDBIndex.");
    12 if (window.layoutTestController) 
     12if (window.layoutTestController)
    1313    layoutTestController.waitUntilDone();
    1414
     
    130130
    131131    request = evalAndLog("indexObject.getKey('does not exist')");
    132     request.onsuccess = unexpectedSuccessCallback;
    133     request.onerror = getObjectDataFail;
     132    request.onsuccess = getObjectDataFail;
     133    request.onerror = unexpectedSuccessCallback;
    134134}
    135135
    136136function getObjectDataFail()
    137137{
    138     shouldBe("event.target.errorCode", "webkitIDBDatabaseException.NOT_FOUND_ERR");
    139 
    140     evalAndLog("event.preventDefault()");
     138    shouldBe("event.target.result", "undefined");
    141139
    142140    request = evalAndLog("indexObject.get('does not exist')");
    143     request.onsuccess = unexpectedSuccessCallback;
    144     request.onerror = getObjectData4;
     141    request.onsuccess = getObjectData4;
     142    request.onerror = unexpectedSuccessCallback;
    145143}
    146144
    147145function getObjectData4()
    148146{
    149     shouldBe("event.target.errorCode", "webkitIDBDatabaseException.NOT_FOUND_ERR");
    150     evalAndLog("event.preventDefault()");
     147    shouldBe("event.target.result", "undefined");
    151148
    152149    request = evalAndLog("indexObject4.getKey('value2')");
  • trunk/Source/WebCore/ChangeLog

    r105135 r105137  
     12012-01-17  Joshua Bell  <jsbell@chromium.org>
     2
     3        IndexedDB: IDBIndex.get/getKey should yield undefined, not an error
     4        https://bugs.webkit.org/show_bug.cgi?id=76116
     5
     6        Pass an undefined value (for IDBIndex.get()) or a null key
     7        (for IDBIndex.getKey()) back as the result, rather than raising
     8        an exception.
     9
     10        Reviewed by Adam Barth.
     11
     12        Tests: storage/indexeddb/index-basics.html
     13               storage/indexeddb/cursor-index-delete.html
     14               storage/indexeddb/duplicates.html
     15
     16        * storage/IDBIndexBackendImpl.cpp:
     17        (WebCore::IDBIndexBackendImpl::getInternal):
     18        * storage/IDBRequest.cpp:
     19        (WebCore::IDBRequest::onSuccess):
     20
    1212012-01-17  Luke Macpherson   <macpherson@chromium.org>
    222
  • trunk/Source/WebCore/storage/IDBIndexBackendImpl.cpp

    r104771 r105137  
    152152        String value = index->m_backingStore->getObjectViaIndex(index->m_databaseId, index->m_objectStoreBackend->id(), index->id(), *key);
    153153        if (value.isNull()) {
    154             callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::NOT_FOUND_ERR, "Key does not exist in the index."));
     154            callbacks->onSuccess(SerializedScriptValue::undefinedValue());
    155155            return;
    156156        }
     
    159159        RefPtr<IDBKey> keyResult = index->m_backingStore->getPrimaryKeyViaIndex(index->m_databaseId, index->m_objectStoreBackend->id(), index->id(), *key);
    160160        if (!keyResult) {
    161             callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::NOT_FOUND_ERR, "Key does not exist in the index."));
     161            callbacks->onSuccess(static_cast<IDBKey*>(0));
    162162            return;
    163163        }
  • trunk/Source/WebCore/storage/IDBRequest.cpp

    r101645 r105137  
    232232{
    233233    ASSERT(!m_errorCode && m_errorMessage.isNull() && !m_result);
    234     m_result = IDBAny::create(idbKey);
     234    if (idbKey && idbKey->valid())
     235        m_result = IDBAny::create(idbKey);
     236    else
     237        m_result = IDBAny::create(SerializedScriptValue::undefinedValue());
    235238    enqueueEvent(createSuccessEvent());
    236239}
Note: See TracChangeset for help on using the changeset viewer.