mirror of
https://github.com/servo/servo.git
synced 2025-07-22 06:43:40 +01:00
81 lines
2.4 KiB
JavaScript
81 lines
2.4 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';
|
|
var obj_store = 'store';
|
|
var module_key = 'my_module';
|
|
|
|
function createAndSaveToIndexedDB() {
|
|
return new Promise((resolve, reject) => {
|
|
createWasmModule()
|
|
.then(mod => {
|
|
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) {
|
|
reject(e);
|
|
return;
|
|
}
|
|
tx.oncomplete = function() {
|
|
resolve();
|
|
};
|
|
tx.onabort = function() {
|
|
reject(transaction.error);
|
|
};
|
|
};
|
|
};
|
|
})
|
|
.catch(error => reject(error));
|
|
});
|
|
}
|
|
|
|
function loadFromIndexedDB(prev) {
|
|
return new Promise((resolve, reject) => {
|
|
prev.then(() => {
|
|
var open_request = indexedDB.open(db_name);
|
|
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;
|
|
assert_true(mod instanceof WebAssembly.Module);
|
|
try {
|
|
var instance = new WebAssembly.Instance(mod);
|
|
} catch(e) {
|
|
reject(e);
|
|
return;
|
|
}
|
|
resolve(instance.exports.increment(1));
|
|
};
|
|
};
|
|
});
|
|
});
|
|
}
|
|
|
|
function TestIndexedDBLoadStoreSecure() {
|
|
return loadFromIndexedDB(createAndSaveToIndexedDB())
|
|
.then(res => assert_equals(res, 2),
|
|
error => assert_unreached(error));
|
|
}
|
|
|
|
function TestIndexedDBLoadStoreInsecure() {
|
|
return createAndSaveToIndexedDB()
|
|
.then(assert_unreached,
|
|
error => {
|
|
assert_true(error instanceof DOMException);
|
|
assert_equals(error.name, 'DataCloneError');
|
|
});
|
|
}
|