Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(645)

Unified Diff: chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate_browsertest.cc

Issue 303993005: Add browser test for ChromeResourceDispatcherHostDelegate. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix use-after-free of ResourceDispatcherHostDelegate in test. Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc ('k') | chrome/chrome_tests.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate_browsertest.cc
diff --git a/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate_browsertest.cc b/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate_browsertest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..4299d75233fe2ae8c367b6a76d369bc5687a861f
--- /dev/null
+++ b/chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate_browsertest.cc
@@ -0,0 +1,187 @@
+// Copyright (c) 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/command_line.h"
+#include "base/strings/string_util.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/policy/cloud/policy_header_service_factory.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "chrome/test/base/ui_test_utils.h"
+#include "components/policy/core/common/cloud/cloud_policy_constants.h"
+#include "components/policy/core/common/cloud/policy_header_io_helper.h"
+#include "components/policy/core/common/cloud/policy_header_service.h"
+#include "components/policy/core/common/policy_switches.h"
+#include "content/public/browser/resource_dispatcher_host.h"
+#include "net/http/http_request_headers.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"
+
+namespace {
+static const char kTestPolicyHeader[] = "test_header";
+static const char kServerRedirectUrl[] = "/server-redirect";
+
+scoped_ptr<net::test_server::HttpResponse> HandleTestRequest(
+ const net::test_server::HttpRequest& request) {
+ if (StartsWithASCII(request.relative_url, kServerRedirectUrl, true)) {
+ // Extract the target URL and redirect there.
+ size_t query_string_pos = request.relative_url.find('?');
+ std::string redirect_target =
+ request.relative_url.substr(query_string_pos + 1);
+
+ scoped_ptr<net::test_server::BasicHttpResponse> http_response(
+ new net::test_server::BasicHttpResponse);
+ http_response->set_code(net::HTTP_MOVED_PERMANENTLY);
+ http_response->AddCustomHeader("Location", redirect_target);
+ return http_response.PassAs<net::test_server::HttpResponse>();
+ } else {
+ scoped_ptr<net::test_server::BasicHttpResponse> http_response(
+ new net::test_server::BasicHttpResponse);
+ http_response->set_code(net::HTTP_OK);
+ http_response->set_content("Success");
+ return http_response.PassAs<net::test_server::HttpResponse>();
+ }
+}
+
+class TestDispatcherHostDelegate : public ChromeResourceDispatcherHostDelegate {
+ public:
+ explicit TestDispatcherHostDelegate(
+ prerender::PrerenderTracker* prerender_tracker)
+ : ChromeResourceDispatcherHostDelegate(prerender_tracker) {
+ }
+
+ virtual ~TestDispatcherHostDelegate() {}
+
+ virtual void RequestBeginning(
+ net::URLRequest* request,
+ content::ResourceContext* resource_context,
+ appcache::AppCacheService* appcache_service,
+ ResourceType::Type resource_type,
+ int child_id,
+ int route_id,
+ ScopedVector<content::ResourceThrottle>* throttles) OVERRIDE {
+ ChromeResourceDispatcherHostDelegate::RequestBeginning(
+ request,
+ resource_context,
+ appcache_service,
+ resource_type,
+ child_id,
+ route_id,
+ throttles);
+ request_headers_.MergeFrom(request->extra_request_headers());
+ }
+
+ virtual void OnRequestRedirected(
+ const GURL& redirect_url,
+ net::URLRequest* request,
+ content::ResourceContext* resource_context,
+ content::ResourceResponse* response) OVERRIDE {
+ ChromeResourceDispatcherHostDelegate::OnRequestRedirected(
+ redirect_url,
+ request,
+ resource_context,
+ response);
+ request_headers_.MergeFrom(request->extra_request_headers());
+ }
+
+ net::HttpRequestHeaders request_headers_;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(TestDispatcherHostDelegate);
+};
+
+} // namespace
+
+class ChromeResourceDispatcherHostDelegateBrowserTest :
+ public InProcessBrowserTest {
+ public:
+ ChromeResourceDispatcherHostDelegateBrowserTest() {}
+
+ virtual void SetUpOnMainThread() OVERRIDE {
+ InProcessBrowserTest::SetUpOnMainThread();
+ // Hook navigations with our delegate.
+ dispatcher_host_delegate_.reset(new TestDispatcherHostDelegate(
+ g_browser_process->prerender_tracker()));
+ content::ResourceDispatcherHost::Get()->SetDelegate(
+ dispatcher_host_delegate_.get());
+
+ embedded_test_server()->RegisterRequestHandler(
+ base::Bind(&HandleTestRequest));
+ ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
+ // Tell chrome that this is our DM server.
+ dm_url_ = embedded_test_server()->GetURL("/DeviceManagement");
+
+ // At this point, the Profile is already initialized and it's too
+ // late to set the DMServer URL via command line flags, so directly
+ // inject it to the PolicyHeaderIOHelper.
+ policy::PolicyHeaderService* policy_header_service =
+ policy::PolicyHeaderServiceFactory::GetForBrowserContext(
+ browser()->profile());
+ std::vector<policy::PolicyHeaderIOHelper*> helpers =
+ policy_header_service->GetHelpersForTest();
+ for (std::vector<policy::PolicyHeaderIOHelper*>::const_iterator it =
+ helpers.begin();
+ it != helpers.end(); ++it) {
+ (*it)->SetServerURLForTest(dm_url_.spec());
+ (*it)->UpdateHeader(kTestPolicyHeader);
+ }
+ }
+
+ virtual void CleanUpOnMainThread() OVERRIDE {
+ content::ResourceDispatcherHost::Get()->SetDelegate(NULL);
+ dispatcher_host_delegate_.reset();
+ InProcessBrowserTest::CleanUpOnMainThread();
+ }
+
+ protected:
+ // The fake URL for DMServer we are using.
+ GURL dm_url_;
+ scoped_ptr<TestDispatcherHostDelegate> dispatcher_host_delegate_;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(ChromeResourceDispatcherHostDelegateBrowserTest);
+};
+
+
+IN_PROC_BROWSER_TEST_F(ChromeResourceDispatcherHostDelegateBrowserTest,
+ NoPolicyHeader) {
+ // When fetching non-DMServer URLs, we should not add a policy header to the
+ // request.
+ DCHECK(!embedded_test_server()->base_url().spec().empty());
+ ui_test_utils::NavigateToURL(browser(), embedded_test_server()->base_url());
+ ASSERT_FALSE(dispatcher_host_delegate_->request_headers_.HasHeader(
+ policy::kChromePolicyHeader));
+}
+
+IN_PROC_BROWSER_TEST_F(ChromeResourceDispatcherHostDelegateBrowserTest,
+ PolicyHeader) {
+ // When fetching a DMServer URL, we should add a policy header to the
+ // request.
+ ui_test_utils::NavigateToURL(browser(), dm_url_);
+ std::string value;
+ ASSERT_TRUE(dispatcher_host_delegate_->request_headers_.GetHeader(
+ policy::kChromePolicyHeader, &value));
+ ASSERT_EQ(kTestPolicyHeader, value);
+}
+
+IN_PROC_BROWSER_TEST_F(ChromeResourceDispatcherHostDelegateBrowserTest,
+ PolicyHeaderForRedirect) {
+
+ // Build up a URL that results in a redirect to the DMServer URL to make
+ // sure the policy header is still added.
+ std::string redirect_url;
+ redirect_url += kServerRedirectUrl;
+ redirect_url += "?";
+ redirect_url += dm_url_.spec();
+ ui_test_utils::NavigateToURL(browser(), embedded_test_server()->GetURL(
+ redirect_url));
+ std::string value;
+ ASSERT_TRUE(dispatcher_host_delegate_->request_headers_.GetHeader(
+ policy::kChromePolicyHeader, &value));
+ ASSERT_EQ(kTestPolicyHeader, value);
+}
« no previous file with comments | « chrome/browser/renderer_host/chrome_resource_dispatcher_host_delegate.cc ('k') | chrome/chrome_tests.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698