bug 894806 [Australis] refactor and remove social.provider, r=markh
This commit is contained in:
@@ -34,26 +34,6 @@ XPCOMUtils.defineLazyServiceGetter(this, "unescapeService",
|
||||
"@mozilla.org/feed-unescapehtml;1",
|
||||
"nsIScriptableUnescapeHTML");
|
||||
|
||||
// Add a pref observer for the enabled state
|
||||
function prefObserver(subject, topic, data) {
|
||||
let enable = Services.prefs.getBoolPref("social.enabled");
|
||||
if (enable && !Social.provider) {
|
||||
// this will result in setting Social.provider
|
||||
SocialService.getOrderedProviderList(function(providers) {
|
||||
Social.enabled = true;
|
||||
Social._updateProviderCache(providers);
|
||||
});
|
||||
} else if (!enable && Social.provider) {
|
||||
Social.provider = null;
|
||||
}
|
||||
}
|
||||
|
||||
Services.prefs.addObserver("social.enabled", prefObserver, false);
|
||||
Services.obs.addObserver(function xpcomShutdown() {
|
||||
Services.obs.removeObserver(xpcomShutdown, "xpcom-shutdown");
|
||||
Services.prefs.removeObserver("social.enabled", prefObserver);
|
||||
}, "xpcom-shutdown", false);
|
||||
|
||||
function promiseSetAnnotation(aURI, providerList) {
|
||||
let deferred = Promise.defer();
|
||||
|
||||
@@ -100,62 +80,13 @@ this.Social = {
|
||||
providers: [],
|
||||
_disabledForSafeMode: false,
|
||||
|
||||
get _currentProviderPref() {
|
||||
try {
|
||||
return Services.prefs.getComplexValue("social.provider.current",
|
||||
Ci.nsISupportsString).data;
|
||||
} catch (ex) {}
|
||||
return null;
|
||||
},
|
||||
set _currentProviderPref(val) {
|
||||
let string = Cc["@mozilla.org/supports-string;1"].
|
||||
createInstance(Ci.nsISupportsString);
|
||||
string.data = val;
|
||||
Services.prefs.setComplexValue("social.provider.current",
|
||||
Ci.nsISupportsString, string);
|
||||
},
|
||||
|
||||
_provider: null,
|
||||
get provider() {
|
||||
return this._provider;
|
||||
},
|
||||
set provider(val) {
|
||||
this._setProvider(val);
|
||||
},
|
||||
|
||||
// Sets the current provider and notifies observers of the change.
|
||||
_setProvider: function (provider) {
|
||||
if (this._provider == provider)
|
||||
return;
|
||||
|
||||
this._provider = provider;
|
||||
|
||||
if (this._provider) {
|
||||
this._provider.enabled = true;
|
||||
this._currentProviderPref = this._provider.origin;
|
||||
}
|
||||
let enabled = !!provider;
|
||||
if (enabled != SocialService.enabled) {
|
||||
SocialService.enabled = enabled;
|
||||
this._updateWorkerState(enabled);
|
||||
}
|
||||
|
||||
let origin = this._provider && this._provider.origin;
|
||||
Services.obs.notifyObservers(null, "social:provider-set", origin);
|
||||
},
|
||||
|
||||
get defaultProvider() {
|
||||
if (this.providers.length == 0)
|
||||
return null;
|
||||
let provider = this._getProviderFromOrigin(this._currentProviderPref);
|
||||
return provider || this.providers[0];
|
||||
},
|
||||
|
||||
init: function Social_init() {
|
||||
this._disabledForSafeMode = Services.appinfo.inSafeMode && this.enabled;
|
||||
let deferred = Promise.defer();
|
||||
|
||||
if (this.initialized) {
|
||||
return;
|
||||
deferred.resolve(true);
|
||||
return deferred.promise;
|
||||
}
|
||||
this.initialized = true;
|
||||
// if SocialService.hasEnabledProviders, retreive the providers so the
|
||||
@@ -165,7 +96,10 @@ this.Social = {
|
||||
SocialService.getOrderedProviderList(function (providers) {
|
||||
Social._updateProviderCache(providers);
|
||||
Social._updateWorkerState(SocialService.enabled);
|
||||
deferred.resolve(false);
|
||||
});
|
||||
} else {
|
||||
deferred.resolve(false);
|
||||
}
|
||||
|
||||
// Register an observer for changes to the provider list
|
||||
@@ -179,7 +113,7 @@ this.Social = {
|
||||
}
|
||||
if (topic == "provider-enabled") {
|
||||
Social._updateProviderCache(providers);
|
||||
Social._updateWorkerState(Social.enabled);
|
||||
Social._updateWorkerState(true);
|
||||
Services.obs.notifyObservers(null, "social:" + topic, origin);
|
||||
return;
|
||||
}
|
||||
@@ -187,6 +121,7 @@ this.Social = {
|
||||
// a provider was removed from the list of providers, that does not
|
||||
// affect worker state for other providers
|
||||
Social._updateProviderCache(providers);
|
||||
Social._updateWorkerState(providers.length > 0);
|
||||
Services.obs.notifyObservers(null, "social:" + topic, origin);
|
||||
return;
|
||||
}
|
||||
@@ -198,6 +133,7 @@ this.Social = {
|
||||
provider.reload();
|
||||
}
|
||||
});
|
||||
return deferred.promise;
|
||||
},
|
||||
|
||||
_updateWorkerState: function(enable) {
|
||||
@@ -208,43 +144,10 @@ this.Social = {
|
||||
_updateProviderCache: function (providers) {
|
||||
this.providers = providers;
|
||||
Services.obs.notifyObservers(null, "social:providers-changed", null);
|
||||
|
||||
// If social is currently disabled there's nothing else to do other than
|
||||
// to notify about the lack of a provider.
|
||||
if (!SocialService.enabled) {
|
||||
Services.obs.notifyObservers(null, "social:provider-set", null);
|
||||
return;
|
||||
}
|
||||
// Otherwise set the provider.
|
||||
this._setProvider(this.defaultProvider);
|
||||
},
|
||||
|
||||
set enabled(val) {
|
||||
// Setting .enabled is just a shortcut for setting the provider to either
|
||||
// the default provider or null...
|
||||
|
||||
this._updateWorkerState(val);
|
||||
|
||||
if (val) {
|
||||
if (!this.provider)
|
||||
this.provider = this.defaultProvider;
|
||||
} else {
|
||||
this.provider = null;
|
||||
}
|
||||
},
|
||||
|
||||
get enabled() {
|
||||
return this.provider != null;
|
||||
},
|
||||
|
||||
toggle: function Social_toggle() {
|
||||
this.enabled = this._disabledForSafeMode ? false : !this.enabled;
|
||||
this._disabledForSafeMode = false;
|
||||
},
|
||||
|
||||
toggleSidebar: function SocialSidebar_toggle() {
|
||||
let prefValue = Services.prefs.getBoolPref("social.sidebar.open");
|
||||
Services.prefs.setBoolPref("social.sidebar.open", !prefValue);
|
||||
return !this._disabledForSafeMode && this.providers.length > 0;
|
||||
},
|
||||
|
||||
toggleNotifications: function SocialNotifications_toggle() {
|
||||
@@ -252,10 +155,6 @@ this.Social = {
|
||||
Services.prefs.setBoolPref("social.toast-notifications.enabled", !prefValue);
|
||||
},
|
||||
|
||||
setProviderByOrigin: function (origin) {
|
||||
this.provider = this._getProviderFromOrigin(origin);
|
||||
},
|
||||
|
||||
_getProviderFromOrigin: function (origin) {
|
||||
for (let p of this.providers) {
|
||||
if (p.origin == origin) {
|
||||
@@ -281,27 +180,7 @@ this.Social = {
|
||||
activateFromOrigin: function (origin, callback) {
|
||||
// For now only "builtin" providers can be activated. It's OK if the
|
||||
// provider has already been activated - we still get called back with it.
|
||||
SocialService.addBuiltinProvider(origin, function(provider) {
|
||||
if (provider) {
|
||||
// No need to activate again if we're already active
|
||||
if (provider == this.provider)
|
||||
return;
|
||||
this.provider = provider;
|
||||
}
|
||||
if (callback)
|
||||
callback(provider);
|
||||
}.bind(this));
|
||||
},
|
||||
|
||||
deactivateFromOrigin: function (origin, oldOrigin) {
|
||||
// if we have the old provider, always set that before trying removal
|
||||
let provider = this._getProviderFromOrigin(origin);
|
||||
let oldProvider = this._getProviderFromOrigin(oldOrigin);
|
||||
if (!oldProvider && this.providers.length)
|
||||
oldProvider = this.providers[0];
|
||||
this.provider = oldProvider;
|
||||
if (provider)
|
||||
SocialService.removeProvider(origin);
|
||||
SocialService.addBuiltinProvider(origin, callback);
|
||||
},
|
||||
|
||||
// Page Marking functionality
|
||||
@@ -484,7 +363,8 @@ SocialErrorListener.prototype = {
|
||||
// so avoid doing that more than once
|
||||
if (failure && aStatus != Components.results.NS_BINDING_ABORTED) {
|
||||
aRequest.cancel(Components.results.NS_BINDING_ABORTED);
|
||||
Social.provider.errorState = "content-error";
|
||||
let provider = Social._getProviderFromOrigin(this.iframe.getAttribute("origin"));
|
||||
provider.errorState = "content-error";
|
||||
this.setErrorMessage(aWebProgress.QueryInterface(Ci.nsIDocShell)
|
||||
.chromeEventHandler);
|
||||
}
|
||||
@@ -493,8 +373,9 @@ SocialErrorListener.prototype = {
|
||||
onLocationChange: function SPL_onLocationChange(aWebProgress, aRequest, aLocation, aFlags) {
|
||||
if (aFlags & Ci.nsIWebProgressListener.LOCATION_CHANGE_ERROR_PAGE) {
|
||||
aRequest.cancel(Components.results.NS_BINDING_ABORTED);
|
||||
if (!Social.provider.errorState)
|
||||
Social.provider.errorState = "content-error";
|
||||
let provider = Social._getProviderFromOrigin(this.iframe.getAttribute("origin"));
|
||||
if (!provider.errorState)
|
||||
provider.errorState = "content-error";
|
||||
schedule(function() {
|
||||
this.setErrorMessage(aWebProgress.QueryInterface(Ci.nsIDocShell)
|
||||
.chromeEventHandler);
|
||||
|
||||
@@ -85,6 +85,13 @@ function initApp() {
|
||||
blocklistFile.remove(false);
|
||||
var source = do_get_file("blocklist.xml");
|
||||
source.copyTo(gProfD, "blocklist.xml");
|
||||
|
||||
|
||||
let internalManager = Cc["@mozilla.org/addons/integration;1"].
|
||||
getService(Ci.nsIObserver).
|
||||
QueryInterface(Ci.nsITimerCallback);
|
||||
|
||||
internalManager.observe(null, "addons-startup", null);
|
||||
}
|
||||
|
||||
function setManifestPref(manifest) {
|
||||
@@ -102,45 +109,56 @@ function do_wait_observer(topic, cb) {
|
||||
Services.obs.addObserver(observer, topic, false);
|
||||
}
|
||||
|
||||
function do_add_providers(cb) {
|
||||
// run only after social is already initialized
|
||||
SocialService.addProvider(manifests[0], function() {
|
||||
do_wait_observer("social:providers-changed", function() {
|
||||
do_check_eq(Social.providers.length, 2, "2 providers installed");
|
||||
do_execute_soon(cb);
|
||||
});
|
||||
SocialService.addProvider(manifests[1]);
|
||||
});
|
||||
}
|
||||
|
||||
function do_initialize_social(enabledOnStartup, cb) {
|
||||
initApp();
|
||||
|
||||
manifests.forEach(function (manifest) {
|
||||
setManifestPref(manifest);
|
||||
});
|
||||
// Set both providers active and flag the first one as "current"
|
||||
let activeVal = Cc["@mozilla.org/supports-string;1"].
|
||||
createInstance(Ci.nsISupportsString);
|
||||
let active = {};
|
||||
for (let m of manifests)
|
||||
active[m.origin] = 1;
|
||||
activeVal.data = JSON.stringify(active);
|
||||
Services.prefs.setComplexValue("social.activeProviders",
|
||||
Ci.nsISupportsString, activeVal);
|
||||
Services.prefs.setCharPref("social.provider.current", manifests[0].origin);
|
||||
Services.prefs.setBoolPref("social.enabled", enabledOnStartup);
|
||||
|
||||
do_register_cleanup(function() {
|
||||
if (enabledOnStartup) {
|
||||
// set prefs before initializing social
|
||||
manifests.forEach(function (manifest) {
|
||||
Services.prefs.clearUserPref("social.manifest." + manifest.origin);
|
||||
setManifestPref(manifest);
|
||||
});
|
||||
Services.prefs.clearUserPref("social.enabled");
|
||||
Services.prefs.clearUserPref("social.provider.current");
|
||||
Services.prefs.clearUserPref("social.activeProviders");
|
||||
});
|
||||
// Set both providers active and flag the first one as "current"
|
||||
let activeVal = Cc["@mozilla.org/supports-string;1"].
|
||||
createInstance(Ci.nsISupportsString);
|
||||
let active = {};
|
||||
for (let m of manifests)
|
||||
active[m.origin] = 1;
|
||||
activeVal.data = JSON.stringify(active);
|
||||
Services.prefs.setComplexValue("social.activeProviders",
|
||||
Ci.nsISupportsString, activeVal);
|
||||
|
||||
// expecting 2 providers installed
|
||||
do_wait_observer("social:providers-changed", function() {
|
||||
do_check_eq(Social.providers.length, 2, "2 providers installed");
|
||||
cb();
|
||||
});
|
||||
do_register_cleanup(function() {
|
||||
manifests.forEach(function (manifest) {
|
||||
Services.prefs.clearUserPref("social.manifest." + manifest.origin);
|
||||
});
|
||||
Services.prefs.clearUserPref("social.activeProviders");
|
||||
});
|
||||
|
||||
// expecting 2 providers installed
|
||||
do_wait_observer("social:providers-changed", function() {
|
||||
do_check_eq(Social.providers.length, 2, "2 providers installed");
|
||||
do_execute_soon(cb);
|
||||
});
|
||||
}
|
||||
|
||||
// import and initialize everything
|
||||
SocialService = Cu.import("resource://gre/modules/SocialService.jsm", {}).SocialService;
|
||||
do_check_eq(SocialService.enabled, enabledOnStartup, "service is doing its thing");
|
||||
do_check_true(SocialService.hasEnabledProviders, "Service has enabled providers");
|
||||
do_check_eq(enabledOnStartup, SocialService.hasEnabledProviders, "Service has enabled providers");
|
||||
Social = Cu.import("resource:///modules/Social.jsm", {}).Social;
|
||||
do_check_false(Social.initialized, "Social is not initialized");
|
||||
Social.init();
|
||||
do_check_true(Social.initialized, "Social is initialized");
|
||||
if (!enabledOnStartup)
|
||||
do_execute_soon(cb);
|
||||
}
|
||||
|
||||
@@ -13,18 +13,20 @@ function run_test() {
|
||||
function testStartupEnabled() {
|
||||
// wait on startup before continuing
|
||||
do_check_eq(Social.providers.length, 2, "two social providers enabled");
|
||||
do_check_true(Social.providers[0].enabled, "provider is enabled");
|
||||
do_check_true(Social.providers[1].enabled, "provider is enabled");
|
||||
do_check_true(Social.providers[0].enabled, "provider 0 is enabled");
|
||||
do_check_true(Social.providers[1].enabled, "provider 1 is enabled");
|
||||
run_next_test();
|
||||
}
|
||||
|
||||
function testDisableAfterStartup() {
|
||||
do_wait_observer("social:provider-set", function() {
|
||||
do_check_eq(Social.enabled, false, "Social is disabled");
|
||||
do_check_false(Social.providers[0].enabled, "provider is enabled");
|
||||
do_check_false(Social.providers[1].enabled, "provider is enabled");
|
||||
do_test_finished();
|
||||
run_next_test();
|
||||
let SocialService = Cu.import("resource://gre/modules/SocialService.jsm", {}).SocialService;
|
||||
SocialService.removeProvider(Social.providers[0].origin, function() {
|
||||
do_wait_observer("social:providers-changed", function() {
|
||||
do_check_eq(Social.enabled, false, "Social is disabled");
|
||||
do_check_eq(Social.providers.length, 0, "no social providers available");
|
||||
do_test_finished();
|
||||
run_next_test();
|
||||
});
|
||||
SocialService.removeProvider(Social.providers[0].origin)
|
||||
});
|
||||
Social.enabled = false;
|
||||
}
|
||||
|
||||
@@ -12,20 +12,18 @@ function run_test() {
|
||||
|
||||
function testStartupDisabled() {
|
||||
// wait on startup before continuing
|
||||
do_check_eq(Social.providers.length, 2, "two social providers available");
|
||||
do_check_false(Social.providers[0].enabled, "provider is enabled");
|
||||
do_check_false(Social.providers[1].enabled, "provider is enabled");
|
||||
do_check_false(Social.enabled, "Social is disabled");
|
||||
do_check_eq(Social.providers.length, 0, "zero social providers available");
|
||||
run_next_test();
|
||||
}
|
||||
|
||||
function testEnableAfterStartup() {
|
||||
do_wait_observer("social:provider-set", function() {
|
||||
do_add_providers(function () {
|
||||
do_check_true(Social.enabled, "Social is enabled");
|
||||
do_check_eq(Social.providers.length, 2, "two social providers available");
|
||||
do_check_true(Social.providers[0].enabled, "provider is enabled");
|
||||
do_check_true(Social.providers[1].enabled, "provider is enabled");
|
||||
do_check_true(Social.providers[0].enabled, "provider 0 is enabled");
|
||||
do_check_true(Social.providers[1].enabled, "provider 1 is enabled");
|
||||
do_test_finished();
|
||||
run_next_test();
|
||||
});
|
||||
Social.enabled = true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user