| 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..bf807ff9339efa73103a3370a6e8e8c4abd39114 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()
|
| + .GetLastCommittedEntry()
|
| + ->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
|
|
|