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

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

Issue 2820723002: [Extensions Bindings] Update webstore custom bindings (Closed)
Patch Set: Rebase Created 3 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 89b11cce5e41ccdcc2e59b2c6cace0b2c405c3de..99fae6ba5769f7a3eff9f864134a01026c5740ea 100644
--- a/chrome/renderer/resources/extensions/webstore_custom_bindings.js
+++ b/chrome/renderer/resources/extensions/webstore_custom_bindings.js
@@ -5,35 +5,46 @@
// Custom binding for the webstore API.
var webstoreNatives = requireNative('webstore');
-var Event = require('event_bindings').Event;
+
+var onInstallStageChanged;
+var onDownloadProgress;
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});
}
Installer.prototype.install = function(url, onSuccess, onFailure) {
if (this._pendingInstall)
throw new Error('A Chrome Web Store installation is already pending.');
- if (url !== undefined && typeof(url) !== 'string') {
+
+ // With native bindings, these calls go through argument validation, which
+ // sets optional/missing arguments to null. The native webstore bindings
+ // expect either present or undefined, so transform null to undefined.
+ if (url === null)
+ url = undefined;
+ if (onSuccess === null)
+ onSuccess = undefined;
+ if (onFailure === null)
+ onFailure = undefined;
+
+ if (url !== undefined && typeof url !== 'string') {
throw new Error(
'The Chrome Web Store item link URL parameter must be a string.');
}
- if (onSuccess !== undefined && typeof(onSuccess) !== 'function')
+ if (onSuccess !== undefined && typeof onSuccess !== 'function') {
throw new Error('The success callback parameter must be a function.');
- if (onFailure !== undefined && typeof(onFailure) !== 'function')
+ }
+ if (onFailure !== undefined && typeof onFailure !== 'function') {
throw new Error('The failure callback parameter must be a function.');
+ }
// Since we call Install() with a bool for if we have listeners, listeners
// must be set prior to the inline installation starting (this is also
// noted in the Event documentation in
// chrome/common/extensions/api/webstore.json).
var installId = webstoreNatives.Install(
- this.onInstallStageChanged.hasListeners(),
- this.onDownloadProgress.hasListeners(),
+ onInstallStageChanged.hasListeners(),
+ onDownloadProgress.hasListeners(),
url,
onSuccess,
onFailure);
@@ -68,29 +79,48 @@ Installer.prototype.onInstallResponse =
};
Installer.prototype.onInstallStageChanged = function(installStage) {
- this.onInstallStageChanged.dispatch(installStage);
+ onInstallStageChanged.dispatch(installStage);
};
Installer.prototype.onDownloadProgress = function(progress) {
- this.onDownloadProgress.dispatch(progress);
+ onDownloadProgress.dispatch(progress);
};
var installer = new Installer();
-var chromeWebstore = {
- install: function (url, onSuccess, onFailure) {
- installer.install(url, onSuccess, onFailure);
- },
- onInstallStageChanged: installer.onInstallStageChanged,
- onDownloadProgress: installer.onDownloadProgress
-};
-exports.$set('binding', chromeWebstore);
+if (apiBridge) {
+ apiBridge.registerCustomHook(function(api) {
+ api.apiFunctions.setHandleRequest('install',
+ function(url, onSuccess, onFailure) {
+ installer.install(url, onSuccess, onFailure);
+ });
+
+ onInstallStageChanged = api.compiledApi.onInstallStageChanged;
+ onDownloadProgress = api.compiledApi.onDownloadProgress;
+ });
+} else {
+ var Event = require('event_bindings').Event;
+ onInstallStageChanged =
+ new Event(null, [{name: 'stage', type: 'string'}], {unmanaged: true});
+ onDownloadProgress =
+ new Event(null, [{name: 'progress', type: 'number'}], {unmanaged: true});
+
+ var chromeWebstore = {
+ install: function (url, onSuccess, onFailure) {
+ installer.install(url, onSuccess, onFailure);
+ },
+ onInstallStageChanged: onInstallStageChanged,
+ onDownloadProgress: onDownloadProgress,
+ };
+ exports.$set('binding', chromeWebstore);
+}
// Called by webstore_bindings.cc.
-exports.onInstallResponse =
- Installer.prototype.onInstallResponse.bind(installer);
-exports.onInstallStageChanged =
- Installer.prototype.onInstallStageChanged.bind(installer);
-exports.onDownloadProgress =
- Installer.prototype.onDownloadProgress.bind(installer);
+exports.$set('onInstallResponse',
+ $Function.bind(Installer.prototype.onInstallResponse, installer));
+exports.$set('onInstallStageChanged',
+ $Function.bind(Installer.prototype.onInstallStageChanged,
+ installer));
+exports.$set('onDownloadProgress',
+ $Function.bind(Installer.prototype.onDownloadProgress, installer));
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698