Index: components/chrome_apps/webstore_widget/app/main.js |
diff --git a/components/chrome_apps/webstore_widget/app/main.js b/components/chrome_apps/webstore_widget/app/main.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..aca72b3d642b7c262da309588ae230bd10b882f1 |
--- /dev/null |
+++ b/components/chrome_apps/webstore_widget/app/main.js |
@@ -0,0 +1,188 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+//<include src="../../../../ui/webui/resources/js/cr.js"> |
+//<include src="../../../../ui/webui/resources/js/load_time_data.js"> |
+//<include src="../../../../ui/webui/resources/js/i18n_template_no_process.js"> |
+//<include src="../../../../ui/webui/resources/js/cr/event_target.js"> |
+//<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.
|
+ |
+(function() { |
+'use strict'; |
+ |
+//<include src="../cws_widget/app_installer.js"> |
+//<include src="../cws_widget/cws_webview_client.js"> |
+//<include src="../cws_widget/cws_widget_container.js"> |
+//<include src="../cws_widget/cws_widget_container_error_dialog.js"> |
+ |
+/** |
+ * @type {?{ |
+ * filter: !Object.<string, *>, |
+ * webstoreUrl: ?string |
+ * }} |
+ */ |
+window.params = window.params || null; |
+ |
+/** |
+ * @param {string} id Element id. |
+ * @return {HTMLElement} The found element, or null. |
+ */ |
+function $(id) { |
+ return document.getElementById(id); |
+} |
+ |
+/** |
+ * Default strings. |
+ */ |
+var defaultStrings = { |
+ 'language': 'en', |
+ 'LINK_TO_WEBSTORE': '[LOCALIZE ME] Learn more...', |
+ 'INSTALLATION_FAILED_MESSAGE': '[LOCALIZE ME] Installation failed!', |
+ 'OK_BUTTON': '[LOCALIZE ME] OK', |
+ 'TITLE_PRINTER_PROVIDERS': '[LOCALIZE ME] Select app for your printer' |
+}; |
+ |
+/** |
+ * @param {string} id The string id. |
+ * @return {string} |
+ */ |
+function getString(id) { |
+ return loadTimeData.getString(id) || defaultStrings[id] || ''; |
+} |
+ |
+/** |
+ * @param {Object.<string, string>} strings Localized strings used by the |
+ * container. |
+ * @return {!CWSWidgetContainer.PlatformDelegate} |
+ */ |
+function createPlatformDelegate(strings) { |
+ return { |
+ strings: { |
+ UI_LOCALE: getString('language'), |
+ LINK_TO_WEBSTORE: getString('LINK_TO_WEBSTORE'), |
+ INSTALLATION_FAILED_MESSAGE: getString('INSTALLATION_FAILED_MESSAGE') |
+ }, |
+ |
+ metricsImpl: { |
+ /** |
+ * @param {string} enumName |
+ * @param {number} value |
+ * @param {number} enumSize |
+ */ |
+ recordEnum: function(enumName, value, enumSize) {}, |
+ |
+ /** @param {string} actionName */ |
+ recordUserAction: function(actionName) {}, |
+ |
+ /** @param {string} intervalName */ |
+ startInterval: function(intervalName) {}, |
+ |
+ /** @param {string} intervalName */ |
+ recordInterval: function(intervalName) {} |
+ }, |
+ |
+ /** |
+ * @param {string} itemId Item to be installed. |
+ * @param {function(?string)} callback Callback param is the error message, |
+ * which is set to null on success. |
+ */ |
+ installWebstoreItem: function(itemId, callback) { |
+ chrome.webstoreWidgetPrivate.installWebstoreItem( |
+ itemId, |
+ false, |
+ function() { |
+ callback(chrome.runtime.lastError ? |
+ chrome.runtime.lastError.message || 'UNKNOWN_ERROR' : null); |
+ }); |
+ }, |
+ |
+ /** @param {function(Array.<string>)} callback */ |
+ getInstalledItems: function(callback) { callback([]); }, |
+ |
+ /** |
+ * @param {function(?string)} callback The argument is the fetche3d access |
+ * token. Null on error. |
+ */ |
+ requestWebstoreAccessToken: function(callback) { |
+ chrome.fileManagerPrivate.requestWebStoreAccessToken(function(token) { |
+ if (chrome.runtime.lastError) { |
+ console.error('Error getting access token: ' + |
+ chrome.runtime.lastError.message); |
+ callback(null); |
+ return; |
+ } |
+ callback(token); |
+ }); |
+ } |
+ }; |
+} |
+ |
+function initializeTopbarButtons() { |
+ $('close-button').addEventListener('click', function(e) { |
+ e.preventDefault(); |
+ chrome.app.window.current().close(); |
+ }); |
+ |
+ $('close-button').addEventListener('mousedown', function(e) { |
+ e.preventDefault(); |
+ }); |
+ |
+ $('minimize-button').addEventListener('click', function(e) { |
+ e.preventDefault(); |
+ chrome.app.window.current().minimize(); |
+ }); |
+ |
+ $('minimize-button').addEventListener('mousedown', function(e) { |
+ e.preventDefault(); |
+ }); |
+} |
+ |
+window.addEventListener('DOMContentLoaded', function() { |
+ initializeTopbarButtons(); |
+ |
+ chrome.webstoreWidgetPrivate.getStrings(function(strings) { |
+ loadTimeData.data = strings; |
+ i18nTemplate.process(document, loadTimeData); |
+ |
+ cr.ui.dialogs.BaseDialog.OK_LABEL = getString('OK_BUTTON'); |
+ |
+ document.title = getString('TITLE_PRINTER_PROVIDERS'); |
+ $('title').textContent = document.title; |
+ |
+ if (!window.params) { |
+ console.error('Params not set!'); |
+ return; |
+ } |
+ |
+ /** @type {!CWSWidgetContainer.PlatformDelegate} */ |
+ var platformDelegate = createPlatformDelegate(strings); |
+ |
+ var root = $('widget-container-root'); |
+ if (!root) { |
+ console.error('No root element'); |
+ return; |
+ } |
+ |
+ /** @type {!CWSWidgetContainer} */ |
+ var widgetContainer = new CWSWidgetContainer( |
+ document, root, platformDelegate, {} /* state */); |
+ |
+ widgetContainer.ready() |
+ /** @return {!Promise.<CWSWidgetContainer.ResolveReason>} */ |
+ .then(function() { |
+ return widgetContainer.start(window.params.filter, |
+ window.params.webstoreUrl); |
+ }) |
+ /** @param {!CWSWidgetContainer.ResolveReason} reason */ |
+ .then(function(reason) { |
+ chrome.app.window.current().close(); |
+ }) |
+ /** @param {*} error */ |
+ .catch(function(error) { |
+ // TODO(tbarzic): Add error UI. |
+ console.error(error); |
+ }); |
+ }); |
+}); |
+})(); |