Bumping manifests a=b2g-bump
[gecko.git] / browser / base / content / browser-loop.js
blob5a0bc618d0878fdb973059b084c0c9b15183c7ef
1 // This Source Code Form is subject to the terms of the Mozilla Public
2 // License, v. 2.0. If a copy of the MPL was not distributed with this
3 // file, You can obtain one at http://mozilla.org/MPL/2.0/.
5 // the "exported" symbols
6 let LoopUI;
8 XPCOMUtils.defineLazyModuleGetter(this, "injectLoopAPI", "resource:///modules/loop/MozLoopAPI.jsm");
9 XPCOMUtils.defineLazyModuleGetter(this, "MozLoopService", "resource:///modules/loop/MozLoopService.jsm");
10 XPCOMUtils.defineLazyModuleGetter(this, "PanelFrame", "resource:///modules/PanelFrame.jsm");
13 (function() {
15   LoopUI = {
16     get toolbarButton() {
17       delete this.toolbarButton;
18       return this.toolbarButton = CustomizableUI.getWidget("loop-button-throttled").forWindow(window);
19     },
21     /**
22      * Opens the panel for Loop and sizes it appropriately.
23      *
24      * @param {event} event The event opening the panel, used to anchor
25      *                      the panel to the button which triggers it.
26      */
27     openCallPanel: function(event) {
28       let callback = iframe => {
29         iframe.addEventListener("DOMContentLoaded", function documentDOMLoaded() {
30           iframe.removeEventListener("DOMContentLoaded", documentDOMLoaded, true);
31           injectLoopAPI(iframe.contentWindow);
32         }, true);
33       };
35       // Used to clear the temporary "login" state from the button.
36       Services.obs.notifyObservers(null, "loop-status-changed", null);
38       PanelFrame.showPopup(window, event.target, "loop", null,
39                            "about:looppanel", null, callback);
40     },
42     /**
43      * Triggers the initialization of the loop service.  Called by
44      * delayedStartup.
45      */
46     init: function() {
47       // Add observer notifications before the service is initialized
48       Services.obs.addObserver(this, "loop-status-changed", false);
50       MozLoopService.initialize();
51       this.updateToolbarState();
52     },
54     uninit: function() {
55       Services.obs.removeObserver(this, "loop-status-changed");
56     },
58     // Implements nsIObserver
59     observe: function(subject, topic, data) {
60       if (topic != "loop-status-changed") {
61         return;
62       }
63       this.updateToolbarState(data);
64     },
66     /**
67      * Updates the toolbar/menu-button state to reflect Loop status.
68      *
69      * @param {string} [aReason] Some states are only shown if
70      *                           a related reason is provided.
71      *
72      *                 aReason="login": Used after a login is completed
73      *                   successfully. This is used so the state can be
74      *                   temporarily shown until the next state change.
75      */
76     updateToolbarState: function(aReason = null) {
77       let toolbarButton = this.toolbarButton;
78       if (!toolbarButton || !toolbarButton.node) {
79         return;
80       }
82       let state = "";
83       if (MozLoopService.errors.size) {
84         state = "error";
85       } else if (aReason == "login" && MozLoopService.userProfile) {
86         state = "active";
87       } else if (MozLoopService.doNotDisturb) {
88         state = "disabled";
89       }
90       toolbarButton.node.setAttribute("state", state);
91     },
92   };
93 })();