1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Custom binding for the declarativeWebRequest API. 6 7 var binding = require('binding').Binding.create('declarativeWebRequest'); 8 9 var utils = require('utils'); 10 var validate = require('schemaUtils').validate; 11 12 binding.registerCustomHook(function(api) { 13 var declarativeWebRequest = api.compiledApi; 14 15 // Returns the schema definition of type |typeId| defined in |namespace|. 16 function getSchema(typeId) { 17 return utils.lookup(api.schema.types, 18 'id', 19 'declarativeWebRequest.' + typeId); 20 } 21 22 // Helper function for the constructor of concrete datatypes of the 23 // declarative webRequest API. 24 // Makes sure that |this| contains the union of parameters and 25 // {'instanceType': 'declarativeWebRequest.' + typeId} and validates the 26 // generated union dictionary against the schema for |typeId|. 27 function setupInstance(instance, parameters, typeId) { 28 for (var key in parameters) { 29 if ($Object.hasOwnProperty(parameters, key)) { 30 instance[key] = parameters[key]; 31 } 32 } 33 instance.instanceType = 'declarativeWebRequest.' + typeId; 34 var schema = getSchema(typeId); 35 validate([instance], [schema]); 36 } 37 38 // Setup all data types for the declarative webRequest API. 39 declarativeWebRequest.RequestMatcher = function(parameters) { 40 setupInstance(this, parameters, 'RequestMatcher'); 41 }; 42 declarativeWebRequest.CancelRequest = function(parameters) { 43 setupInstance(this, parameters, 'CancelRequest'); 44 }; 45 declarativeWebRequest.RedirectRequest = function(parameters) { 46 setupInstance(this, parameters, 'RedirectRequest'); 47 }; 48 declarativeWebRequest.SetRequestHeader = function(parameters) { 49 setupInstance(this, parameters, 'SetRequestHeader'); 50 }; 51 declarativeWebRequest.RemoveRequestHeader = function(parameters) { 52 setupInstance(this, parameters, 'RemoveRequestHeader'); 53 }; 54 declarativeWebRequest.AddResponseHeader = function(parameters) { 55 setupInstance(this, parameters, 'AddResponseHeader'); 56 }; 57 declarativeWebRequest.RemoveResponseHeader = function(parameters) { 58 setupInstance(this, parameters, 'RemoveResponseHeader'); 59 }; 60 declarativeWebRequest.RedirectToTransparentImage = 61 function(parameters) { 62 setupInstance(this, parameters, 'RedirectToTransparentImage'); 63 }; 64 declarativeWebRequest.RedirectToEmptyDocument = function(parameters) { 65 setupInstance(this, parameters, 'RedirectToEmptyDocument'); 66 }; 67 declarativeWebRequest.RedirectByRegEx = function(parameters) { 68 setupInstance(this, parameters, 'RedirectByRegEx'); 69 }; 70 declarativeWebRequest.IgnoreRules = function(parameters) { 71 setupInstance(this, parameters, 'IgnoreRules'); 72 }; 73 declarativeWebRequest.AddRequestCookie = function(parameters) { 74 setupInstance(this, parameters, 'AddRequestCookie'); 75 }; 76 declarativeWebRequest.AddResponseCookie = function(parameters) { 77 setupInstance(this, parameters, 'AddResponseCookie'); 78 }; 79 declarativeWebRequest.EditRequestCookie = function(parameters) { 80 setupInstance(this, parameters, 'EditRequestCookie'); 81 }; 82 declarativeWebRequest.EditResponseCookie = function(parameters) { 83 setupInstance(this, parameters, 'EditResponseCookie'); 84 }; 85 declarativeWebRequest.RemoveRequestCookie = function(parameters) { 86 setupInstance(this, parameters, 'RemoveRequestCookie'); 87 }; 88 declarativeWebRequest.RemoveResponseCookie = function(parameters) { 89 setupInstance(this, parameters, 'RemoveResponseCookie'); 90 }; 91 declarativeWebRequest.SendMessageToExtension = function(parameters) { 92 setupInstance(this, parameters, 'SendMessageToExtension'); 93 }; 94 }); 95 96 exports.binding = binding.generate(); 97