forked from mirrors/gecko-dev
This patch include a small change to ServiceWorkerManager::StoreRegistration which does early exist and not store the registration on disk if: - the principal is from a WebExtension - the addon is not enabled (or was already uninstalled) by the time we got to store the registration - the addon is temporarily installed At the moment it should not happen, but if ServiceWorkerManager::StoreRegistration was reached too late for some reason and the registration was meant to be stored, the service worker would still be registered again when the addon is started again on the next browser startup and stored on disk if it was meant to. Depends on D119529 Differential Revision: https://phabricator.services.mozilla.com/D119530
49 lines
1.8 KiB
Python
49 lines
1.8 KiB
Python
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
from marionette_harness import MarionetteTestCase
|
|
|
|
|
|
EXT_ID = "extension-with-bg-sw@test"
|
|
EXT_DIR_PATH = "extension-with-bg-sw"
|
|
PREF_BG_SW_ENABLED = "extensions.backgroundServiceWorker.enabled"
|
|
PREF_PERSIST_TEMP_ADDONS = (
|
|
"dom.serviceWorkers.testing.persistTemporarilyInstalledAddons"
|
|
)
|
|
|
|
|
|
class MarionetteServiceWorkerTestCase(MarionetteTestCase):
|
|
def get_extension_url(self, path="/"):
|
|
with self.marionette.using_context("chrome"):
|
|
return self.marionette.execute_script(
|
|
"""
|
|
let policy = WebExtensionPolicy.getByID(arguments[0]);
|
|
return policy.getURL(arguments[1])
|
|
""",
|
|
script_args=(self.test_extension_id, path),
|
|
)
|
|
|
|
@property
|
|
def is_extension_service_worker_registered(self):
|
|
with self.marionette.using_context("chrome"):
|
|
return self.marionette.execute_script(
|
|
"""
|
|
let serviceWorkerManager = Cc["@mozilla.org/serviceworkers/manager;1"].getService(
|
|
Ci.nsIServiceWorkerManager
|
|
);
|
|
|
|
let serviceWorkers = serviceWorkerManager.getAllRegistrations();
|
|
for (let i = 0; i < serviceWorkers.length; i++) {
|
|
let sw = serviceWorkers.queryElementAt(
|
|
i,
|
|
Ci.nsIServiceWorkerRegistrationInfo
|
|
);
|
|
if (sw.scope == arguments[0]) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
""",
|
|
script_args=(self.test_extension_base_url,),
|
|
)
|