1
0
Fork 0
firefox/toolkit/components/antitracking/test/browser/browser_partitionedIndexedDB.js
Daniel Baumann 5e9a113729
Adding upstream version 140.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-25 09:37:52 +02:00

95 lines
2.4 KiB
JavaScript

PartitionedStorageHelper.runTest(
"IndexedDB",
async (win3rdParty, win1stParty) => {
await new Promise(resolve => {
let a = win1stParty.indexedDB.open("test", 1);
ok(!!a, "IDB should not be blocked in 1st party contexts");
a.onsuccess = e => {
let db = e.target.result;
is(db.objectStoreNames.length, 1, "We have 1 objectStore");
is(db.objectStoreNames[0], "foobar", "We have 'foobar' objectStore");
resolve();
};
a.onupgradeneeded = e => {
let db = e.target.result;
is(db.objectStoreNames.length, 0, "We have 0 objectStores");
db.createObjectStore("foobar", { keyPath: "test" });
};
});
await new Promise(resolve => {
let a = win3rdParty.indexedDB.open("test", 1);
ok(!!a, "IDB should not be blocked in 3rd party contexts");
a.onsuccess = e => {
let db = e.target.result;
is(db.objectStoreNames.length, 0, "We have 0 objectStore");
resolve();
};
});
},
async _ => {
await new Promise(resolve => {
Services.clearData.deleteData(Ci.nsIClearDataService.CLEAR_ALL, () =>
resolve()
);
});
}
);
PartitionedStorageHelper.runPartitioningTest(
"Partitioned tabs - IndexedDB",
"indexeddb",
// getDataCallback
async win => {
return new Promise(resolve => {
let a = win.indexedDB.open("test", 1);
a.onupgradeneeded = e => {
let db = e.target.result;
db.createObjectStore("foobar", { keyPath: "id" });
};
a.onsuccess = e => {
let db = e.target.result;
db.transaction("foobar").objectStore("foobar").get(1).onsuccess =
ee => {
resolve(
ee.target.result === undefined ? "" : ee.target.result.value
);
};
};
});
},
// addDataCallback
async (win, value) => {
return new Promise(resolve => {
let a = win.indexedDB.open("test", 1);
a.onsuccess = e => {
let db = e.target.result;
db
.transaction("foobar", "readwrite")
.objectStore("foobar")
.put({ id: 1, value }).onsuccess = _ => {
resolve(true);
};
};
});
},
// cleanup
async _ => {
await new Promise(resolve => {
Services.clearData.deleteData(Ci.nsIClearDataService.CLEAR_ALL, () =>
resolve()
);
});
}
);