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

Unified Diff: chrome/renderer/resources/extensions/webstore_custom_bindings.js

Issue 175263003: Add chrome.webstore API methods to allow sites to see progress of installation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use Event structure Created 6 years, 10 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: chrome/renderer/resources/extensions/webstore_custom_bindings.js
diff --git a/chrome/renderer/resources/extensions/webstore_custom_bindings.js b/chrome/renderer/resources/extensions/webstore_custom_bindings.js
index 963adaa1da3a04822a7a8bb382c33b64cb4900a3..a9b906243531a70cab565042c43ccafbf3068a68 100644
--- a/chrome/renderer/resources/extensions/webstore_custom_bindings.js
+++ b/chrome/renderer/resources/extensions/webstore_custom_bindings.js
@@ -5,15 +5,32 @@
// Custom binding for the webstore API.
var webstoreNatives = requireNative('webstore');
+var Event = require('event_bindings').Event;
function Installer() {
this._pendingInstall = null;
+ this.onInstallStageChanged =
+ new Event(null, [{name: 'stage', type: 'string'}], {unmanaged: true});
+ this.onDownloadProgress =
+ new Event(null, [{name: 'progress', type: 'number'}], {unmanaged: true});
asargent_no_longer_on_chrome 2014/03/03 18:49:08 We'll want to update the documentation for this at
Devlin 2014/03/03 21:15:13 We discussed it, but we thought that would be too
asargent_no_longer_on_chrome 2014/03/03 22:25:33 Ok, sgtm.
}
Installer.prototype.install = function(url, onSuccess, onFailure) {
if (this._pendingInstall)
throw 'A Chrome Web Store installation is already pending.';
not at google - send to devlin 2014/03/01 01:42:07 throw new Error(...) same for all the rest.
Devlin 2014/03/03 17:44:59 Done.
asargent_no_longer_on_chrome 2014/03/03 18:49:08 If developers find themselves in a situation where
Devlin 2014/03/03 21:15:13 That's a good idea, but I think it's a separate is
asargent_no_longer_on_chrome 2014/03/03 22:25:33 Maybe just log a bug for follow-up and we can have
Devlin 2014/03/03 22:49:16 Done. crbug.com/348752
- var installId = webstoreNatives.Install(url, onSuccess, onFailure);
+ if (url !== undefined && typeof(url) !== 'string')
+ throw 'The Chrome Web Store item link URL parameter must be a string.';
+ if (onSuccess !== undefined && typeof(onSuccess) !== 'function')
+ throw 'The success callback parameter must be a function.';
+ if (onFailure !== undefined && typeof(onFailure) !== 'function')
+ throw 'The failure callback parameter must be a function.';
+
+ var installId = webstoreNatives.Install(
+ this.onInstallStageChanged.hasListeners(),
+ this.onDownloadProgress.hasListeners(),
not at google - send to devlin 2014/03/01 01:42:07 make sure you document that listeners need to be a
Devlin 2014/03/03 17:44:59 Doc'd here in a comment and in the Event descripti
+ url,
+ onSuccess,
+ onFailure);
if (installId !== undefined) {
this._pendingInstall = {
installId: installId,
@@ -43,20 +60,32 @@ Installer.prototype.onInstallResponse = function(installId, success, error) {
}
};
+Installer.prototype.onInstallStageChanged = function(installStage) {
+ this.onInstallStageChanged.dispatch(installStage);
+};
+
+Installer.prototype.onDownloadProgress = function(progress) {
+ this.onDownloadProgress.dispatch(progress);
+};
+
var installer = new Installer();
var chromeWebstore = {
- install: function install(url, onSuccess, onFailure) {
+ install: function (url, onSuccess, onFailure) {
installer.install(url, onSuccess, onFailure);
- }
+ },
+ onInstallStageChanged: installer.onInstallStageChanged,
+ onDownloadProgress: installer.onDownloadProgress
};
-// Called by webstore_binding.cc.
-function onInstallResponse(installId, success, error) {
- installer.onInstallResponse(installId, success, error);
-}
-
-// These must match the names in InstallWebstorebinding in
+// This must match the name in InstallWebstoreBindings in
// chrome/renderer/extensions/dispatcher.cc.
exports.chromeWebstore = chromeWebstore;
-exports.onInstallResponse = onInstallResponse;
+
+// Called by webstore_binding.cc.
asargent_no_longer_on_chrome 2014/03/03 18:49:08 nit: I assume you meant webstore_bindings.cc ?
Devlin 2014/03/03 21:15:13 Whoops, done.
+exports.onInstallResponse =
+ Installer.prototype.onInstallResponse.bind(installer);
+exports.onInstallStageChanged =
+ Installer.prototype.onInstallStageChanged.bind(installer);
+exports.onDownloadProgress =
+ Installer.prototype.onDownloadProgress.bind(installer);

Powered by Google App Engine
This is Rietveld 408576698