Upstream version 11.39.266.0
[platform/framework/web/crosswalk.git] / src / remoting / webapp / background / message_window_manager.js
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 'use strict';
6
7 /** @suppress {duplicate} */
8 var remoting = remoting || {};
9
10 /**
11  * Namespace for window manager functions.
12  * @type {Object}
13  */
14 remoting.MessageWindowManager = {};
15
16 /**
17  * Mapping from window id to corresponding MessageWindow.
18  *
19  * @type {Object.<number, remoting.MessageWindow>}
20  * @private
21  */
22 remoting.MessageWindowManager.messageWindows_ = {};
23
24 /**
25  * The next window id to auto-assign.
26  * @type {number}
27  * @private
28  */
29 remoting.MessageWindowManager.nextId_ = 1;
30
31 /**
32  * @param {remoting.MessageWindow} window The window to associate
33  *     with the window id.
34  * @return {number} The window id.
35  */
36 remoting.MessageWindowManager.addMessageWindow = function(window) {
37   var id = ++remoting.MessageWindowManager.nextId_;
38   remoting.MessageWindowManager.messageWindows_[id] = window;
39   return id;
40 };
41
42 /**
43  * @param {number} id The window id.
44  * @return {remoting.MessageWindow}
45  */
46 remoting.MessageWindowManager.getMessageWindow = function(id) {
47   return remoting.MessageWindowManager.messageWindows_[id];
48 };
49
50 /**
51  * @param {number} id The window id to delete.
52  */
53 remoting.MessageWindowManager.deleteMessageWindow = function(id) {
54   delete remoting.MessageWindowManager.messageWindows_[id];
55 };
56
57 /**
58  * Close all of the registered MessageWindows
59  */
60 remoting.MessageWindowManager.closeAllMessageWindows = function() {
61   /** @type {Array.<remoting.MessageWindow>} */
62   var windows = [];
63   // Make a list of the windows to close.
64   // We don't delete the window directly in this loop because close() can
65   // call deleteMessageWindow which will update messageWindows_.
66   for (var win_id in remoting.MessageWindowManager.messageWindows_) {
67     /** @type {remoting.MessageWindow} */
68     var win = remoting.MessageWindowManager.getMessageWindow(
69         /** @type {number} */(win_id));
70     base.debug.assert(win != null);
71     windows.push(win);
72   }
73   for (var i = 0; i < windows.length; i++) {
74     /** @type {remoting.MessageWindow} */(windows[i]).close();
75   }
76 };
77
78 /**
79  * Dispatch a message box result to the appropriate callback.
80  *
81  * @param {Event} event
82  * @private
83  */
84 remoting.MessageWindowManager.onMessage_ = function(event) {
85   if (typeof(event.data) != 'object') {
86     return;
87   }
88
89   if (event.data['command'] == 'messageWindowResult') {
90     var id = /** @type {number} */ (event.data['id']);
91     var result = /** @type {number} */ (event.data['result']);
92
93     if (typeof(id) != 'number' || typeof(result) != 'number') {
94       console.log('Poorly formatted id or result');
95       return;
96     }
97
98     var messageWindow = remoting.MessageWindowManager.getMessageWindow(id);
99     if (!messageWindow) {
100       console.log('Ignoring unknown message window id:', id);
101       return;
102     }
103
104     messageWindow.handleResult(result);
105     messageWindow.close();
106   }
107 };
108
109
110 window.addEventListener('message', remoting.MessageWindowManager.onMessage_,
111                         false);