mirror of
https://github.com/servo/servo.git
synced 2025-07-22 23:03:42 +01:00
118 lines
3.5 KiB
JavaScript
118 lines
3.5 KiB
JavaScript
// 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);
|
|
}
|