Changeset 104865 in webkit
- Timestamp:
- Jan 12, 2012 3:12:29 PM (12 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r104864 r104865 1 2012-01-12 Joshua Bell <jsbell@chromium.org> 2 3 IndexedDB: Throw exception if IDBCursor.continue() called with key equal to current 4 https://bugs.webkit.org/show_bug.cgi?id=76100 5 6 The previously existing clauses that iterated a cursor over non-unique values 7 by specifing a key now fail per spec, so they are changed to simply call continue(). 8 9 Reviewed by Tony Chang. 10 11 * storage/indexeddb/cursor-continue-expected.txt: 12 * storage/indexeddb/cursor-continue.html: 13 1 14 2012-01-12 Jon Lee <jonlee@apple.com> 2 15 -
trunk/LayoutTests/storage/indexeddb/cursor-continue-expected.txt
r104506 r104865 41 41 event.target.result.continue(3.14159) 42 42 PASS event.target.result.primaryKey is 3 43 event.target.result.continue( 3.14159)43 event.target.result.continue() 44 44 PASS event.target.result.primaryKey is 4 45 event.target.result.continue( 3.14159)45 event.target.result.continue() 46 46 PASS event.target.result.primaryKey is 5 47 47 event.target.result.continue(12) … … 49 49 event.target.result.continue(date) 50 50 PASS event.target.result.primaryKey is 9 51 event.target.result.continue( date)51 event.target.result.continue() 52 52 PASS event.target.result.primaryKey is 10 53 event.target.result.continue( date)53 event.target.result.continue() 54 54 PASS event.target.result.primaryKey is 11 55 55 event.target.result.continue('A bit1') … … 59 59 event.target.result.continue('the BIGGEST string') 60 60 PASS event.target.result.primaryKey is 17 61 event.target.result.continue( 'the BIGGEST string')61 event.target.result.continue() 62 62 PASS event.target.result is null 63 63 … … 66 66 event.target.result.continue('A bit2') 67 67 PASS event.target.result.primaryKey is 15 68 event.target.result.continue( 'A bit2')68 event.target.result.continue() 69 69 PASS event.target.result.primaryKey is 14 70 70 event.target.result.continue(date) 71 71 PASS event.target.result.primaryKey is 10 72 event.target.result.continue( date)72 event.target.result.continue() 73 73 PASS event.target.result.primaryKey is 9 74 74 event.target.result.continue(1) 75 75 PASS event.target.result.primaryKey is 2 76 event.target.result.continue( 1)76 event.target.result.continue() 77 77 PASS event.target.result.primaryKey is 1 78 event.target.result.continue( 1)78 event.target.result.continue() 79 79 PASS event.target.result.primaryKey is 0 80 80 event.target.result.continue() … … 89 89 PASS code is IDBDatabaseException.DATA_ERR 90 90 91 indexObject.openKeyCursor(null, IDBCursor.NEXT) 92 PASS event.target.result.primaryKey is 0 93 event.target.result.continue(3.14159) 94 PASS event.target.result.primaryKey is 3 95 Expecting exception from event.target.result.continue(3.14159) 96 PASS Exception was thrown. 97 PASS code is IDBDatabaseException.DATA_ERR 98 91 99 indexObject.openKeyCursor(null, IDBCursor.PREV) 92 100 PASS event.target.result.primaryKey is 17 … … 96 104 PASS Exception was thrown. 97 105 PASS code is IDBDatabaseException.DATA_ERR 106 107 indexObject.openKeyCursor(null, IDBCursor.PREV) 108 PASS event.target.result.primaryKey is 17 109 event.target.result.continue('A bit2') 110 PASS event.target.result.primaryKey is 15 111 Expecting exception from event.target.result.continue('A bit2') 112 PASS Exception was thrown. 113 PASS code is IDBDatabaseException.DATA_ERR 98 114 PASS successfullyParsed is true 99 115 -
trunk/LayoutTests/storage/indexeddb/cursor-continue.html
r104506 r104865 102 102 } else if (window.stage == 1) { 103 103 shouldBe("event.target.result.primaryKey", "3"); 104 evalAndLog("event.target.result.continue( 3.14159)");104 evalAndLog("event.target.result.continue()"); 105 105 } else if (window.stage == 2) { 106 106 shouldBe("event.target.result.primaryKey", "4"); 107 evalAndLog("event.target.result.continue( 3.14159)");107 evalAndLog("event.target.result.continue()"); 108 108 } else if (window.stage == 3) { 109 109 shouldBe("event.target.result.primaryKey", "5"); … … 114 114 } else if (window.stage == 5) { 115 115 shouldBe("event.target.result.primaryKey", "9"); 116 evalAndLog("event.target.result.continue( date)");116 evalAndLog("event.target.result.continue()"); 117 117 } else if (window.stage == 6) { 118 118 shouldBe("event.target.result.primaryKey", "10"); 119 evalAndLog("event.target.result.continue( date)");119 evalAndLog("event.target.result.continue()"); 120 120 } else if (window.stage == 7) { 121 121 shouldBe("event.target.result.primaryKey", "11"); … … 129 129 } else if (window.stage == 10) { 130 130 shouldBe("event.target.result.primaryKey", "17"); 131 evalAndLog("event.target.result.continue( 'the BIGGEST string')");131 evalAndLog("event.target.result.continue()"); 132 132 } else if (window.stage == 11) { 133 133 shouldBeNull("event.target.result"); … … 156 156 } else if (window.stage == 1) { 157 157 shouldBe("event.target.result.primaryKey", "15"); 158 evalAndLog("event.target.result.continue( 'A bit2')");158 evalAndLog("event.target.result.continue()"); 159 159 } else if (window.stage == 2) { 160 160 shouldBe("event.target.result.primaryKey", "14"); … … 162 162 } else if (window.stage == 3) { 163 163 shouldBe("event.target.result.primaryKey", "10"); 164 evalAndLog("event.target.result.continue( date)");164 evalAndLog("event.target.result.continue()"); 165 165 } else if (window.stage == 4) { 166 166 shouldBe("event.target.result.primaryKey", "9"); … … 168 168 } else if (window.stage == 5) { 169 169 shouldBe("event.target.result.primaryKey", "2"); 170 evalAndLog("event.target.result.continue( 1)");170 evalAndLog("event.target.result.continue()"); 171 171 } else if (window.stage == 6) { 172 172 shouldBe("event.target.result.primaryKey", "1"); 173 evalAndLog("event.target.result.continue( 1)");173 evalAndLog("event.target.result.continue()"); 174 174 } else if (window.stage == 7) { 175 175 shouldBe("event.target.result.primaryKey", "0"); … … 177 177 } else if (window.stage == 8) { 178 178 shouldBeNull("event.target.result"); 179 ascendingErrorTest ();179 ascendingErrorTestLessThan(); 180 180 return; 181 181 } else { … … 185 185 } 186 186 187 function ascendingErrorTest ()187 function ascendingErrorTestLessThan() 188 188 { 189 189 debug(""); … … 198 198 shouldBe("event.target.result.primaryKey", "3"); 199 199 evalAndExpectException("event.target.result.continue(1)", "IDBDatabaseException.DATA_ERR"); 200 descendingErrorTest(); 201 return; 202 } else { 203 testFailed("Illegal stage."); 204 } 205 window.stage++; 206 }; 207 } 208 209 function descendingErrorTest() 200 ascendingErrorTestEqual(); 201 return; 202 } else { 203 testFailed("Illegal stage."); 204 } 205 window.stage++; 206 }; 207 } 208 209 function ascendingErrorTestEqual() 210 { 211 debug(""); 212 var request = evalAndLog("indexObject.openKeyCursor(null, IDBCursor.NEXT)"); 213 window.stage = 0; 214 request.onerror = unexpectedErrorCallback; 215 request.onsuccess = function() { 216 if (window.stage === 0) { 217 shouldBe("event.target.result.primaryKey", "0"); 218 evalAndLog("event.target.result.continue(3.14159)"); 219 } else if (window.stage == 1) { 220 shouldBe("event.target.result.primaryKey", "3"); 221 evalAndExpectException("event.target.result.continue(3.14159)", "IDBDatabaseException.DATA_ERR"); 222 descendingErrorTestGreaterThan(); 223 return; 224 } else { 225 testFailed("Illegal stage."); 226 } 227 window.stage++; 228 }; 229 } 230 231 function descendingErrorTestGreaterThan() 210 232 { 211 233 debug(""); … … 220 242 shouldBe("event.target.result.primaryKey", "15"); 221 243 evalAndExpectException("event.target.result.continue('A bit3')", "IDBDatabaseException.DATA_ERR"); 244 descendingErrorTestEqual(); 245 return; 246 } else { 247 testFailed("Illegal stage."); 248 } 249 window.stage++; 250 }; 251 } 252 253 function descendingErrorTestEqual() 254 { 255 debug(""); 256 var request = evalAndLog("indexObject.openKeyCursor(null, IDBCursor.PREV)"); 257 window.stage = 0; 258 request.onerror = unexpectedErrorCallback; 259 request.onsuccess = function() { 260 if (window.stage == 0) { 261 shouldBe("event.target.result.primaryKey", "17"); 262 evalAndLog("event.target.result.continue('A bit2')"); 263 } else if (window.stage == 1) { 264 shouldBe("event.target.result.primaryKey", "15"); 265 evalAndExpectException("event.target.result.continue('A bit2')", "IDBDatabaseException.DATA_ERR"); 222 266 done(); 223 267 return; -
trunk/Source/WebCore/ChangeLog
r104864 r104865 1 2012-01-12 Joshua Bell <jsbell@chromium.org> 2 3 IndexedDB: Throw exception if IDBCursor.continue() called with key equal to current 4 https://bugs.webkit.org/show_bug.cgi?id=76100 5 6 The fix for https://bugs.webkit.org/show_bug.cgi?id=74213 missed the "or equal" clause 7 in the spec. 8 9 Reviewed by Tony Chang. 10 11 Test: storage/indexeddb/cursor-continue.html 12 13 * storage/IDBCursorBackendImpl.cpp: 14 (WebCore::IDBCursorBackendImpl::continueFunction): 15 1 16 2012-01-12 Jon Lee <jonlee@apple.com> 2 17 -
trunk/Source/WebCore/storage/IDBCursorBackendImpl.cpp
r104771 r104865 102 102 ASSERT(m_cursor->key()); 103 103 if (m_direction == IDBCursor::NEXT || m_direction == IDBCursor::NEXT_NO_DUPLICATE) { 104 if ( key->isLessThan(m_cursor->key().get())) {104 if (!m_cursor->key()->isLessThan(key.get())) { 105 105 ec = IDBDatabaseException::DATA_ERR; 106 106 return; 107 107 } 108 108 } else { 109 if ( m_cursor->key()->isLessThan(key.get())) {109 if (!key->isLessThan(m_cursor->key().get())) { 110 110 ec = IDBDatabaseException::DATA_ERR; 111 111 return;
Note: See TracChangeset
for help on using the changeset viewer.