fune/toolkit/components/extensions/test/marionette/service_worker_testutils.py
Luca Greco 0995284f7d Bug 1638097 - ServiceWorkerManager should not store registration related to temporary addons. r=asuth
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
2021-07-14 14:13:00 +00:00

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,),
)