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
7var binding = require('binding').Binding.create('declarativeWebRequest');
8
9var utils = require('utils');
10var validate = require('schemaUtils').validate;
11
12binding.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
96exports.binding = binding.generate();
97