<!DOCTYPE html>
-<script src="/js-test-resources/js-test.js"></script>
+<title>Service Worker: Indexed DB</title>
+<script src="../resources/testharness.js"></script>
+<script src="../resources/testharnessreport.js"></script>
+<script src="resources/test-helpers.js"></script>
<script>
+var test = async_test('Verify Indexed DB operation in a Service Worker');
+test.step(function() {
+ var scope = 'resources/blank.html';
+ navigator.serviceWorker.unregister(scope).then(
+ doTest,
+ unreached_rejection(test, 'Unregister should not fail')
+ );
-description("Verify that IndexedDB is functional in a ServiceWorker");
-var jsTestIsAsync = true;
+ function doTest() {
+ navigator.serviceWorker.register('resources/indexeddb-worker.js',
+ {scope: scope}).then(
+ test.step_func(function(worker) {
+ var messageChannel = new MessageChannel();
+ messageChannel.port1.onmessage = test.step_func(onMessage);
-evalAndLog("messageChannel = new MessageChannel()");
-evalAndLog("messageChannel.port1.onmessage = onMessageHandler");
-
-debug("");
-evalAndLog("navigator.serviceWorker.register('indexeddb-worker.js')").then(
- function(result) {
- serviceWorker = result;
- evalAndLog("serviceWorker.postMessage({port: messageChannel.port2}, [messageChannel.port2])");
- },
- function(reason) {
- testFailed(reason.name);
- finishJSTest();
- });
-
-function onMessageHandler(e) {
- var prefix = "[ServiceWorker] ";
- message = e.data;
- switch (message.action) {
- case 'log':
- debug(prefix + message.text);
- break;
- case 'pass':
- testPassed(prefix + message.text);
- break;
- case 'fail':
- testFailed(prefix + message.text);
- break;
- case 'quit':
- verifyDatabase();
- break;
+ worker.postMessage({port: messageChannel.port2}, [messageChannel.port2]);
+ }),
+ unreached_rejection(test, 'Registration should succeed, but failed'));
}
-}
-function verifyDatabase() {
- debug("");
- debug("Verifying the database from the page");
- debug("");
- evalAndLog("request = indexedDB.open('db')");
- request.onsuccess = function() {
- evalAndLog("db = request.result");
- evalAndLog("tx = db.transaction('store')");
- evalAndLog("store = tx.objectStore('store')");
- evalAndLog("request = store.get('key')");
- request.onsuccess = function() {
- shouldBe("request.result", "'value'");
- finishJSTest();
- };
- };
-}
+ function onMessage() {
+ var openRequest = indexedDB.open('db');
+ openRequest.onsuccess = test.step_func(function() {
+ var db = openRequest.result;
+ var tx = db.transaction('store');
+ var store = tx.objectStore('store');
+ var getRequest = store.get('key');
+ getRequest.onsuccess = test.step_func(function() {
+ assert_equals(getRequest.result, 'value',
+ 'The get() result should match what the worker put().');
+ test.done();
+ });
+ });
+ }
+});
</script>