OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "ppapi/tests/test_url_loader.h" | 5 #include "ppapi/tests/test_url_loader.h" |
6 | 6 |
7 #include <stdio.h> | 7 #include <stdio.h> |
8 #include <string.h> | 8 #include <string.h> |
9 #include <string> | 9 #include <string> |
10 | 10 |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
99 if (url_loader_trusted_interface_) | 99 if (url_loader_trusted_interface_) |
100 instance_->AppendError("URLLoaderTrusted interface is supported by NaCl"); | 100 instance_->AppendError("URLLoaderTrusted interface is supported by NaCl"); |
101 #endif | 101 #endif |
102 } | 102 } |
103 return EnsureRunningOverHTTP(); | 103 return EnsureRunningOverHTTP(); |
104 } | 104 } |
105 | 105 |
106 void TestURLLoader::RunTests(const std::string& filter) { | 106 void TestURLLoader::RunTests(const std::string& filter) { |
107 RUN_TEST_FORCEASYNC_AND_NOT(BasicGET, filter); | 107 RUN_TEST_FORCEASYNC_AND_NOT(BasicGET, filter); |
108 RUN_TEST_FORCEASYNC_AND_NOT(BasicPOST, filter); | 108 RUN_TEST_FORCEASYNC_AND_NOT(BasicPOST, filter); |
109 // FileIO interface is not yet supported by ppapi/proxy. | 109 RUN_TEST_FORCEASYNC_AND_NOT(BasicFilePOST, filter); |
110 if (!testing_interface_->IsOutOfProcess()) { | 110 RUN_TEST_FORCEASYNC_AND_NOT(BasicFileRangePOST, filter); |
111 RUN_TEST_FORCEASYNC_AND_NOT(BasicFilePOST, filter); | |
112 RUN_TEST_FORCEASYNC_AND_NOT(BasicFileRangePOST, filter); | |
113 } | |
114 RUN_TEST_FORCEASYNC_AND_NOT(CompoundBodyPOST, filter); | 111 RUN_TEST_FORCEASYNC_AND_NOT(CompoundBodyPOST, filter); |
115 RUN_TEST_FORCEASYNC_AND_NOT(EmptyDataPOST, filter); | 112 RUN_TEST_FORCEASYNC_AND_NOT(EmptyDataPOST, filter); |
116 RUN_TEST_FORCEASYNC_AND_NOT(BinaryDataPOST, filter); | 113 RUN_TEST_FORCEASYNC_AND_NOT(BinaryDataPOST, filter); |
117 RUN_TEST_FORCEASYNC_AND_NOT(CustomRequestHeader, filter); | 114 RUN_TEST_FORCEASYNC_AND_NOT(CustomRequestHeader, filter); |
118 RUN_TEST_FORCEASYNC_AND_NOT(FailsBogusContentLength, filter); | 115 RUN_TEST_FORCEASYNC_AND_NOT(FailsBogusContentLength, filter); |
119 // TODO(bbudge) Enable these tests for NaCl when we have a way to get | |
120 // the document URL. The PPAPI tests use PPB_URLUtil_Dev. | |
121 #if !(defined __native_client__) | |
122 RUN_TEST_FORCEASYNC_AND_NOT(SameOriginRestriction, filter); | |
123 // Cross origin requests require the 'test_case.html.mock-http-headers' | |
124 // file to be in the same directory as 'test_case.html', so that the test | |
125 // server returns CORS response headers. | |
126 RUN_TEST_FORCEASYNC_AND_NOT(CrossOriginRequest, filter); | |
127 #endif | |
128 RUN_TEST_FORCEASYNC_AND_NOT(JavascriptURLRestriction, filter); | |
129 RUN_TEST_FORCEASYNC_AND_NOT(MethodRestriction, filter); | |
130 RUN_TEST_FORCEASYNC_AND_NOT(HeaderRestriction, filter); | |
131 RUN_TEST_FORCEASYNC_AND_NOT(CustomReferrer, filter); | |
132 RUN_TEST_FORCEASYNC_AND_NOT(CustomContentTransferEncoding, filter); | |
133 RUN_TEST_FORCEASYNC_AND_NOT(StreamToFile, filter); | 116 RUN_TEST_FORCEASYNC_AND_NOT(StreamToFile, filter); |
| 117 RUN_TEST_FORCEASYNC_AND_NOT(UntrustedSameOriginRestriction, filter); |
| 118 RUN_TEST_FORCEASYNC_AND_NOT(TrustedSameOriginRestriction, filter); |
| 119 RUN_TEST_FORCEASYNC_AND_NOT(UntrustedCrossOriginRequest, filter); |
| 120 RUN_TEST_FORCEASYNC_AND_NOT(TrustedCrossOriginRequest, filter); |
| 121 RUN_TEST_FORCEASYNC_AND_NOT(UntrustedJavascriptURLRestriction, filter); |
| 122 RUN_TEST_FORCEASYNC_AND_NOT(TrustedJavascriptURLRestriction, filter); |
| 123 RUN_TEST_FORCEASYNC_AND_NOT(UntrustedMethodRestriction, filter); |
| 124 RUN_TEST_FORCEASYNC_AND_NOT(TrustedMethodRestriction, filter); |
| 125 RUN_TEST_FORCEASYNC_AND_NOT(UntrustedHeaderRestriction, filter); |
| 126 RUN_TEST_FORCEASYNC_AND_NOT(TrustedHeaderRestriction, filter); |
| 127 RUN_TEST_FORCEASYNC_AND_NOT(UntrustedCustomReferrer, filter); |
| 128 RUN_TEST_FORCEASYNC_AND_NOT(TrustedCustomReferrer, filter); |
| 129 RUN_TEST_FORCEASYNC_AND_NOT(UntrustedCustomContentTransferEncoding, filter); |
| 130 RUN_TEST_FORCEASYNC_AND_NOT(TrustedCustomContentTransferEncoding, filter); |
134 RUN_TEST_FORCEASYNC_AND_NOT(AuditURLRedirect, filter); | 131 RUN_TEST_FORCEASYNC_AND_NOT(AuditURLRedirect, filter); |
135 RUN_TEST_FORCEASYNC_AND_NOT(AbortCalls, filter); | 132 RUN_TEST_FORCEASYNC_AND_NOT(AbortCalls, filter); |
136 RUN_TEST_FORCEASYNC_AND_NOT(UntendedLoad, filter); | 133 RUN_TEST_FORCEASYNC_AND_NOT(UntendedLoad, filter); |
137 } | 134 } |
138 | 135 |
139 std::string TestURLLoader::ReadEntireFile(pp::FileIO* file_io, | 136 std::string TestURLLoader::ReadEntireFile(pp::FileIO* file_io, |
140 std::string* data) { | 137 std::string* data) { |
141 TestCompletionCallback callback(instance_->pp_instance(), force_async_); | 138 TestCompletionCallback callback(instance_->pp_instance(), force_async_); |
142 char buf[256]; | 139 char buf[256]; |
143 int64_t offset = 0; | 140 int64_t offset = 0; |
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
506 int32_t file_descriptor = file_io_trusted_interface_->GetOSFileDescriptor( | 503 int32_t file_descriptor = file_io_trusted_interface_->GetOSFileDescriptor( |
507 reader.pp_resource()); | 504 reader.pp_resource()); |
508 if (file_descriptor < 0) | 505 if (file_descriptor < 0) |
509 return "FileIO::GetOSFileDescriptor() returned a bad file descriptor."; | 506 return "FileIO::GetOSFileDescriptor() returned a bad file descriptor."; |
510 #endif | 507 #endif |
511 } | 508 } |
512 } | 509 } |
513 PASS(); | 510 PASS(); |
514 } | 511 } |
515 | 512 |
516 // If a cross-origin request is not specified, the load should fail only for | 513 // Untrusted, unintended cross-origin requests should fail. |
517 // untrusted loaders. | 514 std::string TestURLLoader::TestUntrustedSameOriginRestriction() { |
518 std::string TestURLLoader::TestSameOriginRestriction() { | |
519 pp::URLRequestInfo request(instance_); | 515 pp::URLRequestInfo request(instance_); |
520 std::string cross_origin_url = GetReachableCrossOriginURL(); | 516 std::string cross_origin_url = GetReachableCrossOriginURL(); |
521 request.SetURL(cross_origin_url); | 517 request.SetURL(cross_origin_url); |
522 | 518 |
523 int32_t rv; | 519 int32_t rv = OpenUntrusted(request); |
524 rv = OpenUntrusted(request); | |
525 if (rv != PP_ERROR_NOACCESS) | 520 if (rv != PP_ERROR_NOACCESS) |
526 return ReportError( | 521 return ReportError( |
527 "Untrusted, unintended cross-origin request restriction", rv); | 522 "Untrusted, unintended cross-origin request restriction", rv); |
528 #if !(defined __native_client__) | |
529 rv = OpenTrusted(request); | |
530 if (rv != PP_OK) | |
531 return ReportError("Trusted cross-origin request", rv); | |
532 #endif | |
533 | 523 |
534 PASS(); | 524 PASS(); |
535 } | 525 } |
536 | 526 |
537 // If a cross-origin request is specified, and the URL is reachable, the load | 527 // Trusted, unintended cross-origin requests should succeed. |
538 // should succeed. | 528 std::string TestURLLoader::TestTrustedSameOriginRestriction() { |
539 std::string TestURLLoader::TestCrossOriginRequest() { | 529 pp::URLRequestInfo request(instance_); |
| 530 std::string cross_origin_url = GetReachableCrossOriginURL(); |
| 531 request.SetURL(cross_origin_url); |
| 532 |
| 533 int32_t rv = OpenTrusted(request); |
| 534 if (rv != PP_OK) |
| 535 return ReportError("Trusted cross-origin request failed", rv); |
| 536 |
| 537 PASS(); |
| 538 } |
| 539 |
| 540 // Untrusted, intended cross-origin requests should use CORS and succeed. |
| 541 std::string TestURLLoader::TestUntrustedCrossOriginRequest() { |
540 pp::URLRequestInfo request(instance_); | 542 pp::URLRequestInfo request(instance_); |
541 std::string cross_origin_url = GetReachableCrossOriginURL(); | 543 std::string cross_origin_url = GetReachableCrossOriginURL(); |
542 request.SetURL(cross_origin_url); | 544 request.SetURL(cross_origin_url); |
543 request.SetAllowCrossOriginRequests(true); | 545 request.SetAllowCrossOriginRequests(true); |
544 | 546 |
545 int32_t rv; | 547 int32_t rv = OpenUntrusted(request); |
546 rv = OpenUntrusted(request); | |
547 if (rv != PP_OK) | 548 if (rv != PP_OK) |
548 return ReportError( | 549 return ReportError( |
549 "Untrusted, intended cross-origin request", rv); | 550 "Untrusted, intended cross-origin request failed", rv); |
550 #if !(defined __native_client__) | |
551 rv = OpenTrusted(request); | |
552 if (rv != PP_OK) | |
553 return ReportError("Trusted cross-origin request", rv); | |
554 #endif | |
555 | 551 |
556 PASS(); | 552 PASS(); |
557 } | 553 } |
558 | 554 |
559 // Javascript URLs are only reachable by trusted loaders. | 555 // Trusted, intended cross-origin requests should use CORS and succeed. |
560 std::string TestURLLoader::TestJavascriptURLRestriction() { | 556 std::string TestURLLoader::TestTrustedCrossOriginRequest() { |
| 557 pp::URLRequestInfo request(instance_); |
| 558 std::string cross_origin_url = GetReachableCrossOriginURL(); |
| 559 request.SetURL(cross_origin_url); |
| 560 request.SetAllowCrossOriginRequests(true); |
| 561 |
| 562 int32_t rv = OpenTrusted(request); |
| 563 if (rv != PP_OK) |
| 564 return ReportError("Trusted cross-origin request failed", rv); |
| 565 |
| 566 PASS(); |
| 567 } |
| 568 |
| 569 // Untrusted Javascript URLs requests should fail. |
| 570 std::string TestURLLoader::TestUntrustedJavascriptURLRestriction() { |
561 pp::URLRequestInfo request(instance_); | 571 pp::URLRequestInfo request(instance_); |
562 request.SetURL("javascript:foo = bar"); | 572 request.SetURL("javascript:foo = bar"); |
563 | 573 |
564 int32_t rv; | 574 int32_t rv = OpenUntrusted(request); |
565 rv = OpenUntrusted(request); | |
566 if (rv != PP_ERROR_NOACCESS) | 575 if (rv != PP_ERROR_NOACCESS) |
567 return ReportError( | 576 return ReportError( |
568 "Untrusted Javascript URL request restriction", rv); | 577 "Untrusted Javascript URL request restriction failed", rv); |
569 #if !(defined __native_client__) | 578 |
570 // TODO(bbudge) Fix Javascript URLs for trusted loaders. | 579 PASS(); |
571 // http://code.google.com/p/chromium/issues/detail?id=103062 | 580 } |
572 // rv = OpenTrusted(request); | 581 |
573 // if (rv == PP_ERROR_NOACCESS) | 582 // Trusted Javascript URLs requests should succeed. |
574 // return ReportError( | 583 std::string TestURLLoader::TestTrustedJavascriptURLRestriction() { |
575 // "Trusted Javascript URL request", rv); | 584 pp::URLRequestInfo request(instance_); |
576 #endif | 585 request.SetURL("javascript:foo = bar"); |
| 586 |
| 587 int32_t rv = OpenTrusted(request); |
| 588 if (rv == PP_ERROR_NOACCESS) |
| 589 return ReportError( |
| 590 "Trusted Javascript URL request", rv); |
577 | 591 |
578 PASS(); | 592 PASS(); |
579 } | 593 } |
580 | 594 |
581 // HTTP methods are restricted only for untrusted loaders. Forbidden | 595 // HTTP methods are restricted only for untrusted loaders. Forbidden |
582 // methods are CONNECT, TRACE, and TRACK, and any string that is not a valid | 596 // methods are CONNECT, TRACE, and TRACK, and any string that is not a valid |
583 // token (containing special characters like CR, LF). | 597 // token (containing special characters like CR, LF). |
584 // http://www.w3.org/TR/XMLHttpRequest/ | 598 // http://www.w3.org/TR/XMLHttpRequest/ |
585 std::string TestURLLoader::TestMethodRestriction() { | 599 std::string TestURLLoader::TestUntrustedMethodRestriction() { |
586 ASSERT_EQ(OpenUntrusted("cOnNeCt", ""), PP_ERROR_NOACCESS); | 600 ASSERT_EQ(OpenUntrusted("cOnNeCt", ""), PP_ERROR_NOACCESS); |
587 ASSERT_EQ(OpenUntrusted("tRaCk", ""), PP_ERROR_NOACCESS); | 601 ASSERT_EQ(OpenUntrusted("tRaCk", ""), PP_ERROR_NOACCESS); |
588 ASSERT_EQ(OpenUntrusted("tRaCe", ""), PP_ERROR_NOACCESS); | 602 ASSERT_EQ(OpenUntrusted("tRaCe", ""), PP_ERROR_NOACCESS); |
589 ASSERT_EQ(OpenUntrusted("POST\x0d\x0ax-csrf-token:\x20test1234", ""), | 603 ASSERT_EQ(OpenUntrusted("POST\x0d\x0ax-csrf-token:\x20test1234", ""), |
590 PP_ERROR_NOACCESS); | 604 PP_ERROR_NOACCESS); |
591 #if !(defined __native_client__) | 605 PASS(); |
| 606 } |
| 607 |
| 608 // Trusted requests can use restricted methods. |
| 609 std::string TestURLLoader::TestTrustedMethodRestriction() { |
592 ASSERT_EQ(OpenTrusted("cOnNeCt", ""), PP_OK); | 610 ASSERT_EQ(OpenTrusted("cOnNeCt", ""), PP_OK); |
593 ASSERT_EQ(OpenTrusted("tRaCk", ""), PP_OK); | 611 ASSERT_EQ(OpenTrusted("tRaCk", ""), PP_OK); |
594 ASSERT_EQ(OpenTrusted("tRaCe", ""), PP_OK); | 612 ASSERT_EQ(OpenTrusted("tRaCe", ""), PP_OK); |
595 #endif | |
596 | 613 |
597 PASS(); | 614 PASS(); |
598 } | 615 } |
599 | 616 |
600 // HTTP methods are restricted only for untrusted loaders. Try all headers | 617 // HTTP methods are restricted only for untrusted loaders. Try all headers |
601 // that are forbidden by http://www.w3.org/TR/XMLHttpRequest/. | 618 // that are forbidden by http://www.w3.org/TR/XMLHttpRequest/. |
602 std::string TestURLLoader::TestHeaderRestriction() { | 619 std::string TestURLLoader::TestUntrustedHeaderRestriction() { |
603 ASSERT_EQ(OpenUntrusted("GET", "Accept-Charset:\n"), PP_ERROR_NOACCESS); | 620 ASSERT_EQ(OpenUntrusted("GET", "Accept-Charset:\n"), PP_ERROR_NOACCESS); |
604 ASSERT_EQ(OpenUntrusted("GET", "Accept-Encoding:\n"), PP_ERROR_NOACCESS); | 621 ASSERT_EQ(OpenUntrusted("GET", "Accept-Encoding:\n"), PP_ERROR_NOACCESS); |
605 ASSERT_EQ(OpenUntrusted("GET", "Connection:\n"), PP_ERROR_NOACCESS); | 622 ASSERT_EQ(OpenUntrusted("GET", "Connection:\n"), PP_ERROR_NOACCESS); |
606 ASSERT_EQ(OpenUntrusted("GET", "Content-Length:\n"), PP_ERROR_NOACCESS); | 623 ASSERT_EQ(OpenUntrusted("GET", "Content-Length:\n"), PP_ERROR_NOACCESS); |
607 ASSERT_EQ(OpenUntrusted("GET", "Cookie:\n"), PP_ERROR_NOACCESS); | 624 ASSERT_EQ(OpenUntrusted("GET", "Cookie:\n"), PP_ERROR_NOACCESS); |
608 ASSERT_EQ(OpenUntrusted("GET", "Cookie2:\n"), PP_ERROR_NOACCESS); | 625 ASSERT_EQ(OpenUntrusted("GET", "Cookie2:\n"), PP_ERROR_NOACCESS); |
609 ASSERT_EQ(OpenUntrusted( | 626 ASSERT_EQ(OpenUntrusted( |
610 "GET", "Content-Transfer-Encoding:\n"), PP_ERROR_NOACCESS); | 627 "GET", "Content-Transfer-Encoding:\n"), PP_ERROR_NOACCESS); |
611 ASSERT_EQ(OpenUntrusted("GET", "Date:\n"), PP_ERROR_NOACCESS); | 628 ASSERT_EQ(OpenUntrusted("GET", "Date:\n"), PP_ERROR_NOACCESS); |
612 ASSERT_EQ(OpenUntrusted("GET", "Expect:\n"), PP_ERROR_NOACCESS); | 629 ASSERT_EQ(OpenUntrusted("GET", "Expect:\n"), PP_ERROR_NOACCESS); |
613 ASSERT_EQ(OpenUntrusted("GET", "Host:\n"), PP_ERROR_NOACCESS); | 630 ASSERT_EQ(OpenUntrusted("GET", "Host:\n"), PP_ERROR_NOACCESS); |
614 ASSERT_EQ(OpenUntrusted("GET", "Keep-Alive:\n"), PP_ERROR_NOACCESS); | 631 ASSERT_EQ(OpenUntrusted("GET", "Keep-Alive:\n"), PP_ERROR_NOACCESS); |
615 ASSERT_EQ(OpenUntrusted("GET", "Referer:\n"), PP_ERROR_NOACCESS); | 632 ASSERT_EQ(OpenUntrusted("GET", "Referer:\n"), PP_ERROR_NOACCESS); |
616 ASSERT_EQ(OpenUntrusted("GET", "TE:\n"), PP_ERROR_NOACCESS); | 633 ASSERT_EQ(OpenUntrusted("GET", "TE:\n"), PP_ERROR_NOACCESS); |
617 ASSERT_EQ(OpenUntrusted("GET", "Trailer:\n"), PP_ERROR_NOACCESS); | 634 ASSERT_EQ(OpenUntrusted("GET", "Trailer:\n"), PP_ERROR_NOACCESS); |
618 ASSERT_EQ(OpenUntrusted("GET", "Transfer-Encoding:\n"), PP_ERROR_NOACCESS); | 635 ASSERT_EQ(OpenUntrusted("GET", "Transfer-Encoding:\n"), PP_ERROR_NOACCESS); |
619 ASSERT_EQ(OpenUntrusted("GET", "Upgrade:\n"), PP_ERROR_NOACCESS); | 636 ASSERT_EQ(OpenUntrusted("GET", "Upgrade:\n"), PP_ERROR_NOACCESS); |
620 ASSERT_EQ(OpenUntrusted("GET", "User-Agent:\n"), PP_ERROR_NOACCESS); | 637 ASSERT_EQ(OpenUntrusted("GET", "User-Agent:\n"), PP_ERROR_NOACCESS); |
621 ASSERT_EQ(OpenUntrusted("GET", "Via:\n"), PP_ERROR_NOACCESS); | 638 ASSERT_EQ(OpenUntrusted("GET", "Via:\n"), PP_ERROR_NOACCESS); |
622 ASSERT_EQ(OpenUntrusted( | 639 ASSERT_EQ(OpenUntrusted( |
623 "GET", "Proxy-Authorization: Basic dXNlcjpwYXNzd29yZA==:\n"), | 640 "GET", "Proxy-Authorization: Basic dXNlcjpwYXNzd29yZA==:\n"), |
624 PP_ERROR_NOACCESS); | 641 PP_ERROR_NOACCESS); |
625 ASSERT_EQ(OpenUntrusted("GET", "Sec-foo:\n"), PP_ERROR_NOACCESS); | 642 ASSERT_EQ(OpenUntrusted("GET", "Sec-foo:\n"), PP_ERROR_NOACCESS); |
626 | 643 |
627 #if !(defined __native_client__) | 644 PASS(); |
| 645 } |
| 646 |
| 647 // Trusted requests can use restricted headers. |
| 648 std::string TestURLLoader::TestTrustedHeaderRestriction() { |
628 ASSERT_EQ(OpenTrusted("GET", "Accept-Charset:\n"), PP_OK); | 649 ASSERT_EQ(OpenTrusted("GET", "Accept-Charset:\n"), PP_OK); |
629 ASSERT_EQ(OpenTrusted("GET", "Accept-Encoding:\n"), PP_OK); | 650 ASSERT_EQ(OpenTrusted("GET", "Accept-Encoding:\n"), PP_OK); |
630 ASSERT_EQ(OpenTrusted("GET", "Connection:\n"), PP_OK); | 651 ASSERT_EQ(OpenTrusted("GET", "Connection:\n"), PP_OK); |
631 ASSERT_EQ(OpenTrusted("GET", "Content-Length:\n"), PP_OK); | 652 ASSERT_EQ(OpenTrusted("GET", "Content-Length:\n"), PP_OK); |
632 ASSERT_EQ(OpenTrusted("GET", "Cookie:\n"), PP_OK); | 653 ASSERT_EQ(OpenTrusted("GET", "Cookie:\n"), PP_OK); |
633 ASSERT_EQ(OpenTrusted("GET", "Cookie2:\n"), PP_OK); | 654 ASSERT_EQ(OpenTrusted("GET", "Cookie2:\n"), PP_OK); |
634 ASSERT_EQ(OpenTrusted( | 655 ASSERT_EQ(OpenTrusted( |
635 "GET", "Content-Transfer-Encoding:\n"), PP_OK); | 656 "GET", "Content-Transfer-Encoding:\n"), PP_OK); |
636 ASSERT_EQ(OpenTrusted("GET", "Date:\n"), PP_OK); | 657 ASSERT_EQ(OpenTrusted("GET", "Date:\n"), PP_OK); |
637 ASSERT_EQ(OpenTrusted("GET", "Expect:\n"), PP_OK); | 658 ASSERT_EQ(OpenTrusted("GET", "Expect:\n"), PP_OK); |
638 ASSERT_EQ(OpenTrusted("GET", "Host:\n"), PP_OK); | 659 ASSERT_EQ(OpenTrusted("GET", "Host:\n"), PP_OK); |
639 ASSERT_EQ(OpenTrusted("GET", "Keep-Alive:\n"), PP_OK); | 660 ASSERT_EQ(OpenTrusted("GET", "Keep-Alive:\n"), PP_OK); |
640 ASSERT_EQ(OpenTrusted("GET", "Referer:\n"), PP_OK); | 661 ASSERT_EQ(OpenTrusted("GET", "Referer:\n"), PP_OK); |
641 ASSERT_EQ(OpenTrusted("GET", "TE:\n"), PP_OK); | 662 ASSERT_EQ(OpenTrusted("GET", "TE:\n"), PP_OK); |
642 ASSERT_EQ(OpenTrusted("GET", "Trailer:\n"), PP_OK); | 663 ASSERT_EQ(OpenTrusted("GET", "Trailer:\n"), PP_OK); |
643 ASSERT_EQ(OpenTrusted("GET", "Transfer-Encoding:\n"), PP_OK); | 664 ASSERT_EQ(OpenTrusted("GET", "Transfer-Encoding:\n"), PP_OK); |
644 ASSERT_EQ(OpenTrusted("GET", "Upgrade:\n"), PP_OK); | 665 ASSERT_EQ(OpenTrusted("GET", "Upgrade:\n"), PP_OK); |
645 ASSERT_EQ(OpenTrusted("GET", "User-Agent:\n"), PP_OK); | 666 ASSERT_EQ(OpenTrusted("GET", "User-Agent:\n"), PP_OK); |
646 ASSERT_EQ(OpenTrusted("GET", "Via:\n"), PP_OK); | 667 ASSERT_EQ(OpenTrusted("GET", "Via:\n"), PP_OK); |
647 ASSERT_EQ(OpenTrusted( | 668 ASSERT_EQ(OpenTrusted( |
648 "GET", "Proxy-Authorization: Basic dXNlcjpwYXNzd29yZA==:\n"), PP_OK); | 669 "GET", "Proxy-Authorization: Basic dXNlcjpwYXNzd29yZA==:\n"), PP_OK); |
649 ASSERT_EQ(OpenTrusted("GET", "Sec-foo:\n"), PP_OK); | 670 ASSERT_EQ(OpenTrusted("GET", "Sec-foo:\n"), PP_OK); |
650 #endif | |
651 | 671 |
652 PASS(); | 672 PASS(); |
653 } | 673 } |
654 | 674 |
655 // Custom referrers are only allowed for trusted loaders. | 675 // Untrusted requests with custom referrer should fail. |
656 std::string TestURLLoader::TestCustomReferrer() { | 676 std::string TestURLLoader::TestUntrustedCustomReferrer() { |
657 pp::URLRequestInfo request(instance_); | 677 pp::URLRequestInfo request(instance_); |
658 request.SetCustomReferrerURL("http://www.google.com/"); | 678 request.SetCustomReferrerURL("http://www.google.com/"); |
659 | 679 |
660 int32_t rv; | 680 int32_t rv = OpenUntrusted(request); |
661 rv = OpenUntrusted(request); | |
662 if (rv != PP_ERROR_NOACCESS) | 681 if (rv != PP_ERROR_NOACCESS) |
663 return ReportError( | 682 return ReportError( |
664 "Untrusted request with custom referrer restriction", rv); | 683 "Untrusted request with custom referrer restriction", rv); |
665 #if !(defined __native_client__) | 684 |
666 rv = OpenTrusted(request); | |
667 if (rv != PP_OK) | |
668 return ReportError("Trusted request with custom referrer", rv); | |
669 #endif | |
670 PASS(); | 685 PASS(); |
671 } | 686 } |
672 | 687 |
673 // Custom transfer encodings are only allowed for trusted loaders. | 688 // Trusted requests with custom referrer should succeed. |
674 std::string TestURLLoader::TestCustomContentTransferEncoding() { | 689 std::string TestURLLoader::TestTrustedCustomReferrer() { |
| 690 pp::URLRequestInfo request(instance_); |
| 691 request.SetCustomReferrerURL("http://www.google.com/"); |
| 692 |
| 693 int32_t rv = OpenTrusted(request); |
| 694 if (rv != PP_OK) |
| 695 return ReportError("Trusted request with custom referrer", rv); |
| 696 |
| 697 PASS(); |
| 698 } |
| 699 |
| 700 // Untrusted requests with custom transfer encodings should fail. |
| 701 std::string TestURLLoader::TestUntrustedCustomContentTransferEncoding() { |
675 pp::URLRequestInfo request(instance_); | 702 pp::URLRequestInfo request(instance_); |
676 request.SetCustomContentTransferEncoding("foo"); | 703 request.SetCustomContentTransferEncoding("foo"); |
677 | 704 |
678 int32_t rv; | 705 int32_t rv = OpenUntrusted(request); |
679 rv = OpenUntrusted(request); | |
680 if (rv != PP_ERROR_NOACCESS) | 706 if (rv != PP_ERROR_NOACCESS) |
681 return ReportError( | 707 return ReportError( |
682 "Untrusted request with content-transfer-encoding restriction", rv); | 708 "Untrusted request with content-transfer-encoding restriction", rv); |
683 #if !(defined __native_client__) | 709 |
684 rv = OpenTrusted(request); | |
685 if (rv != PP_OK) | |
686 return ReportError("Trusted request with content-transfer-encoding", rv); | |
687 #endif | |
688 PASS(); | 710 PASS(); |
689 } | 711 } |
690 | 712 |
| 713 // Trusted requests with custom transfer encodings should succeed. |
| 714 std::string TestURLLoader::TestTrustedCustomContentTransferEncoding() { |
| 715 pp::URLRequestInfo request(instance_); |
| 716 request.SetCustomContentTransferEncoding("foo"); |
| 717 |
| 718 int32_t rv = OpenTrusted(request); |
| 719 if (rv != PP_OK) |
| 720 return ReportError("Trusted request with content-transfer-encoding failed", |
| 721 rv); |
| 722 PASS(); |
| 723 } |
| 724 |
691 // This test should cause a redirect and ensure that the loader runs | 725 // This test should cause a redirect and ensure that the loader runs |
692 // the callback, rather than following the redirect. | 726 // the callback, rather than following the redirect. |
693 std::string TestURLLoader::TestAuditURLRedirect() { | 727 std::string TestURLLoader::TestAuditURLRedirect() { |
694 pp::URLRequestInfo request(instance_); | 728 pp::URLRequestInfo request(instance_); |
695 // This path will cause the server to return a 301 redirect. | 729 // This path will cause the server to return a 301 redirect. |
696 request.SetURL("/server-redirect?www.google.com"); | 730 request.SetURL("/server-redirect?www.google.com"); |
697 request.SetFollowRedirects(false); | 731 request.SetFollowRedirects(false); |
698 | 732 |
699 TestCompletionCallback callback(instance_->pp_instance(), force_async_); | 733 TestCompletionCallback callback(instance_->pp_instance(), force_async_); |
700 | 734 |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
821 if (!error.empty()) | 855 if (!error.empty()) |
822 return error; | 856 return error; |
823 if (body != "hello\n") | 857 if (body != "hello\n") |
824 return ReportError("Couldn't read data", rv); | 858 return ReportError("Couldn't read data", rv); |
825 | 859 |
826 PASS(); | 860 PASS(); |
827 } | 861 } |
828 | 862 |
829 // TODO(viettrungluu): Add tests for FollowRedirect, | 863 // TODO(viettrungluu): Add tests for FollowRedirect, |
830 // Get{Upload,Download}Progress, Close (including abort tests if applicable). | 864 // Get{Upload,Download}Progress, Close (including abort tests if applicable). |
OLD | NEW |