diff options
Diffstat (limited to 'chromium/extensions/renderer/resources/guest_view/web_view/web_view_request_custom_bindings.js')
-rw-r--r-- | chromium/extensions/renderer/resources/guest_view/web_view/web_view_request_custom_bindings.js | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/chromium/extensions/renderer/resources/guest_view/web_view/web_view_request_custom_bindings.js b/chromium/extensions/renderer/resources/guest_view/web_view/web_view_request_custom_bindings.js new file mode 100644 index 00000000000..61b553b693f --- /dev/null +++ b/chromium/extensions/renderer/resources/guest_view/web_view/web_view_request_custom_bindings.js @@ -0,0 +1,55 @@ +// Copyright 2014 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 webViewRequest API. + +var binding = require('binding').Binding.create('webViewRequest'); + +var declarativeWebRequestSchema = + requireNative('schema_registry').GetSchema('declarativeWebRequest'); +var utils = require('utils'); +var validate = require('schemaUtils').validate; + +binding.registerCustomHook(function(api) { + var webViewRequest = api.compiledApi; + + // Returns the schema definition of type |typeId| defined in + // |declarativeWebRequestScheme.types|. + function getSchema(typeId) { + return utils.lookup(declarativeWebRequestSchema.types, + 'id', + 'declarativeWebRequest.' + typeId); + } + + // Helper function for the constructor of concrete datatypes of the + // declarative webRequest API. + // Makes sure that |this| contains the union of parameters and + // {'instanceType': 'declarativeWebRequest.' + typeId} and validates the + // generated union dictionary against the schema for |typeId|. + function setupInstance(instance, parameters, typeId) { + for (var key in parameters) { + if ($Object.hasOwnProperty(parameters, key)) { + instance[key] = parameters[key]; + } + } + + instance.instanceType = 'declarativeWebRequest.' + typeId; + var schema = getSchema(typeId); + validate([instance], [schema]); + } + + // Setup all data types for the declarative webRequest API from the schema. + for (var i = 0; i < declarativeWebRequestSchema.types.length; ++i) { + var typeSchema = declarativeWebRequestSchema.types[i]; + var typeId = typeSchema.id.replace('declarativeWebRequest.', ''); + var action = function(typeId) { + return function(parameters) { + setupInstance(this, parameters, typeId); + }; + }(typeId); + webViewRequest[typeId] = action; + } +}); + +exports.$set('binding', binding.generate()); |