<!doctype html> <meta charset=utf-8> <title>IndexedDB: Special-cased identifiers in extracting keys from values (ES bindings)</title> <meta name="help" href="https://w3c.github.io/IndexedDB/#extract-key-from-value"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="resources/support.js"></script> <script> [ { type: 'String', property: 'length', instance: 'abc', }, { type: 'Array', property: 'length', instance: ['a', 'b', 'c'], }, { type: 'Blob', property: 'size', instance: new Blob(['abc']), }, { type: 'Blob', property: 'type', instance: new Blob([''], {type:'foo/bar'}), }, { type: 'File', property: 'name', instance: new File([''], 'foo'), }, { type: 'File', property: 'lastModified', instance: new File([''], '', {lastModified: 123}), }, ].forEach(function(testcase) { indexeddb_test( (t, db) => { db.createObjectStore( 'store', {autoIncrement: true, keyPath: testcase.property}); }, (t, db) => { const key = testcase.instance[testcase.property]; const tx = db.transaction('store', 'readwrite', {durability: 'relaxed'}); tx.objectStore('store').put(testcase.instance); const request = tx.objectStore('store').get(key); request.onerror = t.unreached_func('request should not fail'); request.onsuccess = t.step_func(function() { const result = request.result; assert_key_equals(result[testcase.property], key, 'Property should be used as key'); }); tx.oncomplete = t.step_func(function() { t.done(); }); }, 'Type: ' + testcase.type + ', identifier: ' + testcase.property ); }); </script>