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

Side by Side Diff: remoting/webapp/background/message_window_helper.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, 3 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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 * Create a new message window.
12 *
13 * @param {Object} options Message window create options
14 * @constructor
15 */
16 remoting.MessageWindow = function(options) {
17 var title = /** @type {string} */ (options.title);
18 var message = /** @type {string} */ (options.message);
19 var okButtonLabel = /** @type {string} */ (options.buttonLabel);
20 var cancelButtonLabel = /** @type {string} */ (options.cancelButtonLabel);
21 var onResult = /** @type {function(number):void} */(options.onResult);
22 /** @type {number} */
23 var duration = 0;
24 if (/** @type {number?} */(options.duration)) {
25 duration = /** @type {number} */(options.duration);
26 }
27 /** @type {string} */
28 var infobox = '';
29 if (/** @type {string?} */(options.infobox)) {
30 infobox = /** @type {string} */(options.infobox);
31 }
32 var onTimeout = /** @type {?function():void} */ (options.onTimeout);
33
34 /** @type {number} */
35 this.id_ = remoting.MessageWindowManager.addMessageWindow(this);
36
37 /** @type {?function(number):void} */
38 this.onResult_ = onResult;
39
40 /** @type {Window} */
41 this.window_ = null;
42
43 /** @type {number} */
44 this.timer_ = 0;
45
46 /** @type {Array.<function():void>} */
47 this.pendingWindowOperations_ = [];
48
49 /**
50 * Callback to call when the timeout expires.
51 * @type {?function():void}
52 */
53 this.onTimeout_ = onTimeout;
54
55 var message_struct = {
56 command: 'show',
57 id: this.id_,
58 title: title,
59 message: message,
60 infobox: infobox,
61 buttonLabel: okButtonLabel,
62 cancelButtonLabel: cancelButtonLabel,
63 showSpinner: (duration != 0)
64 };
65
66 var windowAttributes = {
67 bounds: {
68 width: 400,
69 height: 100
70 },
71 resizable: false
72 };
73
74 /** @type {remoting.MessageWindow} */
75 var that = this;
76
77 /** @param {AppWindow} appWindow */
78 var onCreate = function(appWindow) {
79 that.setWindow_(/** @type {Window} */(appWindow.contentWindow));
80 var onLoad = function() {
81 appWindow.contentWindow.postMessage(message_struct, '*');
82 };
83 appWindow.contentWindow.addEventListener('load', onLoad, false);
84 };
85
86 chrome.app.window.create('message_window.html', windowAttributes, onCreate);
87
88 if (duration != 0) {
89 this.timer_ = window.setTimeout(this.onTimeoutHandler_.bind(this),
90 duration);
91 }
92 };
93
94 /**
95 * Called when the timer runs out. This in turn calls the window's
96 * timeout handler (if any).
97 */
98 remoting.MessageWindow.prototype.onTimeoutHandler_ = function() {
99 this.close();
100 if (this.onTimeout_) {
101 this.onTimeout_();
102 }
103 };
104
105 /**
106 * Update the message being shown in the window. This should only be called
107 * after the window has been shown.
108 *
109 * @param {string} message The message.
110 */
111 remoting.MessageWindow.prototype.updateMessage = function(message) {
112 if (!this.window_) {
113 this.pendingWindowOperations_.push(this.updateMessage.bind(this, message));
114 return;
115 }
116
117 var message_struct = {
118 command: 'update_message',
119 message: message
120 };
121 this.window_.postMessage(message_struct, '*');
122 };
123
124 /**
125 * Close the message box and unregister it with the window manager.
126 */
127 remoting.MessageWindow.prototype.close = function() {
128 if (!this.window_) {
129 this.pendingWindowOperations_.push(this.close.bind(this));
130 return;
131 }
132
133 if (this.timer_) {
134 window.clearTimeout(this.timer_);
135 }
136 this.timer_ = 0;
137
138 // Unregister the window with the window manager.
139 // After this call, events sent to this window will no longer trigger the
140 // onResult callback.
141 remoting.MessageWindowManager.deleteMessageWindow(this.id_);
142 this.window_.close();
143 this.window_ = null;
144 };
145
146 /**
147 * Dispatch a message box result to the registered callback.
148 *
149 * @param {number} result The dialog result.
150 */
151 remoting.MessageWindow.prototype.handleResult = function(result) {
152 if (this.onResult_) {
153 this.onResult_(result);
154 }
155 }
156
157 /**
158 * Set the window handle and run any pending operations that require it.
159 *
160 * @param {Window} window
161 * @private
162 */
163 remoting.MessageWindow.prototype.setWindow_ = function(window) {
164 base.debug.assert(this.window_ == null);
165 this.window_ = window;
166 for (var i = 0; i < this.pendingWindowOperations_.length; ++i) {
167 var pendingOperation = this.pendingWindowOperations_[i];
168 pendingOperation();
169 }
170 this.pendingWindowOperations_ = [];
171 };
172
173 /**
174 * Static method to create and show a confirm message box.
175 *
176 * @param {string} title The title of the message box.
177 * @param {string} message The message.
178 * @param {string} okButtonLabel The text for the primary button.
179 * @param {string} cancelButtonLabel The text for the secondary button.
180 * @param {function(number):void} onResult The callback to invoke when the
181 * user closes the message window.
182 * @return {remoting.MessageWindow}
183 */
184 remoting.MessageWindow.showConfirmWindow = function(
185 title, message, okButtonLabel, cancelButtonLabel, onResult) {
186 var options = {
187 title: title,
188 message: message,
189 buttonLabel: okButtonLabel,
190 cancelButtonLabel: cancelButtonLabel,
191 onResult: onResult
192 };
193 return new remoting.MessageWindow(options);
194 };
195
196 /**
197 * Static method to create and show a simple message box.
198 *
199 * @param {string} title The title of the message box.
200 * @param {string} message The message.
201 * @param {string} buttonLabel The text for the primary button.
202 * @param {function(number):void} onResult The callback to invoke when the
203 * user closes the message window.
204 * @return {remoting.MessageWindow}
205 */
206 remoting.MessageWindow.showMessageWindow = function(
207 title, message, buttonLabel, onResult) {
208 var options = {
209 title: title,
210 message: message,
211 buttonLabel: buttonLabel,
212 onResult: onResult
213 };
214 return new remoting.MessageWindow(options);
215 };
216
217 /**
218 * Static method to create and show an error message box with an "OK" button.
219 * The app will close when the user dismisses the message window.
220 *
221 * @param {string} title The title of the message box.
222 * @param {string} message The message.
223 * @return {remoting.MessageWindow}
224 */
225 remoting.MessageWindow.showErrorMessage = function(title, message) {
226 var options = {
227 title: title,
228 message: message,
229 buttonLabel: chrome.i18n.getMessage(/**i18n-content*/'OK'),
230 onResult: remoting.MessageWindow.quitApp
231 };
232 return new remoting.MessageWindow(options);
233 };
234
235 /**
236 * Static method to create and show a timed message box.
237 *
238 * @param {string} title The title of the message box.
239 * @param {string} message The message.
240 * @param {string} infobox Additional information to be displayed in an infobox,
241 * or the empty string if there is no additional information.
242 * @param {string} buttonLabel The text for the primary button.
243 * @param {function(number):void} onResult The callback to invoke when the
244 * user closes the message window.
245 * @param {number} duration Time for wait before calling onTime
246 * @param {?function():void} onTimeout Callback function.
247 * @return {remoting.MessageWindow}
248 */
249 remoting.MessageWindow.showTimedMessageWindow = function(
250 title, message, infobox, buttonLabel, onResult, duration, onTimeout) {
251 var options = {
252 title: title,
253 message: message,
254 infobox: infobox,
255 buttonLabel: buttonLabel,
256 onResult: onResult,
257 duration: duration,
258 onTimeout: onTimeout
259 };
260 return new remoting.MessageWindow(options);
261 };
262
263 /**
264 * Cancel the current connection and close all app windows.
265 *
266 * @param {number} result The dialog result.
267 */
268 remoting.MessageWindow.quitApp = function(result) {
269 remoting.MessageWindowManager.closeAllMessageWindows();
270 window.close();
271 };
OLDNEW
« no previous file with comments | « remoting/webapp/background/message_window.js ('k') | remoting/webapp/background/message_window_manager.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698