diff options
author | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-27 15:20:52 +0000 |
---|---|---|
committer | phajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-27 15:20:52 +0000 |
commit | 07eb0c01b2d522bb12104a1a079ce352b034f6ec (patch) | |
tree | 3e96c8c8e1381a605fa44533c5edc27b056b08e5 /chrome | |
parent | 65e3abbad1e5d111675658f1df562c40389bbda5 (diff) | |
download | chromium_src-07eb0c01b2d522bb12104a1a079ce352b034f6ec.zip chromium_src-07eb0c01b2d522bb12104a1a079ce352b034f6ec.tar.gz chromium_src-07eb0c01b2d522bb12104a1a079ce352b034f6ec.tar.bz2 |
Mock the LinkDoctor for tests. Should greatly decrease ErrorPage test flakiness.
Not getting rid of WaitForTitleMatching because I have to add few more calls to the automation framework (http://crbug.com/19395) to wait properly after navigating back and forward.
TEST=Covered by ui_tests and browser_tests.
http://crbug.com/18365, http://crbug.com/19361
Review URL: http://codereview.chromium.org/174179
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@24606 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/errorpage_uitest.cc | 33 | ||||
-rw-r--r-- | chrome/browser/google_util.cc | 3 | ||||
-rw-r--r-- | chrome/browser/google_util.h | 2 | ||||
-rw-r--r-- | chrome/browser/net/url_request_mock_link_doctor_job.cc | 40 | ||||
-rw-r--r-- | chrome/browser/net/url_request_mock_link_doctor_job.h | 23 | ||||
-rw-r--r-- | chrome/browser/net/url_request_mock_util.cc | 2 | ||||
-rw-r--r-- | chrome/browser/tab_contents/tab_contents.cc | 6 | ||||
-rw-r--r-- | chrome/chrome.gyp | 2 | ||||
-rw-r--r-- | chrome/test/data/mock-link-doctor.html | 4 | ||||
-rw-r--r-- | chrome/test/data/mock-link-doctor.html.mock-http-headers | 2 | ||||
-rw-r--r-- | chrome/test/in_process_browser_test.cc | 3 |
11 files changed, 92 insertions, 28 deletions
diff --git a/chrome/browser/errorpage_uitest.cc b/chrome/browser/errorpage_uitest.cc index 3e34822..c8b54fa 100644 --- a/chrome/browser/errorpage_uitest.cc +++ b/chrome/browser/errorpage_uitest.cc @@ -19,15 +19,6 @@ class ErrorPageTest : public UITest { } return false; } - bool WaitForTitleContaining(const std::string& title_substring) { - for (int i = 0; i < 100; ++i) { - std::wstring title = GetActiveTabTitle(); - if (title.find(UTF8ToWide(title_substring)) != std::wstring::npos) - return true; - PlatformThread::Sleep(sleep_timeout_ms() / 10); - } - return false; - } }; TEST_F(ErrorPageTest, DNSError_Basic) { @@ -37,7 +28,7 @@ TEST_F(ErrorPageTest, DNSError_Basic) { // page. NavigateToURLBlockUntilNavigationsComplete(test_url, 2); - EXPECT_TRUE(WaitForTitleContaining(test_url.host())); + EXPECT_TRUE(WaitForTitleMatching(L"Mock Link Doctor")); } TEST_F(ErrorPageTest, DNSError_GoBack1) { @@ -47,7 +38,7 @@ TEST_F(ErrorPageTest, DNSError_GoBack1) { NavigateToURL(URLRequestMockHTTPJob::GetMockUrl(L"title2.html")); NavigateToURL(test_url); - EXPECT_TRUE(WaitForTitleContaining(test_url.host())); + EXPECT_TRUE(WaitForTitleMatching(L"Mock Link Doctor")); GetActiveTab()->GoBack(); @@ -61,13 +52,13 @@ TEST_F(ErrorPageTest, DNSError_GoBack2) { NavigateToURL(URLRequestMockHTTPJob::GetMockUrl(L"title2.html")); NavigateToURL(test_url); - EXPECT_TRUE(WaitForTitleContaining(test_url.host())); + EXPECT_TRUE(WaitForTitleMatching(L"Mock Link Doctor")); NavigateToURL(URLRequestMockHTTPJob::GetMockUrl(L"title3.html")); // The first navigation should fail, and the second one should be the error // page. GetActiveTab()->GoBackBlockUntilNavigationsComplete(2); - EXPECT_TRUE(WaitForTitleContaining(test_url.host())); + EXPECT_TRUE(WaitForTitleMatching(L"Mock Link Doctor")); GetActiveTab()->GoBack(); EXPECT_TRUE(WaitForTitleMatching(L"Title Of Awesomeness")); @@ -81,19 +72,19 @@ TEST_F(ErrorPageTest, DNSError_GoBack2AndForward) { NavigateToURL(URLRequestMockHTTPJob::GetMockUrl(L"title2.html")); NavigateToURL(test_url); - EXPECT_TRUE(WaitForTitleContaining(test_url.host())); + EXPECT_TRUE(WaitForTitleMatching(L"Mock Link Doctor")); NavigateToURL(URLRequestMockHTTPJob::GetMockUrl(L"title3.html")); // The first navigation should fail, and the second one should be the error // page. GetActiveTab()->GoBackBlockUntilNavigationsComplete(2); - EXPECT_TRUE(WaitForTitleContaining(test_url.host())); + EXPECT_TRUE(WaitForTitleMatching(L"Mock Link Doctor")); GetActiveTab()->GoBack(); // The first navigation should fail, and the second one should be the error // page. GetActiveTab()->GoForwardBlockUntilNavigationsComplete(2); - EXPECT_TRUE(WaitForTitleContaining(test_url.host())); + EXPECT_TRUE(WaitForTitleMatching(L"Mock Link Doctor")); } TEST_F(ErrorPageTest, DNSError_GoBack2Forward2) { @@ -104,18 +95,18 @@ TEST_F(ErrorPageTest, DNSError_GoBack2Forward2) { NavigateToURL(URLRequestMockHTTPJob::GetMockUrl(L"title3.html")); NavigateToURL(test_url); - EXPECT_TRUE(WaitForTitleContaining(test_url.host())); + EXPECT_TRUE(WaitForTitleMatching(L"Mock Link Doctor")); NavigateToURL(URLRequestMockHTTPJob::GetMockUrl(L"title2.html")); // The first navigation should fail, and the second one should be the error // page. GetActiveTab()->GoBackBlockUntilNavigationsComplete(2); - EXPECT_TRUE(WaitForTitleContaining(test_url.host())); + EXPECT_TRUE(WaitForTitleMatching(L"Mock Link Doctor")); GetActiveTab()->GoBack(); // The first navigation should fail, and the second one should be the error // page. GetActiveTab()->GoForwardBlockUntilNavigationsComplete(2); - EXPECT_TRUE(WaitForTitleContaining(test_url.host())); + EXPECT_TRUE(WaitForTitleMatching(L"Mock Link Doctor")); GetActiveTab()->GoForward(); EXPECT_TRUE(WaitForTitleMatching(L"Title Of Awesomeness")); @@ -175,13 +166,13 @@ TEST_F(ErrorPageTest, Page404) { NavigateToURL(URLRequestMockHTTPJob::GetMockUrl(L"title2.html")); NavigateToURL(URLRequestMockHTTPJob::GetMockUrl(L"page404.html")); - EXPECT_TRUE(WaitForTitleContaining("page404.html")); + EXPECT_TRUE(WaitForTitleMatching(L"Mock Link Doctor")); } TEST_F(ErrorPageTest, Page404_GoBack) { NavigateToURL(URLRequestMockHTTPJob::GetMockUrl(L"title2.html")); NavigateToURL(URLRequestMockHTTPJob::GetMockUrl(L"page404.html")); - EXPECT_TRUE(WaitForTitleContaining("page404.html")); + EXPECT_TRUE(WaitForTitleMatching(L"Mock Link Doctor")); GetActiveTab()->GoBack(); diff --git a/chrome/browser/google_util.cc b/chrome/browser/google_util.cc index 0949d2f..9cb5e22 100644 --- a/chrome/browser/google_util.cc +++ b/chrome/browser/google_util.cc @@ -31,6 +31,9 @@ GURL AppendParam(const GURL& url, namespace google_util { +const char kLinkDoctorBaseURL[] = + "http://linkhelp.clients.google.com/tbproxy/lh/fixurl"; + GURL AppendGoogleLocaleParam(const GURL& url) { return AppendParam(url, "hl", g_browser_process->GetApplicationLocale()); diff --git a/chrome/browser/google_util.h b/chrome/browser/google_util.h index d24ae89..a4f99e3 100644 --- a/chrome/browser/google_util.h +++ b/chrome/browser/google_util.h @@ -11,6 +11,8 @@ class GURL; namespace google_util { +extern const char kLinkDoctorBaseURL[]; + // Adds the Google locale string to the URL (e.g., hl=en-US). This does not // check to see if the param already exists. GURL AppendGoogleLocaleParam(const GURL& url); diff --git a/chrome/browser/net/url_request_mock_link_doctor_job.cc b/chrome/browser/net/url_request_mock_link_doctor_job.cc new file mode 100644 index 0000000..88ef438 --- /dev/null +++ b/chrome/browser/net/url_request_mock_link_doctor_job.cc @@ -0,0 +1,40 @@ +// Copyright (c) 2009 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 "chrome/browser/net/url_request_mock_link_doctor_job.h" + +#include "base/path_service.h" +#include "chrome/browser/google_util.h" +#include "chrome/common/chrome_paths.h" +#include "googleurl/src/gurl.h" +#include "net/url_request/url_request_filter.h" + +namespace { + +FilePath GetMockFilePath() { + FilePath test_dir; + bool success = PathService::Get(chrome::DIR_TEST_DATA, &test_dir); + DCHECK(success); + return test_dir.AppendASCII("mock-link-doctor.html"); +} + +} // namespace + +/* static */ +URLRequestJob* URLRequestMockLinkDoctorJob::Factory(URLRequest* request, + const std::string& scheme) { + return new URLRequestMockLinkDoctorJob(request); +} + +/* static */ +void URLRequestMockLinkDoctorJob::AddUrlHandler() { + URLRequestFilter* filter = URLRequestFilter::GetInstance(); + filter->AddHostnameHandler("http", + GURL(google_util::kLinkDoctorBaseURL).host(), + URLRequestMockLinkDoctorJob::Factory); +} + +URLRequestMockLinkDoctorJob::URLRequestMockLinkDoctorJob(URLRequest* request) + : URLRequestMockHTTPJob(request, GetMockFilePath()) { +} diff --git a/chrome/browser/net/url_request_mock_link_doctor_job.h b/chrome/browser/net/url_request_mock_link_doctor_job.h new file mode 100644 index 0000000..74fd00e --- /dev/null +++ b/chrome/browser/net/url_request_mock_link_doctor_job.h @@ -0,0 +1,23 @@ +// Copyright (c) 2009 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. +// +// A URLRequestJob class that substitutes LinkDoctor requests. + +#ifndef CHROME_BROWSER_NET_URL_REQUEST_MOCK_LINK_DOCTOR_JOB_H_ +#define CHROME_BROWSER_NET_URL_REQUEST_MOCK_LINK_DOCTOR_JOB_H_ + +#include "chrome/browser/net/url_request_mock_http_job.h" + +class URLRequestMockLinkDoctorJob : public URLRequestMockHTTPJob { + public: + URLRequestMockLinkDoctorJob(URLRequest* request); + virtual ~URLRequestMockLinkDoctorJob() { } + + static URLRequest::ProtocolFactory Factory; + + // Adds the testing URLs to the URLRequestFilter. + static void AddUrlHandler(); +}; + +# endif // CHROME_BROWSER_NET_URL_REQUEST_MOCK_LINK_DOCTOR_JOB_H_ diff --git a/chrome/browser/net/url_request_mock_util.cc b/chrome/browser/net/url_request_mock_util.cc index 9a559b1..680ed1d 100644 --- a/chrome/browser/net/url_request_mock_util.cc +++ b/chrome/browser/net/url_request_mock_util.cc @@ -10,6 +10,7 @@ #include "chrome/browser/chrome_thread.h" #include "chrome/browser/net/url_request_failed_dns_job.h" #include "chrome/browser/net/url_request_mock_http_job.h" +#include "chrome/browser/net/url_request_mock_link_doctor_job.h" #include "chrome/browser/net/url_request_slow_download_job.h" #include "chrome/browser/net/url_request_slow_http_job.h" #include "chrome/common/chrome_paths.h" @@ -26,6 +27,7 @@ void SetUrlRequestMocksEnabled(bool enabled) { URLRequestFilter::GetInstance()->ClearHandlers(); URLRequestFailedDnsJob::AddUrlHandler(); + URLRequestMockLinkDoctorJob::AddUrlHandler(); URLRequestSlowDownloadJob::AddUrlHandler(); std::wstring root_http; diff --git a/chrome/browser/tab_contents/tab_contents.cc b/chrome/browser/tab_contents/tab_contents.cc index 3eeacde..8767bc9 100644 --- a/chrome/browser/tab_contents/tab_contents.cc +++ b/chrome/browser/tab_contents/tab_contents.cc @@ -132,9 +132,6 @@ const float kMaxHeightFactor = 0.6; // contents. const int kJavascriptMessageExpectedDelay = 1000; -const char kLinkDoctorBaseURL[] = - "http://linkhelp.clients.google.com/tbproxy/lh/fixurl"; - // The list of prefs we want to observe. const wchar_t* kPrefsToObserve[] = { prefs::kAlternateErrorPagesEnabled, @@ -2255,7 +2252,8 @@ GURL TabContents::GetAlternateErrorPageURL() const { PrefService* prefs = profile()->GetPrefs(); DCHECK(prefs); if (prefs->GetBoolean(prefs::kAlternateErrorPagesEnabled)) { - url = google_util::AppendGoogleLocaleParam(GURL(kLinkDoctorBaseURL)); + url = google_util::AppendGoogleLocaleParam( + GURL(google_util::kLinkDoctorBaseURL)); url = google_util::AppendGoogleTLDParam(url); } return url; diff --git a/chrome/chrome.gyp b/chrome/chrome.gyp index 564eba3..c7902da 100644 --- a/chrome/chrome.gyp +++ b/chrome/chrome.gyp @@ -1476,6 +1476,8 @@ # are currently used by production code in automation_provider.cc. 'browser/net/url_request_mock_http_job.cc', 'browser/net/url_request_mock_http_job.h', + 'browser/net/url_request_mock_link_doctor_job.cc', + 'browser/net/url_request_mock_link_doctor_job.h', 'browser/net/url_request_mock_util.cc', 'browser/net/url_request_mock_util.h', 'browser/net/url_request_slow_download_job.cc', diff --git a/chrome/test/data/mock-link-doctor.html b/chrome/test/data/mock-link-doctor.html new file mode 100644 index 0000000..e1e12a3 --- /dev/null +++ b/chrome/test/data/mock-link-doctor.html @@ -0,0 +1,4 @@ +<html> +<head><title>Mock Link Doctor</title></head> +<body></body> +</html> diff --git a/chrome/test/data/mock-link-doctor.html.mock-http-headers b/chrome/test/data/mock-link-doctor.html.mock-http-headers new file mode 100644 index 0000000..57fae25 --- /dev/null +++ b/chrome/test/data/mock-link-doctor.html.mock-http-headers @@ -0,0 +1,2 @@ +HTTP/1.0 200 OK +Content-type: text/html diff --git a/chrome/test/in_process_browser_test.cc b/chrome/test/in_process_browser_test.cc index c217632..27093004 100644 --- a/chrome/test/in_process_browser_test.cc +++ b/chrome/test/in_process_browser_test.cc @@ -241,9 +241,6 @@ void InProcessBrowserTest::ConfigureHostResolverProc( // TODO(phajdan.jr): remove, http://crbug.com/2635 host_resolver_proc->AllowDirectLookup("*.google.com"); - // TODO(phajdan.jr): remove, http://crbug.com/18365 - host_resolver_proc->AllowDirectLookup("*.gstatic.com"); - // See http://en.wikipedia.org/wiki/Web_Proxy_Autodiscovery_Protocol // We don't want the test code to use it. host_resolver_proc->AddSimulatedFailure("wpad"); |