blob: 301cbd2fa3d45370e0969164024b3e0793e020be [file] [log] [blame]
// 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');
});
}