| Index: remoting/webapp/background/message_window_helper.js
|
| diff --git a/remoting/webapp/background/message_window_helper.js b/remoting/webapp/background/message_window_helper.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..53c7155bc6db8cbcd3107f913e23af088835d1b6
|
| --- /dev/null
|
| +++ b/remoting/webapp/background/message_window_helper.js
|
| @@ -0,0 +1,269 @@
|
| +// Copyright (c) 2013 Google. All rights reserved.
|
| +
|
| +'use strict';
|
| +
|
| +/** @suppress {duplicate} */
|
| +var remoting = remoting || {};
|
| +
|
| +/**
|
| + * Create a new message window.
|
| + *
|
| + * @param {Object} options Message window create options
|
| + * @constructor
|
| + */
|
| +remoting.MessageWindow = function(options) {
|
| + var title = /** @type {string} */ (options.title);
|
| + var message = /** @type {string} */ (options.message);
|
| + var okButtonLabel = /** @type {string} */ (options.buttonLabel);
|
| + var cancelButtonLabel = /** @type {string} */ (options.cancelButtonLabel);
|
| + var onResult = /** @type {function(number):void} */(options.onResult);
|
| + /** @type {number} */
|
| + var duration = 0;
|
| + if (/** @type {number?} */(options.duration)) {
|
| + duration = /** @type {number} */(options.duration);
|
| + }
|
| + /** @type {string} */
|
| + var infobox = '';
|
| + if (/** @type {string?} */(options.infobox)) {
|
| + infobox = /** @type {string} */(options.infobox);
|
| + }
|
| + var onTimeout = /** @type {?function():void} */ (options.onTimeout);
|
| +
|
| + /** @type {number} */
|
| + this.id_ = remoting.MessageWindowManager.addMessageWindow(this);
|
| +
|
| + /** @type {?function(number):void} */
|
| + this.onResult_ = onResult;
|
| +
|
| + /** @type {Window} */
|
| + this.window_ = null;
|
| +
|
| + /** @type {number} */
|
| + this.timer_ = 0;
|
| +
|
| + /** @type {Array.<function():void>} */
|
| + this.pendingWindowOperations_ = [];
|
| +
|
| + /**
|
| + * Callback to call when the timeout expires.
|
| + * @type {?function():void}
|
| + */
|
| + this.onTimeout_ = onTimeout;
|
| +
|
| + var message_struct = {
|
| + command: 'show',
|
| + id: this.id_,
|
| + title: title,
|
| + message: message,
|
| + infobox: infobox,
|
| + buttonLabel: okButtonLabel,
|
| + cancelButtonLabel: cancelButtonLabel,
|
| + showSpinner: (duration != 0)
|
| + };
|
| +
|
| + var windowAttributes = {
|
| + bounds: {
|
| + width: 400,
|
| + height: 100
|
| + },
|
| + resizable: false
|
| + };
|
| +
|
| + /** @type {remoting.MessageWindow} */
|
| + var that = this;
|
| +
|
| + /** @param {AppWindow} appWindow */
|
| + var onCreate = function(appWindow) {
|
| + that.setWindow_(/** @type {Window} */(appWindow.contentWindow));
|
| + var onLoad = function() {
|
| + appWindow.contentWindow.postMessage(message_struct, '*');
|
| + };
|
| + appWindow.contentWindow.addEventListener('load', onLoad, false);
|
| + };
|
| +
|
| + chrome.app.window.create('message_window.html', windowAttributes, onCreate);
|
| +
|
| + if (duration != 0) {
|
| + this.timer_ = window.setTimeout(this.onTimeoutHandler_.bind(this),
|
| + duration);
|
| + }
|
| +};
|
| +
|
| +/**
|
| + * Called when the timer runs out. This in turn calls the window's
|
| + * timeout handler (if any).
|
| + */
|
| +remoting.MessageWindow.prototype.onTimeoutHandler_ = function() {
|
| + this.close();
|
| + if (this.onTimeout_) {
|
| + this.onTimeout_();
|
| + }
|
| +};
|
| +
|
| +/**
|
| + * Update the message being shown in the window. This should only be called
|
| + * after the window has been shown.
|
| + *
|
| + * @param {string} message The message.
|
| + */
|
| +remoting.MessageWindow.prototype.updateMessage = function(message) {
|
| + if (!this.window_) {
|
| + this.pendingWindowOperations_.push(this.updateMessage.bind(this, message));
|
| + return;
|
| + }
|
| +
|
| + var message_struct = {
|
| + command: 'update_message',
|
| + message: message
|
| + };
|
| + this.window_.postMessage(message_struct, '*');
|
| +};
|
| +
|
| +/**
|
| + * Close the message box and unregister it with the window manager.
|
| + */
|
| +remoting.MessageWindow.prototype.close = function() {
|
| + if (!this.window_) {
|
| + this.pendingWindowOperations_.push(this.close.bind(this));
|
| + return;
|
| + }
|
| +
|
| + if (this.timer_) {
|
| + window.clearTimeout(this.timer_);
|
| + }
|
| + this.timer_ = 0;
|
| +
|
| + // Unregister the window with the window manager.
|
| + // After this call, events sent to this window will no longer trigger the
|
| + // onResult callback.
|
| + remoting.MessageWindowManager.deleteMessageWindow(this.id_);
|
| + this.window_.close();
|
| + this.window_ = null;
|
| +};
|
| +
|
| +/**
|
| + * Dispatch a message box result to the registered callback.
|
| + *
|
| + * @param {number} result The dialog result.
|
| + */
|
| +remoting.MessageWindow.prototype.handleResult = function(result) {
|
| + if (this.onResult_) {
|
| + this.onResult_(result);
|
| + }
|
| +}
|
| +
|
| +/**
|
| + * Set the window handle and run any pending operations that require it.
|
| + *
|
| + * @param {Window} window
|
| + * @private
|
| + */
|
| +remoting.MessageWindow.prototype.setWindow_ = function(window) {
|
| + base.debug.assert(this.window_ == null);
|
| + this.window_ = window;
|
| + for (var i = 0; i < this.pendingWindowOperations_.length; ++i) {
|
| + var pendingOperation = this.pendingWindowOperations_[i];
|
| + pendingOperation();
|
| + }
|
| + this.pendingWindowOperations_ = [];
|
| +};
|
| +
|
| +/**
|
| + * Static method to create and show a confirm message box.
|
| + *
|
| + * @param {string} title The title of the message box.
|
| + * @param {string} message The message.
|
| + * @param {string} okButtonLabel The text for the primary button.
|
| + * @param {string} cancelButtonLabel The text for the secondary button.
|
| + * @param {function(number):void} onResult The callback to invoke when the
|
| + * user closes the message window.
|
| + * @return {remoting.MessageWindow}
|
| + */
|
| +remoting.MessageWindow.showConfirmWindow = function(
|
| + title, message, okButtonLabel, cancelButtonLabel, onResult) {
|
| + var options = {
|
| + title: title,
|
| + message: message,
|
| + buttonLabel: okButtonLabel,
|
| + cancelButtonLabel: cancelButtonLabel,
|
| + onResult: onResult
|
| + };
|
| + return new remoting.MessageWindow(options);
|
| +};
|
| +
|
| +/**
|
| + * Static method to create and show a simple message box.
|
| + *
|
| + * @param {string} title The title of the message box.
|
| + * @param {string} message The message.
|
| + * @param {string} buttonLabel The text for the primary button.
|
| + * @param {function(number):void} onResult The callback to invoke when the
|
| + * user closes the message window.
|
| + * @return {remoting.MessageWindow}
|
| + */
|
| +remoting.MessageWindow.showMessageWindow = function(
|
| + title, message, buttonLabel, onResult) {
|
| + var options = {
|
| + title: title,
|
| + message: message,
|
| + buttonLabel: buttonLabel,
|
| + onResult: onResult
|
| + };
|
| + return new remoting.MessageWindow(options);
|
| +};
|
| +
|
| +/**
|
| + * Static method to create and show an error message box with an "OK" button.
|
| + * The app will close when the user dismisses the message window.
|
| + *
|
| + * @param {string} title The title of the message box.
|
| + * @param {string} message The message.
|
| + * @return {remoting.MessageWindow}
|
| + */
|
| +remoting.MessageWindow.showErrorMessage = function(title, message) {
|
| + var options = {
|
| + title: title,
|
| + message: message,
|
| + buttonLabel: chrome.i18n.getMessage(/**i18n-content*/'OK'),
|
| + onResult: remoting.MessageWindow.quitApp
|
| + };
|
| + return new remoting.MessageWindow(options);
|
| +};
|
| +
|
| +/**
|
| + * Static method to create and show a timed message box.
|
| + *
|
| + * @param {string} title The title of the message box.
|
| + * @param {string} message The message.
|
| + * @param {string} infobox Additional information to be displayed in an infobox,
|
| + * or the empty string if there is no additional information.
|
| + * @param {string} buttonLabel The text for the primary button.
|
| + * @param {function(number):void} onResult The callback to invoke when the
|
| + * user closes the message window.
|
| + * @param {number} duration Time for wait before calling onTime
|
| + * @param {?function():void} onTimeout Callback function.
|
| + * @return {remoting.MessageWindow}
|
| + */
|
| +remoting.MessageWindow.showTimedMessageWindow = function(
|
| + title, message, infobox, buttonLabel, onResult, duration, onTimeout) {
|
| + var options = {
|
| + title: title,
|
| + message: message,
|
| + infobox: infobox,
|
| + buttonLabel: buttonLabel,
|
| + onResult: onResult,
|
| + duration: duration,
|
| + onTimeout: onTimeout
|
| + };
|
| + return new remoting.MessageWindow(options);
|
| +};
|
| +
|
| +/**
|
| + * Cancel the current connection and close all app windows.
|
| + *
|
| + * @param {number} result The dialog result.
|
| + */
|
| +remoting.MessageWindow.quitApp = function(result) {
|
| + remoting.MessageWindowManager.closeAllMessageWindows();
|
| + window.close();
|
| +};
|
|
|