summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/sync/SyncComponents.manifest5
-rw-r--r--services/sync/Weave.js6
-rw-r--r--services/sync/modules/main.js1
-rw-r--r--services/sync/modules/notifications.js131
-rw-r--r--services/sync/modules/service.js2
-rw-r--r--services/sync/moz.build8
6 files changed, 149 insertions, 4 deletions
diff --git a/services/sync/SyncComponents.manifest b/services/sync/SyncComponents.manifest
index 6493bb2242..c582862777 100644
--- a/services/sync/SyncComponents.manifest
+++ b/services/sync/SyncComponents.manifest
@@ -3,7 +3,8 @@
# Thus we restrict it to these apps:
#
# b2g: {3c2e2abc-06d4-11e1-ac3b-374f68613e61}
-# browser: {ec8030f7-c20a-464f-9b0e-13a3a9e97384}
+# basilisk: {ec8030f7-c20a-464f-9b0e-13a3a9e97384}
+# pale moon: {8de7fcbb-c55c-4fbe-bfc5-fc555c87dbc4}
# mobile/android: {aa3c5121-dab2-40e2-81ca-7ea25febc110}
# mobile/xul: {a23983c0-fd0e-11dc-95ff-0800200c9a66}
# suite (comm): {92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}
@@ -12,7 +13,7 @@
# Weave.js
component {74b89fb0-f200-4ae8-a3ec-dd164117f6de} Weave.js
contract @mozilla.org/weave/service;1 {74b89fb0-f200-4ae8-a3ec-dd164117f6de}
-category app-startup WeaveService service,@mozilla.org/weave/service;1 application={3c2e2abc-06d4-11e1-ac3b-374f68613e61} application={ec8030f7-c20a-464f-9b0e-13a3a9e97384} application={aa3c5121-dab2-40e2-81ca-7ea25febc110} application={a23983c0-fd0e-11dc-95ff-0800200c9a66} application={92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a} application={99bceaaa-e3c6-48c1-b981-ef9b46b67d60} application={d1bfe7d9-c01e-4237-998b-7b5f960a4314}
+category app-startup WeaveService service,@mozilla.org/weave/service;1 application={3c2e2abc-06d4-11e1-ac3b-374f68613e61} application={ec8030f7-c20a-464f-9b0e-13a3a9e97384} application={8de7fcbb-c55c-4fbe-bfc5-fc555c87dbc4} application={aa3c5121-dab2-40e2-81ca-7ea25febc110} application={a23983c0-fd0e-11dc-95ff-0800200c9a66} application={92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a} application={99bceaaa-e3c6-48c1-b981-ef9b46b67d60} application={d1bfe7d9-c01e-4237-998b-7b5f960a4314}
component {d28f8a0b-95da-48f4-b712-caf37097be41} Weave.js
contract @mozilla.org/network/protocol/about;1?what=sync-log {d28f8a0b-95da-48f4-b712-caf37097be41}
diff --git a/services/sync/Weave.js b/services/sync/Weave.js
index 4d79144e32..a414fa0831 100644
--- a/services/sync/Weave.js
+++ b/services/sync/Weave.js
@@ -72,10 +72,12 @@ WeaveService.prototype = {
Ci.nsISupportsWeakReference]),
ensureLoaded: function () {
+#ifndef MC_PALEMOON
// If we are loaded and not using FxA, load the migration module.
if (!this.fxAccountsEnabled) {
Cu.import("resource://services-sync/FxaMigrator.jsm");
}
+#endif
Components.utils.import("resource://services-sync/main.js");
@@ -103,6 +105,9 @@ WeaveService.prototype = {
* @return bool
*/
get fxAccountsEnabled() {
+#ifdef MC_PALEMOON
+ return false;
+#else
try {
// Old sync guarantees '@' will never appear in the username while FxA
// uses the FxA email address - so '@' is the flag we use.
@@ -111,6 +116,7 @@ WeaveService.prototype = {
} catch (_) {
return true; // No username == only allow FxA to be configured.
}
+#endif
},
/**
diff --git a/services/sync/modules/main.js b/services/sync/modules/main.js
index af3399e7ad..e8e705e726 100644
--- a/services/sync/modules/main.js
+++ b/services/sync/modules/main.js
@@ -8,6 +8,7 @@ this.Weave = {};
Components.utils.import("resource://services-sync/constants.js", Weave);
var lazies = {
"jpakeclient.js": ["JPAKEClient", "SendCredentialsController"],
+ "notifications.js": ["Notifications", "Notification", "NotificationButton"],
"service.js": ["Service"],
"status.js": ["Status"],
"util.js": ['Utils', 'Svc']
diff --git a/services/sync/modules/notifications.js b/services/sync/modules/notifications.js
new file mode 100644
index 0000000000..72187a4cef
--- /dev/null
+++ b/services/sync/modules/notifications.js
@@ -0,0 +1,131 @@
+/* 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/. */
+
+this.EXPORTED_SYMBOLS = ["Notifications", "Notification", "NotificationButton"];
+
+var Cc = Components.classes;
+var Ci = Components.interfaces;
+var Cr = Components.results;
+var Cu = Components.utils;
+
+Cu.import("resource://services-common/observers.js");
+Cu.import("resource://gre/modules/Log.jsm");
+Cu.import("resource://services-sync/util.js");
+
+this.Notifications = {
+ // Match the referenced values in toolkit/content/widgets/notification.xml.
+ get PRIORITY_INFO() { return 1; }, // PRIORITY_INFO_LOW
+ get PRIORITY_WARNING() { return 4; }, // PRIORITY_WARNING_LOW
+ get PRIORITY_ERROR() { return 7; }, // PRIORITY_CRITICAL_LOW
+
+ // FIXME: instead of making this public, dress the Notifications object
+ // to behave like an iterator (using generators?) and have callers access
+ // this array through the Notifications object.
+ notifications: [],
+
+ _observers: [],
+
+ // XXX Should we have a helper method for adding a simple notification?
+ // I.e. something like |function notify(title, description, priority)|.
+
+ add: function Notifications_add(notification) {
+ this.notifications.push(notification);
+ Observers.notify("weave:notification:added", notification, null);
+ },
+
+ remove: function Notifications_remove(notification) {
+ let index = this.notifications.indexOf(notification);
+
+ if (index != -1) {
+ this.notifications.splice(index, 1);
+ Observers.notify("weave:notification:removed", notification, null);
+ }
+ },
+
+ /**
+ * Replace an existing notification.
+ */
+ replace: function Notifications_replace(oldNotification, newNotification) {
+ let index = this.notifications.indexOf(oldNotification);
+
+ if (index != -1)
+ this.notifications.splice(index, 1, newNotification);
+ else {
+ this.notifications.push(newNotification);
+ // XXX Should we throw because we didn't find the existing notification?
+ // XXX Should we notify observers about weave:notification:added?
+ }
+
+ // XXX Should we notify observers about weave:notification:replaced?
+ },
+
+ /**
+ * Remove all notifications that match a title. If no title is provided, all
+ * notifications are removed.
+ *
+ * @param title [optional]
+ * Title of notifications to remove; falsy value means remove all
+ */
+ removeAll: function Notifications_removeAll(title) {
+ this.notifications.filter(old => (old.title == title || !title)).
+ forEach(old => { this.remove(old); }, this);
+ },
+
+ // replaces all existing notifications with the same title as the new one
+ replaceTitle: function Notifications_replaceTitle(notification) {
+ this.removeAll(notification.title);
+ this.add(notification);
+ }
+};
+
+
+/**
+ * A basic notification. Subclass this to create more complex notifications.
+ */
+this.Notification =
+function Notification(title, description, iconURL, priority, buttons, link) {
+ this.title = title;
+ this.description = description;
+
+ if (iconURL)
+ this.iconURL = iconURL;
+
+ if (priority)
+ this.priority = priority;
+
+ if (buttons)
+ this.buttons = buttons;
+
+ if (link)
+ this.link = link;
+}
+
+// We set each prototype property individually instead of redefining
+// the entire prototype to avoid blowing away existing properties
+// of the prototype like the the "constructor" property, which we use
+// to bind notification objects to their XBL representations.
+Notification.prototype.priority = Notifications.PRIORITY_INFO;
+Notification.prototype.iconURL = null;
+Notification.prototype.buttons = [];
+
+/**
+ * A button to display in a notification.
+ */
+this.NotificationButton =
+ function NotificationButton(label, accessKey, callback) {
+ function callbackWrapper() {
+ try {
+ callback.apply(this, arguments);
+ } catch (e) {
+ let logger = Log.repository.getLogger("Sync.Notifications");
+ logger.error("An exception occurred: " + Utils.exceptionStr(e));
+ logger.info(Utils.stackTrace(e));
+ throw e;
+ }
+ }
+
+ this.label = label;
+ this.accessKey = accessKey;
+ this.callback = callbackWrapper;
+}
diff --git a/services/sync/modules/service.js b/services/sync/modules/service.js
index 5c91323b51..5b97fcca39 100644
--- a/services/sync/modules/service.js
+++ b/services/sync/modules/service.js
@@ -1067,6 +1067,7 @@ Sync11Service.prototype = {
// Note: returns false if we failed for a reason other than the server not yet
// supporting the api.
_fetchServerConfiguration() {
+#if 0 // FSyncMS doesn't support this and it will break auth if left enabled!
// This is similar to _fetchInfo, but with different error handling.
let infoURL = this.userBaseURL + "info/configuration";
@@ -1092,6 +1093,7 @@ Sync11Service.prototype = {
this.serverConfiguration = configResponse.obj;
}
this._log.trace("info/configuration for this server", this.serverConfiguration);
+#endif
return true;
},
diff --git a/services/sync/moz.build b/services/sync/moz.build
index c4d3607b56..83c39274ac 100644
--- a/services/sync/moz.build
+++ b/services/sync/moz.build
@@ -13,6 +13,9 @@ XPCSHELL_TESTS_MANIFESTS += ['tests/unit/xpcshell.ini']
EXTRA_COMPONENTS += [
'SyncComponents.manifest',
+]
+
+EXTRA_PP_COMPONENTS += [
'Weave.js',
]
@@ -28,11 +31,11 @@ EXTRA_JS_MODULES['services-sync'] += [
'modules/jpakeclient.js',
'modules/keys.js',
'modules/main.js',
+ 'modules/notifications.js',
'modules/policies.js',
'modules/record.js',
'modules/resource.js',
'modules/rest.js',
- 'modules/service.js',
'modules/status.js',
'modules/SyncedTabs.jsm',
'modules/telemetry.js',
@@ -42,10 +45,11 @@ EXTRA_JS_MODULES['services-sync'] += [
EXTRA_PP_JS_MODULES['services-sync'] += [
'modules/constants.js',
+ 'modules/service.js',
]
# Definitions used by constants.js
-DEFINES['weave_version'] = '1.54.0'
+DEFINES['weave_version'] = '1.54.1'
DEFINES['weave_id'] = '{340c2bbc-ce74-4362-90b5-7c26312808ef}'
EXTRA_JS_MODULES['services-sync'].engines += [