Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Custom binding for the webstore API. | 5 // Custom binding for the webstore API. |
| 6 | 6 |
| 7 var webstoreNatives = requireNative('webstore'); | 7 var webstoreNatives = requireNative('webstore'); |
| 8 var Event = require('event_bindings').Event; | |
| 8 | 9 |
| 9 function Installer() { | 10 function Installer() { |
| 10 this._pendingInstall = null; | 11 this._pendingInstall = null; |
| 12 this.onInstallStageChanged = | |
| 13 new Event(null, [{name: 'stage', type: 'string'}], {unmanaged: true}); | |
| 14 this.onDownloadProgress = | |
| 15 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.
| |
| 11 } | 16 } |
| 12 | 17 |
| 13 Installer.prototype.install = function(url, onSuccess, onFailure) { | 18 Installer.prototype.install = function(url, onSuccess, onFailure) { |
| 14 if (this._pendingInstall) | 19 if (this._pendingInstall) |
| 15 throw 'A Chrome Web Store installation is already pending.'; | 20 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
| |
| 16 var installId = webstoreNatives.Install(url, onSuccess, onFailure); | 21 if (url !== undefined && typeof(url) !== 'string') |
| 22 throw 'The Chrome Web Store item link URL parameter must be a string.'; | |
| 23 if (onSuccess !== undefined && typeof(onSuccess) !== 'function') | |
| 24 throw 'The success callback parameter must be a function.'; | |
| 25 if (onFailure !== undefined && typeof(onFailure) !== 'function') | |
| 26 throw 'The failure callback parameter must be a function.'; | |
| 27 | |
| 28 var installId = webstoreNatives.Install( | |
| 29 this.onInstallStageChanged.hasListeners(), | |
| 30 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
| |
| 31 url, | |
| 32 onSuccess, | |
| 33 onFailure); | |
| 17 if (installId !== undefined) { | 34 if (installId !== undefined) { |
| 18 this._pendingInstall = { | 35 this._pendingInstall = { |
| 19 installId: installId, | 36 installId: installId, |
| 20 onSuccess: onSuccess, | 37 onSuccess: onSuccess, |
| 21 onFailure: onFailure | 38 onFailure: onFailure |
| 22 }; | 39 }; |
| 23 } | 40 } |
| 24 }; | 41 }; |
| 25 | 42 |
| 26 Installer.prototype.onInstallResponse = function(installId, success, error) { | 43 Installer.prototype.onInstallResponse = function(installId, success, error) { |
| 27 var pendingInstall = this._pendingInstall; | 44 var pendingInstall = this._pendingInstall; |
| 28 if (!pendingInstall || pendingInstall.installId != installId) { | 45 if (!pendingInstall || pendingInstall.installId != installId) { |
| 29 // TODO(kalman): should this be an error? | 46 // TODO(kalman): should this be an error? |
| 30 return; | 47 return; |
| 31 } | 48 } |
| 32 | 49 |
| 33 try { | 50 try { |
| 34 if (success && pendingInstall.onSuccess) | 51 if (success && pendingInstall.onSuccess) |
| 35 pendingInstall.onSuccess(); | 52 pendingInstall.onSuccess(); |
| 36 else if (!success && pendingInstall.onFailure) | 53 else if (!success && pendingInstall.onFailure) |
| 37 pendingInstall.onFailure(error); | 54 pendingInstall.onFailure(error); |
| 38 } catch (e) { | 55 } catch (e) { |
| 39 console.error('Exception in chrome.webstore.install response handler: ' + | 56 console.error('Exception in chrome.webstore.install response handler: ' + |
| 40 e.stack); | 57 e.stack); |
| 41 } finally { | 58 } finally { |
| 42 this._pendingInstall = null; | 59 this._pendingInstall = null; |
| 43 } | 60 } |
| 44 }; | 61 }; |
| 45 | 62 |
| 63 Installer.prototype.onInstallStageChanged = function(installStage) { | |
| 64 this.onInstallStageChanged.dispatch(installStage); | |
| 65 }; | |
| 66 | |
| 67 Installer.prototype.onDownloadProgress = function(progress) { | |
| 68 this.onDownloadProgress.dispatch(progress); | |
| 69 }; | |
| 70 | |
| 46 var installer = new Installer(); | 71 var installer = new Installer(); |
| 47 | 72 |
| 48 var chromeWebstore = { | 73 var chromeWebstore = { |
| 49 install: function install(url, onSuccess, onFailure) { | 74 install: function (url, onSuccess, onFailure) { |
| 50 installer.install(url, onSuccess, onFailure); | 75 installer.install(url, onSuccess, onFailure); |
| 51 } | 76 }, |
| 77 onInstallStageChanged: installer.onInstallStageChanged, | |
| 78 onDownloadProgress: installer.onDownloadProgress | |
| 52 }; | 79 }; |
| 53 | 80 |
| 54 // Called by webstore_binding.cc. | 81 // This must match the name in InstallWebstoreBindings in |
| 55 function onInstallResponse(installId, success, error) { | |
| 56 installer.onInstallResponse(installId, success, error); | |
| 57 } | |
| 58 | |
| 59 // These must match the names in InstallWebstorebinding in | |
| 60 // chrome/renderer/extensions/dispatcher.cc. | 82 // chrome/renderer/extensions/dispatcher.cc. |
| 61 exports.chromeWebstore = chromeWebstore; | 83 exports.chromeWebstore = chromeWebstore; |
| 62 exports.onInstallResponse = onInstallResponse; | 84 |
| 85 // 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.
| |
| 86 exports.onInstallResponse = | |
| 87 Installer.prototype.onInstallResponse.bind(installer); | |
| 88 exports.onInstallStageChanged = | |
| 89 Installer.prototype.onInstallStageChanged.bind(installer); | |
| 90 exports.onDownloadProgress = | |
| 91 Installer.prototype.onDownloadProgress.bind(installer); | |
| OLD | NEW |