diff options
Diffstat (limited to 'chromium/chrome/renderer/resources/extensions/runtime_custom_bindings.js')
-rw-r--r-- | chromium/chrome/renderer/resources/extensions/runtime_custom_bindings.js | 205 |
1 files changed, 0 insertions, 205 deletions
diff --git a/chromium/chrome/renderer/resources/extensions/runtime_custom_bindings.js b/chromium/chrome/renderer/resources/extensions/runtime_custom_bindings.js deleted file mode 100644 index add47ccc06e..00000000000 --- a/chromium/chrome/renderer/resources/extensions/runtime_custom_bindings.js +++ /dev/null @@ -1,205 +0,0 @@ -// Copyright (c) 2012 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. - -// Custom binding for the runtime API. - -var binding = require('binding').Binding.create('runtime'); - -var messaging = require('messaging'); -var runtimeNatives = requireNative('runtime'); -var unloadEvent = require('unload_event'); -var process = requireNative('process'); -var forEach = require('utils').forEach; - -var backgroundPage = window; -var backgroundRequire = require; -var contextType = process.GetContextType(); -if (contextType == 'BLESSED_EXTENSION' || - contextType == 'UNBLESSED_EXTENSION') { - var manifest = runtimeNatives.GetManifest(); - if (manifest.app && manifest.app.background) { - // Get the background page if one exists. Otherwise, default to the current - // window. - backgroundPage = runtimeNatives.GetExtensionViews(-1, 'BACKGROUND')[0]; - if (backgroundPage) { - var GetModuleSystem = requireNative('v8_context').GetModuleSystem; - backgroundRequire = GetModuleSystem(backgroundPage).require; - } else { - backgroundPage = window; - } - } -} - -// For packaged apps, all windows use the bindFileEntryCallback from the -// background page so their FileEntry objects have the background page's context -// as their own. This allows them to be used from other windows (including the -// background page) after the original window is closed. -if (window == backgroundPage) { - var lastError = require('lastError'); - var fileSystemNatives = requireNative('file_system_natives'); - var GetIsolatedFileSystem = fileSystemNatives.GetIsolatedFileSystem; - var bindDirectoryEntryCallback = function(functionName, apiFunctions) { - apiFunctions.setCustomCallback(functionName, - function(name, request, response) { - if (request.callback && response) { - var callback = request.callback; - request.callback = null; - - var fileSystemId = response.fileSystemId; - var baseName = response.baseName; - var fs = GetIsolatedFileSystem(fileSystemId); - - try { - fs.root.getDirectory(baseName, {}, callback, function(fileError) { - lastError.run('runtime.' + functionName, - 'Error getting Entry, code: ' + fileError.code, - request.stack, - callback); - }); - } catch (e) { - lastError.run('runtime.' + functionName, - 'Error: ' + e.stack, - request.stack, - callback); - } - } - }); - }; -} else { - // Force the runtime API to be loaded in the background page. Using - // backgroundPageModuleSystem.require('runtime') is insufficient as - // requireNative is only allowed while lazily loading an API. - backgroundPage.chrome.runtime; - var bindDirectoryEntryCallback = backgroundRequire( - 'runtime').bindDirectoryEntryCallback; -} - -binding.registerCustomHook(function(binding, id, contextType) { - var apiFunctions = binding.apiFunctions; - var runtime = binding.compiledApi; - - // - // Unprivileged APIs. - // - - runtime.id = id; - - apiFunctions.setHandleRequest('getManifest', function() { - return runtimeNatives.GetManifest(); - }); - - apiFunctions.setHandleRequest('getURL', function(path) { - path = String(path); - if (!path.length || path[0] != '/') - path = '/' + path; - return 'chrome-extension://' + id + path; - }); - - var sendMessageUpdateArguments = messaging.sendMessageUpdateArguments; - apiFunctions.setUpdateArgumentsPreValidate('sendMessage', - $Function.bind(sendMessageUpdateArguments, null, 'sendMessage', - true /* hasOptionsArgument */)); - apiFunctions.setUpdateArgumentsPreValidate('sendNativeMessage', - $Function.bind(sendMessageUpdateArguments, null, 'sendNativeMessage', - false /* hasOptionsArgument */)); - - apiFunctions.setHandleRequest('sendMessage', - function(targetId, message, options, responseCallback) { - var connectOptions = {name: messaging.kMessageChannel}; - forEach(options, function(k, v) { - connectOptions[k] = v; - }); - var port = runtime.connect(targetId || runtime.id, connectOptions); - messaging.sendMessageImpl(port, message, responseCallback); - }); - - apiFunctions.setHandleRequest('sendNativeMessage', - function(targetId, message, responseCallback) { - var port = runtime.connectNative(targetId); - messaging.sendMessageImpl(port, message, responseCallback); - }); - - apiFunctions.setUpdateArgumentsPreValidate('connect', function() { - // Align missing (optional) function arguments with the arguments that - // schema validation is expecting, e.g. - // runtime.connect() -> runtime.connect(null, null) - // runtime.connect({}) -> runtime.connect(null, {}) - var nextArg = 0; - - // targetId (first argument) is optional. - var targetId = null; - if (typeof(arguments[nextArg]) == 'string') - targetId = arguments[nextArg++]; - - // connectInfo (second argument) is optional. - var connectInfo = null; - if (typeof(arguments[nextArg]) == 'object') - connectInfo = arguments[nextArg++]; - - if (nextArg != arguments.length) - throw new Error('Invalid arguments to connect.'); - return [targetId, connectInfo]; - }); - - apiFunctions.setUpdateArgumentsPreValidate('connectNative', - function(appName) { - if (typeof(appName) !== 'string') { - throw new Error('Invalid arguments to connectNative.'); - } - return [appName]; - }); - - apiFunctions.setHandleRequest('connect', function(targetId, connectInfo) { - // Don't let orphaned content scripts communicate with their extension. - // http://crbug.com/168263 - if (unloadEvent.wasDispatched) - throw new Error('Error connecting to extension ' + targetId); - - if (!targetId) - targetId = runtime.id; - - var name = ''; - if (connectInfo && connectInfo.name) - name = connectInfo.name; - - var includeTlsChannelId = - !!(connectInfo && connectInfo.includeTlsChannelId); - - var portId = runtimeNatives.OpenChannelToExtension(targetId, name, - includeTlsChannelId); - if (portId >= 0) - return messaging.createPort(portId, name); - }); - - // - // Privileged APIs. - // - if (contextType != 'BLESSED_EXTENSION') - return; - - apiFunctions.setHandleRequest('connectNative', - function(nativeAppName) { - if (!unloadEvent.wasDispatched) { - var portId = runtimeNatives.OpenChannelToNativeApp(runtime.id, - nativeAppName); - if (portId >= 0) - return messaging.createPort(portId, ''); - } - throw new Error('Error connecting to native app: ' + nativeAppName); - }); - - apiFunctions.setCustomCallback('getBackgroundPage', - function(name, request, response) { - if (request.callback) { - var bg = runtimeNatives.GetExtensionViews(-1, 'BACKGROUND')[0] || null; - request.callback(bg); - } - request.callback = null; - }); - - bindDirectoryEntryCallback('getPackageDirectoryEntry', apiFunctions); -}); - -exports.bindDirectoryEntryCallback = bindDirectoryEntryCallback; -exports.binding = binding.generate(); |