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

Side by Side Diff: extensions/renderer/resources/utils.js

Issue 481853002: Add support for asynchronously loading modules from the background page. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 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 | « extensions/renderer/resources/serial_custom_bindings.js ('k') | 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 var createClassWrapper = requireNative('utils').createClassWrapper; 5 var createClassWrapper = requireNative('utils').createClassWrapper;
6 var nativeDeepCopy = requireNative('utils').deepCopy; 6 var nativeDeepCopy = requireNative('utils').deepCopy;
7 var schemaRegistry = requireNative('schema_registry'); 7 var schemaRegistry = requireNative('schema_registry');
8 var CHECK = requireNative('logging').CHECK; 8 var CHECK = requireNative('logging').CHECK;
9 var WARNING = requireNative('logging').WARNING; 9 var WARNING = requireNative('logging').WARNING;
10 var context = requireNative('v8_context');
10 11
11 /** 12 /**
12 * An object forEach. Calls |f| with each (key, value) pair of |obj|, using 13 * An object forEach. Calls |f| with each (key, value) pair of |obj|, using
13 * |self| as the target. 14 * |self| as the target.
14 * @param {Object} obj The object to iterate over. 15 * @param {Object} obj The object to iterate over.
15 * @param {function} f The function to call in each iteration. 16 * @param {function} f The function to call in each iteration.
16 * @param {Object} self The object to use as |this| in each function call. 17 * @param {Object} self The object to use as |this| in each function call.
17 */ 18 */
18 function forEach(obj, f, self) { 19 function forEach(obj, f, self) {
19 for (var key in obj) { 20 for (var key in obj) {
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 } 127 }
127 128
128 /** 129 /**
129 * Returns a deep copy of |value|. The copy will have no references to nested 130 * Returns a deep copy of |value|. The copy will have no references to nested
130 * values of |value|. 131 * values of |value|.
131 */ 132 */
132 function deepCopy(value) { 133 function deepCopy(value) {
133 return nativeDeepCopy(value); 134 return nativeDeepCopy(value);
134 } 135 }
135 136
137 /**
138 * Create an async proxy for the resolved value of |targetPromise|. The returned
139 * object will contain a function for each name in |functionNames|. Calling this
140 * function will result in a call to the corresponding function on the resolved
141 * value of |targetPromise| and returns a promise to the result of that call.
142 */
143 function createAsyncProxy(targetPromise, functionNames) {
144 var functionProxies = {};
145 $Array.forEach(functionNames, function(name) {
146 functionProxies[name] = function() {
147 var args = arguments;
148 return targetPromise.then(function(target) {
149 return $Function.apply(target[name], target, args);
150 });
151 };
152 });
153 return functionProxies;
154 }
155
156 /**
157 * Asynchronously require a module from the background page, loading the
158 * background page if necessary.
159 */
160 function requireAsyncFromBackgroundPage(moduleName) {
161 return new Promise(function(resolve, reject) {
162 chrome.runtime.getBackgroundPage(resolve);
not at google - send to devlin 2014/08/18 21:22:11 Promise is neat, but strictly speaking you need to
Sam McNally 2014/08/19 01:44:56 Done. I'd prefer to keep requireAsyncFromBackgroun
163 }).then(function(backgroundPage) {
164 if (!backgroundPage)
165 backgroundPage = window;
166 return context.GetModuleSystem(backgroundPage).requireAsync(moduleName);
167 }).catch(function(e) {
168 return requireAsync(moduleName);
169 });
170 }
171
136 exports.forEach = forEach; 172 exports.forEach = forEach;
137 exports.loadTypeSchema = loadTypeSchema; 173 exports.loadTypeSchema = loadTypeSchema;
138 exports.lookup = lookup; 174 exports.lookup = lookup;
139 exports.expose = expose; 175 exports.expose = expose;
140 exports.deepCopy = deepCopy; 176 exports.deepCopy = deepCopy;
177 exports.createAsyncProxy = createAsyncProxy;
178 exports.requireAsyncFromBackgroundPage = requireAsyncFromBackgroundPage;
OLDNEW
« no previous file with comments | « extensions/renderer/resources/serial_custom_bindings.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698