Skip to content

Commit

Permalink
Implement basic port of notifications API into 'e10s'.
Browse files Browse the repository at this point in the history
  • Loading branch information
Gozala committed Aug 10, 2011
1 parent afc38af commit e0281ed
Show file tree
Hide file tree
Showing 2 changed files with 125 additions and 0 deletions.
75 changes: 75 additions & 0 deletions packages/api-utils/lib/addon/notifications.js
@@ -0,0 +1,75 @@
/* vim:set ts=2 sw=2 sts=2 expandtab */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is Jetpack.
*
* The Initial Developer of the Original Code is Mozilla.
* Portions created by the Initial Developer are Copyright (C) 2011
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Irakli Gozalishvili <gozala@mozilla.com> (Original Author)
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */

"use strict";

// TODO: Tweak linker and loader to use following instead:
// require('env!api-utils/chrome/notifications')
const channel = require('api-utils/env!')('api-utils/chrome/notifications');

const registry = new function registry() {
let GUID = 0;
let map = {};

this.push = function push(data) {
map[++GUID] = data
return GUID
}

this.pop = function pop(index) {
let data = map[index]
delete map[index]
return data
}
};

channel.input(function(id) {
console.log('notification was clicked: ' + id)
let listener = registry.pop(id)
if (listener) listener.call(listener.data);
});

exports.notify = function notify({ data, iconURL, text, title, onClick }) {
let id = onClick ? registry.push({ data: data, call: onClick }) : null
channel.output({
id: id,
title: title,
text: text,
iconURL: iconURL,
data: data
});
};
50 changes: 50 additions & 0 deletions packages/api-utils/lib/chrome/notifications.js
@@ -0,0 +1,50 @@
/* vim:set ts=2 sw=2 sts=2 expandtab */
/* ***** BEGIN LICENSE BLOCK *****
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is Jetpack.
*
* The Initial Developer of the Original Code is Mozilla.
* Portions created by the Initial Developer are Copyright (C) 2011
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Irakli Gozalishvili <gozala@mozilla.com> (Original Author)
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the MPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */

"use strict";

const { Cc, Ci, Cr, CC } = require("chrome");
const notify = CC('@mozilla.org/alerts-service;1', 'nsIAlertsService')().
showAlertNotification;

exports.initialize = function({ input, output }) {
input(function({ id, title, text, iconURL, data }) {
notify(iconURL, title, text, !id, data, function onClick(subject, topic) {
if (topic === 'alertclickcallback') output(id);
});
});
};

0 comments on commit e0281ed

Please sign in to comment.