mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1196762 - Part 1: Initial Prefs Provider module for the remote newtab page r=Mardak
This commit is contained in:
parent
c2f996dde6
commit
a52b3106f5
84
browser/components/newtab/NewTabPrefsProvider.jsm
Normal file
84
browser/components/newtab/NewTabPrefsProvider.jsm
Normal file
@ -0,0 +1,84 @@
|
||||
/* global Services, Preferences, EventEmitter, XPCOMUtils */
|
||||
/* exported NewTabPrefsProvider */
|
||||
|
||||
"use strict";
|
||||
|
||||
this.EXPORTED_SYMBOLS = ["NewTabPrefsProvider"];
|
||||
|
||||
const {interfaces: Ci, utils: Cu} = Components;
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
Cu.import("resource://gre/modules/Preferences.jsm");
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyGetter(this, "EventEmitter", function() {
|
||||
const {EventEmitter} = Cu.import("resource://gre/modules/devtools/event-emitter.js", {});
|
||||
return EventEmitter;
|
||||
});
|
||||
|
||||
// Supported prefs and data type
|
||||
const gPrefsMap = new Map([
|
||||
["browser.newtabpage.enabled", "bool"],
|
||||
["browser.newtabpage.enhanced", "bool"],
|
||||
["browser.newtabpage.pinned", "str"],
|
||||
["intl.locale.matchOS", "bool"],
|
||||
["general.useragent.locale", "localized"],
|
||||
]);
|
||||
|
||||
let PrefsProvider = function PrefsProvider() {
|
||||
EventEmitter.decorate(this);
|
||||
};
|
||||
|
||||
PrefsProvider.prototype = {
|
||||
|
||||
observe(subject, topic, data) { // jshint ignore:line
|
||||
if (topic === "nsPref:changed") {
|
||||
if (gPrefsMap.has(data)) {
|
||||
switch (gPrefsMap.get(data)) {
|
||||
case "bool":
|
||||
this.emit(data, Preferences.get(data, false));
|
||||
break;
|
||||
case "str":
|
||||
this.emit(data, Preferences.get(data, ""));
|
||||
break;
|
||||
case "localized":
|
||||
try {
|
||||
this.emit(data, Preferences.get(data, "", Ci.nsIPrefLocalizedString));
|
||||
} catch (e) {
|
||||
this.emit(data, Preferences.get(data, ""));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
this.emit(data);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Cu.reportError(new Error("NewTabPrefsProvider observing unknown topic"));
|
||||
}
|
||||
},
|
||||
|
||||
get prefsMap() {
|
||||
return gPrefsMap;
|
||||
},
|
||||
|
||||
init() {
|
||||
for (let pref of gPrefsMap.keys()) {
|
||||
Services.prefs.addObserver(pref, this, false);
|
||||
}
|
||||
},
|
||||
|
||||
uninit() {
|
||||
for (let pref of gPrefsMap.keys()) {
|
||||
Services.prefs.removeObserver(pref, this, false);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Singleton that serves as the default new tab pref provider for the grid.
|
||||
*/
|
||||
const gPrefs = new PrefsProvider();
|
||||
|
||||
let NewTabPrefsProvider = {
|
||||
prefs: gPrefs,
|
||||
};
|
@ -11,6 +11,7 @@ XPCSHELL_TESTS_MANIFESTS += [
|
||||
]
|
||||
|
||||
EXTRA_JS_MODULES += [
|
||||
'NewTabPrefsProvider.jsm',
|
||||
'NewTabURL.jsm',
|
||||
'PlacesProvider.jsm',
|
||||
'RemoteAboutNewTab.jsm',
|
||||
|
@ -0,0 +1,51 @@
|
||||
"use strict";
|
||||
|
||||
/* global XPCOMUtils, equal, Preferences, NewTabPrefsProvider, run_next_test */
|
||||
/* exported run_test */
|
||||
/* jscs:disable requireCamelCaseOrUpperCaseIdentifiers */
|
||||
|
||||
const Cu = Components.utils;
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
Cu.import("resource://gre/modules/Preferences.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "NewTabPrefsProvider",
|
||||
"resource:///modules/NewTabPrefsProvider.jsm");
|
||||
|
||||
function run_test() {
|
||||
run_next_test();
|
||||
}
|
||||
|
||||
add_task(function* test_observe() {
|
||||
let prefsMap = NewTabPrefsProvider.prefs.prefsMap;
|
||||
for (let prefName of prefsMap.keys()) {
|
||||
let prefValueType = prefsMap.get(prefName);
|
||||
|
||||
let beforeVal;
|
||||
let afterVal;
|
||||
|
||||
switch (prefValueType) {
|
||||
case "bool":
|
||||
beforeVal = false;
|
||||
afterVal = true;
|
||||
Preferences.set(prefName, beforeVal);
|
||||
break;
|
||||
case "localized":
|
||||
case "str":
|
||||
beforeVal = "";
|
||||
afterVal = "someStr";
|
||||
Preferences.set(prefName, beforeVal);
|
||||
break;
|
||||
}
|
||||
NewTabPrefsProvider.prefs.init();
|
||||
let promise = new Promise(resolve => {
|
||||
NewTabPrefsProvider.prefs.once(prefName, (name, data) => { // jshint ignore:line
|
||||
resolve([name, data]);
|
||||
});
|
||||
});
|
||||
Preferences.set(prefName, afterVal);
|
||||
let [actualName, actualData] = yield promise;
|
||||
equal(prefName, actualName, `emitter sent the correct pref: ${prefName}`);
|
||||
equal(afterVal, actualData, `emitter collected correct pref data for ${prefName}`);
|
||||
NewTabPrefsProvider.prefs.uninit();
|
||||
}
|
||||
});
|
@ -5,6 +5,7 @@ firefox-appdir = browser
|
||||
skip-if = toolkit == 'android' || toolkit == 'gonk'
|
||||
|
||||
[test_AboutNewTabService.js]
|
||||
[test_NewTabPrefsProvider.js]
|
||||
[test_NewTabURL.js]
|
||||
[test_PlacesProvider.js]
|
||||
[test_RemoteNewTabLocation.js]
|
||||
|
@ -32,6 +32,9 @@ XPCOMUtils.defineLazyModuleGetter(this, "RemoteAboutNewTab",
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "RemoteNewTabUtils",
|
||||
"resource:///modules/RemoteNewTabUtils.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "NewTabPrefsProvider",
|
||||
"resource:///modules/NewTabPrefsProvider.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "UITour",
|
||||
"resource:///modules/UITour.jsm");
|
||||
|
||||
@ -849,6 +852,7 @@ BrowserGlue.prototype = {
|
||||
RemoteNewTabUtils.init();
|
||||
RemoteNewTabUtils.links.addProvider(DirectoryLinksProvider);
|
||||
RemoteAboutNewTab.init();
|
||||
NewTabPrefsProvider.prefs.init();
|
||||
|
||||
SessionStore.init();
|
||||
BrowserUITelemetry.init();
|
||||
@ -1170,6 +1174,7 @@ BrowserGlue.prototype = {
|
||||
WebappManager.uninit();
|
||||
|
||||
RemoteAboutNewTab.uninit();
|
||||
NewTabPrefsProvider.prefs.uninit();
|
||||
AboutNewTab.uninit();
|
||||
#ifdef NIGHTLY_BUILD
|
||||
if (Services.prefs.getBoolPref("dom.identity.enabled")) {
|
||||
|
Loading…
Reference in New Issue
Block a user