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

Unified Diff: ui/file_manager/file_manager/foreground/js/cws_widget_container.js

Issue 1091943002: Use delegate object for chrome API calls in cws_widget_container (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 5 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: ui/file_manager/file_manager/foreground/js/cws_widget_container.js
diff --git a/ui/file_manager/file_manager/foreground/js/cws_widget_container.js b/ui/file_manager/file_manager/foreground/js/cws_widget_container.js
index 9a468232715c741defce1d5251bad2578d00ea58..9a3af1697d271e8b662a1a2acc79c69c92f6fedf 100644
--- a/ui/file_manager/file_manager/foreground/js/cws_widget_container.js
+++ b/ui/file_manager/file_manager/foreground/js/cws_widget_container.js
@@ -45,10 +45,19 @@ var CWS_WIDGET_ORIGIN = 'https://clients5.google.com';
*
* @param {!HTMLDocument} document The document to contain this container.
* @param {!HTMLElement} parentNode Node to be parent for this container.
+ * @param {!CWSWidgetContainer.PlatformDelegate} delegate Delegate for accessing
+ * Chrome platform APIs.
* @param {!SuggestAppDialogState} state Static state of suggest app dialog.
* @constructor
*/
-function CWSWidgetContainer(document, parentNode, state) {
+function CWSWidgetContainer(document, parentNode, delegate, state) {
+ /** @private {!CWSWidgetContainer.PlatformDelegate} */
+ this.delegate_ = delegate;
+
+ /** @private {!CWSWidgetContainer.MetricsRecorder} */
+ this.metricsRecorder_ =
+ new CWSWidgetContainer.MetricsRecorder(delegate.metricsImpl);
+
/**
* The document that will contain the container.
* @const {!HTMLDocument}
@@ -117,7 +126,7 @@ function CWSWidgetContainer(document, parentNode, state) {
*/
var webstoreButtonLabel = this.document_.createElement('span');
webstoreButtonLabel.classList.add('cws-widget-webstore-button-label');
- webstoreButtonLabel.textContent = str('SUGGEST_DIALOG_LINK_TO_WEBSTORE');
+ webstoreButtonLabel.textContent = this.delegate_.strings.LINK_TO_WEBSTORE;
this.webstoreButton_.appendChild(webstoreButtonLabel);
this.webstoreButton_.addEventListener(
@@ -209,6 +218,40 @@ function CWSWidgetContainer(document, parentNode, state) {
}
/**
+ * Strings required by the widget container.
+ * @typedef {{
+ * UI_LOCALE: string,
+ * LINK_TO_WEBSTORE: string,
+ * INSTALLATION_FAILED_MESSAGE: string
+ * }}
+ */
+CWSWidgetContainer.Strings;
+
+/**
+ * Functions for reporting metrics for the widget.
+ * @typedef {{
+ * recordEnum: function(string, number, number),
+ * recordUserAction: function(string),
+ * startInterval: function(string),
+ * recordInterval: function(string)
+ * }}
+ */
+CWSWidgetContainer.MetricsImpl;
+
+/**
+ * Type for delegate used by CWSWidgetContainer component to access Chrome
+ * platform APIs.
+ * @typedef {{
+ * strings: !CWSWidgetContainer.Strings,
+ * metricsImpl: !CWSWidgetContainer.MetricsImpl,
+ * installWebstoreItem: function(string, function(?string)),
+ * getInstalledItems: function(function(?Array<!string>)),
+ * requestWebstoreAccessToken: function(function(?string))
+ * }}
+ */
+CWSWidgetContainer.PlatformDelegate;
+
+/**
* @enum {string}
* @private
*/
@@ -293,15 +336,16 @@ CWSWidgetContainer.prototype.createTokenGetter_ = function() {
}
// Fetch or update the access token.
- chrome.fileManagerPrivate.requestWebStoreAccessToken(
+ this.delegate_.requestWebstoreAccessToken(
+ /** @param {?string} accessToken The requested token. Null on error. */
function(accessToken) {
- if (chrome.runtime.lastError) {
- reject('Error retriveing Web Store access token: ' +
- chrome.runtime.lastError.message);
+ if (!accessToken) {
+ reject('Error retriveing Web Store access token.');
+ return;
}
resolve(accessToken)
});
- });
+ }.bind(this));
};
/**
@@ -323,8 +367,8 @@ CWSWidgetContainer.prototype.ready = function() {
return;
}
- CWSWidgetContainer.Metrics.recordShowDialog();
- CWSWidgetContainer.Metrics.startLoad();
+ this.metricsRecorder_.recordShowDialog();
+ this.metricsRecorder_.startLoad();
this.state_ = CWSWidgetContainer.State.GETTING_ACCESS_TOKEN;
@@ -399,7 +443,8 @@ CWSWidgetContainer.prototype.start = function(options, webStoreUrl) {
WEBVIEW_HEIGHT,
this.widgetUrl_,
this.widgetOrigin_,
- this.options_);
+ this.options_,
+ this.delegate_);
this.webviewClient_.addEventListener(CWSContainerClient.Events.LOADED,
this.onWidgetLoaded_.bind(this));
this.webviewClient_.addEventListener(CWSContainerClient.Events.LOAD_FAILED,
@@ -447,9 +492,9 @@ CWSWidgetContainer.prototype.onWebstoreLinkKeyDown_ = function(e) {
* @private
*/
CWSWidgetContainer.prototype.onWidgetLoaded_ = function(event) {
- CWSWidgetContainer.Metrics.finishLoad();
- CWSWidgetContainer.Metrics.recordLoad(
- CWSWidgetContainer.Metrics.LOAD.SUCCEEDED);
+ this.metricsRecorder_.finishLoad();
+ this.metricsRecorder_.recordLoad(
+ CWSWidgetContainer.MetricsRecorder.LOAD.SUCCEEDED);
this.state_ = CWSWidgetContainer.State.INITIALIZED;
@@ -463,7 +508,8 @@ CWSWidgetContainer.prototype.onWidgetLoaded_ = function(event) {
* @private
*/
CWSWidgetContainer.prototype.onWidgetLoadFailed_ = function(event) {
- CWSWidgetContainer.Metrics.recordLoad(CWSWidgetContainer.Metrics.LOAD.FAILED);
+ this.metricsRecorder_.recordLoad(
+ CWSWidgetContainer.MetricsRecorder.LOAD.FAILED);
this.spinnerLayerController_.setVisible(false);
this.state_ = CWSWidgetContainer.State.INITIALIZE_FAILED_CLOSING;
@@ -489,7 +535,7 @@ CWSWidgetContainer.prototype.onInstallRequest_ = function(e) {
var itemId = e.itemId;
this.installingItemId_ = itemId;
- this.appInstaller_ = new AppInstaller(itemId);
+ this.appInstaller_ = new AppInstaller(itemId, this.delegate_);
this.appInstaller_.install(this.onItemInstalled_.bind(this));
this.spinnerLayerController_.setVisible(true);
@@ -531,20 +577,20 @@ CWSWidgetContainer.prototype.onItemInstalled_ = function(result, error) {
switch (result) {
case AppInstaller.Result.SUCCESS:
- CWSWidgetContainer.Metrics.recordInstall(
- CWSWidgetContainer.Metrics.INSTALL.SUCCEEDED);
+ this.metricsRecorder_.recordInstall(
+ CWSWidgetContainer.MetricsRecorder.INSTALL.SUCCEEDED);
// Wait for the widget webview container to dispatch INSTALL_DONE.
break;
case AppInstaller.Result.CANCELLED:
- CWSWidgetContainer.Metrics.recordInstall(
- CWSWidgetContainer.Metrics.INSTALL.CANCELLED);
+ this.metricsRecorder_.recordInstall(
+ CWSWidgetContainer.MetricsRecorder.INSTALL.CANCELLED);
// User cancelled the installation. Do nothing.
break;
case AppInstaller.Result.ERROR:
- CWSWidgetContainer.Metrics.recordInstall(
- CWSWidgetContainer.Metrics.INSTALL.FAILED);
+ this.metricsRecorder_.recordInstall(
+ CWSWidgetContainer.MetricsRecorder.INSTALL.FAILED);
this.errorDialog_.show(
- str('SUGGEST_DIALOG_INSTALLATION_FAILED'),
+ this.delegate_.strings.INSTALLATION_FAILED_MESSAGE,
null,
null,
null);
@@ -585,8 +631,8 @@ CWSWidgetContainer.prototype.finalizeAndGetResult = function() {
case CWSWidgetContainer.State.GETTING_ACCESS_TOKEN:
case CWSWidgetContainer.State.ACCESS_TOKEN_READY:
case CWSWidgetContainer.State.INITIALIZING:
- CWSWidgetContainer.Metrics.recordLoad(
- CWSWidgetContainer.Metrics.LOAD.CANCELLED);
+ this.metricsRecorder_.recordLoad(
+ CWSWidgetContainer.MetricsRecorder.LOAD.CANCELLED);
this.state_ = CWSWidgetContainer.State.CANCELED_CLOSING;
break;
case CWSWidgetContainer.State.WAITING_FOR_CONFIRMATION:
@@ -613,26 +659,26 @@ CWSWidgetContainer.prototype.finalizeAndGetResult = function() {
switch (this.state_) {
case CWSWidgetContainer.State.INSTALLED_CLOSING:
result = CWSWidgetContainer.Result.INSTALL_SUCCESSFUL;
- CWSWidgetContainer.Metrics.recordCloseDialog(
- CWSWidgetContainer.Metrics.CLOSE_DIALOG.ITEM_INSTALLED);
+ this.metricsRecorder_.recordCloseDialog(
+ CWSWidgetContainer.MetricsRecorder.CLOSE_DIALOG.ITEM_INSTALLED);
break;
case CWSWidgetContainer.State.INITIALIZE_FAILED_CLOSING:
result = CWSWidgetContainer.Result.FAILED;
break;
case CWSWidgetContainer.State.CANCELED_CLOSING:
result = CWSWidgetContainer.Result.USER_CANCEL;
- CWSWidgetContainer.Metrics.recordCloseDialog(
- CWSWidgetContainer.Metrics.CLOSE_DIALOG.USER_CANCELLED);
+ this.metricsRecorder_.recordCloseDialog(
+ CWSWidgetContainer.MetricsRecorder.CLOSE_DIALOG.USER_CANCELLED);
break;
case CWSWidgetContainer.State.OPENING_WEBSTORE_CLOSING:
result = CWSWidgetContainer.Result.WEBSTORE_LINK_OPENED;
- CWSWidgetContainer.Metrics.recordCloseDialog(
- CWSWidgetContainer.Metrics.CLOSE_DIALOG.WEBSTORE_LINK_OPENED);
+ this.metricsRecorder_.recordCloseDialog(
+ CWSWidgetContainer.MetricsRecorder.CLOSE_DIALOG.WEBSTORE_LINK_OPENED);
break;
default:
result = CWSWidgetContainer.Result.USER_CANCEL;
- CWSWidgetContainer.Metrics.recordCloseDialog(
- CWSWidgetContainer.Metrics.CLOSE_DIALOG.UNKNOWN_ERROR);
+ this.metricsRecorder_.recordCloseDialog(
+ CWSWidgetContainer.MetricsRecorder.CLOSE_DIALOG.UNKNOWN_ERROR);
}
this.state_ = CWSWidgetContainer.State.UNINITIALIZED;
@@ -812,14 +858,19 @@ CWSWidgetContainer.SpinnerLayerController.prototype.setVisible =
/**
* Utility methods and constants to record histograms.
+ * @param {!CWSWidgetContainer.MetricsImpl} metricsImpl
+ * @constructor
*/
-CWSWidgetContainer.Metrics = {};
+CWSWidgetContainer.MetricsRecorder = function(metricsImpl) {
+ /** @private {!CWSWidgetContainer.MetricsImpl} */
+ this.metricsImpl_ = metricsImpl;
+};
/**
* @enum {number}
* @const
*/
-CWSWidgetContainer.Metrics.LOAD = {
+CWSWidgetContainer.MetricsRecorder.LOAD = {
SUCCEEDED: 0,
CANCELLED: 1,
FAILED: 2,
@@ -829,7 +880,7 @@ CWSWidgetContainer.Metrics.LOAD = {
* @enum {number}
* @const
*/
-CWSWidgetContainer.Metrics.CLOSE_DIALOG = {
+CWSWidgetContainer.MetricsRecorder.CLOSE_DIALOG = {
UNKNOWN_ERROR: 0,
ITEM_INSTALLED: 1,
USER_CANCELLED: 2,
@@ -840,7 +891,7 @@ CWSWidgetContainer.Metrics.CLOSE_DIALOG = {
* @enum {number}
* @const
*/
-CWSWidgetContainer.Metrics.INSTALL = {
+CWSWidgetContainer.MetricsRecorder.INSTALL = {
SUCCEEDED: 0,
CANCELLED: 1,
FAILED: 2,
@@ -848,39 +899,40 @@ CWSWidgetContainer.Metrics.INSTALL = {
/**
* @param {number} result Result of load, which must be defined in
- * CWSWidgetContainer.Metrics.LOAD.
+ * CWSWidgetContainer.MetricsRecorder.LOAD.
*/
-CWSWidgetContainer.Metrics.recordLoad = function(result) {
+CWSWidgetContainer.MetricsRecorder.prototype.recordLoad = function(result) {
if (0 <= result && result < 3)
- metrics.recordEnum('SuggestApps.Load', result, 3);
+ this.metricsImpl_.recordEnum('SuggestApps.Load', result, 3);
};
/**
* @param {number} reason Reason of closing dialog, which must be defined in
- * CWSWidgetContainer.Metrics.CLOSE_DIALOG.
+ * CWSWidgetContainer.MetricsRecorder.CLOSE_DIALOG.
*/
-CWSWidgetContainer.Metrics.recordCloseDialog = function(reason) {
+CWSWidgetContainer.MetricsRecorder.prototype.recordCloseDialog = function(
+ reason) {
if (0 <= reason && reason < 4)
- metrics.recordEnum('SuggestApps.CloseDialog', reason, 4);
+ this.metricsImpl_.recordEnum('SuggestApps.CloseDialog', reason, 4);
};
/**
* @param {number} result Result of installation, which must be defined in
- * CWSWidgetContainer.Metrics.INSTALL.
+ * CWSWidgetContainer.MetricsRecorder.INSTALL.
*/
-CWSWidgetContainer.Metrics.recordInstall = function(result) {
+CWSWidgetContainer.MetricsRecorder.prototype.recordInstall = function(result) {
if (0 <= result && result < 3)
- metrics.recordEnum('SuggestApps.Install', result, 3);
+ this.metricsImpl_.recordEnum('SuggestApps.Install', result, 3);
};
-CWSWidgetContainer.Metrics.recordShowDialog = function() {
- metrics.recordUserAction('SuggestApps.ShowDialog');
+CWSWidgetContainer.MetricsRecorder.prototype.recordShowDialog = function() {
+ this.metricsImpl_.recordUserAction('SuggestApps.ShowDialog');
};
-CWSWidgetContainer.Metrics.startLoad = function() {
- metrics.startInterval('SuggestApps.LoadTime');
+CWSWidgetContainer.MetricsRecorder.prototype.startLoad = function() {
+ this.metricsImpl_.startInterval('SuggestApps.LoadTime');
};
-CWSWidgetContainer.Metrics.finishLoad = function() {
- metrics.recordInterval('SuggestApps.LoadTime');
+CWSWidgetContainer.MetricsRecorder.prototype.finishLoad = function() {
+ this.metricsImpl_.recordInterval('SuggestApps.LoadTime');
};

Powered by Google App Engine
This is Rietveld 408576698