Chromium Code Reviews| Index: remoting/webapp/crd/js/background.js |
| diff --git a/remoting/webapp/crd/js/background.js b/remoting/webapp/crd/js/background.js |
| index 03ec6ef49319f8c473001029cbadc0ea27608e03..cdb90fe915a8ff377d1ffa85014ddc44e6dbc2fc 100644 |
| --- a/remoting/webapp/crd/js/background.js |
| +++ b/remoting/webapp/crd/js/background.js |
| @@ -7,33 +7,58 @@ var remoting = remoting || {}; |
| (function(){ |
| -/** @param {remoting.AppLauncher} appLauncher */ |
| -function initializeAppV2(appLauncher) { |
| - /** @type {string} */ |
| - var kNewWindowId = 'new-window'; |
| - |
| - /** @param {OnClickData} info */ |
| - function onContextMenu(info) { |
| - if (info.menuItemId == kNewWindowId) { |
| - appLauncher.launch(); |
| - } |
| - } |
| +/** |
| + * A class that handles application activation. |
| + * |
| + * @param {remoting.AppLauncher} appLauncher |
| + * @constructor |
| + */ |
| +function ActivationHandler(appLauncher) { |
| + /** |
| + * @type {remoting.AppLauncher} |
| + * @private |
| + */ |
| + this.appLauncher_ = appLauncher; |
| - function initializeContextMenu() { |
| - chrome.contextMenus.create({ |
| - id: kNewWindowId, |
| - contexts: ['launcher'], |
| - title: chrome.i18n.getMessage(/*i18n-content*/'NEW_WINDOW') |
| - }); |
| - chrome.contextMenus.onClicked.addListener(onContextMenu); |
| - } |
| + chrome.contextMenus.create({ |
| + id: ActivationHandler.NEW_WINDOW_MENU_ID_, |
| + contexts: ['launcher'], |
| + title: chrome.i18n.getMessage(/*i18n-content*/'NEW_WINDOW') |
| + }); |
| - initializeContextMenu(); |
| - chrome.app.runtime.onLaunched.addListener( |
| - appLauncher.launch.bind(appLauncher) |
| - ); |
| + chrome.contextMenus.onClicked.addListener(this.onContextMenu_.bind(this)); |
| + chrome.app.runtime.onLaunched.addListener(this.onLaunched_.bind(this)); |
| } |
| +/** @type {string} */ |
| +ActivationHandler.NEW_WINDOW_MENU_ID_ = 'new-window'; |
| + |
| +/** |
| + * @param {OnClickData} info |
| + * @private |
| + */ |
| +ActivationHandler.prototype.onContextMenu_ = function(info) { |
| + if (info.menuItemId == ActivationHandler.NEW_WINDOW_MENU_ID_) { |
| + this.appLauncher_.launch(); |
| + } |
| +}; |
| + |
| +/** |
| + * Called when the App is activated (e.g. from the Chrome App Launcher). It |
| + * creates a new window if there are no existing ones. Otherwise, it will put |
| + * focus on the last window created. |
| + * |
| + * @private |
| + */ |
| +ActivationHandler.prototype.onLaunched_ = function() { |
| + var windows = chrome.app.window.getAll(); |
| + if (windows.length >= 1) { |
| + windows[windows.length - 1].focus(); |
| + return; |
|
Jamie
2015/01/14 03:07:23
I think an else would be more readable than an ear
|
| + } |
| + this.appLauncher_.launch(); |
| +}; |
| + |
| /** |
| * The background service is responsible for listening to incoming connection |
| * requests from Hangouts and the webapp. |
| @@ -61,8 +86,7 @@ function initializeBackgroundService(appLauncher) { |
| function main() { |
| if (base.isAppsV2()) { |
| - var appLauncher = new remoting.V2AppLauncher(); |
| - initializeAppV2(appLauncher); |
| + new ActivationHandler(new remoting.V2AppLauncher()); |
| } |
| } |