Index: chrome/browser/resources/file_manager/js/suggest_apps_dialog.js |
diff --git a/chrome/browser/resources/file_manager/js/suggest_apps_dialog.js b/chrome/browser/resources/file_manager/js/suggest_apps_dialog.js |
deleted file mode 100644 |
index 7e02b6bf13b68cb18266ded0fb996a55bf31abb9..0000000000000000000000000000000000000000 |
--- a/chrome/browser/resources/file_manager/js/suggest_apps_dialog.js |
+++ /dev/null |
@@ -1,418 +0,0 @@ |
-// Copyright (c) 2013 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. |
- |
-'use strict'; |
- |
-/** |
- * SuggestAppsDialog contains a list box to select an app to be opened the file |
- * with. This dialog should be used as action picker for file operations. |
- */ |
- |
-/** |
- * The width of the widget (in pixel). |
- * @type {number} |
- * @const |
- */ |
-var WEBVIEW_WIDTH = 735; |
-/** |
- * The height of the widget (in pixel). |
- * @type {number} |
- * @const |
- */ |
-var WEBVIEW_HEIGHT = 480; |
- |
-/** |
- * The URL of the widget. |
- * @type {string} |
- * @const |
- */ |
-var CWS_WIDGET_URL = |
- 'https://clients5.google.com/webstore/wall/cros-widget-container'; |
-/** |
- * The origin of the widget. |
- * @type {string} |
- * @const |
- */ |
-var CWS_WIDGET_ORIGIN = 'https://clients5.google.com'; |
- |
-/** |
- * Creates dialog in DOM tree. |
- * |
- * @param {HTMLElement} parentNode Node to be parent for this dialog. |
- * @param {Object} state Static state of suggest app dialog. |
- * @constructor |
- * @extends {FileManagerDialogBase} |
- */ |
-function SuggestAppsDialog(parentNode, state) { |
- FileManagerDialogBase.call(this, parentNode); |
- |
- this.frame_.id = 'suggest-app-dialog'; |
- |
- this.spinner_ = this.document_.createElement('div'); |
- this.spinner_.className = 'spinner'; |
- |
- this.spinnerWrapper_ = this.document_.createElement('div'); |
- this.spinnerWrapper_.className = 'spinner-container'; |
- this.spinnerWrapper_.style.width = WEBVIEW_WIDTH + 'px'; |
- this.spinnerWrapper_.style.height = WEBVIEW_HEIGHT + 'px'; |
- this.spinnerWrapper_.appendChild(this.spinner_); |
- this.frame_.insertBefore(this.spinnerWrapper_, this.text_.nextSibling); |
- |
- this.webviewContainer_ = this.document_.createElement('div'); |
- this.webviewContainer_.id = 'webview-container'; |
- this.webviewContainer_.style.width = WEBVIEW_WIDTH + 'px'; |
- this.webviewContainer_.style.height = WEBVIEW_HEIGHT + 'px'; |
- this.frame_.insertBefore(this.webviewContainer_, this.text_.nextSibling); |
- |
- this.buttons_ = this.document_.createElement('div'); |
- this.buttons_.id = 'buttons'; |
- this.frame_.appendChild(this.buttons_); |
- |
- this.webstoreButton_ = this.document_.createElement('div'); |
- this.webstoreButton_.id = 'webstore-button'; |
- this.webstoreButton_.innerHTML = str('SUGGEST_DIALOG_LINK_TO_WEBSTORE'); |
- this.webstoreButton_.addEventListener( |
- 'click', this.onWebstoreLinkClicked_.bind(this)); |
- this.buttons_.appendChild(this.webstoreButton_); |
- |
- this.initialFocusElement_ = this.webviewContainer_; |
- |
- this.webview_ = null; |
- this.accessToken_ = null; |
- this.widgetUrl_ = |
- state.overrideCwsContainerUrlForTest || CWS_WIDGET_URL; |
- this.widgetOrigin_ = |
- state.overrideCwsContainerOriginForTest || CWS_WIDGET_ORIGIN; |
- |
- this.extension_ = null; |
- this.mime_ = null; |
- this.installingItemId_ = null; |
- this.state_ = SuggestAppsDialog.State.UNINITIALIZED; |
- |
- this.initializationTask_ = new AsyncUtil.Group(); |
- this.initializationTask_.add(this.retrieveAuthorizeToken_.bind(this)); |
- this.initializationTask_.run(); |
-} |
- |
-SuggestAppsDialog.prototype = { |
- __proto__: FileManagerDialogBase.prototype |
-}; |
- |
-/** |
- * @enum {string} |
- * @const |
- */ |
-SuggestAppsDialog.State = { |
- UNINITIALIZED: 'SuggestAppsDialog.State.UNINITIALIZED', |
- INITIALIZING: 'SuggestAppsDialog.State.INITIALIZING', |
- INITIALIZE_FAILED_CLOSING: |
- 'SuggestAppsDialog.State.INITIALIZE_FAILED_CLOSING', |
- INITIALIZED: 'SuggestAppsDialog.State.INITIALIZED', |
- INSTALLING: 'SuggestAppsDialog.State.INSTALLING', |
- INSTALLED_CLOSING: 'SuggestAppsDialog.State.INSTALLED_CLOSING', |
- CANCELED_CLOSING: 'SuggestAppsDialog.State.CANCELED_CLOSING' |
-}; |
-Object.freeze(SuggestAppsDialog.State); |
- |
-/** |
- * @enum {string} |
- * @const |
- */ |
-SuggestAppsDialog.Result = { |
- // Install is done. The install app should be opened. |
- INSTALL_SUCCESSFUL: 'SuggestAppsDialog.Result.INSTALL_SUCCESSFUL', |
- // User cancelled the suggest app dialog. No message should be shown. |
- USER_CANCELL: 'SuggestAppsDialog.Result.USER_CANCELL', |
- // Failed to load the widget. Error message should be shown. |
- FAILED: 'SuggestAppsDialog.Result.FAILED' |
-}; |
-Object.freeze(SuggestAppsDialog.Result); |
- |
-/** |
- * @override |
- */ |
-SuggestAppsDialog.prototype.onInputFocus = function() { |
- this.webviewContainer_.select(); |
-}; |
- |
-/** |
- * Injects headers into the passed request. |
- * |
- * @param {Event} e Request event. |
- * @return {{requestHeaders: HttpHeaders}} Modified headers. |
- * @private |
- */ |
-SuggestAppsDialog.prototype.authorizeRequest_ = function(e) { |
- e.requestHeaders.push({ |
- name: 'Authorization', |
- value: 'Bearer ' + this.accessToken_ |
- }); |
- return {requestHeaders: e.requestHeaders}; |
-}; |
- |
-/** |
- * Retrieves the authorize token. This method should be called in |
- * initialization of the dialog. |
- * |
- * @param {function()} callback Called when the token is retrieved. |
- * @private |
- */ |
-SuggestAppsDialog.prototype.retrieveAuthorizeToken_ = function(callback) { |
- if (window.IN_TEST) { |
- // In test, use a dummy string as token. This must be a non-empty string. |
- this.accessToken_ = 'DUMMY_ACCESS_TOKEN_FOR_TEST'; |
- } |
- |
- if (this.accessToken_) { |
- callback(); |
- return; |
- } |
- |
- // Fetch or update the access token. |
- chrome.fileBrowserPrivate.requestWebStoreAccessToken( |
- function(accessToken) { |
- // In case of error, this.accessToken_ will be set to null. |
- this.accessToken_ = accessToken; |
- callback(); |
- }.bind(this)); |
-}; |
- |
-/** |
- * Shows dialog. |
- * |
- * @param {string} extension Extension of the file. |
- * @param {string} mime Mime of the file. |
- * @param {function(boolean)} onDialogClosed Called when the dialog is closed. |
- * The argument is the result of installation: true if an app is installed, |
- * false otherwise. |
- */ |
-SuggestAppsDialog.prototype.show = function(extension, mime, onDialogClosed) { |
- if (this.state_ != SuggestAppsDialog.State.UNINITIALIZED) { |
- console.error('Invalid state.'); |
- return; |
- } |
- |
- this.extension_ = extension; |
- this.mimeType_ = mime; |
- this.onDialogClosed_ = onDialogClosed; |
- this.state_ = SuggestAppsDialog.State.INITIALIZING; |
- |
- // Makes it sure that the initialization is completed. |
- this.initializationTask_.run(function() { |
- if (!this.accessToken_) { |
- this.state_ = SuggestAppsDialog.State.INITIALIZE_FAILED_CLOSING; |
- this.onHide_(); |
- return; |
- } |
- |
- var title = str('SUGGEST_DIALOG_TITLE'); |
- |
- var show = |
- FileManagerDialogBase.prototype.showTitleOnlyDialog.call(this, title); |
- if (!show) { |
- console.error('SuggestAppsDialog can\'t be shown'); |
- this.state_ = SuggestAppsDialog.State.UNINITIALIZED; |
- this.onHide(); |
- return; |
- } |
- |
- this.webviewContainer_.innerHTML = |
- '<webview id="cws-widget" partition="persist:cwswidgets"></webview>'; |
- |
- this.webview_ = this.container_.querySelector('#cws-widget'); |
- this.webview_.style.width = WEBVIEW_WIDTH + 'px'; |
- this.webview_.style.height = WEBVIEW_HEIGHT + 'px'; |
- this.webview_.request.onBeforeSendHeaders.addListener( |
- this.authorizeRequest_.bind(this), |
- {urls: [this.widgetOrigin_ + '/*']}, |
- ['blocking', 'requestHeaders']); |
- this.webview_.addEventListener('newwindow', function(event) { |
- // Discard the window object and reopen in an external window. |
- event.window.discard(); |
- util.visitURL(event.targetUrl); |
- event.preventDefault(); |
- }); |
- |
- this.frame_.classList.add('show-spinner'); |
- |
- this.webviewClient_ = new CWSContainerClient( |
- this.webview_, |
- extension, mime, |
- WEBVIEW_WIDTH, WEBVIEW_HEIGHT, |
- this.widgetUrl_, this.widgetOrigin_); |
- this.webviewClient_.addEventListener(CWSContainerClient.Events.LOADED, |
- this.onWidgetLoaded_.bind(this)); |
- this.webviewClient_.addEventListener(CWSContainerClient.Events.LOAD_FAILED, |
- this.onWidgetLoadFailed_.bind(this)); |
- this.webviewClient_.addEventListener( |
- CWSContainerClient.Events.REQUEST_INSTALL, |
- this.onInstallRequest_.bind(this)); |
- this.webviewClient_.load(); |
- }.bind(this)); |
-}; |
- |
-/** |
- * Called when the 'See more...' link is clicked to be navigated to Webstore. |
- * @param {Event} e Event. |
- * @private |
- */ |
-SuggestAppsDialog.prototype.onWebstoreLinkClicked_ = function(e) { |
- var webStoreUrl = |
- FileTasks.createWebStoreLink(this.extension_, this.mimeType_); |
- chrome.windows.create({url: webStoreUrl}); |
- this.hide(); |
-}; |
- |
-/** |
- * Called when the widget is loaded successfully. |
- * @param {Event} event Event. |
- * @private |
- */ |
-SuggestAppsDialog.prototype.onWidgetLoaded_ = function(event) { |
- this.frame_.classList.remove('show-spinner'); |
- this.state_ = SuggestAppsDialog.State.INITIALIZED; |
- |
- this.webview_.focus(); |
-}; |
- |
-/** |
- * Called when the widget is failed to load. |
- * @param {Event} event Event. |
- * @private |
- */ |
-SuggestAppsDialog.prototype.onWidgetLoadFailed_ = function(event) { |
- this.frame_.classList.remove('show-spinner'); |
- this.state_ = SuggestAppsDialog.State.INITIALIZE_FAILED_CLOSING; |
- |
- this.hide(); |
-}; |
- |
-/** |
- * Called when the connection status is changed. |
- * @param {util.DriveConnectionType} connectionType Current connection type. |
- */ |
-SuggestAppsDialog.prototype.onDriveConnectionChanged = |
- function(connectionType) { |
- if (this.state_ !== SuggestAppsDialog.State.UNINITIALIZED && |
- connectionType === util.DriveConnectionType.OFFLINE) { |
- this.state_ = SuggestAppsDialog.State.INITIALIZE_FAILED_CLOSING; |
- this.hide(); |
- } |
-}; |
- |
-/** |
- * Called when receiving the install request from the webview client. |
- * @param {Event} e Event. |
- * @private |
- */ |
-SuggestAppsDialog.prototype.onInstallRequest_ = function(e) { |
- var itemId = e.itemId; |
- this.installingItemId_ = itemId; |
- |
- this.appInstaller_ = new AppInstaller(itemId); |
- this.appInstaller_.install(this.onInstallCompleted_.bind(this)); |
- |
- this.frame_.classList.add('show-spinner'); |
- this.state_ = SuggestAppsDialog.State.INSTALLING; |
-}; |
- |
-/** |
- * Called when the installation is completed from the app installer. |
- * @param {AppInstaller.Result} result Result of the installation. |
- * @param {string} error Detail of the error. |
- * @private |
- */ |
-SuggestAppsDialog.prototype.onInstallCompleted_ = function(result, error) { |
- var success = (result === AppInstaller.Result.SUCCESS); |
- |
- this.frame_.classList.remove('show-spinner'); |
- this.state_ = success ? |
- SuggestAppsDialog.State.INSTALLED_CLOSING : |
- SuggestAppsDialog.State.INITIALIZED; // Back to normal state. |
- this.webviewClient_.onInstallCompleted(success, this.installingItemId_); |
- this.installingItemId_ = null; |
- |
- switch (result) { |
- case AppInstaller.Result.SUCCESS: |
- this.hide(); |
- break; |
- case AppInstaller.Result.CANCELLED: |
- // User cancelled the installation. Do nothing. |
- break; |
- case AppInstaller.Result.ERROR: |
- fileManager.error.show(str('SUGGEST_DIALOG_INSTALLATION_FAILED')); |
- break; |
- } |
-}; |
- |
-/** |
- * @override |
- */ |
-SuggestAppsDialog.prototype.hide = function(opt_originalOnHide) { |
- switch (this.state_) { |
- case SuggestAppsDialog.State.INSTALLING: |
- // Install is being aborted. Send the failure result. |
- // Cancels the install. |
- if (this.webviewClient_) |
- this.webviewClient_.onInstallCompleted(false, this.installingItemId_); |
- this.installingItemId_ = null; |
- |
- // Assumes closing the dialog as canceling the install. |
- this.state_ = SuggestAppsDialog.State.CANCELED_CLOSING; |
- break; |
- case SuggestAppsDialog.State.INSTALLED_CLOSING: |
- case SuggestAppsDialog.State.INITIALIZE_FAILED_CLOSING: |
- // Do nothing. |
- break; |
- case SuggestAppsDialog.State.INITIALIZED: |
- this.state_ = SuggestAppsDialog.State.CANCELED_CLOSING; |
- break; |
- default: |
- this.state_ = SuggestAppsDialog.State.CANCELED_CLOSING; |
- console.error('Invalid state.'); |
- } |
- |
- if (this.webviewClient_) { |
- this.webviewClient_.dispose(); |
- this.webviewClient_ = null; |
- } |
- |
- this.webviewContainer_.innerHTML = ''; |
- this.extension_ = null; |
- this.mime_ = null; |
- |
- FileManagerDialogBase.prototype.hide.call( |
- this, |
- this.onHide_.bind(this, opt_originalOnHide)); |
-}; |
- |
-/** |
- * @param {function()=} opt_originalOnHide Original onHide function passed to |
- * SuggestAppsDialog.hide(). |
- * @private |
- */ |
-SuggestAppsDialog.prototype.onHide_ = function(opt_originalOnHide) { |
- // Calls the callback after the dialog hides. |
- if (opt_originalOnHide) |
- opt_originalOnHide(); |
- |
- var result; |
- switch (this.state_) { |
- case SuggestAppsDialog.State.INSTALLED_CLOSING: |
- result = SuggestAppsDialog.Result.INSTALL_SUCCESSFUL; |
- break; |
- case SuggestAppsDialog.State.INITIALIZE_FAILED_CLOSING: |
- result = SuggestAppsDialog.Result.FAILED; |
- break; |
- case SuggestAppsDialog.State.CANCELED_CLOSING: |
- result = SuggestAppsDialog.Result.USER_CANCELL; |
- break; |
- default: |
- result = SuggestAppsDialog.Result.USER_CANCELL; |
- console.error('Invalid state.'); |
- } |
- this.state_ = SuggestAppsDialog.State.UNINITIALIZED; |
- |
- this.onDialogClosed_(result); |
-}; |