Modern IDB: IDBBindingUtilities chokes on unicode strings for get/set.
authorbeidson@apple.com <beidson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 8 Jan 2016 22:21:24 +0000 (22:21 +0000)
committerbeidson@apple.com <beidson@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 8 Jan 2016 22:21:24 +0000 (22:21 +0000)
https://bugs.webkit.org/show_bug.cgi?id=152921

Reviewed by Alex Christensen.

LayoutTests/imported/w3c:

* indexeddb/keypath-expected.txt:

Source/WebCore:

No new tests (Covered by existing tests).

* bindings/js/IDBBindingUtilities.cpp:
(WebCore::get): Don't do a potentially lossy utf8() conversion on the string.
(WebCore::set): Ditto.

LayoutTests:

* platform/mac-wk1/TestExpectations:

* storage/indexeddb/objectstore-autoincrement-expected.txt:
* storage/indexeddb/objectstore-autoincrement.html:
* storage/indexeddb/resources/objectstore-autoincrement.js:

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

LayoutTests/ChangeLog
LayoutTests/imported/w3c/ChangeLog
LayoutTests/imported/w3c/indexeddb/keypath-expected.txt
LayoutTests/platform/mac-wk1/TestExpectations
LayoutTests/storage/indexeddb/objectstore-autoincrement-expected.txt
LayoutTests/storage/indexeddb/objectstore-autoincrement.html
LayoutTests/storage/indexeddb/resources/objectstore-autoincrement.js
Source/WebCore/ChangeLog
Source/WebCore/bindings/js/IDBBindingUtilities.cpp

index eb3fbbdd1dad6342b9d0ec83dfa536c1ebd5d0f5..0715dd0d4663ba7c0c9744321560f933e6c09ce6 100644 (file)
@@ -1,3 +1,16 @@
+2016-01-08  Brady Eidson  <beidson@apple.com>
+
+        Modern IDB: IDBBindingUtilities chokes on unicode strings for get/set.
+        https://bugs.webkit.org/show_bug.cgi?id=152921
+
+        Reviewed by Alex Christensen.
+
+        * platform/mac-wk1/TestExpectations:
+        
+        * storage/indexeddb/objectstore-autoincrement-expected.txt:
+        * storage/indexeddb/objectstore-autoincrement.html:
+        * storage/indexeddb/resources/objectstore-autoincrement.js:
+
 2016-01-08  Brady Eidson  <beidson@apple.com>
 
         Modern IDB: Blocked event can fire on a delete request even after the last open connection has closed.
index 78e2d005e3f65025123384e75115b209316bae3b..be6060461ec6287dd17aae45785023f8b7ed0be5 100644 (file)
@@ -1,3 +1,12 @@
+2016-01-08  Brady Eidson  <beidson@apple.com>
+
+        Modern IDB: IDBBindingUtilities chokes on unicode strings for get/set.
+        https://bugs.webkit.org/show_bug.cgi?id=152921
+
+        Reviewed by Alex Christensen.
+
+        * indexeddb/keypath-expected.txt:
+
 2016-01-08  Brady Eidson  <beidson@apple.com>
 
         Modern IDB: Blocked event can fire on a delete request even after the last open connection has closed.
index 5fa230263bb7b633936168cd8f9315d4ec00379a..b4ab9ed7be0636569c7442cc583215a0d1a0a185 100644 (file)
@@ -1,6 +1,6 @@
 
 PASS Keypath - my.key 
-FAIL Keypath - my.køi DataError: DOM IDBDatabase Exception 0
+PASS Keypath - my.køi 
 PASS Keypath - my.key_ya 
 PASS Keypath - public.key$ya 
 PASS Keypath - true.$ 
index e05d389e25b30d591033a067199deed049d4ad63..1e7a3c0ae28a0a798a06baec39a5957d7acc36f5 100644 (file)
@@ -73,9 +73,6 @@ inspector/indexeddb
 imported/w3c/indexeddb/interfaces.html [ Skip ]
 imported/w3c/indexeddb/keyorder.htm [ Skip ]
 
-# W3C IDB tests - Legacy IDB fails, Modern IDB fails differently
-imported/w3c/indexeddb/keypath.htm [ Failure ]
-
 # W3C IDB tests where the test is wrong (the spec, other browsers, and WebKit all agree)
 # Covered by https://github.com/w3c/web-platform-tests/issues/2456
 imported/w3c/indexeddb/idbindex_get7.htm [ Failure ]
index aed2a39d02749d16ff464f077cd94ba28d3bb966..6cec211c3548117f4bc236328e0ce9131be71970 100644 (file)
@@ -12,7 +12,7 @@ createObjectStore():
 store = db.createObjectStore('StoreWithKeyPath', {keyPath: 'id', autoIncrement: true})
 db.createObjectStore('StoreWithAutoIncrement', {autoIncrement: true})
 db.createObjectStore('PlainOldStore', {autoIncrement: false})
-db.createObjectStore('StoreWithLongKeyPath', {keyPath: 'a.b.c.id', autoIncrement: true})
+db.createObjectStore('StoreWithLongKeyPathAndUTF8', {keyPath: 'a.b.c.køi', autoIncrement: true})
 storeNames = db.objectStoreNames
 PASS store.name is "StoreWithKeyPath"
 PASS store.keyPath is "id"
@@ -63,8 +63,8 @@ store.add({name: 'Adam'}, 1)
 addAdamSuccess():
 PASS event.target.result is 1
 testLongKeyPath():
-trans = db.transaction('StoreWithLongKeyPath', 'readwrite')
-store = trans.objectStore('StoreWithLongKeyPath')
+trans = db.transaction('StoreWithLongKeyPathAndUTF8', 'readwrite')
+store = trans.objectStore('StoreWithLongKeyPathAndUTF8')
 store.add({foo: 'bar'})
 store.add({foo: 'bar', a: {}})
 store.add({foo: 'bar', a: {b: {}}})
@@ -72,16 +72,16 @@ store.add({foo: 'bar', a: {b: {c: {}}}})
 store.openCursor()
 expected = null
 count = 0
-expected = cursor.value.a.b.c.id + 1
+expected = cursor.value.a.b.c.køi + 1
 PASS cursor.value.foo is "bar"
-PASS cursor.value.a.b.c.id is expected
-expected = cursor.value.a.b.c.id + 1
+PASS cursor.value.a.b.c.køi is expected
+expected = cursor.value.a.b.c.køi + 1
 PASS cursor.value.foo is "bar"
-PASS cursor.value.a.b.c.id is expected
-expected = cursor.value.a.b.c.id + 1
+PASS cursor.value.a.b.c.køi is expected
+expected = cursor.value.a.b.c.køi + 1
 PASS cursor.value.foo is "bar"
-PASS cursor.value.a.b.c.id is expected
-expected = cursor.value.a.b.c.id + 1
+PASS cursor.value.a.b.c.køi is expected
+expected = cursor.value.a.b.c.køi + 1
 PASS count is 4
 PASS successfullyParsed is true
 
index 8a6fe298b3942ba0c42d28a4271b82d6e9a80cb6..827ed90e2c1000b44204de49e41b4498b263201d 100644 (file)
@@ -1,5 +1,6 @@
 <html>
 <head>
+<meta charset="utf-8">
 <script src="../../resources/js-test.js"></script>
 <script src="resources/shared.js"></script>
 </head>
index 2e9ad7bcd6c3b3da2d572b0a4002b6e5bf2fad4c..a478aa1048826847bbc3f11eb7c7b6244aa67fa4 100644 (file)
@@ -15,7 +15,7 @@ function prepareDatabase()
     self.store = evalAndLog("store = db.createObjectStore('StoreWithKeyPath', {keyPath: 'id', autoIncrement: true})");
     evalAndLog("db.createObjectStore('StoreWithAutoIncrement', {autoIncrement: true})");
     evalAndLog("db.createObjectStore('PlainOldStore', {autoIncrement: false})");
-    evalAndLog("db.createObjectStore('StoreWithLongKeyPath', {keyPath: 'a.b.c.id', autoIncrement: true})");
+    evalAndLog("db.createObjectStore('StoreWithLongKeyPathAndUTF8', {keyPath: 'a.b.c.køi', autoIncrement: true})");
     var storeNames = evalAndLog("storeNames = db.objectStoreNames");
 
     shouldBeEqualToString("store.name", "StoreWithKeyPath");
@@ -131,11 +131,11 @@ function addAdamSuccess()
 function testLongKeyPath()
 {
     debug("testLongKeyPath():");
-    trans = evalAndLog("trans = db.transaction('StoreWithLongKeyPath', 'readwrite')");
+    trans = evalAndLog("trans = db.transaction('StoreWithLongKeyPathAndUTF8', 'readwrite')");
     trans.onabort = unexpectedAbortCallback;
     trans.oncomplete = finishJSTest;
 
-    store = evalAndLog("store = trans.objectStore('StoreWithLongKeyPath')");
+    store = evalAndLog("store = trans.objectStore('StoreWithLongKeyPathAndUTF8')");
     request = evalAndLog("store.add({foo: 'bar'})");
     request.onerror = unexpectedErrorCallback;
     request = evalAndLog("store.add({foo: 'bar', a: {}})");
@@ -155,11 +155,11 @@ function testLongKeyPath()
             return;
         }
         if (expected === null) {
-            evalAndLog("expected = cursor.value.a.b.c.id + 1");
+            evalAndLog("expected = cursor.value.a.b.c.køi + 1");
         } else {
             shouldBeEqualToString("cursor.value.foo", "bar");
-            shouldBe("cursor.value.a.b.c.id", "expected");
-            evalAndLog("expected = cursor.value.a.b.c.id + 1");
+            shouldBe("cursor.value.a.b.c.køi", "expected");
+            evalAndLog("expected = cursor.value.a.b.c.køi + 1");
         }
         count++;
         cursor.continue();
index a2860ef44a9586eadefe804ec1cac9bee796f8ef..14a680885fe6cbe09404a76ba1caaeb5be55bf50 100644 (file)
@@ -1,3 +1,16 @@
+2016-01-08  Brady Eidson  <beidson@apple.com>
+
+        Modern IDB: IDBBindingUtilities chokes on unicode strings for get/set.
+        https://bugs.webkit.org/show_bug.cgi?id=152921
+
+        Reviewed by Alex Christensen.
+
+        No new tests (Covered by existing tests).
+
+        * bindings/js/IDBBindingUtilities.cpp:
+        (WebCore::get): Don't do a potentially lossy utf8() conversion on the string.
+        (WebCore::set): Ditto.
+
 2016-01-08  Per Arne Vollan  <peavo@outlook.com>
 
         [WinCairo] Support more video formats.
index bda54620e0667f30cfc1303db91799f8c7415fcd..19609eafae1614f356868fcee144736794b85821 100644 (file)
@@ -56,7 +56,7 @@ static bool get(ExecState* exec, JSValue object, const String& keyPathElement, J
     }
     if (!object.isObject())
         return false;
-    Identifier identifier = Identifier::fromString(&exec->vm(), keyPathElement.utf8().data());
+    Identifier identifier = Identifier::fromString(&exec->vm(), keyPathElement);
     if (!asObject(object)->hasProperty(exec, identifier))
         return false;
     result = asObject(object)->get(exec, identifier);
@@ -73,7 +73,7 @@ static bool set(ExecState* exec, JSValue& object, const String& keyPathElement,
 {
     if (!canSet(object, keyPathElement))
         return false;
-    Identifier identifier = Identifier::fromString(&exec->vm(), keyPathElement.utf8().data());
+    Identifier identifier = Identifier::fromString(&exec->vm(), keyPathElement);
     asObject(object)->putDirect(exec->vm(), identifier, jsValue);
     return true;
 }