diff options
author | bbudge@chromium.org <bbudge@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-07 05:24:24 +0000 |
---|---|---|
committer | bbudge@chromium.org <bbudge@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-07 05:24:24 +0000 |
commit | d4067421c536731f986013afb0551dc0bcc164c9 (patch) | |
tree | 13b25494908f41acccc747fe1ce041cdb660812f | |
parent | dd3f77785261dbfc32fbc1dd03855701e81ee50c (diff) | |
download | chromium_src-d4067421c536731f986013afb0551dc0bcc164c9.zip chromium_src-d4067421c536731f986013afb0551dc0bcc164c9.tar.gz chromium_src-d4067421c536731f986013afb0551dc0bcc164c9.tar.bz2 |
Break FileIO and URLLoader tests down into individual cases.
This will allow us to keep more of our tests running and identify the cases
where they fail, so we can fix them.
Add a comment to chrome_tests.gypi to keep mock header file together with
test_case.html.
BUG=Pepper Code Yellow
TEST=ui_tests, --gtest_filter=PPAPITest.*, OutOfProcessPPAPITest.*, PPAPINaClTest.*
Review URL: http://codereview.chromium.org/8770023
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@113354 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/chrome_tests.gypi | 1 | ||||
-rw-r--r-- | chrome/test/ui/ppapi_uitest.cc | 167 | ||||
-rw-r--r-- | ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_file_io.cc | 6 | ||||
-rw-r--r-- | ppapi/tests/test_url_loader.cc | 178 | ||||
-rw-r--r-- | ppapi/tests/test_url_loader.h | 21 |
5 files changed, 270 insertions, 103 deletions
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi index 2296852..ce2bac4 100644 --- a/chrome/chrome_tests.gypi +++ b/chrome/chrome_tests.gypi @@ -720,6 +720,7 @@ { 'destination': '<(PRODUCT_DIR)', 'files': [ + # Keep 'test_case.html.mock-http-headers' with 'test_case.html'. '../ppapi/tests/test_case.html', '../ppapi/tests/test_case.html.mock-http-headers', '../ppapi/tests/test_page.css', diff --git a/chrome/test/ui/ppapi_uitest.cc b/chrome/test/ui/ppapi_uitest.cc index 5e5c6a4..60e3454 100644 --- a/chrome/test/ui/ppapi_uitest.cc +++ b/chrome/test/ui/ppapi_uitest.cc @@ -117,6 +117,14 @@ class PPAPITestBase : public UITest { RunTest(test_case); } + std::string StripPrefixes(const std::string& test_name) { + const char* const prefixes[] = { "FAILS_", "FLAKY_", "DISABLED_" }; + for (size_t i = 0; i < sizeof(prefixes)/sizeof(prefixes[0]); ++i) + if (test_name.find(prefixes[i]) == 0) + return test_name.substr(strlen(prefixes[i])); + return test_name; + } + private: void RunTestURL(const GURL& test_url) { scoped_refptr<TabProxy> tab(GetActiveTab()); @@ -213,36 +221,38 @@ class PPAPINaClTest : public PPAPITestBase { } }; +// This macro finesses macro expansion to do what we want. +#define STRIP_PREFIXES(test_name) StripPrefixes(#test_name) // Use these macros to run the tests for a specific interface. // Most interfaces should be tested with both macros. #define TEST_PPAPI_IN_PROCESS(test_name) \ TEST_F(PPAPITest, test_name) { \ - RunTest(#test_name); \ + RunTest(STRIP_PREFIXES(test_name)); \ } #define TEST_PPAPI_OUT_OF_PROCESS(test_name) \ TEST_F(OutOfProcessPPAPITest, test_name) { \ - RunTest(#test_name); \ + RunTest(STRIP_PREFIXES(test_name)); \ } // Similar macros that test over HTTP. #define TEST_PPAPI_IN_PROCESS_VIA_HTTP(test_name) \ TEST_F(PPAPITest, test_name) { \ - RunTestViaHTTP(#test_name); \ + RunTestViaHTTP(STRIP_PREFIXES(test_name)); \ } #define TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(test_name) \ TEST_F(OutOfProcessPPAPITest, test_name) { \ - RunTestViaHTTP(#test_name); \ + RunTestViaHTTP(STRIP_PREFIXES(test_name)); \ } // Similar macros that test with WebSocket server #define TEST_PPAPI_IN_PROCESS_WITH_WS(test_name) \ TEST_F(PPAPITest, test_name) { \ - RunTestWithWebSocketServer(#test_name); \ + RunTestWithWebSocketServer(STRIP_PREFIXES(test_name)); \ } #define TEST_PPAPI_OUT_OF_PROCESS_WITH_WS(test_name) \ TEST_F(OutOfProcessPPAPITest, test_name) { \ - RunTestWithWebSocketServer(#test_name); \ + RunTestWithWebSocketServer(STRIP_PREFIXES(test_name)); \ } @@ -253,7 +263,7 @@ class PPAPINaClTest : public PPAPITestBase { // NaCl based PPAPI tests #define TEST_PPAPI_NACL_VIA_HTTP(test_name) \ TEST_F(PPAPINaClTest, test_name) { \ - RunTestViaHTTP(#test_name); \ + RunTestViaHTTP(STRIP_PREFIXES(test_name)); \ } #endif @@ -309,9 +319,92 @@ TEST_PPAPI_IN_PROCESS_VIA_HTTP(UDPSocketPrivateShared) TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(UDPSocketPrivateShared) TEST_PPAPI_NACL_VIA_HTTP(UDPSocketPrivateShared) -TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader) -TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(URLLoader) -TEST_PPAPI_NACL_VIA_HTTP(URLLoader) +// URLLoader tests. +TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader_BasicGET) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader_BasicPOST) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader_BasicFilePOST) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader_BasicFileRangePOST) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader_CompoundBodyPOST) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader_EmptyDataPOST) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader_BinaryDataPOST) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader_CustomRequestHeader) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader_FailsBogusContentLength) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader_StreamToFile) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader_UntrustedSameOriginRestriction) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader_TrustedSameOriginRestriction) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader_UntrustedCrossOriginRequest) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader_TrustedCrossOriginRequest) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader_UntrustedJavascriptURLRestriction) +// TODO(bbudge) Fix Javascript URLs for trusted loaders. +// http://crbug.com/103062 +TEST_PPAPI_IN_PROCESS_VIA_HTTP(FAILS_URLLoader_TrustedJavascriptURLRestriction) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader_UntrustedMethodRestriction) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader_TrustedMethodRestriction) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader_UntrustedHeaderRestriction) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader_TrustedHeaderRestriction) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader_UntrustedCustomReferrer) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader_TrustedCustomReferrer) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader_UntrustedCustomContentTransferEncoding) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader_TrustedCustomContentTransferEncoding) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader_AuditURLRedirect) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader_AbortCalls) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader_UntendedLoad) + +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(URLLoader_BasicGET) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(URLLoader_BasicPOST) +// TODO(bbudge) Enable these when PPB_FileIO is proxied. +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(DISABLED_URLLoader_BasicFilePOST) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(DISABLED_URLLoader_BasicFileRangePOST) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(URLLoader_CompoundBodyPOST) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(URLLoader_EmptyDataPOST) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(URLLoader_BinaryDataPOST) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(URLLoader_CustomRequestHeader) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(URLLoader_FailsBogusContentLength) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(URLLoader_StreamToFile) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(URLLoader_UntrustedSameOriginRestriction) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(URLLoader_TrustedSameOriginRestriction) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(URLLoader_UntrustedCrossOriginRequest) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(URLLoader_TrustedCrossOriginRequest) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(URLLoader_UntrustedJavascriptURLRestriction) +// TODO(bbudge) Fix Javascript URLs for trusted loaders. +// http://crbug.com/103062 +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP( + FAILS_URLLoader_TrustedJavascriptURLRestriction) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(URLLoader_UntrustedMethodRestriction) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(URLLoader_TrustedMethodRestriction) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(URLLoader_UntrustedHeaderRestriction) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(URLLoader_TrustedHeaderRestriction) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(URLLoader_UntrustedCustomReferrer) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(URLLoader_TrustedCustomReferrer) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP( + URLLoader_UntrustedCustomContentTransferEncoding) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP( + URLLoader_TrustedCustomContentTransferEncoding) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(URLLoader_AuditURLRedirect) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(URLLoader_AbortCalls) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(URLLoader_UntendedLoad) + +TEST_PPAPI_NACL_VIA_HTTP(URLLoader_BasicGET) +TEST_PPAPI_NACL_VIA_HTTP(URLLoader_BasicPOST) +TEST_PPAPI_NACL_VIA_HTTP(URLLoader_BasicFilePOST) +TEST_PPAPI_NACL_VIA_HTTP(URLLoader_BasicFileRangePOST) +TEST_PPAPI_NACL_VIA_HTTP(URLLoader_CompoundBodyPOST) +TEST_PPAPI_NACL_VIA_HTTP(URLLoader_EmptyDataPOST) +TEST_PPAPI_NACL_VIA_HTTP(URLLoader_BinaryDataPOST) +TEST_PPAPI_NACL_VIA_HTTP(URLLoader_CustomRequestHeader) +TEST_PPAPI_NACL_VIA_HTTP(URLLoader_FailsBogusContentLength) +TEST_PPAPI_NACL_VIA_HTTP(URLLoader_StreamToFile) +// TODO(bbudge) Enable these when we can get the document URL in NaCl. +TEST_PPAPI_NACL_VIA_HTTP(DISABLED_URLLoader_UntrustedSameOriginRestriction) +TEST_PPAPI_NACL_VIA_HTTP(DISABLED_URLLoader_UntrustedCrossOriginRequest) +TEST_PPAPI_NACL_VIA_HTTP(URLLoader_UntrustedJavascriptURLRestriction) +TEST_PPAPI_NACL_VIA_HTTP(URLLoader_UntrustedMethodRestriction) +TEST_PPAPI_NACL_VIA_HTTP(URLLoader_UntrustedHeaderRestriction) +TEST_PPAPI_NACL_VIA_HTTP(URLLoader_UntrustedCustomReferrer) +TEST_PPAPI_NACL_VIA_HTTP(URLLoader_UntrustedCustomContentTransferEncoding) +TEST_PPAPI_NACL_VIA_HTTP(URLLoader_AuditURLRedirect) +TEST_PPAPI_NACL_VIA_HTTP(URLLoader_AbortCalls) +TEST_PPAPI_NACL_VIA_HTTP(URLLoader_UntendedLoad) TEST_PPAPI_IN_PROCESS(PaintAggregator) TEST_PPAPI_OUT_OF_PROCESS(PaintAggregator) @@ -339,7 +432,7 @@ TEST_PPAPI_NACL_VIA_HTTP(Var) TEST_PPAPI_IN_PROCESS(VarDeprecated) // Disabled because it times out: http://crbug.com/89961 -//TEST_PPAPI_OUT_OF_PROCESS(VarDeprecated) +// TEST_PPAPI_OUT_OF_PROCESS(VarDeprecated) // Windows defines 'PostMessage', so we have to undef it. #ifdef PostMessage @@ -367,20 +460,52 @@ TEST_PPAPI_NACL_VIA_HTTP(Memory) TEST_PPAPI_IN_PROCESS(VideoDecoder) TEST_PPAPI_OUT_OF_PROCESS(VideoDecoder) -// http://crbug.com/90039 and http://crbug.com/83443 (Mac) -TEST_F(PPAPITest, FAILS_FileIO) { - RunTestViaHTTP("FileIO"); -} -// http://crbug.com/101154 -TEST_F(OutOfProcessPPAPITest, DISABLED_FileIO) { - RunTestViaHTTP("FileIO"); -} -TEST_PPAPI_NACL_VIA_HTTP(DISABLED_FileIO) +// Touch and SetLength fail on Mac and Linux due to sandbox restrictions. +// http://crbug.com/101128 +#if defined(OS_MACOSX) || defined(OS_LINUX) +#define MAYBE_FileIO_ReadWriteSetLength DISABLED_FileIO_ReadWriteSetLength +#define MAYBE_FileIO_TouchQuery DISABLED_FileIO_TouchQuery +#define MAYBE_FileIO_WillWriteWillSetLength \ + DISABLED_FileIO_WillWriteWillSetLength +#else +#define MAYBE_FileIO_ReadWriteSetLength FileIO_ReadWriteSetLength +#define MAYBE_FileIO_TouchQuery FileIO_TouchQuery +#define MAYBE_FileIO_WillWriteWillSetLength FileIO_WillWriteWillSetLength +#endif +TEST_PPAPI_IN_PROCESS_VIA_HTTP(FileIO_Open) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(FileIO_AbortCalls) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(FileIO_ParallelReads) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(FileIO_ParallelWrites) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(FileIO_NotAllowMixedReadWrite) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(MAYBE_FileIO_ReadWriteSetLength) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(MAYBE_FileIO_TouchQuery) +TEST_PPAPI_IN_PROCESS_VIA_HTTP(MAYBE_FileIO_WillWriteWillSetLength) + +// http://crbug.com/101154 +// TODO(bbudge) Enable these tests when PPB_FileIO is proxied. +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(DISABLED_FileIO_Open) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(DISABLED_FileIO_AbortCalls) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(DISABLED_FileIO_ParallelReads) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(DISABLED_FileIO_ParallelWrites) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(DISABLED_FileIO_NotAllowMixedReadWrite) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(DISABLED_FileIO_ReadWriteSetLength) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(DISABLED_FileIO_TouchQuery) +TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(DISABLED_FileIO_WillWriteWillSetLength) + +TEST_PPAPI_NACL_VIA_HTTP(FileIO_Open) +TEST_PPAPI_NACL_VIA_HTTP(FileIO_AbortCalls) +TEST_PPAPI_NACL_VIA_HTTP(FileIO_ParallelReads) +TEST_PPAPI_NACL_VIA_HTTP(FileIO_ParallelWrites) +TEST_PPAPI_NACL_VIA_HTTP(FileIO_NotAllowMixedReadWrite) +TEST_PPAPI_NACL_VIA_HTTP(MAYBE_FileIO_TouchQuery) +TEST_PPAPI_NACL_VIA_HTTP(MAYBE_FileIO_ReadWriteSetLength) +// The following test requires PPB_FileIO_Trusted, not available in NaCl. +TEST_PPAPI_NACL_VIA_HTTP(DISABLED_FileIO_WillWriteWillSetLength) TEST_PPAPI_IN_PROCESS_VIA_HTTP(FileRef) // Disabled because it times out: http://crbug.com/89961 -//TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(FileRef) +// TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(FileRef) TEST_PPAPI_NACL_VIA_HTTP(FileRef) diff --git a/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_file_io.cc b/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_file_io.cc index 9f4851e..172dab5 100644 --- a/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_file_io.cc +++ b/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_file_io.cc @@ -159,8 +159,8 @@ int32_t Read(PP_Resource file_io, offset, bytes_to_read); if (bytes_to_read < 0) - bytes_to_read = 0; - nacl_abi_size_t buffer_size = bytes_to_read; + return PP_ERROR_FAILED; + nacl_abi_size_t buffer_size = static_cast<nacl_abi_size_t>(bytes_to_read); int32_t callback_id = CompletionCallbackTable::Get()->AddCallback(callback, buffer); @@ -196,7 +196,7 @@ int32_t Write(PP_Resource file_io, offset, bytes_to_write); if (bytes_to_write < 0) - bytes_to_write = 0; + return PP_ERROR_FAILED; nacl_abi_size_t buffer_size = static_cast<nacl_abi_size_t>(bytes_to_write); int32_t callback_id = diff --git a/ppapi/tests/test_url_loader.cc b/ppapi/tests/test_url_loader.cc index 42db36a..4709e35 100644 --- a/ppapi/tests/test_url_loader.cc +++ b/ppapi/tests/test_url_loader.cc @@ -106,31 +106,28 @@ bool TestURLLoader::Init() { void TestURLLoader::RunTests(const std::string& filter) { RUN_TEST_FORCEASYNC_AND_NOT(BasicGET, filter); RUN_TEST_FORCEASYNC_AND_NOT(BasicPOST, filter); - // FileIO interface is not yet supported by ppapi/proxy. - if (!testing_interface_->IsOutOfProcess()) { - RUN_TEST_FORCEASYNC_AND_NOT(BasicFilePOST, filter); - RUN_TEST_FORCEASYNC_AND_NOT(BasicFileRangePOST, filter); - } + RUN_TEST_FORCEASYNC_AND_NOT(BasicFilePOST, filter); + RUN_TEST_FORCEASYNC_AND_NOT(BasicFileRangePOST, filter); RUN_TEST_FORCEASYNC_AND_NOT(CompoundBodyPOST, filter); RUN_TEST_FORCEASYNC_AND_NOT(EmptyDataPOST, filter); RUN_TEST_FORCEASYNC_AND_NOT(BinaryDataPOST, filter); RUN_TEST_FORCEASYNC_AND_NOT(CustomRequestHeader, filter); RUN_TEST_FORCEASYNC_AND_NOT(FailsBogusContentLength, filter); - // TODO(bbudge) Enable these tests for NaCl when we have a way to get - // the document URL. The PPAPI tests use PPB_URLUtil_Dev. -#if !(defined __native_client__) - RUN_TEST_FORCEASYNC_AND_NOT(SameOriginRestriction, filter); - // Cross origin requests require the 'test_case.html.mock-http-headers' - // file to be in the same directory as 'test_case.html', so that the test - // server returns CORS response headers. - RUN_TEST_FORCEASYNC_AND_NOT(CrossOriginRequest, filter); -#endif - RUN_TEST_FORCEASYNC_AND_NOT(JavascriptURLRestriction, filter); - RUN_TEST_FORCEASYNC_AND_NOT(MethodRestriction, filter); - RUN_TEST_FORCEASYNC_AND_NOT(HeaderRestriction, filter); - RUN_TEST_FORCEASYNC_AND_NOT(CustomReferrer, filter); - RUN_TEST_FORCEASYNC_AND_NOT(CustomContentTransferEncoding, filter); RUN_TEST_FORCEASYNC_AND_NOT(StreamToFile, filter); + RUN_TEST_FORCEASYNC_AND_NOT(UntrustedSameOriginRestriction, filter); + RUN_TEST_FORCEASYNC_AND_NOT(TrustedSameOriginRestriction, filter); + RUN_TEST_FORCEASYNC_AND_NOT(UntrustedCrossOriginRequest, filter); + RUN_TEST_FORCEASYNC_AND_NOT(TrustedCrossOriginRequest, filter); + RUN_TEST_FORCEASYNC_AND_NOT(UntrustedJavascriptURLRestriction, filter); + RUN_TEST_FORCEASYNC_AND_NOT(TrustedJavascriptURLRestriction, filter); + RUN_TEST_FORCEASYNC_AND_NOT(UntrustedMethodRestriction, filter); + RUN_TEST_FORCEASYNC_AND_NOT(TrustedMethodRestriction, filter); + RUN_TEST_FORCEASYNC_AND_NOT(UntrustedHeaderRestriction, filter); + RUN_TEST_FORCEASYNC_AND_NOT(TrustedHeaderRestriction, filter); + RUN_TEST_FORCEASYNC_AND_NOT(UntrustedCustomReferrer, filter); + RUN_TEST_FORCEASYNC_AND_NOT(TrustedCustomReferrer, filter); + RUN_TEST_FORCEASYNC_AND_NOT(UntrustedCustomContentTransferEncoding, filter); + RUN_TEST_FORCEASYNC_AND_NOT(TrustedCustomContentTransferEncoding, filter); RUN_TEST_FORCEASYNC_AND_NOT(AuditURLRedirect, filter); RUN_TEST_FORCEASYNC_AND_NOT(AbortCalls, filter); RUN_TEST_FORCEASYNC_AND_NOT(UntendedLoad, filter); @@ -513,67 +510,84 @@ std::string TestURLLoader::TestStreamToFile() { PASS(); } -// If a cross-origin request is not specified, the load should fail only for -// untrusted loaders. -std::string TestURLLoader::TestSameOriginRestriction() { +// Untrusted, unintended cross-origin requests should fail. +std::string TestURLLoader::TestUntrustedSameOriginRestriction() { pp::URLRequestInfo request(instance_); std::string cross_origin_url = GetReachableCrossOriginURL(); request.SetURL(cross_origin_url); - int32_t rv; - rv = OpenUntrusted(request); + int32_t rv = OpenUntrusted(request); if (rv != PP_ERROR_NOACCESS) return ReportError( "Untrusted, unintended cross-origin request restriction", rv); -#if !(defined __native_client__) - rv = OpenTrusted(request); + + PASS(); +} + +// Trusted, unintended cross-origin requests should succeed. +std::string TestURLLoader::TestTrustedSameOriginRestriction() { + pp::URLRequestInfo request(instance_); + std::string cross_origin_url = GetReachableCrossOriginURL(); + request.SetURL(cross_origin_url); + + int32_t rv = OpenTrusted(request); if (rv != PP_OK) - return ReportError("Trusted cross-origin request", rv); -#endif + return ReportError("Trusted cross-origin request failed", rv); PASS(); } -// If a cross-origin request is specified, and the URL is reachable, the load -// should succeed. -std::string TestURLLoader::TestCrossOriginRequest() { +// Untrusted, intended cross-origin requests should use CORS and succeed. +std::string TestURLLoader::TestUntrustedCrossOriginRequest() { pp::URLRequestInfo request(instance_); std::string cross_origin_url = GetReachableCrossOriginURL(); request.SetURL(cross_origin_url); request.SetAllowCrossOriginRequests(true); - int32_t rv; - rv = OpenUntrusted(request); + int32_t rv = OpenUntrusted(request); if (rv != PP_OK) return ReportError( - "Untrusted, intended cross-origin request", rv); -#if !(defined __native_client__) - rv = OpenTrusted(request); + "Untrusted, intended cross-origin request failed", rv); + + PASS(); +} + +// Trusted, intended cross-origin requests should use CORS and succeed. +std::string TestURLLoader::TestTrustedCrossOriginRequest() { + pp::URLRequestInfo request(instance_); + std::string cross_origin_url = GetReachableCrossOriginURL(); + request.SetURL(cross_origin_url); + request.SetAllowCrossOriginRequests(true); + + int32_t rv = OpenTrusted(request); if (rv != PP_OK) - return ReportError("Trusted cross-origin request", rv); -#endif + return ReportError("Trusted cross-origin request failed", rv); PASS(); } -// Javascript URLs are only reachable by trusted loaders. -std::string TestURLLoader::TestJavascriptURLRestriction() { +// Untrusted Javascript URLs requests should fail. +std::string TestURLLoader::TestUntrustedJavascriptURLRestriction() { pp::URLRequestInfo request(instance_); request.SetURL("javascript:foo = bar"); - int32_t rv; - rv = OpenUntrusted(request); + int32_t rv = OpenUntrusted(request); if (rv != PP_ERROR_NOACCESS) return ReportError( - "Untrusted Javascript URL request restriction", rv); -#if !(defined __native_client__) - // TODO(bbudge) Fix Javascript URLs for trusted loaders. - // http://code.google.com/p/chromium/issues/detail?id=103062 - // rv = OpenTrusted(request); - // if (rv == PP_ERROR_NOACCESS) - // return ReportError( - // "Trusted Javascript URL request", rv); -#endif + "Untrusted Javascript URL request restriction failed", rv); + + PASS(); +} + +// Trusted Javascript URLs requests should succeed. +std::string TestURLLoader::TestTrustedJavascriptURLRestriction() { + pp::URLRequestInfo request(instance_); + request.SetURL("javascript:foo = bar"); + + int32_t rv = OpenTrusted(request); + if (rv == PP_ERROR_NOACCESS) + return ReportError( + "Trusted Javascript URL request", rv); PASS(); } @@ -582,24 +596,27 @@ std::string TestURLLoader::TestJavascriptURLRestriction() { // methods are CONNECT, TRACE, and TRACK, and any string that is not a valid // token (containing special characters like CR, LF). // http://www.w3.org/TR/XMLHttpRequest/ -std::string TestURLLoader::TestMethodRestriction() { +std::string TestURLLoader::TestUntrustedMethodRestriction() { ASSERT_EQ(OpenUntrusted("cOnNeCt", ""), PP_ERROR_NOACCESS); ASSERT_EQ(OpenUntrusted("tRaCk", ""), PP_ERROR_NOACCESS); ASSERT_EQ(OpenUntrusted("tRaCe", ""), PP_ERROR_NOACCESS); ASSERT_EQ(OpenUntrusted("POST\x0d\x0ax-csrf-token:\x20test1234", ""), PP_ERROR_NOACCESS); -#if !(defined __native_client__) + PASS(); +} + +// Trusted requests can use restricted methods. +std::string TestURLLoader::TestTrustedMethodRestriction() { ASSERT_EQ(OpenTrusted("cOnNeCt", ""), PP_OK); ASSERT_EQ(OpenTrusted("tRaCk", ""), PP_OK); ASSERT_EQ(OpenTrusted("tRaCe", ""), PP_OK); -#endif PASS(); } // HTTP methods are restricted only for untrusted loaders. Try all headers // that are forbidden by http://www.w3.org/TR/XMLHttpRequest/. -std::string TestURLLoader::TestHeaderRestriction() { +std::string TestURLLoader::TestUntrustedHeaderRestriction() { ASSERT_EQ(OpenUntrusted("GET", "Accept-Charset:\n"), PP_ERROR_NOACCESS); ASSERT_EQ(OpenUntrusted("GET", "Accept-Encoding:\n"), PP_ERROR_NOACCESS); ASSERT_EQ(OpenUntrusted("GET", "Connection:\n"), PP_ERROR_NOACCESS); @@ -624,7 +641,11 @@ std::string TestURLLoader::TestHeaderRestriction() { PP_ERROR_NOACCESS); ASSERT_EQ(OpenUntrusted("GET", "Sec-foo:\n"), PP_ERROR_NOACCESS); -#if !(defined __native_client__) + PASS(); +} + +// Trusted requests can use restricted headers. +std::string TestURLLoader::TestTrustedHeaderRestriction() { ASSERT_EQ(OpenTrusted("GET", "Accept-Charset:\n"), PP_OK); ASSERT_EQ(OpenTrusted("GET", "Accept-Encoding:\n"), PP_OK); ASSERT_EQ(OpenTrusted("GET", "Connection:\n"), PP_OK); @@ -647,44 +668,57 @@ std::string TestURLLoader::TestHeaderRestriction() { ASSERT_EQ(OpenTrusted( "GET", "Proxy-Authorization: Basic dXNlcjpwYXNzd29yZA==:\n"), PP_OK); ASSERT_EQ(OpenTrusted("GET", "Sec-foo:\n"), PP_OK); -#endif PASS(); } -// Custom referrers are only allowed for trusted loaders. -std::string TestURLLoader::TestCustomReferrer() { +// Untrusted requests with custom referrer should fail. +std::string TestURLLoader::TestUntrustedCustomReferrer() { pp::URLRequestInfo request(instance_); request.SetCustomReferrerURL("http://www.google.com/"); - int32_t rv; - rv = OpenUntrusted(request); + int32_t rv = OpenUntrusted(request); if (rv != PP_ERROR_NOACCESS) return ReportError( "Untrusted request with custom referrer restriction", rv); -#if !(defined __native_client__) - rv = OpenTrusted(request); + + PASS(); +} + +// Trusted requests with custom referrer should succeed. +std::string TestURLLoader::TestTrustedCustomReferrer() { + pp::URLRequestInfo request(instance_); + request.SetCustomReferrerURL("http://www.google.com/"); + + int32_t rv = OpenTrusted(request); if (rv != PP_OK) return ReportError("Trusted request with custom referrer", rv); -#endif + PASS(); } -// Custom transfer encodings are only allowed for trusted loaders. -std::string TestURLLoader::TestCustomContentTransferEncoding() { +// Untrusted requests with custom transfer encodings should fail. +std::string TestURLLoader::TestUntrustedCustomContentTransferEncoding() { pp::URLRequestInfo request(instance_); request.SetCustomContentTransferEncoding("foo"); - int32_t rv; - rv = OpenUntrusted(request); + int32_t rv = OpenUntrusted(request); if (rv != PP_ERROR_NOACCESS) return ReportError( "Untrusted request with content-transfer-encoding restriction", rv); -#if !(defined __native_client__) - rv = OpenTrusted(request); + + PASS(); +} + +// Trusted requests with custom transfer encodings should succeed. +std::string TestURLLoader::TestTrustedCustomContentTransferEncoding() { + pp::URLRequestInfo request(instance_); + request.SetCustomContentTransferEncoding("foo"); + + int32_t rv = OpenTrusted(request); if (rv != PP_OK) - return ReportError("Trusted request with content-transfer-encoding", rv); -#endif + return ReportError("Trusted request with content-transfer-encoding failed", + rv); PASS(); } diff --git a/ppapi/tests/test_url_loader.h b/ppapi/tests/test_url_loader.h index a31d09e..df021a03 100644 --- a/ppapi/tests/test_url_loader.h +++ b/ppapi/tests/test_url_loader.h @@ -58,13 +58,20 @@ class TestURLLoader : public TestCase { std::string TestCustomRequestHeader(); std::string TestFailsBogusContentLength(); std::string TestStreamToFile(); - std::string TestSameOriginRestriction(); - std::string TestCrossOriginRequest(); - std::string TestJavascriptURLRestriction(); - std::string TestMethodRestriction(); - std::string TestHeaderRestriction(); - std::string TestCustomReferrer(); - std::string TestCustomContentTransferEncoding(); + std::string TestUntrustedSameOriginRestriction(); + std::string TestTrustedSameOriginRestriction(); + std::string TestUntrustedCrossOriginRequest(); + std::string TestTrustedCrossOriginRequest(); + std::string TestUntrustedJavascriptURLRestriction(); + std::string TestTrustedJavascriptURLRestriction(); + std::string TestUntrustedMethodRestriction(); + std::string TestTrustedMethodRestriction(); + std::string TestUntrustedHeaderRestriction(); + std::string TestTrustedHeaderRestriction(); + std::string TestUntrustedCustomReferrer(); + std::string TestTrustedCustomReferrer(); + std::string TestUntrustedCustomContentTransferEncoding(); + std::string TestTrustedCustomContentTransferEncoding(); std::string TestAuditURLRedirect(); std::string TestAbortCalls(); std::string TestUntendedLoad(); |