Chromium Code Reviews| Index: content/browser/web_contents/web_contents_impl_browsertest.cc |
| diff --git a/content/browser/web_contents/web_contents_impl_browsertest.cc b/content/browser/web_contents/web_contents_impl_browsertest.cc |
| index 7fb10684a46add625b5bc1a10973229f86461ea7..1e72c9a66fad21390c3c51187b341447b73321ad 100644 |
| --- a/content/browser/web_contents/web_contents_impl_browsertest.cc |
| +++ b/content/browser/web_contents/web_contents_impl_browsertest.cc |
| @@ -9,6 +9,7 @@ |
| #include "base/values.h" |
| #include "build/build_config.h" |
| #include "content/browser/frame_host/navigation_entry_impl.h" |
| +#include "content/browser/loader/resource_dispatcher_host_impl.h" |
| #include "content/browser/renderer_host/render_widget_host_impl.h" |
| #include "content/browser/web_contents/web_contents_impl.h" |
| #include "content/browser/web_contents/web_contents_view.h" |
| @@ -32,6 +33,7 @@ |
| #include "content/public/test/test_navigation_observer.h" |
| #include "content/public/test/test_utils.h" |
| #include "content/shell/browser/shell.h" |
| +#include "content/shell/browser/shell_resource_dispatcher_host_delegate.h" |
| #include "content/test/content_browser_test_utils_internal.h" |
| #include "net/dns/mock_host_resolver.h" |
| #include "net/test/embedded_test_server/embedded_test_server.h" |
| @@ -1410,4 +1412,71 @@ IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, |
| EXPECT_TRUE(delegate.get()->request_to_lock_mouse_called_); |
| } |
| +namespace { |
| +class TestResourceDispatcherHostDelegate |
| + : public ShellResourceDispatcherHostDelegate { |
| + public: |
| + explicit TestResourceDispatcherHostDelegate(bool* saw_override) |
| + : saw_override_(saw_override) {} |
| + |
| + void RequestBeginning( |
| + net::URLRequest* request, |
| + ResourceContext* resource_context, |
| + AppCacheService* appcache_service, |
| + ResourceType resource_type, |
| + std::vector<std::unique_ptr<ResourceThrottle>>* throttles) override { |
| + CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| + ShellResourceDispatcherHostDelegate::RequestBeginning( |
| + request, resource_context, appcache_service, resource_type, throttles); |
| + |
| + net::HttpRequestHeaders headers = request->extra_request_headers(); |
| + std::string user_agent; |
| + CHECK(headers.GetHeader(net::HttpRequestHeaders::kUserAgent, &user_agent)); |
| + if (user_agent.find("foo") != std::string::npos) |
| + *saw_override_ = true; |
| + } |
| + |
| + private: |
| + bool* saw_override_; |
| +}; |
| +} // namespace |
| + |
| +// Checks that user agent override string is only used when it's overridden. |
| +IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, UserAgentOverride) { |
| + bool saw_override = false; |
| + TestResourceDispatcherHostDelegate new_delegate(&saw_override); |
| + ResourceDispatcherHostDelegate* old_delegate = |
| + ResourceDispatcherHostImpl::Get()->delegate(); |
| + BrowserThread::PostTask( |
| + BrowserThread::IO, FROM_HERE, |
| + base::Bind(&ResourceDispatcherHost::SetDelegate, |
| + base::Unretained(ResourceDispatcherHostImpl::Get()), |
| + &new_delegate)); |
| + |
| + ASSERT_TRUE(embedded_test_server()->Start()); |
| + const GURL kUrl(embedded_test_server()->GetURL("/simple_page.html")); |
| + NavigateToURL(shell(), kUrl); |
| + ASSERT_FALSE(saw_override); |
| + |
| + shell()->web_contents()->SetUserAgentOverride("foo"); |
| + NavigateToURL(shell(), kUrl); |
| + ASSERT_FALSE(saw_override); |
| + |
| + shell() |
| + ->web_contents() |
| + ->GetController() |
| + .GetActiveEntry() |
|
nasko
2017/03/27 19:52:31
GetLastCommittedEntry(), GetActiveEntry is depreca
jam
2017/03/27 20:00:14
Done.
|
| + ->SetIsOverridingUserAgent(true); |
| + TestNavigationObserver tab_observer(shell()->web_contents(), 1); |
| + shell()->web_contents()->GetController().Reload(ReloadType::NORMAL, false); |
| + tab_observer.Wait(); |
| + ASSERT_TRUE(saw_override); |
| + |
| + BrowserThread::PostTask( |
| + BrowserThread::IO, FROM_HERE, |
| + base::Bind(&ResourceDispatcherHost::SetDelegate, |
| + base::Unretained(ResourceDispatcherHostImpl::Get()), |
| + old_delegate)); |
| +} |
| + |
| } // namespace content |