Revert "Bug 1956519 - Shared RemoteSettingsService, r=nanj,adw" for causing browser-chrome crashes.
This reverts commit 0b37f9e94c.
This commit is contained in:
committed by
imoraru@mozilla.com
parent
631e5eeff2
commit
658d19a425
@@ -816,14 +816,6 @@ class _QuickSuggest {
|
|||||||
this.#initStarted = false;
|
this.#initStarted = false;
|
||||||
this.#initResolvers = Promise.withResolvers();
|
this.#initResolvers = Promise.withResolvers();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.rustBackend) {
|
|
||||||
// Make sure to await any queued ingests before re-initializing. Otherwise there could be a race
|
|
||||||
// between when that ingestion finishes and when the test finishes and calls
|
|
||||||
// `SharedRemoteSettingsService.updateServer()` to reset the remote settings server.
|
|
||||||
await this.rustBackend.ingestPromise;
|
|
||||||
}
|
|
||||||
|
|
||||||
await this.init(testOverrides);
|
await this.init(testOverrides);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,8 +13,11 @@ ChromeUtils.defineESModuleGetters(lazy, {
|
|||||||
InterruptKind: "resource://gre/modules/RustSuggest.sys.mjs",
|
InterruptKind: "resource://gre/modules/RustSuggest.sys.mjs",
|
||||||
ObjectUtils: "resource://gre/modules/ObjectUtils.sys.mjs",
|
ObjectUtils: "resource://gre/modules/ObjectUtils.sys.mjs",
|
||||||
QuickSuggest: "resource:///modules/QuickSuggest.sys.mjs",
|
QuickSuggest: "resource:///modules/QuickSuggest.sys.mjs",
|
||||||
SharedRemoteSettingsService:
|
Region: "resource://gre/modules/Region.sys.mjs",
|
||||||
"resource://gre/modules/RustSharedRemoteSettingsService.sys.mjs",
|
RemoteSettingsConfig2: "resource://gre/modules/RustRemoteSettings.sys.mjs",
|
||||||
|
RemoteSettingsContext: "resource://gre/modules/RustRemoteSettings.sys.mjs",
|
||||||
|
RemoteSettingsServer: "resource://gre/modules/RustRemoteSettings.sys.mjs",
|
||||||
|
RemoteSettingsService: "resource://gre/modules/RustRemoteSettings.sys.mjs",
|
||||||
SuggestIngestionConstraints: "resource://gre/modules/RustSuggest.sys.mjs",
|
SuggestIngestionConstraints: "resource://gre/modules/RustSuggest.sys.mjs",
|
||||||
SuggestStoreBuilder: "resource://gre/modules/RustSuggest.sys.mjs",
|
SuggestStoreBuilder: "resource://gre/modules/RustSuggest.sys.mjs",
|
||||||
Suggestion: "resource://gre/modules/RustSuggest.sys.mjs",
|
Suggestion: "resource://gre/modules/RustSuggest.sys.mjs",
|
||||||
@@ -94,16 +97,18 @@ export class SuggestBackendRust extends SuggestBackend {
|
|||||||
// which is a "cannot-be-a-base" URL. The error is harmless, but it can be
|
// which is a "cannot-be-a-base" URL. The error is harmless, but it can be
|
||||||
// logged many times during a test suite.
|
// logged many times during a test suite.
|
||||||
//
|
//
|
||||||
// To prevent Suggest from using the dummy URL, we skip setting the
|
// To prevent Suggest from using the dummy URL, we skip setting the initial
|
||||||
// remoteSettingsService, which prevents the Suggest store from being
|
// RS config here during tests, which prevents the Suggest store from being
|
||||||
// created, effectively disabling Rust suggestions. Suggest tests manually
|
// created, effectively disabling Rust suggestions. Suggest tests manually
|
||||||
// set the RS config when they set up the mock RS server, so they'll work
|
// set the RS config when they set up the mock RS server, so they'll work
|
||||||
// fine. Alternatively the test harnesses could disable Suggest by default
|
// fine. Alternatively the test harnesses could disable Suggest by default
|
||||||
// just like they set the server pref to the dummy URL, but Suggest is more
|
// just like they set the server pref to the dummy URL, but Suggest is more
|
||||||
// than Rust suggestions.
|
// than Rust suggestions.
|
||||||
if (!lazy.Utils.shouldSkipRemoteActivityDueToTests) {
|
if (!lazy.Utils.shouldSkipRemoteActivityDueToTests) {
|
||||||
this.#remoteSettingsService =
|
this.#setRemoteSettingsConfig({
|
||||||
lazy.SharedRemoteSettingsService.rustService();
|
serverUrl: lazy.Utils.SERVER_URL,
|
||||||
|
bucketName: lazy.Utils.actualBucketName("main"),
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -454,6 +459,15 @@ export class SuggestBackendRust extends SuggestBackend {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @returns {string}
|
||||||
|
* The path of the directory that should contain the remote settings cache
|
||||||
|
* used internally by the Rust component.
|
||||||
|
*/
|
||||||
|
get #remoteSettingsStoragePath() {
|
||||||
|
return Services.dirsvc.get("ProfLD", Ci.nsIFile).path;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @returns {Array}
|
* @returns {Array}
|
||||||
* Each item in this array identifies an enabled Rust suggestion type and
|
* Each item in this array identifies an enabled Rust suggestion type and
|
||||||
@@ -534,8 +548,44 @@ export class SuggestBackendRust extends SuggestBackend {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#makeStore() {
|
#makeStore() {
|
||||||
this.logger.info("Creating SuggestStore");
|
this.logger.info("Creating SuggestStore", {
|
||||||
if (!this.#remoteSettingsService) {
|
server: this.#remoteSettingsServer,
|
||||||
|
bucketName: this.#remoteSettingsBucketName,
|
||||||
|
dataPath: this.#storeDataPath,
|
||||||
|
storagePath: this.#remoteSettingsStoragePath,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!this.#remoteSettingsServer) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
let rsContext = {
|
||||||
|
formFactor: "desktop",
|
||||||
|
appId: Services.appinfo.ID || "",
|
||||||
|
channel: AppConstants.IS_ESR ? "esr" : AppConstants.MOZ_UPDATE_CHANNEL,
|
||||||
|
appVersion: Services.appinfo.version,
|
||||||
|
locale: Services.locale.appLocaleAsBCP47,
|
||||||
|
os: AppConstants.platform,
|
||||||
|
osVersion: Services.sysinfo.get("version"),
|
||||||
|
};
|
||||||
|
|
||||||
|
// We assume `QuickSuggest` init already awaited `Region.init()`.
|
||||||
|
if (lazy.Region.home) {
|
||||||
|
rsContext.country = lazy.Region.home;
|
||||||
|
}
|
||||||
|
|
||||||
|
let rsService;
|
||||||
|
try {
|
||||||
|
rsService = lazy.RemoteSettingsService.init(
|
||||||
|
this.#remoteSettingsStoragePath,
|
||||||
|
new lazy.RemoteSettingsConfig2({
|
||||||
|
server: this.#remoteSettingsServer,
|
||||||
|
bucketName: this.#remoteSettingsBucketName,
|
||||||
|
appContext: new lazy.RemoteSettingsContext(rsContext),
|
||||||
|
})
|
||||||
|
);
|
||||||
|
} catch (error) {
|
||||||
|
this.logger.error("Error creating RemoteSettingsService", error);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -543,7 +593,7 @@ export class SuggestBackendRust extends SuggestBackend {
|
|||||||
try {
|
try {
|
||||||
builder = lazy.SuggestStoreBuilder.init()
|
builder = lazy.SuggestStoreBuilder.init()
|
||||||
.dataPath(this.#storeDataPath)
|
.dataPath(this.#storeDataPath)
|
||||||
.remoteSettingsService(this.#remoteSettingsService)
|
.remoteSettingsService(rsService)
|
||||||
.loadExtension(
|
.loadExtension(
|
||||||
AppConstants.SQLITE_LIBRARY_FILENAME,
|
AppConstants.SQLITE_LIBRARY_FILENAME,
|
||||||
"sqlite3_fts5_init"
|
"sqlite3_fts5_init"
|
||||||
@@ -677,6 +727,14 @@ export class SuggestBackendRust extends SuggestBackend {
|
|||||||
return lazy.SuggestionProvider[key];
|
return lazy.SuggestionProvider[key];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#setRemoteSettingsConfig(options) {
|
||||||
|
let { serverUrl, bucketName } = options || {};
|
||||||
|
this.#remoteSettingsServer = serverUrl
|
||||||
|
? new lazy.RemoteSettingsServer.Custom(serverUrl)
|
||||||
|
: null;
|
||||||
|
this.#remoteSettingsBucketName = bucketName;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dismissals are stored in the Rust component but were previously stored as
|
* Dismissals are stored in the Rust component but were previously stored as
|
||||||
* URL digests in a pref. This method migrates the pref to the Rust component
|
* URL digests in a pref. This method migrates the pref to the Rust component
|
||||||
@@ -750,8 +808,8 @@ export class SuggestBackendRust extends SuggestBackend {
|
|||||||
return this.#enabledSuggestionTypes;
|
return this.#enabledSuggestionTypes;
|
||||||
}
|
}
|
||||||
|
|
||||||
async _test_setRemoteSettingsService(remoteSettingsService) {
|
async _test_setRemoteSettingsConfig(options) {
|
||||||
this.#remoteSettingsService = remoteSettingsService;
|
this.#setRemoteSettingsConfig(options);
|
||||||
if (this.isEnabled) {
|
if (this.isEnabled) {
|
||||||
// Recreate the store and re-ingest.
|
// Recreate the store and re-ingest.
|
||||||
Services.prefs.clearUserPref(INGEST_TIMER_LAST_UPDATE_PREF);
|
Services.prefs.clearUserPref(INGEST_TIMER_LAST_UPDATE_PREF);
|
||||||
@@ -782,7 +840,8 @@ export class SuggestBackendRust extends SuggestBackend {
|
|||||||
|
|
||||||
#ingestQueue;
|
#ingestQueue;
|
||||||
#shutdownBlocker;
|
#shutdownBlocker;
|
||||||
#remoteSettingsService;
|
#remoteSettingsServer;
|
||||||
|
#remoteSettingsBucketName;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -14,8 +14,6 @@ ChromeUtils.defineESModuleGetters(lazy, {
|
|||||||
RemoteSettingsServer:
|
RemoteSettingsServer:
|
||||||
"resource://testing-common/RemoteSettingsServer.sys.mjs",
|
"resource://testing-common/RemoteSettingsServer.sys.mjs",
|
||||||
SearchUtils: "moz-src:///toolkit/components/search/SearchUtils.sys.mjs",
|
SearchUtils: "moz-src:///toolkit/components/search/SearchUtils.sys.mjs",
|
||||||
SharedRemoteSettingsService:
|
|
||||||
"resource://gre/modules/RustSharedRemoteSettingsService.sys.mjs",
|
|
||||||
Suggestion: "resource://gre/modules/RustSuggest.sys.mjs",
|
Suggestion: "resource://gre/modules/RustSuggest.sys.mjs",
|
||||||
TestUtils: "resource://testing-common/TestUtils.sys.mjs",
|
TestUtils: "resource://testing-common/TestUtils.sys.mjs",
|
||||||
UrlbarPrefs: "resource:///modules/UrlbarPrefs.sys.mjs",
|
UrlbarPrefs: "resource:///modules/UrlbarPrefs.sys.mjs",
|
||||||
@@ -240,13 +238,10 @@ class _QuickSuggestTestUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Tell the Rust backend to use the local remote setting server.
|
// Tell the Rust backend to use the local remote setting server.
|
||||||
lazy.SharedRemoteSettingsService.updateServer({
|
await lazy.QuickSuggest.rustBackend._test_setRemoteSettingsConfig({
|
||||||
url: this.#remoteSettingsServer.url.toString(),
|
|
||||||
bucketName: "main",
|
bucketName: "main",
|
||||||
|
serverUrl: this.#remoteSettingsServer.url.toString(),
|
||||||
});
|
});
|
||||||
await lazy.QuickSuggest.rustBackend._test_setRemoteSettingsService(
|
|
||||||
lazy.SharedRemoteSettingsService.rustService()
|
|
||||||
);
|
|
||||||
|
|
||||||
// Wait for the Rust backend to finish syncing.
|
// Wait for the Rust backend to finish syncing.
|
||||||
await this.forceSync();
|
await this.forceSync();
|
||||||
@@ -296,7 +291,7 @@ class _QuickSuggestTestUtils {
|
|||||||
lazy.UrlbarPrefs.clear("quicksuggest.dataCollection.enabled");
|
lazy.UrlbarPrefs.clear("quicksuggest.dataCollection.enabled");
|
||||||
}
|
}
|
||||||
|
|
||||||
await lazy.QuickSuggest.rustBackend._test_setRemoteSettingsService(null);
|
await lazy.QuickSuggest.rustBackend._test_setRemoteSettingsConfig(null);
|
||||||
|
|
||||||
this.#log("#uninitQuickSuggest", "Done");
|
this.#log("#uninitQuickSuggest", "Done");
|
||||||
}
|
}
|
||||||
@@ -1419,7 +1414,7 @@ class _QuickSuggestTestUtils {
|
|||||||
|
|
||||||
let originalHome = lazy.Region.home;
|
let originalHome = lazy.Region.home;
|
||||||
if (homeRegion) {
|
if (homeRegion) {
|
||||||
lazy.Region._setHomeRegion(homeRegion, true);
|
lazy.Region._setHomeRegion(homeRegion, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
let available = Services.locale.availableLocales;
|
let available = Services.locale.availableLocales;
|
||||||
@@ -1440,7 +1435,7 @@ class _QuickSuggestTestUtils {
|
|||||||
await callback();
|
await callback();
|
||||||
|
|
||||||
if (homeRegion) {
|
if (homeRegion) {
|
||||||
lazy.Region._setHomeRegion(originalHome, true);
|
lazy.Region._setHomeRegion(originalHome, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
promise = promiseChanges(requested);
|
promise = promiseChanges(requested);
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ ChromeUtils.defineESModuleGetters(lazy, {
|
|||||||
Interest: "resource://gre/modules/RustRelevancy.sys.mjs",
|
Interest: "resource://gre/modules/RustRelevancy.sys.mjs",
|
||||||
InterestVector: "resource://gre/modules/RustRelevancy.sys.mjs",
|
InterestVector: "resource://gre/modules/RustRelevancy.sys.mjs",
|
||||||
RelevancyStore: "resource://gre/modules/RustRelevancy.sys.mjs",
|
RelevancyStore: "resource://gre/modules/RustRelevancy.sys.mjs",
|
||||||
SharedRemoteSettingsService:
|
RemoteSettingsConfig2: "resource://gre/modules/RustRemoteSettings.sys.mjs",
|
||||||
"resource://gre/modules/RustSharedRemoteSettingsService.sys.mjs",
|
RemoteSettingsService: "resource://gre/modules/RustRemoteSettings.sys.mjs",
|
||||||
score: "resource://gre/modules/RustRelevancy.sys.mjs",
|
score: "resource://gre/modules/RustRelevancy.sys.mjs",
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -376,7 +376,6 @@ class RelevancyManager {
|
|||||||
) ??
|
) ??
|
||||||
false
|
false
|
||||||
) {
|
) {
|
||||||
await this.#storeManager.store.ensureInterestDataPopulated();
|
|
||||||
interestVector = await this.#storeManager.store.ingest(urls);
|
interestVector = await this.#storeManager.store.ingest(urls);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -499,10 +498,18 @@ class RustRelevancyStoreManager {
|
|||||||
if (rustRelevancyStore === undefined) {
|
if (rustRelevancyStore === undefined) {
|
||||||
rustRelevancyStore = lazy.RelevancyStore;
|
rustRelevancyStore = lazy.RelevancyStore;
|
||||||
}
|
}
|
||||||
this.#store = rustRelevancyStore.init(
|
// Initialize a RemoteSettingsService for the relevancy store
|
||||||
path,
|
// TODO (1956519): consolidate this with the Suggest code and only create a single app-wide remote settings
|
||||||
lazy.SharedRemoteSettingsService.rustService()
|
// service. For now this duplication is okay though because we're not really shipping Relevancy -- it's only enabled via a
|
||||||
|
// pref.
|
||||||
|
const rsService = lazy.RemoteSettingsService.init(
|
||||||
|
PathUtils.join(
|
||||||
|
Services.dirsvc.get("ProfLD", Ci.nsIFile).path,
|
||||||
|
"remote-settings"
|
||||||
|
),
|
||||||
|
new lazy.RemoteSettingsConfig2({})
|
||||||
);
|
);
|
||||||
|
this.#store = rustRelevancyStore.init(path, rsService);
|
||||||
}
|
}
|
||||||
|
|
||||||
get store() {
|
get store() {
|
||||||
|
|||||||
@@ -7,8 +7,6 @@ ChromeUtils.defineESModuleGetters(this, {
|
|||||||
AsyncShutdown: "resource://gre/modules/AsyncShutdown.sys.mjs",
|
AsyncShutdown: "resource://gre/modules/AsyncShutdown.sys.mjs",
|
||||||
ContentRelevancyManager:
|
ContentRelevancyManager:
|
||||||
"resource://gre/modules/ContentRelevancyManager.sys.mjs",
|
"resource://gre/modules/ContentRelevancyManager.sys.mjs",
|
||||||
SharedRemoteSettingsService:
|
|
||||||
"resource://gre/modules/RustSharedRemoteSettingsService.sys.mjs",
|
|
||||||
exposedForTesting: "resource://gre/modules/ContentRelevancyManager.sys.mjs",
|
exposedForTesting: "resource://gre/modules/ContentRelevancyManager.sys.mjs",
|
||||||
TestUtils: "resource://testing-common/TestUtils.sys.mjs",
|
TestUtils: "resource://testing-common/TestUtils.sys.mjs",
|
||||||
setTimeout: "resource://gre/modules/Timer.sys.mjs",
|
setTimeout: "resource://gre/modules/Timer.sys.mjs",
|
||||||
@@ -64,10 +62,8 @@ add_task(function test_store_manager() {
|
|||||||
);
|
);
|
||||||
Assert.equal(fakeRustRelevancyStore.init.callCount, 1);
|
Assert.equal(fakeRustRelevancyStore.init.callCount, 1);
|
||||||
Assert.deepEqual(fakeRustRelevancyStore.init.firstCall.args[0], "test-path");
|
Assert.deepEqual(fakeRustRelevancyStore.init.firstCall.args[0], "test-path");
|
||||||
Assert.strictEqual(
|
// TODO (1956519): test that the second arg is the app-wide RemoteSettingsService
|
||||||
fakeRustRelevancyStore.init.firstCall.args[1],
|
// store should throw before the manager is enabled
|
||||||
SharedRemoteSettingsService.rustService()
|
|
||||||
);
|
|
||||||
Assert.throws(() => storeManager.store, /StoreDisabledError/);
|
Assert.throws(() => storeManager.store, /StoreDisabledError/);
|
||||||
// Once the manager is enabled, store should return the RustRelevancyStore
|
// Once the manager is enabled, store should return the RustRelevancyStore
|
||||||
storeManager.enable();
|
storeManager.enable();
|
||||||
|
|||||||
@@ -941,13 +941,17 @@ export class RemoteSettingsService {
|
|||||||
}
|
}
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
return UniFFIScaffolding.callSync(
|
return UniFFIScaffolding.callAsyncWrapper(
|
||||||
29, // remote_settings:uniffi_remote_settings_fn_method_remotesettingsservice_update_config
|
29, // remote_settings:uniffi_remote_settings_fn_method_remotesettingsservice_update_config
|
||||||
FfiConverterTypeRemoteSettingsService.lower(this),
|
FfiConverterTypeRemoteSettingsService.lower(this),
|
||||||
FfiConverterTypeRemoteSettingsConfig2.lower(config),
|
FfiConverterTypeRemoteSettingsConfig2.lower(config),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
return handleRustResult(functionCall(), liftResult, liftError);
|
try {
|
||||||
|
return functionCall().then((result) => handleRustResult(result, liftResult, liftError));
|
||||||
|
} catch (error) {
|
||||||
|
return Promise.reject(error)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,7 +62,6 @@ enable = true
|
|||||||
main_thread = [
|
main_thread = [
|
||||||
"RemoteSettings.new",
|
"RemoteSettings.new",
|
||||||
"RemoteSettingsService.new",
|
"RemoteSettingsService.new",
|
||||||
"RemoteSettingsService.update_config",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[error_support.async_wrappers]
|
[error_support.async_wrappers]
|
||||||
|
|||||||
@@ -1,99 +0,0 @@
|
|||||||
/* 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/. */
|
|
||||||
|
|
||||||
// Import these directly, since we're going to be using them immediately to construct SharedRemoteSettingsService
|
|
||||||
import { AppConstants } from "resource://gre/modules/AppConstants.sys.mjs";
|
|
||||||
import { Region } from "resource://gre/modules/Region.sys.mjs";
|
|
||||||
import {
|
|
||||||
RemoteSettingsConfig2,
|
|
||||||
RemoteSettingsContext,
|
|
||||||
RemoteSettingsServer,
|
|
||||||
RemoteSettingsService,
|
|
||||||
} from "resource://gre/modules/RustRemoteSettings.sys.mjs";
|
|
||||||
import { Utils } from "resource://services-settings/Utils.sys.mjs";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Rust RemoteSettingsService singleton
|
|
||||||
*
|
|
||||||
* This component manages the app-wide Rust RemoteSetingsService that's
|
|
||||||
* shared by various other Rust components.
|
|
||||||
*
|
|
||||||
* This is only intended to be passed to Rust code. If you want a
|
|
||||||
* general-purpose Remote settings client, use the JS one:
|
|
||||||
*
|
|
||||||
* - https://firefox-source-docs.mozilla.org/services/settings/index.html
|
|
||||||
* - https://searchfox.org/mozilla-central/source/services/settings/remote-settings.sys.mjs
|
|
||||||
*/
|
|
||||||
class _SharedRemoteSettingsService {
|
|
||||||
#config;
|
|
||||||
#rustService;
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
const storageDir = PathUtils.join(
|
|
||||||
Services.dirsvc.get("ProfLD", Ci.nsIFile).path,
|
|
||||||
"remote-settings"
|
|
||||||
);
|
|
||||||
|
|
||||||
this.#config = new RemoteSettingsConfig2({
|
|
||||||
server: new RemoteSettingsServer.Custom(Utils.SERVER_URL),
|
|
||||||
bucketName: Utils.actualBucketName("main"),
|
|
||||||
appContext: new RemoteSettingsContext({
|
|
||||||
formFactor: "desktop",
|
|
||||||
appId: Services.appinfo.ID || "",
|
|
||||||
channel: AppConstants.IS_ESR ? "esr" : AppConstants.MOZ_UPDATE_CHANNEL,
|
|
||||||
appVersion: Services.appinfo.version,
|
|
||||||
locale: Services.locale.appLocaleAsBCP47,
|
|
||||||
os: AppConstants.platform,
|
|
||||||
osVersion: Services.sysinfo.get("version"),
|
|
||||||
country: Region.home ?? undefined,
|
|
||||||
}),
|
|
||||||
});
|
|
||||||
|
|
||||||
Services.obs.addObserver(this, Region.REGION_TOPIC);
|
|
||||||
|
|
||||||
this.#rustService = RemoteSettingsService.init(storageDir, this.#config);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Update the Remote Settings server
|
|
||||||
*
|
|
||||||
* @param {object} opts object with the following fields:
|
|
||||||
* - `url`: server URL (defaults to the production URL)
|
|
||||||
* - `bucketName`: bucket name (defaults to "main")
|
|
||||||
*/
|
|
||||||
updateServer(opts) {
|
|
||||||
this.#config.server = opts.url
|
|
||||||
? new RemoteSettingsServer.Custom(opts.url)
|
|
||||||
: undefined;
|
|
||||||
this.#config.bucketName = opts.bucketName ?? Utils.actualBucketName("main");
|
|
||||||
this.#rustService.updateConfig(this.#config);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a reference to the Rust RemoteSettingsService object
|
|
||||||
*/
|
|
||||||
rustService() {
|
|
||||||
return this.#rustService;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sync server data for all active clients
|
|
||||||
*/
|
|
||||||
async sync() {
|
|
||||||
// TODO (1966163): Hook this up to a timer. There's currently no mechanism that calls this.
|
|
||||||
await this.#rustService.sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
observe(subj, topic) {
|
|
||||||
if (topic == Region.REGION_TOPIC) {
|
|
||||||
const newCountry = subj.data;
|
|
||||||
if (newCountry != this.#config.appContext.country) {
|
|
||||||
this.#config.appContext.country = newCountry;
|
|
||||||
this.#rustService.updateConfig(this.#config);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export const SharedRemoteSettingsService = new _SharedRemoteSettingsService();
|
|
||||||
@@ -108,9 +108,6 @@ with Files("PrivateBrowsingUtils.sys.mjs"):
|
|||||||
with Files("Promise*.sys.mjs"):
|
with Files("Promise*.sys.mjs"):
|
||||||
BUG_COMPONENT = ("Toolkit", "Async Tooling")
|
BUG_COMPONENT = ("Toolkit", "Async Tooling")
|
||||||
|
|
||||||
with Files("RustSharedRemoteSettingsService.sys.mjs"):
|
|
||||||
BUG_COMPONENT = ("Application Services", "Remote Settings")
|
|
||||||
|
|
||||||
with Files("ShortcutUtils.sys.mjs"):
|
with Files("ShortcutUtils.sys.mjs"):
|
||||||
BUG_COMPONENT = ("Firefox", "Toolbars and Customization")
|
BUG_COMPONENT = ("Firefox", "Toolbars and Customization")
|
||||||
|
|
||||||
@@ -129,6 +126,7 @@ with Files("WindowsLaunchOnLogin.sys.mjs"):
|
|||||||
with Files("WindowsRegistry.sys.mjs"):
|
with Files("WindowsRegistry.sys.mjs"):
|
||||||
BUG_COMPONENT = ("Toolkit", "General")
|
BUG_COMPONENT = ("Toolkit", "General")
|
||||||
|
|
||||||
|
|
||||||
XPCSHELL_TESTS_MANIFESTS += ["tests/xpcshell/xpcshell.toml"]
|
XPCSHELL_TESTS_MANIFESTS += ["tests/xpcshell/xpcshell.toml"]
|
||||||
BROWSER_CHROME_MANIFESTS += ["tests/browser/browser.toml"]
|
BROWSER_CHROME_MANIFESTS += ["tests/browser/browser.toml"]
|
||||||
MOCHITEST_CHROME_MANIFESTS += ["tests/chrome/chrome.toml"]
|
MOCHITEST_CHROME_MANIFESTS += ["tests/chrome/chrome.toml"]
|
||||||
@@ -201,7 +199,6 @@ EXTRA_JS_MODULES += [
|
|||||||
"Region.sys.mjs",
|
"Region.sys.mjs",
|
||||||
"RemotePageAccessManager.sys.mjs",
|
"RemotePageAccessManager.sys.mjs",
|
||||||
"ResetProfile.sys.mjs",
|
"ResetProfile.sys.mjs",
|
||||||
"RustSharedRemoteSettingsService.sys.mjs",
|
|
||||||
"SelectionUtils.sys.mjs",
|
"SelectionUtils.sys.mjs",
|
||||||
"ServiceRequest.sys.mjs",
|
"ServiceRequest.sys.mjs",
|
||||||
"ShortcutUtils.sys.mjs",
|
"ShortcutUtils.sys.mjs",
|
||||||
|
|||||||
Reference in New Issue
Block a user