Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(20)

Unified Diff: remoting/webapp/background/message_window_manager.js

Issue 493813002: Show MessageWindow from the background page (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix license header Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/webapp/background/message_window_helper.js ('k') | remoting/webapp/html/message_window.html » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/webapp/background/message_window_manager.js
diff --git a/remoting/webapp/background/message_window_manager.js b/remoting/webapp/background/message_window_manager.js
new file mode 100644
index 0000000000000000000000000000000000000000..39962c7d4cbe22f247643b69ed6ce8c15c690f38
--- /dev/null
+++ b/remoting/webapp/background/message_window_manager.js
@@ -0,0 +1,111 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+'use strict';
+
+/** @suppress {duplicate} */
+var remoting = remoting || {};
+
+/**
+ * Namespace for window manager functions.
+ * @type {Object}
+ */
+remoting.MessageWindowManager = {};
+
+/**
+ * Mapping from window id to corresponding MessageWindow.
+ *
+ * @type {Object.<number, remoting.MessageWindow>}
+ * @private
+ */
+remoting.MessageWindowManager.messageWindows_ = {};
+
+/**
+ * The next window id to auto-assign.
+ * @type {number}
+ * @private
+ */
+remoting.MessageWindowManager.nextId_ = 1;
+
+/**
+ * @param {remoting.MessageWindow} window The window to associate
+ * with the window id.
+ * @return {number} The window id.
+ */
+remoting.MessageWindowManager.addMessageWindow = function(window) {
+ var id = ++remoting.MessageWindowManager.nextId_;
+ remoting.MessageWindowManager.messageWindows_[id] = window;
+ return id;
+};
+
+/**
+ * @param {number} id The window id.
+ * @return {remoting.MessageWindow}
+ */
+remoting.MessageWindowManager.getMessageWindow = function(id) {
+ return remoting.MessageWindowManager.messageWindows_[id];
+};
+
+/**
+ * @param {number} id The window id to delete.
+ */
+remoting.MessageWindowManager.deleteMessageWindow = function(id) {
+ delete remoting.MessageWindowManager.messageWindows_[id];
+};
+
+/**
+ * Close all of the registered MessageWindows
+ */
+remoting.MessageWindowManager.closeAllMessageWindows = function() {
+ /** @type {Array.<remoting.MessageWindow>} */
+ var windows = [];
+ // Make a list of the windows to close.
+ // We don't delete the window directly in this loop because close() can
+ // call deleteMessageWindow which will update messageWindows_.
+ for (var win_id in remoting.MessageWindowManager.messageWindows_) {
+ /** @type {remoting.MessageWindow} */
+ var win = remoting.MessageWindowManager.getMessageWindow(
+ /** @type {number} */(win_id));
+ base.debug.assert(win != null);
+ windows.push(win);
+ }
+ for (var i = 0; i < windows.length; i++) {
+ /** @type {remoting.MessageWindow} */(windows[i]).close();
+ }
+};
+
+/**
+ * Dispatch a message box result to the appropriate callback.
+ *
+ * @param {Event} event
+ * @private
+ */
+remoting.MessageWindowManager.onMessage_ = function(event) {
+ if (typeof(event.data) != 'object') {
+ return;
+ }
+
+ if (event.data['command'] == 'messageWindowResult') {
+ var id = /** @type {number} */ (event.data['id']);
+ var result = /** @type {number} */ (event.data['result']);
+
+ if (typeof(id) != 'number' || typeof(result) != 'number') {
+ console.log('Poorly formatted id or result');
+ return;
+ }
+
+ var messageWindow = remoting.MessageWindowManager.getMessageWindow(id);
+ if (!messageWindow) {
+ console.log('Ignoring unknown message window id:', id);
+ return;
+ }
+
+ messageWindow.handleResult(result);
+ messageWindow.close();
+ }
+};
+
+
+window.addEventListener('message', remoting.MessageWindowManager.onMessage_,
+ false);
« no previous file with comments | « remoting/webapp/background/message_window_helper.js ('k') | remoting/webapp/html/message_window.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698