blob: 27b70c4d6f06420e3cec8b9c9374d6e9ad164c95 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
// Copyright (c) 2012 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 bindings for the declarativeWebRequest API.
var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();
chromeHidden.registerCustomHook('declarativeWebRequest', function(api) {
// Returns the schema definition of type |typeId| defined in |namespace|.
function getSchema(namespace, typeId) {
var filterNamespace = function(val) {return val.namespace === namespace;};
var apiSchema = api.apiDefinitions.filter(filterNamespace)[0];
var filterTypeId = function (val) {
return val.id === namespace + "." + typeId;
};
var resultSchema = apiSchema.types.filter(filterTypeId)[0];
return resultSchema;
}
// 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 (parameters.hasOwnProperty(key)) {
instance[key] = parameters[key];
}
}
instance.instanceType = 'declarativeWebRequest.' + typeId;
var schema = getSchema('declarativeWebRequest', typeId);
chromeHidden.validate([instance], [schema]);
}
// Setup all data types for the declarative webRequest API.
chrome.declarativeWebRequest.RequestMatcher = function(parameters) {
setupInstance(this, parameters, 'RequestMatcher');
};
chrome.declarativeWebRequest.CancelRequest = function(parameters) {
setupInstance(this, parameters, 'CancelRequest');
};
chrome.declarativeWebRequest.RedirectRequest = function(parameters) {
setupInstance(this, parameters, 'RedirectRequest');
};
});
|