summaryrefslogtreecommitdiffstats
path: root/chrome/browser/errorpage_browsertest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/errorpage_browsertest.cc')
-rw-r--r--chrome/browser/errorpage_browsertest.cc183
1 files changed, 183 insertions, 0 deletions
diff --git a/chrome/browser/errorpage_browsertest.cc b/chrome/browser/errorpage_browsertest.cc
new file mode 100644
index 0000000..4badd95
--- /dev/null
+++ b/chrome/browser/errorpage_browsertest.cc
@@ -0,0 +1,183 @@
+// Copyright (c) 2011 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/utf_string_conversions.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
+#include "chrome/test/base/in_process_browser_test.h"
+#include "chrome/test/base/ui_test_utils.h"
+#include "chrome/test/test_navigation_observer.h"
+#include "content/browser/net/url_request_failed_dns_job.h"
+#include "content/browser/net/url_request_mock_http_job.h"
+
+class ErrorPageTest : public InProcessBrowserTest {
+ public:
+ enum HistoryNavigationDirection {
+ HISTORY_NAVIGATE_BACK,
+ HISTORY_NAVIGATE_FORWARD,
+ };
+
+ // Navigates the active tab to a mock url created for the file at |file_path|.
+ void NavigateToFileURL(const FilePath::StringType& file_path) {
+ ui_test_utils::NavigateToURL(
+ browser(),
+ URLRequestMockHTTPJob::GetMockUrl(FilePath(file_path)));
+ }
+
+ // Navigates to the given URL and waits for |num_navigations| to occur, and
+ // the title to change to |expected_title|.
+ void NavigateToURLAndWaitForTitle(const GURL& url,
+ const std::string& expected_title,
+ int num_navigations) {
+ ui_test_utils::TitleWatcher title_watcher(
+ browser()->GetSelectedTabContents(),
+ ASCIIToUTF16(expected_title));
+
+ ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(
+ browser(), url, num_navigations);
+
+ EXPECT_EQ(title_watcher.WaitAndGetTitle(), ASCIIToUTF16(expected_title));
+ }
+
+ // Navigates back in the history and waits for |num_navigations| to occur, and
+ // the title to change to |expected_title|.
+ void GoBackAndWaitForTitle(const std::string& expected_title,
+ int num_navigations) {
+ NavigateHistoryAndWaitForTitle(expected_title,
+ num_navigations,
+ HISTORY_NAVIGATE_BACK);
+ }
+
+ // Navigates forward in the history and waits for |num_navigations| to occur,
+ // and the title to change to |expected_title|.
+ void GoForwardAndWaitForTitle(const std::string& expected_title,
+ int num_navigations) {
+ NavigateHistoryAndWaitForTitle(expected_title,
+ num_navigations,
+ HISTORY_NAVIGATE_FORWARD);
+ }
+
+ private:
+ // Navigates the browser the indicated direction in the history and waits for
+ // |num_navigations| to occur and the title to change to |expected_title|.
+ void NavigateHistoryAndWaitForTitle(const std::string& expected_title,
+ int num_navigations,
+ HistoryNavigationDirection direction) {
+ ui_test_utils::TitleWatcher title_watcher(
+ browser()->GetSelectedTabContents(),
+ ASCIIToUTF16(expected_title));
+
+ TestNavigationObserver test_navigation_observer(
+ Source<NavigationController>(
+ &browser()->GetSelectedTabContentsWrapper()->controller()),
+ NULL,
+ num_navigations);
+ if (direction == HISTORY_NAVIGATE_BACK) {
+ browser()->GoBack(CURRENT_TAB);
+ } else if (direction == HISTORY_NAVIGATE_FORWARD) {
+ browser()->GoForward(CURRENT_TAB);
+ } else {
+ FAIL();
+ }
+ test_navigation_observer.WaitForObservation();
+
+ EXPECT_EQ(title_watcher.WaitAndGetTitle(), ASCIIToUTF16(expected_title));
+ }
+};
+
+// Test that a DNS error occuring in the main frame redirects to an error page.
+IN_PROC_BROWSER_TEST_F(ErrorPageTest, DNSError_Basic) {
+ GURL test_url(URLRequestFailedDnsJob::kTestUrl);
+ // The first navigation should fail, and the second one should be the error
+ // page.
+ NavigateToURLAndWaitForTitle(test_url, "Mock Link Doctor", 2);
+}
+
+// Test that a DNS error occuring in the main frame does not result in an
+// additional session history entry.
+IN_PROC_BROWSER_TEST_F(ErrorPageTest, DNSError_GoBack1) {
+ GURL test_url(URLRequestFailedDnsJob::kTestUrl);
+ NavigateToFileURL(FILE_PATH_LITERAL("title2.html"));
+ NavigateToURLAndWaitForTitle(test_url, "Mock Link Doctor", 2);
+ GoBackAndWaitForTitle("Title Of Awesomeness", 1);
+}
+
+// Test that a DNS error occuring in the main frame does not result in an
+// additional session history entry.
+IN_PROC_BROWSER_TEST_F(ErrorPageTest, DNSError_GoBack2) {
+ GURL test_url(URLRequestFailedDnsJob::kTestUrl);
+ NavigateToFileURL(FILE_PATH_LITERAL("title2.html"));
+
+ NavigateToURLAndWaitForTitle(test_url, "Mock Link Doctor", 2);
+ NavigateToFileURL(FILE_PATH_LITERAL("title3.html"));
+
+ GoBackAndWaitForTitle("Mock Link Doctor", 2);
+ GoBackAndWaitForTitle("Title Of Awesomeness", 1);
+}
+
+// Test that a DNS error occuring in the main frame does not result in an
+// additional session history entry.
+IN_PROC_BROWSER_TEST_F(ErrorPageTest, DNSError_GoBack2AndForward) {
+ GURL test_url(URLRequestFailedDnsJob::kTestUrl);
+ NavigateToFileURL(FILE_PATH_LITERAL("title2.html"));
+
+ NavigateToURLAndWaitForTitle(test_url, "Mock Link Doctor", 2);
+ NavigateToFileURL(FILE_PATH_LITERAL("title3.html"));
+
+ GoBackAndWaitForTitle("Mock Link Doctor", 2);
+ GoBackAndWaitForTitle("Title Of Awesomeness", 1);
+
+ GoForwardAndWaitForTitle("Mock Link Doctor", 2);
+}
+
+// Test that a DNS error occuring in the main frame does not result in an
+// additional session history entry.
+IN_PROC_BROWSER_TEST_F(ErrorPageTest, DNSError_GoBack2Forward2) {
+ GURL test_url(URLRequestFailedDnsJob::kTestUrl);
+ NavigateToFileURL(FILE_PATH_LITERAL("title3.html"));
+
+ NavigateToURLAndWaitForTitle(test_url, "Mock Link Doctor", 2);
+ NavigateToFileURL(FILE_PATH_LITERAL("title2.html"));
+
+ GoBackAndWaitForTitle("Mock Link Doctor", 2);
+ GoBackAndWaitForTitle("Title Of More Awesomeness", 1);
+
+ GoForwardAndWaitForTitle("Mock Link Doctor", 2);
+ GoForwardAndWaitForTitle("Title Of Awesomeness", 1);
+}
+
+// Test that a DNS error occuring in an iframe.
+IN_PROC_BROWSER_TEST_F(ErrorPageTest, IFrameDNSError_Basic) {
+ NavigateToURLAndWaitForTitle(
+ URLRequestMockHTTPJob::GetMockUrl(
+ FilePath(FILE_PATH_LITERAL("iframe_dns_error.html"))),
+ "Blah",
+ 1);
+}
+
+// Test that a DNS error occuring in an iframe does not result in an
+// additional session history entry.
+IN_PROC_BROWSER_TEST_F(ErrorPageTest, IFrameDNSError_GoBack) {
+ NavigateToFileURL(FILE_PATH_LITERAL("title2.html"));
+ NavigateToFileURL(FILE_PATH_LITERAL("iframe_dns_error.html"));
+ GoBackAndWaitForTitle("Title Of Awesomeness", 1);
+}
+
+// Test that a DNS error occuring in an iframe does not result in an
+// additional session history entry.
+IN_PROC_BROWSER_TEST_F(ErrorPageTest, IFrameDNSError_GoBackAndForward) {
+ NavigateToFileURL(FILE_PATH_LITERAL("title2.html"));
+ NavigateToFileURL(FILE_PATH_LITERAL("iframe_dns_error.html"));
+ GoBackAndWaitForTitle("Title Of Awesomeness", 1);
+ GoForwardAndWaitForTitle("Blah", 1);
+}
+
+// Checks that the Link Doctor is not loaded when we receive an actual 404 page.
+IN_PROC_BROWSER_TEST_F(ErrorPageTest, Page404) {
+ NavigateToURLAndWaitForTitle(
+ URLRequestMockHTTPJob::GetMockUrl(
+ FilePath(FILE_PATH_LITERAL("page404.html"))),
+ "SUCCESS",
+ 1);
+}