• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "base/string_util.h"
6 #include "base/test/test_timeouts.h"
7 #include "base/threading/platform_thread.h"
8 #include "chrome/test/automation/tab_proxy.h"
9 #include "chrome/test/ui/ui_test.h"
10 #include "chrome/browser/net/url_request_failed_dns_job.h"
11 #include "chrome/browser/net/url_request_mock_http_job.h"
12 #include "net/test/test_server.h"
13 
14 class ErrorPageTest : public UITest {
15  protected:
WaitForTitleMatching(const std::wstring & title)16   bool WaitForTitleMatching(const std::wstring& title) {
17     for (int i = 0; i < 10; ++i) {
18       if (GetActiveTabTitle() == title)
19         return true;
20       base::PlatformThread::Sleep(TestTimeouts::action_timeout_ms());
21     }
22     EXPECT_EQ(title, GetActiveTabTitle());
23     return false;
24   }
25 };
26 
TEST_F(ErrorPageTest,DNSError_Basic)27 TEST_F(ErrorPageTest, DNSError_Basic) {
28   GURL test_url(URLRequestFailedDnsJob::kTestUrl);
29 
30   // The first navigation should fail, and the second one should be the error
31   // page.
32   NavigateToURLBlockUntilNavigationsComplete(test_url, 2);
33 
34   EXPECT_TRUE(WaitForTitleMatching(L"Mock Link Doctor"));
35 }
36 
TEST_F(ErrorPageTest,DNSError_GoBack1)37 TEST_F(ErrorPageTest, DNSError_GoBack1) {
38   // Test that a DNS error occuring in the main frame does not result in an
39   // additional session history entry.
40   GURL test_url(URLRequestFailedDnsJob::kTestUrl);
41 
42   NavigateToURL(URLRequestMockHTTPJob::GetMockUrl(
43                     FilePath(FILE_PATH_LITERAL("title2.html"))));
44   // The first navigation should fail, and the second one should be the error
45   // page.
46   NavigateToURLBlockUntilNavigationsComplete(test_url, 2);
47   EXPECT_TRUE(WaitForTitleMatching(L"Mock Link Doctor"));
48 
49   EXPECT_TRUE(GetActiveTab()->GoBack());
50 
51   EXPECT_TRUE(WaitForTitleMatching(L"Title Of Awesomeness"));
52 }
53 
54 // Flaky on Linux, see http://crbug.com/19361
55 #if defined(OS_LINUX)
56 #define MAYBE_DNSError_GoBack2 FLAKY_DNSError_GoBack2
57 #else
58 #define MAYBE_DNSError_GoBack2 DNSError_GoBack2
59 #endif
TEST_F(ErrorPageTest,MAYBE_DNSError_GoBack2)60 TEST_F(ErrorPageTest, MAYBE_DNSError_GoBack2) {
61   // Test that a DNS error occuring in the main frame does not result in an
62   // additional session history entry.
63   GURL test_url(URLRequestFailedDnsJob::kTestUrl);
64 
65   NavigateToURL(URLRequestMockHTTPJob::GetMockUrl(
66                     FilePath(FILE_PATH_LITERAL("title2.html"))));
67   // The first navigation should fail, and the second one should be the error
68   // page.
69   NavigateToURLBlockUntilNavigationsComplete(test_url, 2);
70   EXPECT_TRUE(WaitForTitleMatching(L"Mock Link Doctor"));
71   NavigateToURL(URLRequestMockHTTPJob::GetMockUrl(
72                     FilePath(FILE_PATH_LITERAL("title3.html"))));
73 
74   // The first navigation should fail, and the second one should be the error
75   // page.
76   EXPECT_TRUE(GetActiveTab()->GoBackBlockUntilNavigationsComplete(2));
77   EXPECT_TRUE(WaitForTitleMatching(L"Mock Link Doctor"));
78   EXPECT_TRUE(GetActiveTab()->GoBack());
79 
80   EXPECT_TRUE(WaitForTitleMatching(L"Title Of Awesomeness"));
81 }
82 
83 // Flaky on Linux, see http://crbug.com/19361
84 #if defined(OS_LINUX)
85 #define MAYBE_DNSError_GoBack2AndForward FLAKY_DNSError_GoBack2AndForward
86 #else
87 #define MAYBE_DNSError_GoBack2AndForward DNSError_GoBack2AndForward
88 #endif
TEST_F(ErrorPageTest,MAYBE_DNSError_GoBack2AndForward)89 TEST_F(ErrorPageTest, MAYBE_DNSError_GoBack2AndForward) {
90   // Test that a DNS error occuring in the main frame does not result in an
91   // additional session history entry.
92 
93   GURL test_url(URLRequestFailedDnsJob::kTestUrl);
94 
95   NavigateToURL(URLRequestMockHTTPJob::GetMockUrl(
96                     FilePath(FILE_PATH_LITERAL("title2.html"))));
97   // The first navigation should fail, and the second one should be the error
98   // page.
99   NavigateToURLBlockUntilNavigationsComplete(test_url, 2);
100   EXPECT_TRUE(WaitForTitleMatching(L"Mock Link Doctor"));
101   NavigateToURL(URLRequestMockHTTPJob::GetMockUrl(
102                     FilePath(FILE_PATH_LITERAL("title3.html"))));
103 
104   // The first navigation should fail, and the second one should be the error
105   // page.
106   EXPECT_TRUE(GetActiveTab()->GoBackBlockUntilNavigationsComplete(2));
107   EXPECT_TRUE(WaitForTitleMatching(L"Mock Link Doctor"));
108   EXPECT_TRUE(GetActiveTab()->GoBack());
109   // The first navigation should fail, and the second one should be the error
110   // page.
111   EXPECT_TRUE(GetActiveTab()->GoForwardBlockUntilNavigationsComplete(2));
112 
113   EXPECT_TRUE(WaitForTitleMatching(L"Mock Link Doctor"));
114 }
115 
116 // Flaky on Linux, see http://crbug.com/19361
117 #if defined(OS_LINUX)
118 #define MAYBE_DNSError_GoBack2Forward2 FLAKY_DNSError_GoBack2Forward2
119 #else
120 #define MAYBE_DNSError_GoBack2Forward2 DNSError_GoBack2Forward2
121 #endif
TEST_F(ErrorPageTest,MAYBE_DNSError_GoBack2Forward2)122 TEST_F(ErrorPageTest, MAYBE_DNSError_GoBack2Forward2) {
123   // Test that a DNS error occuring in the main frame does not result in an
124   // additional session history entry.
125 
126   GURL test_url(URLRequestFailedDnsJob::kTestUrl);
127 
128   NavigateToURL(URLRequestMockHTTPJob::GetMockUrl(
129                     FilePath(FILE_PATH_LITERAL("title3.html"))));
130   // The first navigation should fail, and the second one should be the error
131   // page.
132   NavigateToURLBlockUntilNavigationsComplete(test_url, 2);
133   EXPECT_TRUE(WaitForTitleMatching(L"Mock Link Doctor"));
134   NavigateToURL(URLRequestMockHTTPJob::GetMockUrl(
135                     FilePath(FILE_PATH_LITERAL("title2.html"))));
136 
137   // The first navigation should fail, and the second one should be the error
138   // page.
139   EXPECT_TRUE(GetActiveTab()->GoBackBlockUntilNavigationsComplete(2));
140   EXPECT_TRUE(WaitForTitleMatching(L"Mock Link Doctor"));
141   EXPECT_TRUE(GetActiveTab()->GoBack());
142   // The first navigation should fail, and the second one should be the error
143   // page.
144   EXPECT_TRUE(GetActiveTab()->GoForwardBlockUntilNavigationsComplete(2));
145   EXPECT_TRUE(WaitForTitleMatching(L"Mock Link Doctor"));
146   EXPECT_TRUE(GetActiveTab()->GoForward());
147 
148   EXPECT_TRUE(WaitForTitleMatching(L"Title Of Awesomeness"));
149 }
150 
TEST_F(ErrorPageTest,IFrameDNSError_Basic)151 TEST_F(ErrorPageTest, IFrameDNSError_Basic) {
152   NavigateToURL(URLRequestMockHTTPJob::GetMockUrl(
153                     FilePath(FILE_PATH_LITERAL("iframe_dns_error.html"))));
154   EXPECT_TRUE(WaitForTitleMatching(L"Blah"));
155 }
156 
TEST_F(ErrorPageTest,IFrameDNSError_GoBack)157 TEST_F(ErrorPageTest, IFrameDNSError_GoBack) {
158   // Test that a DNS error occuring in an iframe does not result in an
159   // additional session history entry.
160 
161   NavigateToURL(URLRequestMockHTTPJob::GetMockUrl(
162                     FilePath(FILE_PATH_LITERAL("title2.html"))));
163   NavigateToURL(URLRequestMockHTTPJob::GetMockUrl(
164                     FilePath(FILE_PATH_LITERAL("iframe_dns_error.html"))));
165 
166   EXPECT_TRUE(GetActiveTab()->GoBack());
167 
168   EXPECT_TRUE(WaitForTitleMatching(L"Title Of Awesomeness"));
169 }
170 
TEST_F(ErrorPageTest,IFrameDNSError_GoBackAndForward)171 TEST_F(ErrorPageTest, IFrameDNSError_GoBackAndForward) {
172   // Test that a DNS error occuring in an iframe does not result in an
173   // additional session history entry.
174 
175   NavigateToURL(URLRequestMockHTTPJob::GetMockUrl(
176                     FilePath(FILE_PATH_LITERAL("title2.html"))));
177   NavigateToURL(URLRequestMockHTTPJob::GetMockUrl(
178                     FilePath(FILE_PATH_LITERAL("iframe_dns_error.html"))));
179 
180   EXPECT_TRUE(GetActiveTab()->GoBack());
181   EXPECT_TRUE(GetActiveTab()->GoForward());
182 
183   EXPECT_TRUE(WaitForTitleMatching(L"Blah"));
184 }
185 
186 // Checks that the Link Doctor is not loaded when we receive an actual 404 page.
TEST_F(ErrorPageTest,Page404)187 TEST_F(ErrorPageTest, Page404) {
188   NavigateToURL(URLRequestMockHTTPJob::GetMockUrl(
189                     FilePath(FILE_PATH_LITERAL("page404.html"))));
190 
191   EXPECT_TRUE(WaitForTitleMatching(L"SUCCESS"));
192 }
193