summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorphajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-27 15:20:52 +0000
committerphajdan.jr@chromium.org <phajdan.jr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-27 15:20:52 +0000
commit07eb0c01b2d522bb12104a1a079ce352b034f6ec (patch)
tree3e96c8c8e1381a605fa44533c5edc27b056b08e5 /chrome
parent65e3abbad1e5d111675658f1df562c40389bbda5 (diff)
downloadchromium_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.cc33
-rw-r--r--chrome/browser/google_util.cc3
-rw-r--r--chrome/browser/google_util.h2
-rw-r--r--chrome/browser/net/url_request_mock_link_doctor_job.cc40
-rw-r--r--chrome/browser/net/url_request_mock_link_doctor_job.h23
-rw-r--r--chrome/browser/net/url_request_mock_util.cc2
-rw-r--r--chrome/browser/tab_contents/tab_contents.cc6
-rw-r--r--chrome/chrome.gyp2
-rw-r--r--chrome/test/data/mock-link-doctor.html4
-rw-r--r--chrome/test/data/mock-link-doctor.html.mock-http-headers2
-rw-r--r--chrome/test/in_process_browser_test.cc3
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");