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

Side by Side Diff: components/chrome_apps/webstore_widget/app/main.js

Issue 1123373003: Launch webstore widget app when unsupported printer is plugged in (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@move_cws_widget_scripts
Patch Set: bump app version Created 5 years, 7 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
OLDNEW
(Empty)
1 // Copyright 2015 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 //<include src="../../../../ui/webui/resources/js/cr.js">
6 //<include src="../../../../ui/webui/resources/js/load_time_data.js">
7 //<include src="../../../../ui/webui/resources/js/i18n_template_no_process.js">
8 //<include src="../../../../ui/webui/resources/js/cr/event_target.js">
9 //<include src="../../../../ui/webui/resources/js/cr/ui/dialogs.js">
stevenjb 2015/05/14 23:28:04 Note: We should avoid committing commented out cod
Dan Beam 2015/05/14 23:59:31 these are functional. <include> is pre-processed.
10
11 (function() {
12 'use strict';
13
14 //<include src="../cws_widget/app_installer.js">
15 //<include src="../cws_widget/cws_webview_client.js">
16 //<include src="../cws_widget/cws_widget_container.js">
17 //<include src="../cws_widget/cws_widget_container_error_dialog.js">
18
19 /**
20 * @type {?{
21 * filter: !Object.<string, *>,
22 * webstoreUrl: ?string
23 * }}
24 */
25 window.params = window.params || null;
26
27 /**
28 * @param {string} id Element id.
29 * @return {HTMLElement} The found element, or null.
30 */
31 function $(id) {
32 return document.getElementById(id);
33 }
34
35 /**
36 * Default strings.
37 */
38 var defaultStrings = {
39 'language': 'en',
40 'LINK_TO_WEBSTORE': '[LOCALIZE ME] Learn more...',
41 'INSTALLATION_FAILED_MESSAGE': '[LOCALIZE ME] Installation failed!',
42 'OK_BUTTON': '[LOCALIZE ME] OK',
43 'TITLE_PRINTER_PROVIDERS': '[LOCALIZE ME] Select app for your printer'
44 };
45
46 /**
47 * @param {string} id The string id.
48 * @return {string}
49 */
50 function getString(id) {
51 return loadTimeData.getString(id) || defaultStrings[id] || '';
52 }
53
54 /**
55 * @param {Object.<string, string>} strings Localized strings used by the
56 * container.
57 * @return {!CWSWidgetContainer.PlatformDelegate}
58 */
59 function createPlatformDelegate(strings) {
60 return {
61 strings: {
62 UI_LOCALE: getString('language'),
63 LINK_TO_WEBSTORE: getString('LINK_TO_WEBSTORE'),
64 INSTALLATION_FAILED_MESSAGE: getString('INSTALLATION_FAILED_MESSAGE')
65 },
66
67 metricsImpl: {
68 /**
69 * @param {string} enumName
70 * @param {number} value
71 * @param {number} enumSize
72 */
73 recordEnum: function(enumName, value, enumSize) {},
74
75 /** @param {string} actionName */
76 recordUserAction: function(actionName) {},
77
78 /** @param {string} intervalName */
79 startInterval: function(intervalName) {},
80
81 /** @param {string} intervalName */
82 recordInterval: function(intervalName) {}
83 },
84
85 /**
86 * @param {string} itemId Item to be installed.
87 * @param {function(?string)} callback Callback param is the error message,
88 * which is set to null on success.
89 */
90 installWebstoreItem: function(itemId, callback) {
91 chrome.webstoreWidgetPrivate.installWebstoreItem(
92 itemId,
93 false,
94 function() {
95 callback(chrome.runtime.lastError ?
96 chrome.runtime.lastError.message || 'UNKNOWN_ERROR' : null);
97 });
98 },
99
100 /** @param {function(Array.<string>)} callback */
101 getInstalledItems: function(callback) { callback([]); },
102
103 /**
104 * @param {function(?string)} callback The argument is the fetche3d access
105 * token. Null on error.
106 */
107 requestWebstoreAccessToken: function(callback) {
108 chrome.fileManagerPrivate.requestWebStoreAccessToken(function(token) {
109 if (chrome.runtime.lastError) {
110 console.error('Error getting access token: ' +
111 chrome.runtime.lastError.message);
112 callback(null);
113 return;
114 }
115 callback(token);
116 });
117 }
118 };
119 }
120
121 function initializeTopbarButtons() {
122 $('close-button').addEventListener('click', function(e) {
123 e.preventDefault();
124 chrome.app.window.current().close();
125 });
126
127 $('close-button').addEventListener('mousedown', function(e) {
128 e.preventDefault();
129 });
130
131 $('minimize-button').addEventListener('click', function(e) {
132 e.preventDefault();
133 chrome.app.window.current().minimize();
134 });
135
136 $('minimize-button').addEventListener('mousedown', function(e) {
137 e.preventDefault();
138 });
139 }
140
141 window.addEventListener('DOMContentLoaded', function() {
142 initializeTopbarButtons();
143
144 chrome.webstoreWidgetPrivate.getStrings(function(strings) {
145 loadTimeData.data = strings;
146 i18nTemplate.process(document, loadTimeData);
147
148 cr.ui.dialogs.BaseDialog.OK_LABEL = getString('OK_BUTTON');
149
150 document.title = getString('TITLE_PRINTER_PROVIDERS');
151 $('title').textContent = document.title;
152
153 if (!window.params) {
154 console.error('Params not set!');
155 return;
156 }
157
158 /** @type {!CWSWidgetContainer.PlatformDelegate} */
159 var platformDelegate = createPlatformDelegate(strings);
160
161 var root = $('widget-container-root');
162 if (!root) {
163 console.error('No root element');
164 return;
165 }
166
167 /** @type {!CWSWidgetContainer} */
168 var widgetContainer = new CWSWidgetContainer(
169 document, root, platformDelegate, {} /* state */);
170
171 widgetContainer.ready()
172 /** @return {!Promise.<CWSWidgetContainer.ResolveReason>} */
173 .then(function() {
174 return widgetContainer.start(window.params.filter,
175 window.params.webstoreUrl);
176 })
177 /** @param {!CWSWidgetContainer.ResolveReason} reason */
178 .then(function(reason) {
179 chrome.app.window.current().close();
180 })
181 /** @param {*} error */
182 .catch(function(error) {
183 // TODO(tbarzic): Add error UI.
184 console.error(error);
185 });
186 });
187 });
188 })();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698