Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1107)

Side by Side Diff: chrome/test/data/extensions/api_test/declarative/api/background.js

Issue 9315010: RulesRegistry for declarative APIs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merged with ToT for trybot testing Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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 var declarative = chrome.experimental.declarative;
6
7 function createTestCondition(opt_testParameter) {
8 var result = {
9 "instanceType": "webRequest.RequestMatcher"
10 };
11 if (opt_testParameter) {
12 result["url"] = opt_testParameter;
13 }
14 return result;
15 }
16
17 function createTestAction() {
18 var result = {
19 "instanceType": "webRequest.CancelRequest"
20 };
21 return result;
22 }
23
24 function createTestAction2() {
25 var result = {
26 "instanceType": "webRequest.ModifyRequest"
27 };
28 return result;
29 }
30
31 var inputRule0 = {
32 // No 'id', this should be filled by the API.
33 "conditions": [createTestCondition("test1"), createTestCondition("test2")],
34 "actions": [createTestAction(), createTestAction2()]
35 // No 'priority', this should be filled by the API.
36 }
37
38 var outputRule0 = {
39 "id": "_0_",
40 "conditions": [createTestCondition("test1"), createTestCondition("test2")],
41 "actions": [createTestAction(), createTestAction2()],
42 "priority": 100
43 }
44
45 var inputRule1 = {
46 "id": "my_rule_id",
47 "conditions": [],
48 "actions": [],
49 "priority": 10
50 }
51
52 var outputRule1 = inputRule1;
53
54 var inputRule2 = {
55 // No 'id', this should be filled by the API.
56 "conditions": [createTestCondition("test3")],
57 "actions": [createTestAction()]
58 // No 'priority', this should be filled by the API.
59 }
60
61 var outputRule2 = {
62 "id": "_1_",
63 "conditions": [createTestCondition("test3")],
64 "actions": [createTestAction()],
65 "priority": 100
66 }
67
68 var invalidRule0 = {
69 "conditions": [createTestCondition("test1")]
70 // "actions" is missing but not optional.
71 };
72
73 var invalidRule1 = {
74 "conditions": [createTestCondition("test1")],
75 // "actions" contains an invalid action (separate test because this validation
76 // happens on a different code path).
77 "actions": [{"key": "value"}]
78 };
79
80 var testEvent = chrome.webRequest.onRequest;
81
82 chrome.test.runTests([
83 // Add adding two simple rules and check that their optional fields are set
84 // correctly in the call back function.
85 function testAddRules() {
86 var callback = function(rules) {
87 chrome.test.assertEq(2, rules.length);
88 // API should have generated id and priority fields.
89 chrome.test.assertTrue("id" in rules[0]);
90 chrome.test.assertEq([outputRule0, outputRule1], rules);
91 chrome.test.succeed();
92 };
93 testEvent.addRules([inputRule0, inputRule1], callback);
94 },
95 // Check that getRules() returns all rules if no filter is passed.
96 function testGetRules() {
97 var callback = function(rules) {
98 // We are not given any gurantee on the order in which rules are returned.
99 chrome.test.assertTrue(
100 chrome.test.checkDeepEq([outputRule0, outputRule1], rules) ||
101 chrome.test.checkDeepEq([outputRule1, outputRule0], rules));
102 chrome.test.succeed();
103 }
104 testEvent.getRules(null, callback);
105 },
106 // Check that getRules() returns all rules if no filter is passed.
107 function testGetRules2() {
108 var callback = function(rules) {
109 // We are not given any gurantee on the order in which rules are returned.
110 chrome.test.assertTrue(
111 chrome.test.checkDeepEq([outputRule0, outputRule1], rules) ||
112 chrome.test.checkDeepEq([outputRule1, outputRule0], rules));
113 chrome.test.succeed();
114 }
115 testEvent.getRules(undefined, callback);
116 },
117 // Check that getRules() returns no rules if empty filter is passed.
118 function testGetRules3() {
119 var callback = function(rules) {
120 // We are not given any gurantee on the order in which rules are returned.
121 chrome.test.assertEq([], rules);
122 chrome.test.succeed();
123 }
124 testEvent.getRules([], callback);
125 },
126 // Check that getRules() returns all rules if rules are filtered by ID.
127 function testSelectiveGetRules() {
128 var callback = function(rules) {
129 chrome.test.assertEq([outputRule1], rules);
130 chrome.test.succeed();
131 }
132 testEvent.getRules(["my_rule_id"], callback);
133 },
134 // Check that we can remove individual rules.
135 function testSelectiveRemoveRules() {
136 var callback = function(rules) {
137 chrome.test.succeed();
138 }
139 testEvent.removeRules(["my_rule_id"], callback);
140 },
141 // Check that after removal, the rules are really gone.
142 function testGetRemainingRules() {
143 var callback = function(rules) {
144 chrome.test.assertEq([outputRule0], rules);
145 chrome.test.succeed();
146 }
147 testEvent.getRules(null, callback);
148 },
149 // Check that rules are assigned unique IDs.
150 function testIdGeneration() {
151 var callback = function(rules) {
152 chrome.test.assertEq(1, rules.length);
153 // API should have generated id and priority fields.
154 chrome.test.assertTrue("id" in rules[0]);
155 // The IDs should be distinct.
156 chrome.test.assertFalse(outputRule0["id"] === rules[0]["id"]);
157 chrome.test.succeed();
158 };
159 testEvent.addRules([inputRule2], callback);
160 },
161 // Check that we can remove all rules at once.
162 function testRemovingAllRules() {
163 var callback = function() {
164 chrome.test.succeed();
165 }
166 testEvent.removeRules(null, callback);
167 },
168 // Check that the rules are actually gone.
169 function testAllRulesRemoved() {
170 var callback = function(rules) {
171 chrome.test.assertEq(0, rules.length);
172 chrome.test.succeed();
173 }
174 testEvent.getRules(null, callback);
175 },
176 // Check that validation is performed.
177 function testValidation() {
178 var fail = function() {
179 chrome.test.fail("An exception was expected");
180 };
181 try {
182 testEvent.addRules([invalidRule0], fail);
183 fail();
184 } catch (e) {}
185 try {
186 testEvent.addRules([invalidRule1], fail);
187 fail();
188 } catch (e) {}
189 // None of these rules should have been registered.
190 var callback = function(rules) {
191 chrome.test.assertEq(0, rules.length);
192 chrome.test.succeed();
193 };
194 testEvent.getRules(null, callback);
195 },
196 // Finally we add one additional rule, to check that is is removed
197 // on page unload.
198 function testAddRules() {
199 var callback = function(rules) {
200 chrome.test.assertEq(1, rules.length);
201 chrome.test.succeed();
202 };
203 testEvent.addRules([inputRule0], callback);
204 },
205 ]);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698