зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1653937 - Read top site defaults from remote settings. r=mikedeboer
Differential Revision: https://phabricator.services.mozilla.com/D88041
This commit is contained in:
Родитель
bbe5591583
Коммит
1800cee263
|
@ -61,6 +61,11 @@ ChromeUtils.defineModuleGetter(
|
||||||
"PageThumbs",
|
"PageThumbs",
|
||||||
"resource://gre/modules/PageThumbs.jsm"
|
"resource://gre/modules/PageThumbs.jsm"
|
||||||
);
|
);
|
||||||
|
ChromeUtils.defineModuleGetter(
|
||||||
|
this,
|
||||||
|
"RemoteSettings",
|
||||||
|
"resource://services-settings/remote-settings.js"
|
||||||
|
);
|
||||||
|
|
||||||
const DEFAULT_SITES_PREF = "default.sites";
|
const DEFAULT_SITES_PREF = "default.sites";
|
||||||
const SHOWN_ON_NEWTAB_PREF = "feeds.topsites";
|
const SHOWN_ON_NEWTAB_PREF = "feeds.topsites";
|
||||||
|
@ -130,7 +135,6 @@ this.TopSitesFeed = class TopSitesFeed {
|
||||||
// If the feed was previously disabled PREFS_INITIAL_VALUES was never received
|
// If the feed was previously disabled PREFS_INITIAL_VALUES was never received
|
||||||
this._readDefaults();
|
this._readDefaults();
|
||||||
this._storage = this.store.dbStorage.getDbTable("sectionPrefs");
|
this._storage = this.store.dbStorage.getDbTable("sectionPrefs");
|
||||||
this.refresh({ broadcast: true, isStartup: true });
|
|
||||||
Services.obs.addObserver(this, "browser-search-engine-modified");
|
Services.obs.addObserver(this, "browser-search-engine-modified");
|
||||||
for (let [pref] of SEARCH_TILE_OVERRIDE_PREFS) {
|
for (let [pref] of SEARCH_TILE_OVERRIDE_PREFS) {
|
||||||
Services.prefs.addObserver(pref, this);
|
Services.prefs.addObserver(pref, this);
|
||||||
|
@ -169,7 +173,6 @@ this.TopSitesFeed = class TopSitesFeed {
|
||||||
data === REMOTE_SETTING_OVERRIDE_PREF
|
data === REMOTE_SETTING_OVERRIDE_PREF
|
||||||
) {
|
) {
|
||||||
this._readDefaults();
|
this._readDefaults();
|
||||||
this.refresh({ broadcast: true });
|
|
||||||
} else if (SEARCH_TILE_OVERRIDE_PREFS.has(data)) {
|
} else if (SEARCH_TILE_OVERRIDE_PREFS.has(data)) {
|
||||||
this.refresh({ broadcast: true });
|
this.refresh({ broadcast: true });
|
||||||
}
|
}
|
||||||
|
@ -184,14 +187,15 @@ this.TopSitesFeed = class TopSitesFeed {
|
||||||
/**
|
/**
|
||||||
* _readDefaults - sets DEFAULT_TOP_SITES
|
* _readDefaults - sets DEFAULT_TOP_SITES
|
||||||
*/
|
*/
|
||||||
_readDefaults() {
|
async _readDefaults({ isStartup = false } = {}) {
|
||||||
this._useRemoteSetting = Services.prefs.getBoolPref(
|
this._useRemoteSetting = Services.prefs.getBoolPref(
|
||||||
REMOTE_SETTING_DEFAULTS_PREF
|
REMOTE_SETTING_DEFAULTS_PREF
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!this._useRemoteSetting) {
|
if (!this._useRemoteSetting) {
|
||||||
this.refreshDefaults(
|
this.refreshDefaults(
|
||||||
this.store.getState().Prefs.values[DEFAULT_SITES_PREF]
|
this.store.getState().Prefs.values[DEFAULT_SITES_PREF],
|
||||||
|
{ isStartup }
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -202,27 +206,12 @@ this.TopSitesFeed = class TopSitesFeed {
|
||||||
sites = Services.prefs.getStringPref(REMOTE_SETTING_OVERRIDE_PREF);
|
sites = Services.prefs.getStringPref(REMOTE_SETTING_OVERRIDE_PREF);
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
if (sites) {
|
if (sites) {
|
||||||
this.refreshDefaults(sites);
|
this.refreshDefaults(sites, { isStartup });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read defaults from remote settings.
|
// Read defaults from remote settings.
|
||||||
// Placeholder for the actual remote setting (bug 1653937).
|
let remoteSettingData = await this._getRemoteConfig();
|
||||||
let remoteSettingData = [
|
|
||||||
{
|
|
||||||
title: "Mozilla!",
|
|
||||||
url: "https://mozilla.org/#%YYYYMMDDHH%",
|
|
||||||
send_attribution_request: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
url: "https://firefox.com",
|
|
||||||
url_urlbar_override: "https://firefox.com/#urlbar",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
url: "https://foobar.com",
|
|
||||||
keyword: "@foobar",
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
// Clear out the array of any previous defaults.
|
// Clear out the array of any previous defaults.
|
||||||
DEFAULT_TOP_SITES.length = 0;
|
DEFAULT_TOP_SITES.length = 0;
|
||||||
|
@ -246,9 +235,11 @@ this.TopSitesFeed = class TopSitesFeed {
|
||||||
}
|
}
|
||||||
DEFAULT_TOP_SITES.push(link);
|
DEFAULT_TOP_SITES.push(link);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.refresh({ broadcast: true, isStartup });
|
||||||
}
|
}
|
||||||
|
|
||||||
refreshDefaults(sites) {
|
refreshDefaults(sites, { isStartup = false } = {}) {
|
||||||
// Clear out the array of any previous defaults
|
// Clear out the array of any previous defaults
|
||||||
DEFAULT_TOP_SITES.length = 0;
|
DEFAULT_TOP_SITES.length = 0;
|
||||||
|
|
||||||
|
@ -263,6 +254,36 @@ this.TopSitesFeed = class TopSitesFeed {
|
||||||
DEFAULT_TOP_SITES.push(site);
|
DEFAULT_TOP_SITES.push(site);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.refresh({ broadcast: true, isStartup });
|
||||||
|
}
|
||||||
|
|
||||||
|
async _getRemoteConfig(firstTime = true) {
|
||||||
|
if (!this._remoteConfig) {
|
||||||
|
this._remoteConfig = await RemoteSettings("top-sites");
|
||||||
|
}
|
||||||
|
|
||||||
|
let result = [];
|
||||||
|
let failed = false;
|
||||||
|
try {
|
||||||
|
result = await this._remoteConfig.get();
|
||||||
|
} catch (ex) {
|
||||||
|
Cu.reportError(ex);
|
||||||
|
failed = true;
|
||||||
|
}
|
||||||
|
if (!result.length) {
|
||||||
|
Cu.reportError("Received empty search configuration!");
|
||||||
|
failed = true;
|
||||||
|
}
|
||||||
|
// If we failed, or the result is empty, try loading from the local dump.
|
||||||
|
if (firstTime && failed) {
|
||||||
|
await this._remoteConfig.db.clear();
|
||||||
|
// Now call this again.
|
||||||
|
return this._getRemoteConfig(false);
|
||||||
|
}
|
||||||
|
// Sort sites based on the "order" attribute.
|
||||||
|
result.sort((a, b) => a.order - b.order);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
filterForThumbnailExpiration(callback) {
|
filterForThumbnailExpiration(callback) {
|
||||||
|
@ -286,6 +307,7 @@ this.TopSitesFeed = class TopSitesFeed {
|
||||||
*/
|
*/
|
||||||
shouldFilterSearchTile(hostname) {
|
shouldFilterSearchTile(hostname) {
|
||||||
if (
|
if (
|
||||||
|
!this._useRemoteSetting &&
|
||||||
this.store.getState().Prefs.values[FILTER_DEFAULT_SEARCH_PREF] &&
|
this.store.getState().Prefs.values[FILTER_DEFAULT_SEARCH_PREF] &&
|
||||||
(SEARCH_FILTERS.includes(hostname) ||
|
(SEARCH_FILTERS.includes(hostname) ||
|
||||||
hostname === this._currentSearchHostname)
|
hostname === this._currentSearchHostname)
|
||||||
|
@ -379,9 +401,9 @@ this.TopSitesFeed = class TopSitesFeed {
|
||||||
const numItems =
|
const numItems =
|
||||||
this.store.getState().Prefs.values[ROWS_PREF] *
|
this.store.getState().Prefs.values[ROWS_PREF] *
|
||||||
TOP_SITES_MAX_SITES_PER_ROW;
|
TOP_SITES_MAX_SITES_PER_ROW;
|
||||||
const searchShortcutsExperiment = this.store.getState().Prefs.values[
|
const searchShortcutsExperiment =
|
||||||
SEARCH_SHORTCUTS_EXPERIMENT
|
!this._useRemoteSetting &&
|
||||||
];
|
this.store.getState().Prefs.values[SEARCH_SHORTCUTS_EXPERIMENT];
|
||||||
// We must wait for search services to initialize in order to access default
|
// We must wait for search services to initialize in order to access default
|
||||||
// search engine properties without triggering a synchronous initialization
|
// search engine properties without triggering a synchronous initialization
|
||||||
await Services.search.init();
|
await Services.search.init();
|
||||||
|
|
|
@ -11,6 +11,7 @@ FINAL_TARGET_FILES.defaults.settings.main += [
|
||||||
'search-config.json',
|
'search-config.json',
|
||||||
'search-default-override-allowlist.json',
|
'search-default-override-allowlist.json',
|
||||||
'sites-classification.json',
|
'sites-classification.json',
|
||||||
|
'top-sites.json',
|
||||||
'url-classifier-skip-urls.json',
|
'url-classifier-skip-urls.json',
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
{"data":[{"url":"https://www.amazon.com/","order":4,"title":"Amazon","schema":1598289482863,"send_attribution_request":true,"id":"08f43769-116f-4450-b57d-5108042b5fe5","last_modified":1598289691049},{"url":"https://www.facebook.com/","order":1,"title":"Facebook","schema":1598289454075,"send_attribution_request":false,"id":"b64b8279-6996-4e35-9176-c5ae5964c422","last_modified":1598289691047},{"url":"https://www.youtube.com/","order":3,"title":"Youtube","schema":1598289470275,"send_attribution_request":false,"id":"fc5d5d35-5637-4268-bb5f-f262818fa7e9","last_modified":1598289691044},{"url":"https://www.wikipedia.org/","order":5,"title":"Wikipedia","schema":1598289491094,"send_attribution_request":false,"id":"7105fa42-4066-41df-9af3-885a7b2e9682","last_modified":1598289691041},{"url":"https://twitter.com/","order":2,"title":"Twitter","schema":1598289462557,"send_attribution_request":false,"id":"6bb2647b-31d6-4185-9052-6d680bf2d777","last_modified":1598289691039},{"url":"https://google.com/","order":0,"title":"Google","schema":1598289436719,"keyword":"@google","send_attribution_request":false,"id":"cb6417cc-21d1-4a4d-9103-5094a5277342","last_modified":1598289691036}]}
|
Загрузка…
Ссылка в новой задаче