diff options
author | jvoung <jvoung@chromium.org> | 2014-08-28 14:46:52 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-08-28 21:48:15 +0000 |
commit | eeba9846656053be6dc90a6f7bf164e5695b5a22 (patch) | |
tree | 67536b6dfb18e83b66c03bfa22b27642c87521a4 /chrome/test/nacl | |
parent | a3a60e44f3c0a39962453cf0402162a3b48a854b (diff) | |
download | chromium_src-eeba9846656053be6dc90a6f7bf164e5695b5a22.zip chromium_src-eeba9846656053be6dc90a6f7bf164e5695b5a22.tar.gz chromium_src-eeba9846656053be6dc90a6f7bf164e5695b5a22.tar.bz2 |
Set RequestContextObject for PNaCl pexe fetches, to fix On-Demand update.
Add more checks to test to detect that the resource type of
the URL request is indeed OBJECT.
Would like to get this merged to the M38 branch.
BUG=401755
Review URL: https://codereview.chromium.org/471233003
Cr-Commit-Position: refs/heads/master@{#292470}
Diffstat (limited to 'chrome/test/nacl')
-rw-r--r-- | chrome/test/nacl/pnacl_header_test.cc | 30 | ||||
-rw-r--r-- | chrome/test/nacl/pnacl_header_test.h | 27 |
2 files changed, 54 insertions, 3 deletions
diff --git a/chrome/test/nacl/pnacl_header_test.cc b/chrome/test/nacl/pnacl_header_test.cc index e4922aa..8ba8dc8 100644 --- a/chrome/test/nacl/pnacl_header_test.cc +++ b/chrome/test/nacl/pnacl_header_test.cc @@ -12,16 +12,36 @@ #include "chrome/common/chrome_paths.h" #include "chrome/test/base/ui_test_utils.h" #include "chrome/test/nacl/nacl_browsertest_util.h" +#include "content/public/browser/resource_dispatcher_host.h" #include "content/public/browser/web_contents.h" #include "net/test/embedded_test_server/embedded_test_server.h" #include "net/test/embedded_test_server/http_request.h" #include "net/test/embedded_test_server/http_response.h" +#include "net/url_request/url_request.h" using net::test_server::BasicHttpResponse; using net::test_server::EmbeddedTestServer; using net::test_server::HttpRequest; using net::test_server::HttpResponse; +void TestDispatcherHostDelegate::RequestBeginning( + net::URLRequest* request, + content::ResourceContext* resource_context, + content::AppCacheService* appcache_service, + content::ResourceType resource_type, + ScopedVector<content::ResourceThrottle>* throttles) { + // This checks the same condition as the one for PNaCl in + // AppendComponentUpdaterThrottles. + if (resource_type == content::RESOURCE_TYPE_OBJECT) { + const net::HttpRequestHeaders& headers = request->extra_request_headers(); + std::string accept_headers; + if (headers.GetHeader("Accept", &accept_headers)) { + if (accept_headers.find("application/x-pnacl") != std::string::npos) + found_pnacl_header_ = true; + } + } +} + PnaclHeaderTest::PnaclHeaderTest() : noncors_loads_(0), cors_loads_(0) {} PnaclHeaderTest::~PnaclHeaderTest() {} @@ -41,6 +61,7 @@ void PnaclHeaderTest::StartServer() { void PnaclHeaderTest::RunLoadTest(const std::string& url, int expected_noncors, int expected_cors) { + content::ResourceDispatcherHost::Get()->SetDelegate(&test_delegate_); StartServer(); LoadTestMessageHandler handler; content::JavascriptTestObserver observer( @@ -57,6 +78,9 @@ void PnaclHeaderTest::RunLoadTest(const std::string& url, base::ScopedPathOverride component_dir(chrome::DIR_PNACL_COMPONENT); ui_test_utils::NavigateToURL(browser(), embedded_test_server()->GetURL(url)); + + content::ResourceDispatcherHost::Get()->SetDelegate(NULL); + // Wait until the NMF and pexe are also loaded, not just the HTML. // Do this by waiting till the LoadTestMessageHandler responds. EXPECT_TRUE(observer.Run()) << handler.error_message(); @@ -81,14 +105,14 @@ scoped_ptr<HttpResponse> PnaclHeaderTest::WatchForPexeFetch( if (absolute_url.path().find(".pexe") == std::string::npos) return scoped_ptr<HttpResponse>(); - // For pexe files, check for the special Accept header. - // This must match whatever is in: - // ppapi/native_client/src/trusted/plugin/pnacl_coordinator.cc + // For pexe files, check for the special Accept header, + // along with the expected ResourceType of the URL request. EXPECT_NE(0U, request.headers.count("Accept")); std::map<std::string, std::string>::const_iterator it = request.headers.find("Accept"); EXPECT_NE(std::string::npos, it->second.find("application/x-pnacl")); EXPECT_NE(std::string::npos, it->second.find("*/*")); + EXPECT_TRUE(test_delegate_.found_pnacl_header()); // Also make sure that other headers like CORS-related headers // are preserved when injecting the special Accept header. diff --git a/chrome/test/nacl/pnacl_header_test.h b/chrome/test/nacl/pnacl_header_test.h index 9134925..6c75fdc 100644 --- a/chrome/test/nacl/pnacl_header_test.h +++ b/chrome/test/nacl/pnacl_header_test.h @@ -8,6 +8,8 @@ #include "base/compiler_specific.h" #include "base/memory/scoped_ptr.h" #include "chrome/test/base/in_process_browser_test.h" +#include "content/public/browser/resource_dispatcher_host_delegate.h" +#include "content/public/common/resource_type.h" namespace base { class FilePath; @@ -20,6 +22,30 @@ class HttpResponse; } } +using content::ResourceDispatcherHostDelegate; + +class TestDispatcherHostDelegate : public ResourceDispatcherHostDelegate { + public: + explicit TestDispatcherHostDelegate() + : ResourceDispatcherHostDelegate(), found_pnacl_header_(false) {} + + virtual ~TestDispatcherHostDelegate() {} + + virtual void RequestBeginning( + net::URLRequest* request, + content::ResourceContext* resource_context, + content::AppCacheService* appcache_service, + content::ResourceType resource_type, + ScopedVector<content::ResourceThrottle>* throttles) OVERRIDE; + + bool found_pnacl_header() const { return found_pnacl_header_; } + + private: + bool found_pnacl_header_; + + DISALLOW_COPY_AND_ASSIGN(TestDispatcherHostDelegate); +}; + class PnaclHeaderTest : public InProcessBrowserTest { public: PnaclHeaderTest(); @@ -40,6 +66,7 @@ class PnaclHeaderTest : public InProcessBrowserTest { int noncors_loads_; int cors_loads_; + TestDispatcherHostDelegate test_delegate_; DISALLOW_COPY_AND_ASSIGN(PnaclHeaderTest); }; |