Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set sts=2 sw=2 et tw=80: */
"use strict";
Services.prefs.setBoolPref("webextensions.storage.sync.kinto", false);
AddonTestUtils.init(this);
add_task(async function setup() {
await ExtensionTestUtils.startAddonManager();
// FOG needs a profile directory to put its data in.
do_get_profile();
// FOG needs to be initialized in order for data to flow.
Services.fog.initializeFOG();
});
add_task(test_sync_reloading_extensions_works);
add_task(async function test_storage_sync() {
await test_background_page_storage("sync");
});
add_task(test_storage_sync_requires_real_id);
add_task(async function test_bytes_in_use() {
await test_background_storage_area_with_bytes_in_use("sync", true);
});
add_task(async function test_storage_onChanged_event_page() {
await test_storage_change_event_page("sync");
});
add_task(async function test_storage_session_getBytesInUse() {
await test_get_bytes_in_use("sync");
});
add_task(async function test_storage_sync_sanitizes_internal_error() {
const extension = ExtensionTestUtils.loadExtension({
manifest: {
permissions: ["storage"],
browser_specific_settings: { gecko: { id: "test@storage-sync-err" } },
},
background() {
browser.test.onMessage.addListener(async msg => {
browser.test.assertEq(msg, "call_storage_sync", "Expected message");
await browser.test.assertRejects(
browser.storage.sync.get(null),
"An unexpected error occurred",
"Internal error from storage.sync implementation is sanitized"
);
browser.test.sendMessage("done");
});
// Call any storage.sync API, to make sure that recordSyncQuotaTelemetry
// in parent/ext-storage.js is called, so that its logic is skipped when
// we call storage.sync.get(null) again in this test. Otherwise the mock
// below that fakes an error will be tripped and cause
// recordSyncQuotaTelemetry to raise an unrejected promise rejection,
// which causes the test to fail.
browser.storage.sync.get(null).then(() => {
browser.test.sendMessage("ready_to_call_sync");
});
},
});
await extension.startup();
await extension.awaitMessage("ready_to_call_sync");
const { messages } = await promiseConsoleOutput(async () => {
const { storageSyncService } = ChromeUtils.importESModule(
"resource://gre/modules/ExtensionStorageComponents.sys.mjs"
);
const orig = storageSyncService._storageAreaPromise;
storageSyncService._storageAreaPromise = Promise.reject(
new Error("Some fake internal error")
);
try {
extension.sendMessage("call_storage_sync");
await extension.awaitMessage("done");
} finally {
storageSyncService._storageAreaPromise = orig;
}
});
AddonTestUtils.checkMessages(messages, {
expected: [{ message: /Some fake internal error/ }],
});
await extension.unload();
});