Revision ed51dbb01ac0e8eb4ecf3e9aa1a68bd8dda616d0 authored by Robert Ma on 16 March 2018, 17:56:06 UTC, committed by Robert Ma on 16 March 2018, 20:36:35 UTC
1 parent c929502
wasm_indexeddb_test.js
// Copyright 2016 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.
var db_name = "db_wasm_test";
var obj_store = 'store';
var module_key = 'my_module';
function createAndSaveToIndexedDB(db_name) {
return createWasmModule()
.then(mod => new Promise((resolve, reject) => {
var delete_request = indexedDB.deleteDatabase(db_name);
delete_request.onsuccess = function() {
var open_request = indexedDB.open(db_name);
open_request.onupgradeneeded = function() {
var db = open_request.result;
db.createObjectStore(obj_store);
};
open_request.onsuccess = function() {
var db = open_request.result;
var tx = db.transaction(obj_store, 'readwrite');
var store = tx.objectStore(obj_store);
try {
store.put(mod, module_key);
} catch(e) {
db.close();
reject(e);
return;
}
tx.oncomplete = function() {
db.close();
resolve();
return;
};
};
};
}));
}
function loadFromIndexedDB(db_name) {
var open_request = indexedDB.open(db_name);
return new Promise((resolve, reject) => {
open_request.onsuccess = function() {
var db = open_request.result;
var tx = db.transaction(obj_store);
var store = tx.objectStore(obj_store);
var get_request = store.get(module_key);
get_request.onsuccess = function() {
var mod = get_request.result;
db.close();
assert_true(mod instanceof WebAssembly.Module);
try {
var instance = new WebAssembly.Instance(mod);
resolve(instance.exports.increment(1));
} catch(e) {
reject(e);
}
};
get_request.onerror = reject;
};
});
}
function TestIndexedDBLoadStoreSecure() {
return createAndSaveToIndexedDB(db_name)
.then(() => loadFromIndexedDB(db_name))
.then(res => assert_equals(res, 2),
error => assert_unreached(error));
}
function TestIndexedDBLoadStoreInsecure() {
return createAndSaveToIndexedDB(db_name)
.then(assert_unreached,
error => {
assert_true(error instanceof DOMException);
assert_equals(error.name, 'DataCloneError');
});
}
function SaveToIDBAndLoadInWorker() {
return createAndSaveToIndexedDB(db_name)
.then(() => {
var worker = new Worker("wasm_idb_worker.js");
return new Promise((resolve, reject) => {
worker.onmessage = function (event) {
if (typeof (event.data) == "string") {
resolve(event.data);
worker.terminate();
worker = undefined;
}
};
worker.postMessage({command: "load", db_name: db_name});
})
})
.then(data => assert_equals(data, "ok"),
error => assert_unreached(error));
}
function SaveToIDBInWorkerAndLoadInMain() {
var worker = new Worker("wasm_idb_worker.js");
var ret = new Promise((resolve, reject) => {
worker.onmessage = function (event) {
if (typeof (event.data) == "string") {
resolve(event.data);
worker.terminate();
worker = undefined;
}
};
})
worker.postMessage({command: "save", db_name: db_name});
return ret
.then(data => assert_equals(data, "ok"),
error => assert_unreached(error))
.then(() => loadFromIndexedDB(db_name))
.then(res => assert_equals(res, 2),
assert_unreached);
}
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...