// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. function onCursor() { var cursor = event.target.result; if (cursor === null) { debug('Reached end of object cursor.'); if (!gotObjectThroughCursor) { fail('Did not get object through cursor.'); return; } done(); return; } debug('Got object through cursor.'); shouldBe('event.target.result.key', '55'); shouldBe('event.target.result.value.aValue', '"foo"'); gotObjectThroughCursor = true; cursor.continue(); } function onKeyCursor() { var cursor = event.target.result; if (cursor === null) { debug('Reached end of key cursor.'); if (!gotKeyThroughCursor) { fail('Did not get key through cursor.'); return; } var request = index.openCursor(IDBKeyRange.only(55)); request.onsuccess = onCursor; request.onerror = unexpectedErrorCallback; gotObjectThroughCursor = false; return; } debug('Got key through cursor.'); shouldBe('event.target.result.key', '55'); shouldBe('event.target.result.primaryKey', '1'); gotKeyThroughCursor = true; cursor.continue(); } function getSuccess() { debug('Successfully got object through key in index.'); shouldBe('event.target.result.aKey', '55'); shouldBe('event.target.result.aValue', '"foo"'); var request = index.openKeyCursor(IDBKeyRange.only(55)); request.onsuccess = onKeyCursor; request.onerror = unexpectedErrorCallback; gotKeyThroughCursor = false; } function getKeySuccess() { debug('Successfully got key.'); shouldBe('event.target.result', '1'); var request = index.get(55); request.onsuccess = getSuccess; request.onerror = unexpectedErrorCallback; } function moreDataAdded() { debug('Successfully added more data.'); var request = index.getKey(55); request.onsuccess = getKeySuccess; request.onerror = unexpectedErrorCallback; } function indexErrorExpected() { debug('Existing index triggered on error as expected.'); var request = objectStore.put({'aKey': 55, 'aValue': 'foo'}, 1); request.onsuccess = moreDataAdded; request.onerror = unexpectedErrorCallback; } function indexSuccess() { debug('Index created successfully.'); shouldBe("index.name", "'myIndex'"); shouldBe("index.objectStore.name", "'test'"); shouldBe("index.keyPath", "'aKey'"); shouldBe("index.unique", "true"); try { request = objectStore.createIndex('myIndex', 'aKey', {unique: true}); fail('Re-creating an index must throw an exception'); } catch (e) { indexErrorExpected(); } } function createIndex(expect_error) { debug('Creating an index.'); try { window.index = objectStore.createIndex('myIndex', 'aKey', {unique: true}); indexSuccess(); } catch (e) { unexpectedErrorCallback(); } } function dataAddedSuccess() { debug('Data added'); createIndex(false); } function populateObjectStore() { debug('Populating object store'); db = event.target.result; window.objectStore = db.createObjectStore('test'); var myValue = {'aKey': 21, 'aValue': '!42'}; var request = objectStore.add(myValue, 0); request.onsuccess = dataAddedSuccess; request.onerror = unexpectedErrorCallback; } function test() { indexedDBTest(populateObjectStore); }