| 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
|
| index 7e02b6bf13b68cb18266ded0fb996a55bf31abb9..54ce01feb5552975f7a38a0ff8d8433f98fd9b93 100644
|
| --- a/chrome/browser/resources/file_manager/js/suggest_apps_dialog.js
|
| +++ b/chrome/browser/resources/file_manager/js/suggest_apps_dialog.js
|
| @@ -111,6 +111,7 @@ SuggestAppsDialog.State = {
|
| INITIALIZED: 'SuggestAppsDialog.State.INITIALIZED',
|
| INSTALLING: 'SuggestAppsDialog.State.INSTALLING',
|
| INSTALLED_CLOSING: 'SuggestAppsDialog.State.INSTALLED_CLOSING',
|
| + OPENING_WEBSTORE_CLOSING: 'SuggestAppsDialog.State.OPENING_WEBSTORE_CLOSING',
|
| CANCELED_CLOSING: 'SuggestAppsDialog.State.CANCELED_CLOSING'
|
| };
|
| Object.freeze(SuggestAppsDialog.State);
|
| @@ -124,6 +125,8 @@ SuggestAppsDialog.Result = {
|
| INSTALL_SUCCESSFUL: 'SuggestAppsDialog.Result.INSTALL_SUCCESSFUL',
|
| // User cancelled the suggest app dialog. No message should be shown.
|
| USER_CANCELL: 'SuggestAppsDialog.Result.USER_CANCELL',
|
| + // User clicked the link to web store so the dialog is closed.
|
| + WEBSTORE_LINK_OPENED: 'SuggestAppsDialog.Result.WEBSTORE_LINK_OPENED',
|
| // Failed to load the widget. Error message should be shown.
|
| FAILED: 'SuggestAppsDialog.Result.FAILED'
|
| };
|
| @@ -198,6 +201,9 @@ SuggestAppsDialog.prototype.show = function(extension, mime, onDialogClosed) {
|
| this.onDialogClosed_ = onDialogClosed;
|
| this.state_ = SuggestAppsDialog.State.INITIALIZING;
|
|
|
| + SuggestAppsDialog.Metrics.recordShowDialog();
|
| + SuggestAppsDialog.Metrics.startLoad();
|
| +
|
| // Makes it sure that the initialization is completed.
|
| this.initializationTask_.run(function() {
|
| if (!this.accessToken_) {
|
| @@ -261,6 +267,7 @@ SuggestAppsDialog.prototype.onWebstoreLinkClicked_ = function(e) {
|
| var webStoreUrl =
|
| FileTasks.createWebStoreLink(this.extension_, this.mimeType_);
|
| chrome.windows.create({url: webStoreUrl});
|
| + this.state_ = SuggestAppsDialog.State.OPENING_WEBSTORE_CLOSING;
|
| this.hide();
|
| };
|
|
|
| @@ -270,6 +277,10 @@ SuggestAppsDialog.prototype.onWebstoreLinkClicked_ = function(e) {
|
| * @private
|
| */
|
| SuggestAppsDialog.prototype.onWidgetLoaded_ = function(event) {
|
| + SuggestAppsDialog.Metrics.finishLoad();
|
| + SuggestAppsDialog.Metrics.recordLoad(
|
| + SuggestAppsDialog.Metrics.LOAD.SUCCEEDED);
|
| +
|
| this.frame_.classList.remove('show-spinner');
|
| this.state_ = SuggestAppsDialog.State.INITIALIZED;
|
|
|
| @@ -282,6 +293,8 @@ SuggestAppsDialog.prototype.onWidgetLoaded_ = function(event) {
|
| * @private
|
| */
|
| SuggestAppsDialog.prototype.onWidgetLoadFailed_ = function(event) {
|
| + SuggestAppsDialog.Metrics.recordLoad(SuggestAppsDialog.Metrics.LOAD.FAILURE);
|
| +
|
| this.frame_.classList.remove('show-spinner');
|
| this.state_ = SuggestAppsDialog.State.INITIALIZE_FAILED_CLOSING;
|
|
|
| @@ -335,12 +348,18 @@ SuggestAppsDialog.prototype.onInstallCompleted_ = function(result, error) {
|
|
|
| switch (result) {
|
| case AppInstaller.Result.SUCCESS:
|
| + SuggestAppsDialog.Metrics.recordInstall(
|
| + SuggestAppsDialog.Metrics.INSTALL.SUCCESS);
|
| this.hide();
|
| break;
|
| case AppInstaller.Result.CANCELLED:
|
| + SuggestAppsDialog.Metrics.recordInstall(
|
| + SuggestAppsDialog.Metrics.INSTALL.CANCELLED);
|
| // User cancelled the installation. Do nothing.
|
| break;
|
| case AppInstaller.Result.ERROR:
|
| + SuggestAppsDialog.Metrics.recordInstall(
|
| + SuggestAppsDialog.Metrics.INSTALL.FAILED);
|
| fileManager.error.show(str('SUGGEST_DIALOG_INSTALLATION_FAILED'));
|
| break;
|
| }
|
| @@ -361,8 +380,14 @@ SuggestAppsDialog.prototype.hide = function(opt_originalOnHide) {
|
| // Assumes closing the dialog as canceling the install.
|
| this.state_ = SuggestAppsDialog.State.CANCELED_CLOSING;
|
| break;
|
| + case SuggestAppsDialog.State.INITIALIZING:
|
| + SuggestAppsDialog.Metrics.recordLoad(
|
| + SuggestAppsDialog.Metrics.LOAD.CANCELLED);
|
| + this.state_ = SuggestAppsDialog.State.CANCELED_CLOSING;
|
| + break;
|
| case SuggestAppsDialog.State.INSTALLED_CLOSING:
|
| case SuggestAppsDialog.State.INITIALIZE_FAILED_CLOSING:
|
| + case SuggestAppsDialog.State.OPENING_WEBSTORE_CLOSING:
|
| // Do nothing.
|
| break;
|
| case SuggestAppsDialog.State.INITIALIZED:
|
| @@ -401,18 +426,90 @@ SuggestAppsDialog.prototype.onHide_ = function(opt_originalOnHide) {
|
| switch (this.state_) {
|
| case SuggestAppsDialog.State.INSTALLED_CLOSING:
|
| result = SuggestAppsDialog.Result.INSTALL_SUCCESSFUL;
|
| + SuggestAppsDialog.Metrics.recordCloseDialog(
|
| + SuggestAppsDialog.Metrics.CLOSE_DIALOG.ITEM_INSTALLED);
|
| break;
|
| case SuggestAppsDialog.State.INITIALIZE_FAILED_CLOSING:
|
| result = SuggestAppsDialog.Result.FAILED;
|
| break;
|
| case SuggestAppsDialog.State.CANCELED_CLOSING:
|
| result = SuggestAppsDialog.Result.USER_CANCELL;
|
| + SuggestAppsDialog.Metrics.recordCloseDialog(
|
| + SuggestAppsDialog.Metrics.CLOSE_DIALOG.USER_CANCELL);
|
| + break;
|
| + case SuggestAppsDialog.State.OPENING_WEBSTORE_CLOSING:
|
| + result = SuggestAppsDialog.Result.WEBSTORE_LINK_OPENED;
|
| + SuggestAppsDialog.Metrics.recordCloseDialog(
|
| + SuggestAppsDialog.Metrics.CLOSE_DIALOG.WEB_STORE_LINK);
|
| break;
|
| default:
|
| result = SuggestAppsDialog.Result.USER_CANCELL;
|
| + SuggestAppsDialog.Metrics.recordCloseDialog(
|
| + SuggestAppsDialog.Metrics.CLOSE_DIALOG.UNKNOWN_ERROR);
|
| console.error('Invalid state.');
|
| }
|
| this.state_ = SuggestAppsDialog.State.UNINITIALIZED;
|
|
|
| this.onDialogClosed_(result);
|
| };
|
| +
|
| +/**
|
| + * Utility methods and constants to record histograms.
|
| + */
|
| +SuggestAppsDialog.Metrics = Object.freeze({
|
| + LOAD: Object.freeze({
|
| + SUCCEEDED: 0,
|
| + CANCELLED: 1,
|
| + FAILED: 2,
|
| + }),
|
| +
|
| + /**
|
| + * @param {SuggestAppsDialog.Metrics.LOAD} result Result of load.
|
| + */
|
| + recordLoad: function(result) {
|
| + if (0 <= result && result < 3)
|
| + metrics.recordEnum('SuggestApps.Load', result, 3);
|
| + },
|
| +
|
| + CLOSE_DIALOG: Object.freeze({
|
| + UNKOWN_ERROR: 0,
|
| + ITEM_INSTALLED: 1,
|
| + USER_CANCELLED: 2,
|
| + WEBSTORE_LINK_OPENED: 3,
|
| + }),
|
| +
|
| + /**
|
| + * @param {SuggestAppsDialog.Metrics.CLOSE_DIALOG} reason Reason of closing
|
| + * dialog.
|
| + */
|
| + recordCloseDialog: function(reason) {
|
| + if (0 <= reason && reason < 4)
|
| + metrics.recordEnum('SuggestApps.CloseDialog', reason, 4);
|
| + },
|
| +
|
| + INSTALL: Object.freeze({
|
| + SUCCEEDED: 0,
|
| + CANCELLED: 1,
|
| + FAILED: 2,
|
| + }),
|
| +
|
| + /**
|
| + * @param {SuggestAppsDialog.Metrics.INSTALL} result Result of installation.
|
| + */
|
| + recordInstall: function(result) {
|
| + if (0 <= result && result < 3)
|
| + metrics.recordEnum('SuggestApps.Install', result, 3);
|
| + },
|
| +
|
| + recordShowDialog: function() {
|
| + metrics.recordUserAction('SuggestApps.ShowDialog');
|
| + },
|
| +
|
| + startLoad: function() {
|
| + metrics.startInterval('SuggestApps.LoadTime');
|
| + },
|
| +
|
| + finishLoad: function() {
|
| + metrics.recordInterval('SuggestApps.LoadTime');
|
| + },
|
| +});
|
|
|