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

Side by Side Diff: chrome/renderer/resources/extensions/webstore_custom_bindings.js

Issue 2820723002: [Extensions Bindings] Update webstore custom bindings (Closed)
Patch Set: . 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 var onInstallStageChanged;
10 var onDownloadProgress;
9 11
10 function Installer() { 12 function Installer() {
11 this._pendingInstall = null; 13 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});
16 } 14 }
17 15
18 Installer.prototype.install = function(url, onSuccess, onFailure) { 16 Installer.prototype.install = function(url, onSuccess, onFailure) {
19 if (this._pendingInstall) 17 if (this._pendingInstall)
20 throw new Error('A Chrome Web Store installation is already pending.'); 18 throw new Error('A Chrome Web Store installation is already pending.');
21 if (url !== undefined && typeof(url) !== 'string') { 19
20 // With native bindings, these calls go through argument validation, which
21 // sets optional/missing arguments to null. The native webstore bindings
22 // expect either present or undefined, so transform null to undefined.
23 if (url === null)
24 url = undefined;
25 if (onSuccess === null)
26 onSuccess = undefined;
27 if (onFailure === null)
28 onFailure = undefined;
29
30 if (url !== undefined && typeof url !== 'string') {
22 throw new Error( 31 throw new Error(
23 'The Chrome Web Store item link URL parameter must be a string.'); 32 'The Chrome Web Store item link URL parameter must be a string.');
24 } 33 }
25 if (onSuccess !== undefined && typeof(onSuccess) !== 'function') 34 if (onSuccess !== undefined && typeof onSuccess !== 'function') {
26 throw new Error('The success callback parameter must be a function.'); 35 throw new Error('The success callback parameter must be a function.');
27 if (onFailure !== undefined && typeof(onFailure) !== 'function') 36 }
37 if (onFailure !== undefined && typeof onFailure !== 'function') {
28 throw new Error('The failure callback parameter must be a function.'); 38 throw new Error('The failure callback parameter must be a function.');
39 }
29 40
30 // Since we call Install() with a bool for if we have listeners, listeners 41 // Since we call Install() with a bool for if we have listeners, listeners
31 // must be set prior to the inline installation starting (this is also 42 // must be set prior to the inline installation starting (this is also
32 // noted in the Event documentation in 43 // noted in the Event documentation in
33 // chrome/common/extensions/api/webstore.json). 44 // chrome/common/extensions/api/webstore.json).
34 var installId = webstoreNatives.Install( 45 var installId = webstoreNatives.Install(
35 this.onInstallStageChanged.hasListeners(), 46 onInstallStageChanged.hasListeners(),
36 this.onDownloadProgress.hasListeners(), 47 onDownloadProgress.hasListeners(),
37 url, 48 url,
38 onSuccess, 49 onSuccess,
39 onFailure); 50 onFailure);
40 if (installId !== undefined) { 51 if (installId !== undefined) {
41 this._pendingInstall = { 52 this._pendingInstall = {
42 installId: installId, 53 installId: installId,
43 onSuccess: onSuccess, 54 onSuccess: onSuccess,
44 onFailure: onFailure 55 onFailure: onFailure
45 }; 56 };
46 } 57 }
(...skipping 14 matching lines...) Expand all
61 pendingInstall.onFailure(error, resultCode); 72 pendingInstall.onFailure(error, resultCode);
62 } catch (e) { 73 } catch (e) {
63 console.error('Exception in chrome.webstore.install response handler: ' + 74 console.error('Exception in chrome.webstore.install response handler: ' +
64 e.stack); 75 e.stack);
65 } finally { 76 } finally {
66 this._pendingInstall = null; 77 this._pendingInstall = null;
67 } 78 }
68 }; 79 };
69 80
70 Installer.prototype.onInstallStageChanged = function(installStage) { 81 Installer.prototype.onInstallStageChanged = function(installStage) {
71 this.onInstallStageChanged.dispatch(installStage); 82 onInstallStageChanged.dispatch(installStage);
72 }; 83 };
73 84
74 Installer.prototype.onDownloadProgress = function(progress) { 85 Installer.prototype.onDownloadProgress = function(progress) {
75 this.onDownloadProgress.dispatch(progress); 86 onDownloadProgress.dispatch(progress);
76 }; 87 };
77 88
78 var installer = new Installer(); 89 var installer = new Installer();
79 90
80 var chromeWebstore = {
81 install: function (url, onSuccess, onFailure) {
82 installer.install(url, onSuccess, onFailure);
83 },
84 onInstallStageChanged: installer.onInstallStageChanged,
85 onDownloadProgress: installer.onDownloadProgress
86 };
87 91
88 exports.$set('binding', chromeWebstore); 92 if (apiBridge) {
93 apiBridge.registerCustomHook(function(api) {
94 var apiFunctions = api.apiFunctions;
lazyboy 2017/04/17 20:48:04 Unused?
Devlin 2017/04/19 01:07:42 Whoops! Removed.
95 api.apiFunctions.setHandleRequest('install',
96 function(url, onSuccess, onFailure) {
97 installer.install(url, onSuccess, onFailure);
98 });
99
100 onInstallStageChanged = api.compiledApi.onInstallStageChanged;
101 onDownloadProgress = api.compiledApi.onDownloadProgress;
102 });
103 } else {
104 var Event = require('event_bindings').Event;
105 onInstallStageChanged =
106 new Event(null, [{name: 'stage', type: 'string'}], {unmanaged: true});
107 onDownloadProgress =
108 new Event(null, [{name: 'progress', type: 'number'}], {unmanaged: true});
109
110 var chromeWebstore = {
111 install: function (url, onSuccess, onFailure) {
112 installer.install(url, onSuccess, onFailure);
113 },
114 onInstallStageChanged: onInstallStageChanged,
115 onDownloadProgress: onDownloadProgress,
116 };
117 exports.$set('binding', chromeWebstore);
118 }
89 119
90 // Called by webstore_bindings.cc. 120 // Called by webstore_bindings.cc.
91 exports.onInstallResponse = 121 exports.$set('onInstallResponse',
92 Installer.prototype.onInstallResponse.bind(installer); 122 $Function.bind(Installer.prototype.onInstallResponse, installer));
93 exports.onInstallStageChanged = 123 exports.$set('onInstallStageChanged',
94 Installer.prototype.onInstallStageChanged.bind(installer); 124 $Function.bind(Installer.prototype.onInstallStageChanged,
95 exports.onDownloadProgress = 125 installer));
96 Installer.prototype.onDownloadProgress.bind(installer); 126 exports.$set('onDownloadProgress',
127 $Function.bind(Installer.prototype.onDownloadProgress, installer));
OLDNEW
« 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