| // 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.binding = binding.generate(); |