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

Side by Side Diff: remoting/webapp/background/app_launcher.js

Issue 450383003: Hangout remote desktop part II - background.html and AppLauncher (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address 2nd round feedbacks 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « remoting/webapp/background.js ('k') | remoting/webapp/background/background.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 /**
6 * @fileoverview
7 * AppLauncher is an interface that allows the client code to launch and close
8 * the app without knowing the implementation difference between a v1 app and
9 * a v2 app.
10 *
11 * To launch an app:
12 * var appLauncher = new remoting.V1AppLauncher();
13 * var appId = "";
14 * appLauncher.launch({arg1:'someValue'}).then(function(id){
15 * appId = id;
16 * });
17 *
18 * To close an app:
19 * appLauncher.close(appId);
20 */
21
22 'use strict';
23
24 /** @suppress {duplicate} */
25 var remoting = remoting || {};
26
27 /** @interface */
28 remoting.AppLauncher = function() {};
29
30 /**
31 * @param {Object=} opt_launchArgs
32 * @return {Promise} The promise will resolve when the app is launched. It will
33 * provide the caller with the appId (which is either the id of the hosting tab
34 * or window). The caller can use the appId to close the app.
35 */
36 remoting.AppLauncher.prototype.launch = function(opt_launchArgs) { };
37
38 /**
39 * @param {string} id The id of the app to close.
40 * @return {Promise} The promise will resolve when the app is closed.
41 */
42 remoting.AppLauncher.prototype.close = function(id) {};
43
44 /**
45 * @constructor
46 * @implements {remoting.AppLauncher}
47 */
48 remoting.V1AppLauncher = function() {};
49
50 remoting.V1AppLauncher.prototype.launch = function(opt_launchArgs) {
51 var url = base.urlJoin('main.html', opt_launchArgs);
52
53 /**
54 * @param {function(*=):void} resolve
55 * @param {function(*=):void} reject
56 */
57 return new Promise(function(resolve, reject) {
58 chrome.tabs.create({ url: url, selected: true },
59 /** @param {chrome.Tab} tab The created tab. */
60 function(tab) {
61 if (!tab) {
62 reject(new Error(chrome.runtime.lastError.message));
63 } else {
64 resolve(tab.id);
65 }
66 });
67 });
68 };
69
70 remoting.V1AppLauncher.prototype.close = function(id) {
71 /**
72 * @param {function(*=):void} resolve
73 * @param {function(*=):void} reject
74 */
75 return new Promise(function(resolve, reject) {
76 /** @param {chrome.Tab} tab The retrieved tab. */
77 chrome.tabs.get(id, function(tab) {
78 if (!tab) {
79 reject(new Error(chrome.runtime.lastError.message));
80 } else {
81 chrome.tabs.remove(tab.id, resolve);
82 }
83 });
84 });
85 };
86
87
88 /**
89 * @constructor
90 * @implements {remoting.AppLauncher}
91 */
92 remoting.V2AppLauncher = function() {};
93
94 /**
95 * @type {number}
96 * @private
97 */
98 remoting.V2AppLauncher.nextWindowId_ = 0;
99
100 remoting.V2AppLauncher.prototype.launch = function(opt_launchArgs) {
101 var url = base.urlJoin('main.html', opt_launchArgs);
102
103 /**
104 * @param {function(*=):void} resolve
105 * @param {function(*=):void} reject
106 */
107 return new Promise(function(resolve, reject) {
108 chrome.app.window.create(url, {
109 'width': 800,
110 'height': 600,
111 'frame': 'none',
112 'id': String(remoting.V2AppLauncher.nextWindowId_++)
113 },
114 /** @param {AppWindow} appWindow */
115 function(appWindow) {
116 if (!appWindow) {
117 reject(new Error(chrome.runtime.lastError.message));
118 } else {
119 resolve(appWindow.id);
120 }
121 });
122 });
123 };
124
125 remoting.V2AppLauncher.prototype.close = function(id) {
126 var appWindow = chrome.app.window.get(id);
127 if (!appWindow) {
128 return Promise.reject(new Error(chrome.runtime.lastError.message));
129 }
130 appWindow.close();
131 return Promise.resolve();
132 };
OLDNEW
« no previous file with comments | « remoting/webapp/background.js ('k') | remoting/webapp/background/background.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698