OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_condit
ion_attribute.h" | 5 #include "chrome/browser/extensions/api/declarative_webrequest/webrequest_condit
ion_attribute.h" |
6 | 6 |
7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
8 #include "base/file_path.h" | 8 #include "base/file_path.h" |
9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
10 #include "base/values.h" | 10 #include "base/values.h" |
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
227 return dictionary.Pass(); | 227 return dictionary.Pass(); |
228 } | 228 } |
229 | 229 |
230 // Returns whether the response headers from |url_request| satisfy the match | 230 // Returns whether the response headers from |url_request| satisfy the match |
231 // criteria given in |tests|. For at least one |i| all tests from |tests[i]| | 231 // criteria given in |tests|. For at least one |i| all tests from |tests[i]| |
232 // must pass. If |positive_test| is true, the dictionary is interpreted as the | 232 // must pass. If |positive_test| is true, the dictionary is interpreted as the |
233 // containsHeaders property of a RequestMatcher, otherwise as | 233 // containsHeaders property of a RequestMatcher, otherwise as |
234 // doesNotContainHeaders. | 234 // doesNotContainHeaders. |
235 void MatchAndCheck(const std::vector< std::vector<const std::string*> >& tests, | 235 void MatchAndCheck(const std::vector< std::vector<const std::string*> >& tests, |
236 const std::string& key, | 236 const std::string& key, |
| 237 RequestStage stage, |
237 net::URLRequest* url_request, | 238 net::URLRequest* url_request, |
238 bool* result) { | 239 bool* result) { |
239 ListValue contains_headers; | 240 ListValue contains_headers; |
240 for (size_t i = 0; i < tests.size(); ++i) { | 241 for (size_t i = 0; i < tests.size(); ++i) { |
241 scoped_ptr<DictionaryValue> temp(GetDictionaryFromArray(tests[i])); | 242 scoped_ptr<DictionaryValue> temp(GetDictionaryFromArray(tests[i])); |
242 ASSERT_TRUE(temp.get() != NULL); | 243 ASSERT_TRUE(temp.get() != NULL); |
243 contains_headers.Append(temp.release()); | 244 contains_headers.Append(temp.release()); |
244 } | 245 } |
245 | 246 |
246 std::string error; | 247 std::string error; |
247 scoped_ptr<WebRequestConditionAttribute> attribute = | 248 scoped_ptr<WebRequestConditionAttribute> attribute = |
248 WebRequestConditionAttribute::Create(key, &contains_headers, &error); | 249 WebRequestConditionAttribute::Create(key, &contains_headers, &error); |
249 ASSERT_EQ("", error); | 250 ASSERT_EQ("", error); |
250 ASSERT_TRUE(attribute.get() != NULL); | 251 ASSERT_TRUE(attribute.get() != NULL); |
251 | 252 |
252 *result = attribute->IsFulfilled(WebRequestRule::RequestData( | 253 *result = attribute->IsFulfilled(WebRequestRule::RequestData( |
253 url_request, ON_HEADERS_RECEIVED, url_request->response_headers())); | 254 url_request, stage, url_request->response_headers())); |
254 } | 255 } |
255 | 256 |
256 } // namespace | 257 } // namespace |
257 | 258 |
| 259 // Here we test WebRequestConditionAttributeRequestHeaders for matching |
| 260 // correctly against request headers. This test is not as extensive as |
| 261 // "ResponseHeaders" (below), because the header-matching code is shared |
| 262 // by both types of condition attributes, so it is enough to test it once. |
| 263 TEST(WebRequestConditionAttributeTest, RequestHeaders) { |
| 264 // Necessary for TestURLRequest. |
| 265 MessageLoop message_loop(MessageLoop::TYPE_IO); |
| 266 |
| 267 TestURLRequestContext context; |
| 268 TestDelegate delegate; |
| 269 TestURLRequest url_request(GURL("http://example.com"), // Dummy URL. |
| 270 &delegate, &context); |
| 271 url_request.SetExtraRequestHeaderByName( |
| 272 "Custom-header", "custom/value", true /* overwrite */); |
| 273 url_request.Start(); |
| 274 MessageLoop::current()->Run(); |
| 275 |
| 276 std::vector<std::vector<const std::string*> > tests; |
| 277 bool result = false; |
| 278 |
| 279 const RequestStage stage = ON_BEFORE_SEND_HEADERS; |
| 280 |
| 281 // First set of test data -- passing conjunction. |
| 282 const std::string kPassingCondition[] = { |
| 283 keys::kNameContainsKey, "CuStOm", // Header names are case insensitive. |
| 284 keys::kNameEqualsKey, "custom-header", |
| 285 keys::kValueSuffixKey, "alue", |
| 286 keys::kValuePrefixKey, "custom/value" |
| 287 }; |
| 288 const size_t kPassingConditionSizes[] = { arraysize(kPassingCondition) }; |
| 289 GetArrayAsVector(kPassingCondition, kPassingConditionSizes, 1u, &tests); |
| 290 // Positive filter, passing (conjunction of tests). |
| 291 MatchAndCheck(tests, keys::kRequestHeadersKey, stage, &url_request, &result); |
| 292 EXPECT_TRUE(result); |
| 293 // Negative filter, failing (conjunction of tests). |
| 294 MatchAndCheck( |
| 295 tests, keys::kExcludeRequestHeadersKey, stage, &url_request, &result); |
| 296 EXPECT_FALSE(result); |
| 297 |
| 298 // Second set of test data -- failing disjunction. |
| 299 const std::string kFailCondition[] = { |
| 300 keys::kNameSuffixKey, "Custom", // Test 1. |
| 301 keys::kNameEqualsKey, "ustom-valu", // Test 2. |
| 302 keys::kValuePrefixKey, "custom ", // Test 3. |
| 303 keys::kValueContainsKey, " value" // Test 4. |
| 304 }; |
| 305 const size_t kFailConditionSizes[] = { 2u, 2u, 2u, 2u }; |
| 306 GetArrayAsVector(kFailCondition, kFailConditionSizes, 4u, &tests); |
| 307 // Positive filter, failing (disjunction of tests). |
| 308 MatchAndCheck(tests, keys::kRequestHeadersKey, stage, &url_request, &result); |
| 309 EXPECT_FALSE(result); |
| 310 // Negative filter, passing (disjunction of tests). |
| 311 MatchAndCheck( |
| 312 tests, keys::kExcludeRequestHeadersKey, stage, &url_request, &result); |
| 313 EXPECT_TRUE(result); |
| 314 |
| 315 // Third set of test data, corner case -- empty disjunction. |
| 316 GetArrayAsVector(NULL, NULL, 0u, &tests); |
| 317 // Positive filter, failing (no test to pass). |
| 318 MatchAndCheck(tests, keys::kRequestHeadersKey, stage, &url_request, &result); |
| 319 EXPECT_FALSE(result); |
| 320 // Negative filter, passing (no test to fail). |
| 321 MatchAndCheck( |
| 322 tests, keys::kExcludeRequestHeadersKey, stage, &url_request, &result); |
| 323 EXPECT_TRUE(result); |
| 324 |
| 325 // Fourth set of test data, corner case -- empty conjunction. |
| 326 const size_t kEmptyConjunctionSizes[] = { 0u }; |
| 327 GetArrayAsVector(NULL, kEmptyConjunctionSizes, 1u, &tests); |
| 328 // Positive filter, passing (trivial test). |
| 329 MatchAndCheck(tests, keys::kRequestHeadersKey, stage, &url_request, &result); |
| 330 EXPECT_TRUE(result); |
| 331 // Negative filter, failing. |
| 332 MatchAndCheck( |
| 333 tests, keys::kExcludeRequestHeadersKey, stage, &url_request, &result); |
| 334 EXPECT_FALSE(result); |
| 335 } |
| 336 |
258 // Here we test WebRequestConditionAttributeResponseHeaders for: | 337 // Here we test WebRequestConditionAttributeResponseHeaders for: |
259 // 1. Correct implementation of prefix/suffix/contains/equals matching. | 338 // 1. Correct implementation of prefix/suffix/contains/equals matching. |
260 // 2. Performing logical disjunction (||) between multiple specifications. | 339 // 2. Performing logical disjunction (||) between multiple specifications. |
261 // 3. Negating the match in case of 'doesNotContainHeaders'. | 340 // 3. Negating the match in case of 'doesNotContainHeaders'. |
262 TEST(WebRequestConditionAttributeTest, Headers) { | 341 TEST(WebRequestConditionAttributeTest, ResponseHeaders) { |
263 // Necessary for TestURLRequest. | 342 // Necessary for TestURLRequest. |
264 MessageLoop message_loop(MessageLoop::TYPE_IO); | 343 MessageLoop message_loop(MessageLoop::TYPE_IO); |
265 | 344 |
266 net::TestServer test_server( | 345 net::TestServer test_server( |
267 net::TestServer::TYPE_HTTP, | 346 net::TestServer::TYPE_HTTP, |
268 net::TestServer::kLocalhost, | 347 net::TestServer::kLocalhost, |
269 FilePath(FILE_PATH_LITERAL( | 348 FilePath(FILE_PATH_LITERAL( |
270 "chrome/test/data/extensions/api_test/webrequest/declarative"))); | 349 "chrome/test/data/extensions/api_test/webrequest/declarative"))); |
271 ASSERT_TRUE(test_server.Start()); | 350 ASSERT_TRUE(test_server.Start()); |
272 | 351 |
273 TestURLRequestContext context; | 352 TestURLRequestContext context; |
274 TestDelegate delegate; | 353 TestDelegate delegate; |
275 TestURLRequest url_request(test_server.GetURL("files/headers.html"), | 354 TestURLRequest url_request(test_server.GetURL("files/headers.html"), |
276 &delegate, &context); | 355 &delegate, &context); |
277 url_request.Start(); | 356 url_request.Start(); |
278 MessageLoop::current()->Run(); | 357 MessageLoop::current()->Run(); |
279 | 358 |
280 // In all the tests below we assume that the server includes the headers | 359 // In all the tests below we assume that the server includes the headers |
281 // Custom-Header: custom/value | 360 // Custom-Header: custom/value |
282 // Custom-Header-B: valueA | 361 // Custom-Header-B: valueA |
283 // Custom-Header-B: valueB | 362 // Custom-Header-B: valueB |
284 // Custom-Header-C: valueC, valueD | 363 // Custom-Header-C: valueC, valueD |
285 // Custom-Header-D: | 364 // Custom-Header-D: |
286 // in the response, but does not include "Non-existing: void". | 365 // in the response, but does not include "Non-existing: void". |
287 | 366 |
288 std::vector< std::vector<const std::string*> > tests; | 367 std::vector< std::vector<const std::string*> > tests; |
289 bool result; | 368 bool result; |
290 | 369 |
| 370 const RequestStage stage = ON_HEADERS_RECEIVED; |
| 371 |
291 // 1.a. -- All these tests should pass. | 372 // 1.a. -- All these tests should pass. |
292 const std::string kPassingCondition[] = { | 373 const std::string kPassingCondition[] = { |
293 keys::kNamePrefixKey, "Custom", | 374 keys::kNamePrefixKey, "Custom", |
294 keys::kNameSuffixKey, "m-header", // Header names are case insensitive. | 375 keys::kNameSuffixKey, "m-header", // Header names are case insensitive. |
295 keys::kValueContainsKey, "alu", | 376 keys::kValueContainsKey, "alu", |
296 keys::kValueEqualsKey, "custom/value" | 377 keys::kValueEqualsKey, "custom/value" |
297 }; | 378 }; |
298 const size_t kPassingConditionSizes[] = { arraysize(kPassingCondition) }; | 379 const size_t kPassingConditionSizes[] = { arraysize(kPassingCondition) }; |
299 GetArrayAsVector(kPassingCondition, kPassingConditionSizes, 1u, &tests); | 380 GetArrayAsVector(kPassingCondition, kPassingConditionSizes, 1u, &tests); |
300 MatchAndCheck(tests, keys::kResponseHeadersKey, &url_request, &result); | 381 MatchAndCheck(tests, keys::kResponseHeadersKey, stage, &url_request, &result); |
301 EXPECT_TRUE(result); | 382 EXPECT_TRUE(result); |
302 | 383 |
303 // 1.b. -- None of the following tests in the discjunction should pass. | 384 // 1.b. -- None of the following tests in the discjunction should pass. |
304 const std::string kFailCondition[] = { | 385 const std::string kFailCondition[] = { |
305 keys::kNamePrefixKey, " Custom", // Test 1. | 386 keys::kNamePrefixKey, " Custom", // Test 1. |
306 keys::kNameContainsKey, " -", // Test 2. | 387 keys::kNameContainsKey, " -", // Test 2. |
307 keys::kValueSuffixKey, "alu", // Test 3. | 388 keys::kValueSuffixKey, "alu", // Test 3. |
308 keys::kValueEqualsKey, "custom" // Test 4. | 389 keys::kValueEqualsKey, "custom" // Test 4. |
309 }; | 390 }; |
310 const size_t kFailConditionSizes[] = { 2u, 2u, 2u, 2u }; | 391 const size_t kFailConditionSizes[] = { 2u, 2u, 2u, 2u }; |
311 GetArrayAsVector(kFailCondition, kFailConditionSizes, 4u, &tests); | 392 GetArrayAsVector(kFailCondition, kFailConditionSizes, 4u, &tests); |
312 MatchAndCheck(tests, keys::kResponseHeadersKey, &url_request, &result); | 393 MatchAndCheck(tests, keys::kResponseHeadersKey, stage, &url_request, &result); |
313 EXPECT_FALSE(result); | 394 EXPECT_FALSE(result); |
314 | 395 |
315 // 1.c. -- This should fail (mixing name and value from different headers) | 396 // 1.c. -- This should fail (mixing name and value from different headers) |
316 const std::string kMixingCondition[] = { | 397 const std::string kMixingCondition[] = { |
317 keys::kNameSuffixKey, "Header-B", | 398 keys::kNameSuffixKey, "Header-B", |
318 keys::kValueEqualsKey, "custom/value" | 399 keys::kValueEqualsKey, "custom/value" |
319 }; | 400 }; |
320 const size_t kMixingConditionSizes[] = { arraysize(kMixingCondition) }; | 401 const size_t kMixingConditionSizes[] = { arraysize(kMixingCondition) }; |
321 GetArrayAsVector(kMixingCondition, kMixingConditionSizes, 1u, &tests); | 402 GetArrayAsVector(kMixingCondition, kMixingConditionSizes, 1u, &tests); |
322 MatchAndCheck(tests, keys::kResponseHeadersKey, &url_request, &result); | 403 MatchAndCheck(tests, keys::kResponseHeadersKey, stage, &url_request, &result); |
323 EXPECT_FALSE(result); | 404 EXPECT_FALSE(result); |
324 | 405 |
325 // 1.d. -- Test handling multiple values for one header (both should pass). | 406 // 1.d. -- Test handling multiple values for one header (both should pass). |
326 const std::string kMoreValues1[] = { | 407 const std::string kMoreValues1[] = { |
327 keys::kNameEqualsKey, "Custom-header-b", | 408 keys::kNameEqualsKey, "Custom-header-b", |
328 keys::kValueEqualsKey, "valueA" | 409 keys::kValueEqualsKey, "valueA" |
329 }; | 410 }; |
330 const size_t kMoreValues1Sizes[] = { arraysize(kMoreValues1) }; | 411 const size_t kMoreValues1Sizes[] = { arraysize(kMoreValues1) }; |
331 GetArrayAsVector(kMoreValues1, kMoreValues1Sizes, 1u, &tests); | 412 GetArrayAsVector(kMoreValues1, kMoreValues1Sizes, 1u, &tests); |
332 MatchAndCheck(tests, keys::kResponseHeadersKey, &url_request, &result); | 413 MatchAndCheck(tests, keys::kResponseHeadersKey, stage, &url_request, &result); |
333 EXPECT_TRUE(result); | 414 EXPECT_TRUE(result); |
334 const std::string kMoreValues2[] = { | 415 const std::string kMoreValues2[] = { |
335 keys::kNameEqualsKey, "Custom-header-b", | 416 keys::kNameEqualsKey, "Custom-header-b", |
336 keys::kValueEqualsKey, "valueB" | 417 keys::kValueEqualsKey, "valueB" |
337 }; | 418 }; |
338 const size_t kMoreValues2Sizes[] = { arraysize(kMoreValues2) }; | 419 const size_t kMoreValues2Sizes[] = { arraysize(kMoreValues2) }; |
339 GetArrayAsVector(kMoreValues2, kMoreValues2Sizes, 1u, &tests); | 420 GetArrayAsVector(kMoreValues2, kMoreValues2Sizes, 1u, &tests); |
340 MatchAndCheck(tests, keys::kResponseHeadersKey, &url_request, &result); | 421 MatchAndCheck(tests, keys::kResponseHeadersKey, stage, &url_request, &result); |
341 EXPECT_TRUE(result); | 422 EXPECT_TRUE(result); |
342 | 423 |
343 // 1.e. -- This should fail as conjunction but pass as disjunction. | 424 // 1.e. -- This should fail as conjunction but pass as disjunction. |
344 const std::string kConflict[] = { | 425 const std::string kConflict[] = { |
345 keys::kNameSuffixKey, "Header", // True for some header. | 426 keys::kNameSuffixKey, "Header", // True for some header. |
346 keys::kNameContainsKey, "Header-B" // True for a different header. | 427 keys::kNameContainsKey, "Header-B" // True for a different header. |
347 }; | 428 }; |
348 // First disjunction, no conflict. | 429 // First disjunction, no conflict. |
349 const size_t kNoConflictSizes[] = { 2u, 2u }; | 430 const size_t kNoConflictSizes[] = { 2u, 2u }; |
350 GetArrayAsVector(kConflict, kNoConflictSizes, 2u, &tests); | 431 GetArrayAsVector(kConflict, kNoConflictSizes, 2u, &tests); |
351 MatchAndCheck(tests, keys::kResponseHeadersKey, &url_request, &result); | 432 MatchAndCheck(tests, keys::kResponseHeadersKey, stage, &url_request, &result); |
352 EXPECT_TRUE(result); | 433 EXPECT_TRUE(result); |
353 // Then conjunction, conflict. | 434 // Then conjunction, conflict. |
354 const size_t kConflictSizes[] = { arraysize(kConflict) }; | 435 const size_t kConflictSizes[] = { arraysize(kConflict) }; |
355 GetArrayAsVector(kConflict, kConflictSizes, 1u, &tests); | 436 GetArrayAsVector(kConflict, kConflictSizes, 1u, &tests); |
356 MatchAndCheck(tests, keys::kResponseHeadersKey, &url_request, &result); | 437 MatchAndCheck(tests, keys::kResponseHeadersKey, stage, &url_request, &result); |
357 EXPECT_FALSE(result); | 438 EXPECT_FALSE(result); |
358 | 439 |
359 // 1.f. -- This should pass, checking for correct treatment of ',' in values. | 440 // 1.f. -- This should pass, checking for correct treatment of ',' in values. |
360 const std::string kComma[] = { | 441 const std::string kComma[] = { |
361 keys::kNameSuffixKey, "Header-C", | 442 keys::kNameSuffixKey, "Header-C", |
362 keys::kValueEqualsKey, "valueC, valueD" | 443 keys::kValueEqualsKey, "valueC, valueD" |
363 }; | 444 }; |
364 const size_t kCommaSizes[] = { arraysize(kComma) }; | 445 const size_t kCommaSizes[] = { arraysize(kComma) }; |
365 GetArrayAsVector(kComma, kCommaSizes, 1u, &tests); | 446 GetArrayAsVector(kComma, kCommaSizes, 1u, &tests); |
366 MatchAndCheck(tests, keys::kResponseHeadersKey, &url_request, &result); | 447 MatchAndCheck(tests, keys::kResponseHeadersKey, stage, &url_request, &result); |
367 EXPECT_TRUE(result); | 448 EXPECT_TRUE(result); |
368 | 449 |
369 // 1.g. -- This should pass, empty values are values as well. | 450 // 1.g. -- This should pass, empty values are values as well. |
370 const std::string kEmpty[] = { | 451 const std::string kEmpty[] = { |
371 keys::kNameEqualsKey, "custom-header-d", | 452 keys::kNameEqualsKey, "custom-header-d", |
372 keys::kValueEqualsKey, "" | 453 keys::kValueEqualsKey, "" |
373 }; | 454 }; |
374 const size_t kEmptySizes[] = { arraysize(kEmpty) }; | 455 const size_t kEmptySizes[] = { arraysize(kEmpty) }; |
375 GetArrayAsVector(kEmpty, kEmptySizes, 1u, &tests); | 456 GetArrayAsVector(kEmpty, kEmptySizes, 1u, &tests); |
376 MatchAndCheck(tests, keys::kResponseHeadersKey, &url_request, &result); | 457 MatchAndCheck(tests, keys::kResponseHeadersKey, stage, &url_request, &result); |
377 EXPECT_TRUE(result); | 458 EXPECT_TRUE(result); |
378 | 459 |
379 // 1.h. -- Values are case-sensitive, this should fail. | 460 // 1.h. -- Values are case-sensitive, this should fail. |
380 const std::string kLowercase[] = { | 461 const std::string kLowercase[] = { |
381 keys::kNameEqualsKey, "Custom-header-b", | 462 keys::kNameEqualsKey, "Custom-header-b", |
382 keys::kValuePrefixKey, "valueb", // valueb != valueB | 463 keys::kValuePrefixKey, "valueb", // valueb != valueB |
383 keys::kNameEqualsKey, "Custom-header-b", | 464 keys::kNameEqualsKey, "Custom-header-b", |
384 keys::kValueSuffixKey, "valueb", | 465 keys::kValueSuffixKey, "valueb", |
385 keys::kNameEqualsKey, "Custom-header-b", | 466 keys::kNameEqualsKey, "Custom-header-b", |
386 keys::kValueContainsKey, "valueb", | 467 keys::kValueContainsKey, "valueb", |
387 keys::kNameEqualsKey, "Custom-header-b", | 468 keys::kNameEqualsKey, "Custom-header-b", |
388 keys::kValueEqualsKey, "valueb" | 469 keys::kValueEqualsKey, "valueb" |
389 }; | 470 }; |
390 const size_t kLowercaseSizes[] = { 4u, 4u, 4u, 4u }; // As disjunction. | 471 const size_t kLowercaseSizes[] = { 4u, 4u, 4u, 4u }; // As disjunction. |
391 GetArrayAsVector(kLowercase, kLowercaseSizes, 4u, &tests); | 472 GetArrayAsVector(kLowercase, kLowercaseSizes, 4u, &tests); |
392 MatchAndCheck(tests, keys::kResponseHeadersKey, &url_request, &result); | 473 MatchAndCheck(tests, keys::kResponseHeadersKey, stage, &url_request, &result); |
393 EXPECT_FALSE(result); | 474 EXPECT_FALSE(result); |
394 | 475 |
395 // 1.i. -- Names are case-insensitive, this should pass. | 476 // 1.i. -- Names are case-insensitive, this should pass. |
396 const std::string kUppercase[] = { | 477 const std::string kUppercase[] = { |
397 keys::kNamePrefixKey, "CUSTOM-HEADER-B", | 478 keys::kNamePrefixKey, "CUSTOM-HEADER-B", |
398 keys::kNameSuffixKey, "CUSTOM-HEADER-B", | 479 keys::kNameSuffixKey, "CUSTOM-HEADER-B", |
399 keys::kNameEqualsKey, "CUSTOM-HEADER-B", | 480 keys::kNameEqualsKey, "CUSTOM-HEADER-B", |
400 keys::kNameContainsKey, "CUSTOM-HEADER-B" | 481 keys::kNameContainsKey, "CUSTOM-HEADER-B" |
401 }; | 482 }; |
402 const size_t kUppercaseSizes[] = { arraysize(kUppercase) }; // Conjunction. | 483 const size_t kUppercaseSizes[] = { arraysize(kUppercase) }; // Conjunction. |
403 GetArrayAsVector(kUppercase, kUppercaseSizes, 1u, &tests); | 484 GetArrayAsVector(kUppercase, kUppercaseSizes, 1u, &tests); |
404 MatchAndCheck(tests, keys::kResponseHeadersKey, &url_request, &result); | 485 MatchAndCheck(tests, keys::kResponseHeadersKey, stage, &url_request, &result); |
405 EXPECT_TRUE(result); | 486 EXPECT_TRUE(result); |
406 | 487 |
407 // 2.a. -- This should pass as disjunction, because one of the tests passes. | 488 // 2.a. -- This should pass as disjunction, because one of the tests passes. |
408 const std::string kDisjunction[] = { | 489 const std::string kDisjunction[] = { |
409 keys::kNamePrefixKey, "Non-existing", // This one fails. | 490 keys::kNamePrefixKey, "Non-existing", // This one fails. |
410 keys::kNameSuffixKey, "Non-existing", // This one fails. | 491 keys::kNameSuffixKey, "Non-existing", // This one fails. |
411 keys::kValueEqualsKey, "void", // This one fails. | 492 keys::kValueEqualsKey, "void", // This one fails. |
412 keys::kValueContainsKey, "alu" // This passes. | 493 keys::kValueContainsKey, "alu" // This passes. |
413 }; | 494 }; |
414 const size_t kDisjunctionSizes[] = { 2u, 2u, 2u, 2u }; | 495 const size_t kDisjunctionSizes[] = { 2u, 2u, 2u, 2u }; |
415 GetArrayAsVector(kDisjunction, kDisjunctionSizes, 4u, &tests); | 496 GetArrayAsVector(kDisjunction, kDisjunctionSizes, 4u, &tests); |
416 MatchAndCheck(tests, keys::kResponseHeadersKey, &url_request, &result); | 497 MatchAndCheck(tests, keys::kResponseHeadersKey, stage, &url_request, &result); |
417 EXPECT_TRUE(result); | 498 EXPECT_TRUE(result); |
418 | 499 |
419 // 3.a. -- This should pass. | 500 // 3.a. -- This should pass. |
420 const std::string kNonExistent[] = { | 501 const std::string kNonExistent[] = { |
421 keys::kNameEqualsKey, "Non-existing", | 502 keys::kNameEqualsKey, "Non-existing", |
422 keys::kValueEqualsKey, "void" | 503 keys::kValueEqualsKey, "void" |
423 }; | 504 }; |
424 const size_t kNonExistentSizes[] = { arraysize(kNonExistent) }; | 505 const size_t kNonExistentSizes[] = { arraysize(kNonExistent) }; |
425 GetArrayAsVector(kNonExistent, kNonExistentSizes, 1u, &tests); | 506 GetArrayAsVector(kNonExistent, kNonExistentSizes, 1u, &tests); |
426 MatchAndCheck(tests, keys::kExcludeResponseHeadersKey, &url_request, &result); | 507 MatchAndCheck( |
| 508 tests, keys::kExcludeResponseHeadersKey, stage, &url_request, &result); |
427 EXPECT_TRUE(result); | 509 EXPECT_TRUE(result); |
428 | 510 |
429 // 3.b. -- This should fail. | 511 // 3.b. -- This should fail. |
430 const std::string kExisting[] = { | 512 const std::string kExisting[] = { |
431 keys::kNameEqualsKey, "custom-header-b", | 513 keys::kNameEqualsKey, "custom-header-b", |
432 keys::kValueEqualsKey, "valueB" | 514 keys::kValueEqualsKey, "valueB" |
433 }; | 515 }; |
434 const size_t kExistingSize[] = { arraysize(kExisting) }; | 516 const size_t kExistingSize[] = { arraysize(kExisting) }; |
435 GetArrayAsVector(kExisting, kExistingSize, 1u, &tests); | 517 GetArrayAsVector(kExisting, kExistingSize, 1u, &tests); |
436 MatchAndCheck(tests, keys::kExcludeResponseHeadersKey, &url_request, &result); | 518 MatchAndCheck( |
| 519 tests, keys::kExcludeResponseHeadersKey, stage, &url_request, &result); |
437 EXPECT_FALSE(result); | 520 EXPECT_FALSE(result); |
438 } | 521 } |
439 | 522 |
440 } // namespace extensions | 523 } // namespace extensions |
OLD | NEW |