15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Custom binding for the declarativeWebRequest API. 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)var binding = require('binding').Binding.create('declarativeWebRequest'); 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var utils = require('utils'); 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var validate = require('schemaUtils').validate; 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)binding.registerCustomHook(function(api) { 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var declarativeWebRequest = api.compiledApi; 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the schema definition of type |typeId| defined in |namespace|. 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) function getSchema(typeId) { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return utils.lookup(api.schema.types, 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 'id', 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 'declarativeWebRequest.' + typeId); 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Helper function for the constructor of concrete datatypes of the 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // declarative webRequest API. 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Makes sure that |this| contains the union of parameters and 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // {'instanceType': 'declarativeWebRequest.' + typeId} and validates the 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // generated union dictionary against the schema for |typeId|. 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function setupInstance(instance, parameters, typeId) { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var key in parameters) { 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if ($Object.hasOwnProperty(parameters, key)) { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) instance[key] = parameters[key]; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) instance.instanceType = 'declarativeWebRequest.' + typeId; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var schema = getSchema(typeId); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) validate([instance], [schema]); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Setup all data types for the declarative webRequest API. 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) declarativeWebRequest.RequestMatcher = function(parameters) { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setupInstance(this, parameters, 'RequestMatcher'); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) declarativeWebRequest.CancelRequest = function(parameters) { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setupInstance(this, parameters, 'CancelRequest'); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) declarativeWebRequest.RedirectRequest = function(parameters) { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setupInstance(this, parameters, 'RedirectRequest'); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) declarativeWebRequest.SetRequestHeader = function(parameters) { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setupInstance(this, parameters, 'SetRequestHeader'); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) declarativeWebRequest.RemoveRequestHeader = function(parameters) { 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setupInstance(this, parameters, 'RemoveRequestHeader'); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) declarativeWebRequest.AddResponseHeader = function(parameters) { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setupInstance(this, parameters, 'AddResponseHeader'); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) declarativeWebRequest.RemoveResponseHeader = function(parameters) { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setupInstance(this, parameters, 'RemoveResponseHeader'); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) declarativeWebRequest.RedirectToTransparentImage = 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function(parameters) { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setupInstance(this, parameters, 'RedirectToTransparentImage'); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) declarativeWebRequest.RedirectToEmptyDocument = function(parameters) { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setupInstance(this, parameters, 'RedirectToEmptyDocument'); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) declarativeWebRequest.RedirectByRegEx = function(parameters) { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setupInstance(this, parameters, 'RedirectByRegEx'); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) declarativeWebRequest.IgnoreRules = function(parameters) { 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setupInstance(this, parameters, 'IgnoreRules'); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) declarativeWebRequest.AddRequestCookie = function(parameters) { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setupInstance(this, parameters, 'AddRequestCookie'); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) declarativeWebRequest.AddResponseCookie = function(parameters) { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setupInstance(this, parameters, 'AddResponseCookie'); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) declarativeWebRequest.EditRequestCookie = function(parameters) { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setupInstance(this, parameters, 'EditRequestCookie'); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) declarativeWebRequest.EditResponseCookie = function(parameters) { 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setupInstance(this, parameters, 'EditResponseCookie'); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) declarativeWebRequest.RemoveRequestCookie = function(parameters) { 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setupInstance(this, parameters, 'RemoveRequestCookie'); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) declarativeWebRequest.RemoveResponseCookie = function(parameters) { 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setupInstance(this, parameters, 'RemoveResponseCookie'); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) declarativeWebRequest.SendMessageToExtension = function(parameters) { 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) setupInstance(this, parameters, 'SendMessageToExtension'); 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}); 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)exports.binding = binding.generate(); 97