| 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..310e638523b993c92057b085262c60fcd5c02d4e
|
| --- /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;
|
| + 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;
|
|
|