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 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
291 return dictionary.Pass(); | 291 return dictionary.Pass(); |
292 } | 292 } |
293 | 293 |
294 // Returns whether the response headers from |url_request| satisfy the match | 294 // Returns whether the response headers from |url_request| satisfy the match |
295 // criteria given in |tests|. For at least one |i| all tests from |tests[i]| | 295 // criteria given in |tests|. For at least one |i| all tests from |tests[i]| |
296 // must pass. If |positive_test| is true, the dictionary is interpreted as the | 296 // must pass. If |positive_test| is true, the dictionary is interpreted as the |
297 // containsHeaders property of a RequestMatcher, otherwise as | 297 // containsHeaders property of a RequestMatcher, otherwise as |
298 // doesNotContainHeaders. | 298 // doesNotContainHeaders. |
299 void MatchAndCheck(const std::vector< std::vector<const std::string*> >& tests, | 299 void MatchAndCheck(const std::vector< std::vector<const std::string*> >& tests, |
300 const std::string& key, | 300 const std::string& key, |
| 301 RequestStage stage, |
301 net::URLRequest* url_request, | 302 net::URLRequest* url_request, |
302 bool* result) { | 303 bool* result) { |
303 ListValue contains_headers; | 304 ListValue contains_headers; |
304 for (size_t i = 0; i < tests.size(); ++i) { | 305 for (size_t i = 0; i < tests.size(); ++i) { |
305 scoped_ptr<DictionaryValue> temp(GetDictionaryFromArray(tests[i])); | 306 scoped_ptr<DictionaryValue> temp(GetDictionaryFromArray(tests[i])); |
306 ASSERT_TRUE(temp.get() != NULL); | 307 ASSERT_TRUE(temp.get() != NULL); |
307 contains_headers.Append(temp.release()); | 308 contains_headers.Append(temp.release()); |
308 } | 309 } |
309 | 310 |
310 std::string error; | 311 std::string error; |
311 scoped_ptr<WebRequestConditionAttribute> attribute = | 312 scoped_ptr<WebRequestConditionAttribute> attribute = |
312 WebRequestConditionAttribute::Create(key, &contains_headers, &error); | 313 WebRequestConditionAttribute::Create(key, &contains_headers, &error); |
313 ASSERT_EQ("", error); | 314 ASSERT_EQ("", error); |
314 ASSERT_TRUE(attribute.get() != NULL); | 315 ASSERT_TRUE(attribute.get() != NULL); |
315 | 316 |
316 *result = attribute->IsFulfilled(WebRequestRule::RequestData( | 317 *result = attribute->IsFulfilled(WebRequestRule::RequestData( |
317 url_request, ON_HEADERS_RECEIVED, url_request->response_headers())); | 318 url_request, stage, url_request->response_headers())); |
318 } | 319 } |
319 | 320 |
320 } // namespace | 321 } // namespace |
321 | 322 |
| 323 // Here we test WebRequestConditionAttributeRequestHeaders for matching |
| 324 // correctly against request headers. This test is not as extensive as |
| 325 // "ResponseHeaders" (below), because the header-matching code is shared |
| 326 // by both types of condition attributes, so it is enough to test it once. |
| 327 TEST(WebRequestConditionAttributeTest, RequestHeaders) { |
| 328 // Necessary for TestURLRequest. |
| 329 MessageLoop message_loop(MessageLoop::TYPE_IO); |
| 330 |
| 331 TestURLRequestContext context; |
| 332 TestDelegate delegate; |
| 333 TestURLRequest url_request(GURL("http://example.com"), // Dummy URL. |
| 334 &delegate, &context); |
| 335 url_request.SetExtraRequestHeaderByName( |
| 336 "Custom-header", "custom/value", true /* overwrite */); |
| 337 url_request.Start(); |
| 338 MessageLoop::current()->Run(); |
| 339 |
| 340 std::vector<std::vector<const std::string*> > tests; |
| 341 bool result = false; |
| 342 |
| 343 const RequestStage stage = ON_BEFORE_SEND_HEADERS; |
| 344 |
| 345 // First set of test data -- passing conjunction. |
| 346 const std::string kPassingCondition[] = { |
| 347 keys::kNameContainsKey, "CuStOm", // Header names are case insensitive. |
| 348 keys::kNameEqualsKey, "custom-header", |
| 349 keys::kValueSuffixKey, "alue", |
| 350 keys::kValuePrefixKey, "custom/value" |
| 351 }; |
| 352 const size_t kPassingConditionSizes[] = { arraysize(kPassingCondition) }; |
| 353 GetArrayAsVector(kPassingCondition, kPassingConditionSizes, 1u, &tests); |
| 354 // Positive filter, passing (conjunction of tests). |
| 355 MatchAndCheck(tests, keys::kRequestHeadersKey, stage, &url_request, &result); |
| 356 EXPECT_TRUE(result); |
| 357 // Negative filter, failing (conjunction of tests). |
| 358 MatchAndCheck( |
| 359 tests, keys::kExcludeRequestHeadersKey, stage, &url_request, &result); |
| 360 EXPECT_FALSE(result); |
| 361 |
| 362 // Second set of test data -- failing disjunction. |
| 363 const std::string kFailCondition[] = { |
| 364 keys::kNameSuffixKey, "Custom", // Test 1. |
| 365 keys::kNameEqualsKey, "ustom-valu", // Test 2. |
| 366 keys::kValuePrefixKey, "custom ", // Test 3. |
| 367 keys::kValueContainsKey, " value" // Test 4. |
| 368 }; |
| 369 const size_t kFailConditionSizes[] = { 2u, 2u, 2u, 2u }; |
| 370 GetArrayAsVector(kFailCondition, kFailConditionSizes, 4u, &tests); |
| 371 // Positive filter, failing (disjunction of tests). |
| 372 MatchAndCheck(tests, keys::kRequestHeadersKey, stage, &url_request, &result); |
| 373 EXPECT_FALSE(result); |
| 374 // Negative filter, passing (disjunction of tests). |
| 375 MatchAndCheck( |
| 376 tests, keys::kExcludeRequestHeadersKey, stage, &url_request, &result); |
| 377 EXPECT_TRUE(result); |
| 378 |
| 379 // Third set of test data, corner case -- empty disjunction. |
| 380 GetArrayAsVector(NULL, NULL, 0u, &tests); |
| 381 // Positive filter, failing (no test to pass). |
| 382 MatchAndCheck(tests, keys::kRequestHeadersKey, stage, &url_request, &result); |
| 383 EXPECT_FALSE(result); |
| 384 // Negative filter, passing (no test to fail). |
| 385 MatchAndCheck( |
| 386 tests, keys::kExcludeRequestHeadersKey, stage, &url_request, &result); |
| 387 EXPECT_TRUE(result); |
| 388 |
| 389 // Fourth set of test data, corner case -- empty conjunction. |
| 390 const size_t kEmptyConjunctionSizes[] = { 0u }; |
| 391 GetArrayAsVector(NULL, kEmptyConjunctionSizes, 1u, &tests); |
| 392 // Positive filter, passing (trivial test). |
| 393 MatchAndCheck(tests, keys::kRequestHeadersKey, stage, &url_request, &result); |
| 394 EXPECT_TRUE(result); |
| 395 // Negative filter, failing. |
| 396 MatchAndCheck( |
| 397 tests, keys::kExcludeRequestHeadersKey, stage, &url_request, &result); |
| 398 EXPECT_FALSE(result); |
| 399 } |
| 400 |
322 // Here we test WebRequestConditionAttributeResponseHeaders for: | 401 // Here we test WebRequestConditionAttributeResponseHeaders for: |
323 // 1. Correct implementation of prefix/suffix/contains/equals matching. | 402 // 1. Correct implementation of prefix/suffix/contains/equals matching. |
324 // 2. Performing logical disjunction (||) between multiple specifications. | 403 // 2. Performing logical disjunction (||) between multiple specifications. |
325 // 3. Negating the match in case of 'doesNotContainHeaders'. | 404 // 3. Negating the match in case of 'doesNotContainHeaders'. |
326 TEST(WebRequestConditionAttributeTest, Headers) { | 405 TEST(WebRequestConditionAttributeTest, ResponseHeaders) { |
327 // Necessary for TestURLRequest. | 406 // Necessary for TestURLRequest. |
328 MessageLoop message_loop(MessageLoop::TYPE_IO); | 407 MessageLoop message_loop(MessageLoop::TYPE_IO); |
329 | 408 |
330 net::TestServer test_server( | 409 net::TestServer test_server( |
331 net::TestServer::TYPE_HTTP, | 410 net::TestServer::TYPE_HTTP, |
332 net::TestServer::kLocalhost, | 411 net::TestServer::kLocalhost, |
333 FilePath(FILE_PATH_LITERAL( | 412 FilePath(FILE_PATH_LITERAL( |
334 "chrome/test/data/extensions/api_test/webrequest/declarative"))); | 413 "chrome/test/data/extensions/api_test/webrequest/declarative"))); |
335 ASSERT_TRUE(test_server.Start()); | 414 ASSERT_TRUE(test_server.Start()); |
336 | 415 |
337 TestURLRequestContext context; | 416 TestURLRequestContext context; |
338 TestDelegate delegate; | 417 TestDelegate delegate; |
339 TestURLRequest url_request(test_server.GetURL("files/headers.html"), | 418 TestURLRequest url_request(test_server.GetURL("files/headers.html"), |
340 &delegate, &context); | 419 &delegate, &context); |
341 url_request.Start(); | 420 url_request.Start(); |
342 MessageLoop::current()->Run(); | 421 MessageLoop::current()->Run(); |
343 | 422 |
344 // In all the tests below we assume that the server includes the headers | 423 // In all the tests below we assume that the server includes the headers |
345 // Custom-Header: custom/value | 424 // Custom-Header: custom/value |
346 // Custom-Header-B: valueA | 425 // Custom-Header-B: valueA |
347 // Custom-Header-B: valueB | 426 // Custom-Header-B: valueB |
348 // Custom-Header-C: valueC, valueD | 427 // Custom-Header-C: valueC, valueD |
349 // Custom-Header-D: | 428 // Custom-Header-D: |
350 // in the response, but does not include "Non-existing: void". | 429 // in the response, but does not include "Non-existing: void". |
351 | 430 |
352 std::vector< std::vector<const std::string*> > tests; | 431 std::vector< std::vector<const std::string*> > tests; |
353 bool result; | 432 bool result; |
354 | 433 |
| 434 const RequestStage stage = ON_HEADERS_RECEIVED; |
| 435 |
355 // 1.a. -- All these tests should pass. | 436 // 1.a. -- All these tests should pass. |
356 const std::string kPassingCondition[] = { | 437 const std::string kPassingCondition[] = { |
357 keys::kNamePrefixKey, "Custom", | 438 keys::kNamePrefixKey, "Custom", |
358 keys::kNameSuffixKey, "m-header", // Header names are case insensitive. | 439 keys::kNameSuffixKey, "m-header", // Header names are case insensitive. |
359 keys::kValueContainsKey, "alu", | 440 keys::kValueContainsKey, "alu", |
360 keys::kValueEqualsKey, "custom/value" | 441 keys::kValueEqualsKey, "custom/value" |
361 }; | 442 }; |
362 const size_t kPassingConditionSizes[] = { arraysize(kPassingCondition) }; | 443 const size_t kPassingConditionSizes[] = { arraysize(kPassingCondition) }; |
363 GetArrayAsVector(kPassingCondition, kPassingConditionSizes, 1u, &tests); | 444 GetArrayAsVector(kPassingCondition, kPassingConditionSizes, 1u, &tests); |
364 MatchAndCheck(tests, keys::kResponseHeadersKey, &url_request, &result); | 445 MatchAndCheck(tests, keys::kResponseHeadersKey, stage, &url_request, &result); |
365 EXPECT_TRUE(result); | 446 EXPECT_TRUE(result); |
366 | 447 |
367 // 1.b. -- None of the following tests in the discjunction should pass. | 448 // 1.b. -- None of the following tests in the discjunction should pass. |
368 const std::string kFailCondition[] = { | 449 const std::string kFailCondition[] = { |
369 keys::kNamePrefixKey, " Custom", // Test 1. | 450 keys::kNamePrefixKey, " Custom", // Test 1. |
370 keys::kNameContainsKey, " -", // Test 2. | 451 keys::kNameContainsKey, " -", // Test 2. |
371 keys::kValueSuffixKey, "alu", // Test 3. | 452 keys::kValueSuffixKey, "alu", // Test 3. |
372 keys::kValueEqualsKey, "custom" // Test 4. | 453 keys::kValueEqualsKey, "custom" // Test 4. |
373 }; | 454 }; |
374 const size_t kFailConditionSizes[] = { 2u, 2u, 2u, 2u }; | 455 const size_t kFailConditionSizes[] = { 2u, 2u, 2u, 2u }; |
375 GetArrayAsVector(kFailCondition, kFailConditionSizes, 4u, &tests); | 456 GetArrayAsVector(kFailCondition, kFailConditionSizes, 4u, &tests); |
376 MatchAndCheck(tests, keys::kResponseHeadersKey, &url_request, &result); | 457 MatchAndCheck(tests, keys::kResponseHeadersKey, stage, &url_request, &result); |
377 EXPECT_FALSE(result); | 458 EXPECT_FALSE(result); |
378 | 459 |
379 // 1.c. -- This should fail (mixing name and value from different headers) | 460 // 1.c. -- This should fail (mixing name and value from different headers) |
380 const std::string kMixingCondition[] = { | 461 const std::string kMixingCondition[] = { |
381 keys::kNameSuffixKey, "Header-B", | 462 keys::kNameSuffixKey, "Header-B", |
382 keys::kValueEqualsKey, "custom/value" | 463 keys::kValueEqualsKey, "custom/value" |
383 }; | 464 }; |
384 const size_t kMixingConditionSizes[] = { arraysize(kMixingCondition) }; | 465 const size_t kMixingConditionSizes[] = { arraysize(kMixingCondition) }; |
385 GetArrayAsVector(kMixingCondition, kMixingConditionSizes, 1u, &tests); | 466 GetArrayAsVector(kMixingCondition, kMixingConditionSizes, 1u, &tests); |
386 MatchAndCheck(tests, keys::kResponseHeadersKey, &url_request, &result); | 467 MatchAndCheck(tests, keys::kResponseHeadersKey, stage, &url_request, &result); |
387 EXPECT_FALSE(result); | 468 EXPECT_FALSE(result); |
388 | 469 |
389 // 1.d. -- Test handling multiple values for one header (both should pass). | 470 // 1.d. -- Test handling multiple values for one header (both should pass). |
390 const std::string kMoreValues1[] = { | 471 const std::string kMoreValues1[] = { |
391 keys::kNameEqualsKey, "Custom-header-b", | 472 keys::kNameEqualsKey, "Custom-header-b", |
392 keys::kValueEqualsKey, "valueA" | 473 keys::kValueEqualsKey, "valueA" |
393 }; | 474 }; |
394 const size_t kMoreValues1Sizes[] = { arraysize(kMoreValues1) }; | 475 const size_t kMoreValues1Sizes[] = { arraysize(kMoreValues1) }; |
395 GetArrayAsVector(kMoreValues1, kMoreValues1Sizes, 1u, &tests); | 476 GetArrayAsVector(kMoreValues1, kMoreValues1Sizes, 1u, &tests); |
396 MatchAndCheck(tests, keys::kResponseHeadersKey, &url_request, &result); | 477 MatchAndCheck(tests, keys::kResponseHeadersKey, stage, &url_request, &result); |
397 EXPECT_TRUE(result); | 478 EXPECT_TRUE(result); |
398 const std::string kMoreValues2[] = { | 479 const std::string kMoreValues2[] = { |
399 keys::kNameEqualsKey, "Custom-header-b", | 480 keys::kNameEqualsKey, "Custom-header-b", |
400 keys::kValueEqualsKey, "valueB" | 481 keys::kValueEqualsKey, "valueB" |
401 }; | 482 }; |
402 const size_t kMoreValues2Sizes[] = { arraysize(kMoreValues2) }; | 483 const size_t kMoreValues2Sizes[] = { arraysize(kMoreValues2) }; |
403 GetArrayAsVector(kMoreValues2, kMoreValues2Sizes, 1u, &tests); | 484 GetArrayAsVector(kMoreValues2, kMoreValues2Sizes, 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 // 1.e. -- This should fail as conjunction but pass as disjunction. | 488 // 1.e. -- This should fail as conjunction but pass as disjunction. |
408 const std::string kConflict[] = { | 489 const std::string kConflict[] = { |
409 keys::kNameSuffixKey, "Header", // True for some header. | 490 keys::kNameSuffixKey, "Header", // True for some header. |
410 keys::kNameContainsKey, "Header-B" // True for a different header. | 491 keys::kNameContainsKey, "Header-B" // True for a different header. |
411 }; | 492 }; |
412 // First disjunction, no conflict. | 493 // First disjunction, no conflict. |
413 const size_t kNoConflictSizes[] = { 2u, 2u }; | 494 const size_t kNoConflictSizes[] = { 2u, 2u }; |
414 GetArrayAsVector(kConflict, kNoConflictSizes, 2u, &tests); | 495 GetArrayAsVector(kConflict, kNoConflictSizes, 2u, &tests); |
415 MatchAndCheck(tests, keys::kResponseHeadersKey, &url_request, &result); | 496 MatchAndCheck(tests, keys::kResponseHeadersKey, stage, &url_request, &result); |
416 EXPECT_TRUE(result); | 497 EXPECT_TRUE(result); |
417 // Then conjunction, conflict. | 498 // Then conjunction, conflict. |
418 const size_t kConflictSizes[] = { arraysize(kConflict) }; | 499 const size_t kConflictSizes[] = { arraysize(kConflict) }; |
419 GetArrayAsVector(kConflict, kConflictSizes, 1u, &tests); | 500 GetArrayAsVector(kConflict, kConflictSizes, 1u, &tests); |
420 MatchAndCheck(tests, keys::kResponseHeadersKey, &url_request, &result); | 501 MatchAndCheck(tests, keys::kResponseHeadersKey, stage, &url_request, &result); |
421 EXPECT_FALSE(result); | 502 EXPECT_FALSE(result); |
422 | 503 |
423 // 1.f. -- This should pass, checking for correct treatment of ',' in values. | 504 // 1.f. -- This should pass, checking for correct treatment of ',' in values. |
424 const std::string kComma[] = { | 505 const std::string kComma[] = { |
425 keys::kNameSuffixKey, "Header-C", | 506 keys::kNameSuffixKey, "Header-C", |
426 keys::kValueEqualsKey, "valueC, valueD" | 507 keys::kValueEqualsKey, "valueC, valueD" |
427 }; | 508 }; |
428 const size_t kCommaSizes[] = { arraysize(kComma) }; | 509 const size_t kCommaSizes[] = { arraysize(kComma) }; |
429 GetArrayAsVector(kComma, kCommaSizes, 1u, &tests); | 510 GetArrayAsVector(kComma, kCommaSizes, 1u, &tests); |
430 MatchAndCheck(tests, keys::kResponseHeadersKey, &url_request, &result); | 511 MatchAndCheck(tests, keys::kResponseHeadersKey, stage, &url_request, &result); |
431 EXPECT_TRUE(result); | 512 EXPECT_TRUE(result); |
432 | 513 |
433 // 1.g. -- This should pass, empty values are values as well. | 514 // 1.g. -- This should pass, empty values are values as well. |
434 const std::string kEmpty[] = { | 515 const std::string kEmpty[] = { |
435 keys::kNameEqualsKey, "custom-header-d", | 516 keys::kNameEqualsKey, "custom-header-d", |
436 keys::kValueEqualsKey, "" | 517 keys::kValueEqualsKey, "" |
437 }; | 518 }; |
438 const size_t kEmptySizes[] = { arraysize(kEmpty) }; | 519 const size_t kEmptySizes[] = { arraysize(kEmpty) }; |
439 GetArrayAsVector(kEmpty, kEmptySizes, 1u, &tests); | 520 GetArrayAsVector(kEmpty, kEmptySizes, 1u, &tests); |
440 MatchAndCheck(tests, keys::kResponseHeadersKey, &url_request, &result); | 521 MatchAndCheck(tests, keys::kResponseHeadersKey, stage, &url_request, &result); |
441 EXPECT_TRUE(result); | 522 EXPECT_TRUE(result); |
442 | 523 |
443 // 1.h. -- Values are case-sensitive, this should fail. | 524 // 1.h. -- Values are case-sensitive, this should fail. |
444 const std::string kLowercase[] = { | 525 const std::string kLowercase[] = { |
445 keys::kNameEqualsKey, "Custom-header-b", | 526 keys::kNameEqualsKey, "Custom-header-b", |
446 keys::kValuePrefixKey, "valueb", // valueb != valueB | 527 keys::kValuePrefixKey, "valueb", // valueb != valueB |
447 keys::kNameEqualsKey, "Custom-header-b", | 528 keys::kNameEqualsKey, "Custom-header-b", |
448 keys::kValueSuffixKey, "valueb", | 529 keys::kValueSuffixKey, "valueb", |
449 keys::kNameEqualsKey, "Custom-header-b", | 530 keys::kNameEqualsKey, "Custom-header-b", |
450 keys::kValueContainsKey, "valueb", | 531 keys::kValueContainsKey, "valueb", |
451 keys::kNameEqualsKey, "Custom-header-b", | 532 keys::kNameEqualsKey, "Custom-header-b", |
452 keys::kValueEqualsKey, "valueb" | 533 keys::kValueEqualsKey, "valueb" |
453 }; | 534 }; |
454 const size_t kLowercaseSizes[] = { 4u, 4u, 4u, 4u }; // As disjunction. | 535 const size_t kLowercaseSizes[] = { 4u, 4u, 4u, 4u }; // As disjunction. |
455 GetArrayAsVector(kLowercase, kLowercaseSizes, 4u, &tests); | 536 GetArrayAsVector(kLowercase, kLowercaseSizes, 4u, &tests); |
456 MatchAndCheck(tests, keys::kResponseHeadersKey, &url_request, &result); | 537 MatchAndCheck(tests, keys::kResponseHeadersKey, stage, &url_request, &result); |
457 EXPECT_FALSE(result); | 538 EXPECT_FALSE(result); |
458 | 539 |
459 // 1.i. -- Names are case-insensitive, this should pass. | 540 // 1.i. -- Names are case-insensitive, this should pass. |
460 const std::string kUppercase[] = { | 541 const std::string kUppercase[] = { |
461 keys::kNamePrefixKey, "CUSTOM-HEADER-B", | 542 keys::kNamePrefixKey, "CUSTOM-HEADER-B", |
462 keys::kNameSuffixKey, "CUSTOM-HEADER-B", | 543 keys::kNameSuffixKey, "CUSTOM-HEADER-B", |
463 keys::kNameEqualsKey, "CUSTOM-HEADER-B", | 544 keys::kNameEqualsKey, "CUSTOM-HEADER-B", |
464 keys::kNameContainsKey, "CUSTOM-HEADER-B" | 545 keys::kNameContainsKey, "CUSTOM-HEADER-B" |
465 }; | 546 }; |
466 const size_t kUppercaseSizes[] = { arraysize(kUppercase) }; // Conjunction. | 547 const size_t kUppercaseSizes[] = { arraysize(kUppercase) }; // Conjunction. |
467 GetArrayAsVector(kUppercase, kUppercaseSizes, 1u, &tests); | 548 GetArrayAsVector(kUppercase, kUppercaseSizes, 1u, &tests); |
468 MatchAndCheck(tests, keys::kResponseHeadersKey, &url_request, &result); | 549 MatchAndCheck(tests, keys::kResponseHeadersKey, stage, &url_request, &result); |
469 EXPECT_TRUE(result); | 550 EXPECT_TRUE(result); |
470 | 551 |
471 // 2.a. -- This should pass as disjunction, because one of the tests passes. | 552 // 2.a. -- This should pass as disjunction, because one of the tests passes. |
472 const std::string kDisjunction[] = { | 553 const std::string kDisjunction[] = { |
473 keys::kNamePrefixKey, "Non-existing", // This one fails. | 554 keys::kNamePrefixKey, "Non-existing", // This one fails. |
474 keys::kNameSuffixKey, "Non-existing", // This one fails. | 555 keys::kNameSuffixKey, "Non-existing", // This one fails. |
475 keys::kValueEqualsKey, "void", // This one fails. | 556 keys::kValueEqualsKey, "void", // This one fails. |
476 keys::kValueContainsKey, "alu" // This passes. | 557 keys::kValueContainsKey, "alu" // This passes. |
477 }; | 558 }; |
478 const size_t kDisjunctionSizes[] = { 2u, 2u, 2u, 2u }; | 559 const size_t kDisjunctionSizes[] = { 2u, 2u, 2u, 2u }; |
479 GetArrayAsVector(kDisjunction, kDisjunctionSizes, 4u, &tests); | 560 GetArrayAsVector(kDisjunction, kDisjunctionSizes, 4u, &tests); |
480 MatchAndCheck(tests, keys::kResponseHeadersKey, &url_request, &result); | 561 MatchAndCheck(tests, keys::kResponseHeadersKey, stage, &url_request, &result); |
481 EXPECT_TRUE(result); | 562 EXPECT_TRUE(result); |
482 | 563 |
483 // 3.a. -- This should pass. | 564 // 3.a. -- This should pass. |
484 const std::string kNonExistent[] = { | 565 const std::string kNonExistent[] = { |
485 keys::kNameEqualsKey, "Non-existing", | 566 keys::kNameEqualsKey, "Non-existing", |
486 keys::kValueEqualsKey, "void" | 567 keys::kValueEqualsKey, "void" |
487 }; | 568 }; |
488 const size_t kNonExistentSizes[] = { arraysize(kNonExistent) }; | 569 const size_t kNonExistentSizes[] = { arraysize(kNonExistent) }; |
489 GetArrayAsVector(kNonExistent, kNonExistentSizes, 1u, &tests); | 570 GetArrayAsVector(kNonExistent, kNonExistentSizes, 1u, &tests); |
490 MatchAndCheck(tests, keys::kExcludeResponseHeadersKey, &url_request, &result); | 571 MatchAndCheck( |
| 572 tests, keys::kExcludeResponseHeadersKey, stage, &url_request, &result); |
491 EXPECT_TRUE(result); | 573 EXPECT_TRUE(result); |
492 | 574 |
493 // 3.b. -- This should fail. | 575 // 3.b. -- This should fail. |
494 const std::string kExisting[] = { | 576 const std::string kExisting[] = { |
495 keys::kNameEqualsKey, "custom-header-b", | 577 keys::kNameEqualsKey, "custom-header-b", |
496 keys::kValueEqualsKey, "valueB" | 578 keys::kValueEqualsKey, "valueB" |
497 }; | 579 }; |
498 const size_t kExistingSize[] = { arraysize(kExisting) }; | 580 const size_t kExistingSize[] = { arraysize(kExisting) }; |
499 GetArrayAsVector(kExisting, kExistingSize, 1u, &tests); | 581 GetArrayAsVector(kExisting, kExistingSize, 1u, &tests); |
500 MatchAndCheck(tests, keys::kExcludeResponseHeadersKey, &url_request, &result); | 582 MatchAndCheck( |
| 583 tests, keys::kExcludeResponseHeadersKey, stage, &url_request, &result); |
501 EXPECT_FALSE(result); | 584 EXPECT_FALSE(result); |
502 } | 585 } |
503 | 586 |
504 } // namespace extensions | 587 } // namespace extensions |
OLD | NEW |