Chromium Code Reviews| Index: chrome/renderer/resources/extensions/pepper_request.js |
| diff --git a/chrome/renderer/resources/extensions/pepper_request.js b/chrome/renderer/resources/extensions/pepper_request.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..566ffd74a4f073d1483e9ec25927979fb8c2efa6 |
| --- /dev/null |
| +++ b/chrome/renderer/resources/extensions/pepper_request.js |
| @@ -0,0 +1,54 @@ |
| +// Copyright 2013 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +var SendResponse = requireNative('pepper_request_natives').SendResponse; |
| +var GetAvailability = requireNative('v8_context').GetAvailability; |
| +var utils = require('utils'); |
| +var schemaRegistry = requireNative('schema_registry'); |
| + |
| +function takesCallback(targetName) { |
| + var parts = $String.split(targetName, '.'); |
| + var schemaName = $Array.join($Array.slice(parts, 0, parts.length - 1), '.'); |
| + var functionName = parts[parts.length - 1]; |
| + var functions = schemaRegistry.GetSchema(schemaName).functions; |
| + var parameters = utils.lookup(functions, "name", functionName).parameters; |
|
not at google - send to devlin
2013/12/10 22:22:16
here and below use ' not "
Sam McNally
2013/12/10 23:19:09
Done.
|
| + return parameters.length > 0 && |
| + parameters[parameters.length - 1].type == "function"; |
| +} |
| + |
| +function resolveName(name) { |
| + var availability = GetAvailability(name); |
| + if (!availability.is_available) |
| + throw Error(availability.message); |
| + var item = chrome; |
| + var nameComponents = $String.split(name, '.'); |
| + for (var i = 0; i < nameComponents.length; i++) { |
| + item = item[nameComponents[i]]; |
| + } |
| + return item; |
| +} |
| + |
| +function startRequest(targetName, requestId) { |
| + var args = $Array.slice(arguments, 2); |
| + try { |
| + var hasCallback = takesCallback(targetName); |
| + if (hasCallback) { |
| + args.push(function() { |
| + var error = null; |
| + if (chrome.runtime.lastError) |
| + error = chrome.runtime.lastError.message; |
| + SendResponse(requestId, $Array.slice(arguments), error); |
| + }); |
| + } |
| + var target = resolveName(targetName); |
| + var result = $Function.apply(target, null, args); |
| + if (!hasCallback) |
| + SendResponse(requestId, [result], null); |
| + } catch (e) { |
| + // TODO(sammc): Catch this from C++. |
| + return e.message; |
| + } |
| +} |
| + |
| +exports.startRequest = startRequest; |