OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/bind.h" | 5 #include "base/bind.h" |
6 #include "base/command_line.h" | 6 #include "base/command_line.h" |
7 #include "base/compiler_specific.h" | 7 #include "base/compiler_specific.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "base/path_service.h" |
10 #include "base/prefs/pref_service.h" | 11 #include "base/prefs/pref_service.h" |
11 #include "base/strings/stringprintf.h" | 12 #include "base/strings/stringprintf.h" |
12 #include "base/strings/utf_string_conversions.h" | 13 #include "base/strings/utf_string_conversions.h" |
13 #include "chrome/browser/browsing_data/browsing_data_helper.h" | 14 #include "chrome/browser/browsing_data/browsing_data_helper.h" |
14 #include "chrome/browser/browsing_data/browsing_data_remover.h" | 15 #include "chrome/browser/browsing_data/browsing_data_remover.h" |
15 #include "chrome/browser/google/google_util.h" | 16 #include "chrome/browser/google/google_util.h" |
16 #include "chrome/browser/net/url_request_mock_util.h" | 17 #include "chrome/browser/net/url_request_mock_util.h" |
17 #include "chrome/browser/profiles/profile.h" | 18 #include "chrome/browser/profiles/profile.h" |
18 #include "chrome/browser/ui/browser.h" | 19 #include "chrome/browser/ui/browser.h" |
19 #include "chrome/browser/ui/browser_commands.h" | 20 #include "chrome/browser/ui/browser_commands.h" |
20 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 21 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 22 #include "chrome/common/chrome_paths.h" |
21 #include "chrome/common/chrome_switches.h" | 23 #include "chrome/common/chrome_switches.h" |
22 #include "chrome/common/pref_names.h" | 24 #include "chrome/common/pref_names.h" |
23 #include "chrome/test/base/in_process_browser_test.h" | 25 #include "chrome/test/base/in_process_browser_test.h" |
24 #include "chrome/test/base/ui_test_utils.h" | 26 #include "chrome/test/base/ui_test_utils.h" |
25 #include "content/public/browser/browser_thread.h" | 27 #include "content/public/browser/browser_thread.h" |
26 #include "content/public/browser/notification_service.h" | 28 #include "content/public/browser/notification_service.h" |
27 #include "content/public/browser/render_frame_host.h" | 29 #include "content/public/browser/render_frame_host.h" |
28 #include "content/public/browser/render_view_host.h" | 30 #include "content/public/browser/render_view_host.h" |
29 #include "content/public/browser/web_contents.h" | 31 #include "content/public/browser/web_contents.h" |
30 #include "content/public/browser/web_contents_observer.h" | 32 #include "content/public/browser/web_contents_observer.h" |
(...skipping 15 matching lines...) Expand all Loading... |
46 #include "net/url_request/url_request_test_util.h" | 48 #include "net/url_request/url_request_test_util.h" |
47 | 49 |
48 using content::BrowserThread; | 50 using content::BrowserThread; |
49 using content::NavigationController; | 51 using content::NavigationController; |
50 using content::URLRequestFailedJob; | 52 using content::URLRequestFailedJob; |
51 using net::URLRequestJobFactory; | 53 using net::URLRequestJobFactory; |
52 using net::URLRequestTestJob; | 54 using net::URLRequestTestJob; |
53 | 55 |
54 namespace { | 56 namespace { |
55 | 57 |
| 58 // Returns true if |text| is displayed on the page |browser| is currently |
| 59 // displaying. Uses "innerText", so will miss hidden text, and whitespace |
| 60 // space handling may be weird. |
| 61 bool WARN_UNUSED_RESULT IsDisplayingText(Browser* browser, |
| 62 const std::string& text) { |
| 63 std::string command = base::StringPrintf( |
| 64 "var textContent = document.body.innerText;" |
| 65 "var hasText = textContent.indexOf('%s') >= 0;" |
| 66 "domAutomationController.send(hasText);", |
| 67 text.c_str()); |
| 68 bool result = false; |
| 69 EXPECT_TRUE(content::ExecuteScriptAndExtractBool( |
| 70 browser->tab_strip_model()->GetActiveWebContents(), command, &result)); |
| 71 return result; |
| 72 } |
| 73 |
| 74 // Expands the more box on the currently displayed error page. |
| 75 void ToggleHelpBox(Browser* browser) { |
| 76 EXPECT_TRUE(content::ExecuteScript( |
| 77 browser->tab_strip_model()->GetActiveWebContents(), |
| 78 "document.getElementById('more-less-button').click();")); |
| 79 } |
| 80 |
| 81 // Returns true if |browser| is displaying the text representation of |
| 82 // |error_code| on the current page. |
| 83 bool WARN_UNUSED_RESULT IsDisplayingNetError(Browser* browser, |
| 84 net::Error error_code) { |
| 85 // Get the error as a string, and remove the leading "net::", which is not |
| 86 // included on error pages. |
| 87 std::string error_string = net::ErrorToString(error_code); |
| 88 base::RemoveChars(error_string, "net:", &error_string); |
| 89 |
| 90 return IsDisplayingText(browser, error_string); |
| 91 } |
| 92 |
| 93 // Checks that the local error page is being displayed, without remotely |
| 94 // retrieved navigation corrections, and with the specified error code. |
| 95 void ExpectDisplayingLocalErrorPage(Browser* browser, net::Error error_code) { |
| 96 // Expand the help box so innerText will include text below the fold. |
| 97 ToggleHelpBox(browser); |
| 98 |
| 99 EXPECT_TRUE(IsDisplayingNetError(browser, error_code)); |
| 100 |
| 101 // Locally generated error pages should not have navigation corrections. |
| 102 EXPECT_FALSE(IsDisplayingText(browser, "http://correction1/")); |
| 103 EXPECT_FALSE(IsDisplayingText(browser, "http://correction2/")); |
| 104 |
| 105 // Locally generated error pages should not have a populated search box. |
| 106 bool search_box_populated = false; |
| 107 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( |
| 108 browser->tab_strip_model()->GetActiveWebContents(), |
| 109 "var searchText = document.getElementById('search-box').value;" |
| 110 "domAutomationController.send(searchText == 'search query');", |
| 111 &search_box_populated)); |
| 112 EXPECT_FALSE(search_box_populated); |
| 113 } |
| 114 |
| 115 // Checks that an error page with information retrieved from the navigation |
| 116 // correction service is being displayed, with the specified specified error |
| 117 // code. |
| 118 void ExpectDisplayingNavigationCorrections(Browser* browser, |
| 119 net::Error error_code) { |
| 120 // Expand the help box so innerText will include text below the fold. |
| 121 ToggleHelpBox(browser); |
| 122 |
| 123 EXPECT_TRUE(IsDisplayingNetError(browser, error_code)); |
| 124 |
| 125 // Check that the mock navigation corrections are displayed. |
| 126 EXPECT_TRUE(IsDisplayingText(browser, "http://correction1/")); |
| 127 EXPECT_TRUE(IsDisplayingText(browser, "http://correction2/")); |
| 128 |
| 129 // Check that the search box is populated correctly. |
| 130 bool search_box_populated = false; |
| 131 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( |
| 132 browser->tab_strip_model()->GetActiveWebContents(), |
| 133 "var searchText = document.getElementById('search-box').value;" |
| 134 "domAutomationController.send(searchText == 'search query');", |
| 135 &search_box_populated)); |
| 136 EXPECT_TRUE(search_box_populated); |
| 137 } |
| 138 |
56 // A protocol handler that fails a configurable number of requests, then | 139 // A protocol handler that fails a configurable number of requests, then |
57 // succeeds all requests after that, keeping count of failures and successes. | 140 // succeeds all requests after that, keeping count of failures and successes. |
58 class FailFirstNRequestsProtocolHandler | 141 class FailFirstNRequestsProtocolHandler |
59 : public URLRequestJobFactory::ProtocolHandler { | 142 : public URLRequestJobFactory::ProtocolHandler { |
60 public: | 143 public: |
61 FailFirstNRequestsProtocolHandler(const GURL& url, int requests_to_fail) | 144 FailFirstNRequestsProtocolHandler(const GURL& url, int requests_to_fail) |
62 : url_(url), requests_(0), failures_(0), | 145 : url_(url), requests_(0), failures_(0), |
63 requests_to_fail_(requests_to_fail) {} | 146 requests_to_fail_(requests_to_fail) {} |
64 virtual ~FailFirstNRequestsProtocolHandler() {} | 147 virtual ~FailFirstNRequestsProtocolHandler() {} |
65 | 148 |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 | 233 |
151 // Navigates forward in the history and waits for |num_navigations| to occur, | 234 // Navigates forward in the history and waits for |num_navigations| to occur, |
152 // and the title to change to |expected_title|. | 235 // and the title to change to |expected_title|. |
153 void GoForwardAndWaitForTitle(const std::string& expected_title, | 236 void GoForwardAndWaitForTitle(const std::string& expected_title, |
154 int num_navigations) { | 237 int num_navigations) { |
155 NavigateHistoryAndWaitForTitle(expected_title, | 238 NavigateHistoryAndWaitForTitle(expected_title, |
156 num_navigations, | 239 num_navigations, |
157 HISTORY_NAVIGATE_FORWARD); | 240 HISTORY_NAVIGATE_FORWARD); |
158 } | 241 } |
159 | 242 |
| 243 void GoBackAndWaitForNavigations(int num_navigations) { |
| 244 NavigateHistory(num_navigations, HISTORY_NAVIGATE_BACK); |
| 245 } |
| 246 |
| 247 void GoForwardAndWaitForNavigations(int num_navigations) { |
| 248 NavigateHistory(num_navigations, HISTORY_NAVIGATE_FORWARD); |
| 249 } |
| 250 |
160 // Confirms that the javascript variable indicating whether or not we have | 251 // Confirms that the javascript variable indicating whether or not we have |
161 // a stale copy in the cache has been set to |expected|. | 252 // a stale copy in the cache has been set to |expected|. |
162 bool ProbeStaleCopyValue(bool expected) { | 253 bool ProbeStaleCopyValue(bool expected) { |
163 const char* js_cache_probe = | 254 const char* js_cache_probe = |
164 "try {\n" | 255 "try {\n" |
165 " domAutomationController.send(\n" | 256 " domAutomationController.send(\n" |
166 " templateData.staleCopyInCache ? 'yes' : 'no');\n" | 257 " templateData.staleCopyInCache ? 'yes' : 'no');\n" |
167 "} catch (e) {\n" | 258 "} catch (e) {\n" |
168 " domAutomationController.send(e.message);\n" | 259 " domAutomationController.send(e.message);\n" |
169 "}\n"; | 260 "}\n"; |
(...skipping 26 matching lines...) Expand all Loading... |
196 js_reload_script, | 287 js_reload_script, |
197 &result); | 288 &result); |
198 EXPECT_TRUE(ret); | 289 EXPECT_TRUE(ret); |
199 if (!ret) | 290 if (!ret) |
200 return testing::AssertionFailure(); | 291 return testing::AssertionFailure(); |
201 return ("success" == result ? testing::AssertionSuccess() : | 292 return ("success" == result ? testing::AssertionSuccess() : |
202 (testing::AssertionFailure() << "Exception message is " << result)); | 293 (testing::AssertionFailure() << "Exception message is " << result)); |
203 } | 294 } |
204 | 295 |
205 protected: | 296 protected: |
| 297 static void EnableMocks(const GURL& search_url) { |
| 298 chrome_browser_net::SetUrlRequestMocksEnabled(true); |
| 299 |
| 300 // Add a mock for the search engine the error page will use. |
| 301 base::FilePath root_http; |
| 302 PathService::Get(chrome::DIR_TEST_DATA, &root_http); |
| 303 content::URLRequestMockHTTPJob::AddHostnameToFileHandler( |
| 304 search_url.host(), root_http.AppendASCII("title3.html")); |
| 305 } |
| 306 |
206 virtual void SetUpOnMainThread() OVERRIDE { | 307 virtual void SetUpOnMainThread() OVERRIDE { |
207 BrowserThread::PostTask( | 308 BrowserThread::PostTask( |
208 BrowserThread::IO, FROM_HERE, | 309 BrowserThread::IO, FROM_HERE, |
209 base::Bind(&chrome_browser_net::SetUrlRequestMocksEnabled, true)); | 310 base::Bind(&ErrorPageTest::EnableMocks, |
| 311 google_util::GetGoogleSearchURL(browser()->profile()))); |
210 } | 312 } |
211 | 313 |
212 // Returns a GURL that results in a DNS error. | 314 // Returns a GURL that results in a DNS error. |
213 GURL GetDnsErrorURL() const { | 315 GURL GetDnsErrorURL() const { |
214 return URLRequestFailedJob::GetMockHttpUrl(net::ERR_NAME_NOT_RESOLVED); | 316 return URLRequestFailedJob::GetMockHttpUrl(net::ERR_NAME_NOT_RESOLVED); |
215 } | 317 } |
216 | 318 |
217 private: | 319 private: |
218 // Navigates the browser the indicated direction in the history and waits for | 320 // Navigates the browser the indicated direction in the history and waits for |
219 // |num_navigations| to occur and the title to change to |expected_title|. | 321 // |num_navigations| to occur and the title to change to |expected_title|. |
220 void NavigateHistoryAndWaitForTitle(const std::string& expected_title, | 322 void NavigateHistoryAndWaitForTitle(const std::string& expected_title, |
221 int num_navigations, | 323 int num_navigations, |
222 HistoryNavigationDirection direction) { | 324 HistoryNavigationDirection direction) { |
223 content::TitleWatcher title_watcher( | 325 content::TitleWatcher title_watcher( |
224 browser()->tab_strip_model()->GetActiveWebContents(), | 326 browser()->tab_strip_model()->GetActiveWebContents(), |
225 base::ASCIIToUTF16(expected_title)); | 327 base::ASCIIToUTF16(expected_title)); |
226 | 328 |
| 329 NavigateHistory(num_navigations, direction); |
| 330 |
| 331 EXPECT_EQ(title_watcher.WaitAndGetTitle(), |
| 332 base::ASCIIToUTF16(expected_title)); |
| 333 } |
| 334 |
| 335 void NavigateHistory(int num_navigations, |
| 336 HistoryNavigationDirection direction) { |
227 content::TestNavigationObserver test_navigation_observer( | 337 content::TestNavigationObserver test_navigation_observer( |
228 browser()->tab_strip_model()->GetActiveWebContents(), | 338 browser()->tab_strip_model()->GetActiveWebContents(), |
229 num_navigations); | 339 num_navigations); |
230 if (direction == HISTORY_NAVIGATE_BACK) { | 340 if (direction == HISTORY_NAVIGATE_BACK) { |
231 chrome::GoBack(browser(), CURRENT_TAB); | 341 chrome::GoBack(browser(), CURRENT_TAB); |
232 } else if (direction == HISTORY_NAVIGATE_FORWARD) { | 342 } else if (direction == HISTORY_NAVIGATE_FORWARD) { |
233 chrome::GoForward(browser(), CURRENT_TAB); | 343 chrome::GoForward(browser(), CURRENT_TAB); |
234 } else { | 344 } else { |
235 FAIL(); | 345 FAIL(); |
236 } | 346 } |
237 test_navigation_observer.Wait(); | 347 test_navigation_observer.Wait(); |
238 | |
239 EXPECT_EQ(title_watcher.WaitAndGetTitle(), | |
240 base::ASCIIToUTF16(expected_title)); | |
241 } | 348 } |
242 }; | 349 }; |
243 | 350 |
244 class TestFailProvisionalLoadObserver : public content::WebContentsObserver { | 351 class TestFailProvisionalLoadObserver : public content::WebContentsObserver { |
245 public: | 352 public: |
246 explicit TestFailProvisionalLoadObserver(content::WebContents* contents) | 353 explicit TestFailProvisionalLoadObserver(content::WebContents* contents) |
247 : content::WebContentsObserver(contents) {} | 354 : content::WebContentsObserver(contents) {} |
248 virtual ~TestFailProvisionalLoadObserver() {} | 355 virtual ~TestFailProvisionalLoadObserver() {} |
249 | 356 |
250 // This method is invoked when the provisional load failed. | 357 // This method is invoked when the provisional load failed. |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
283 // See crbug.com/109669 | 390 // See crbug.com/109669 |
284 #if defined(USE_AURA) | 391 #if defined(USE_AURA) |
285 #define MAYBE_DNSError_Basic DISABLED_DNSError_Basic | 392 #define MAYBE_DNSError_Basic DISABLED_DNSError_Basic |
286 #else | 393 #else |
287 #define MAYBE_DNSError_Basic DNSError_Basic | 394 #define MAYBE_DNSError_Basic DNSError_Basic |
288 #endif | 395 #endif |
289 // Test that a DNS error occuring in the main frame redirects to an error page. | 396 // Test that a DNS error occuring in the main frame redirects to an error page. |
290 IN_PROC_BROWSER_TEST_F(ErrorPageTest, MAYBE_DNSError_Basic) { | 397 IN_PROC_BROWSER_TEST_F(ErrorPageTest, MAYBE_DNSError_Basic) { |
291 // The first navigation should fail, and the second one should be the error | 398 // The first navigation should fail, and the second one should be the error |
292 // page. | 399 // page. |
293 NavigateToURLAndWaitForTitle(GetDnsErrorURL(), "Mock Link Doctor", 2); | 400 ui_test_utils::NavigateToURLBlockUntilNavigationsComplete( |
| 401 browser(), GetDnsErrorURL(), 2); |
| 402 ExpectDisplayingNavigationCorrections(browser(), net::ERR_NAME_NOT_RESOLVED); |
294 } | 403 } |
295 | 404 |
296 // See crbug.com/109669 | 405 // See crbug.com/109669 |
297 #if defined(USE_AURA) | 406 #if defined(USE_AURA) |
298 #define MAYBE_DNSError_GoBack1 DISABLED_DNSError_GoBack1 | 407 #define MAYBE_DNSError_GoBack1 DISABLED_DNSError_GoBack1 |
299 #else | 408 #else |
300 #define MAYBE_DNSError_GoBack1 DNSError_GoBack1 | 409 #define MAYBE_DNSError_GoBack1 DNSError_GoBack1 |
301 #endif | 410 #endif |
302 | 411 |
303 // Test that a DNS error occuring in the main frame does not result in an | 412 // Test that a DNS error occuring in the main frame does not result in an |
304 // additional session history entry. | 413 // additional session history entry. |
305 IN_PROC_BROWSER_TEST_F(ErrorPageTest, MAYBE_DNSError_GoBack1) { | 414 IN_PROC_BROWSER_TEST_F(ErrorPageTest, MAYBE_DNSError_GoBack1) { |
306 NavigateToFileURL(FILE_PATH_LITERAL("title2.html")); | 415 NavigateToFileURL(FILE_PATH_LITERAL("title2.html")); |
307 NavigateToURLAndWaitForTitle(GetDnsErrorURL(), "Mock Link Doctor", 2); | 416 ui_test_utils::NavigateToURLBlockUntilNavigationsComplete( |
| 417 browser(), GetDnsErrorURL(), 2); |
| 418 ExpectDisplayingNavigationCorrections(browser(), net::ERR_NAME_NOT_RESOLVED); |
308 GoBackAndWaitForTitle("Title Of Awesomeness", 1); | 419 GoBackAndWaitForTitle("Title Of Awesomeness", 1); |
309 } | 420 } |
310 | 421 |
311 // See crbug.com/109669 | 422 // See crbug.com/109669 |
312 #if defined(USE_AURA) | 423 #if defined(USE_AURA) |
313 #define MAYBE_DNSError_GoBack2 DISABLED_DNSError_GoBack2 | 424 #define MAYBE_DNSError_GoBack2 DISABLED_DNSError_GoBack2 |
314 #else | 425 #else |
315 #define MAYBE_DNSError_GoBack2 DNSError_GoBack2 | 426 #define MAYBE_DNSError_GoBack2 DNSError_GoBack2 |
316 #endif | 427 #endif |
317 // Test that a DNS error occuring in the main frame does not result in an | 428 // Test that a DNS error occuring in the main frame does not result in an |
318 // additional session history entry. | 429 // additional session history entry. |
319 IN_PROC_BROWSER_TEST_F(ErrorPageTest, DNSError_GoBack2) { | 430 IN_PROC_BROWSER_TEST_F(ErrorPageTest, DNSError_GoBack2) { |
320 NavigateToFileURL(FILE_PATH_LITERAL("title2.html")); | 431 NavigateToFileURL(FILE_PATH_LITERAL("title2.html")); |
321 | 432 |
322 NavigateToURLAndWaitForTitle(GetDnsErrorURL(), "Mock Link Doctor", 2); | 433 ui_test_utils::NavigateToURLBlockUntilNavigationsComplete( |
| 434 browser(), GetDnsErrorURL(), 2); |
| 435 ExpectDisplayingNavigationCorrections(browser(), net::ERR_NAME_NOT_RESOLVED); |
| 436 |
323 NavigateToFileURL(FILE_PATH_LITERAL("title3.html")); | 437 NavigateToFileURL(FILE_PATH_LITERAL("title3.html")); |
324 | 438 |
325 GoBackAndWaitForTitle("Mock Link Doctor", 2); | 439 GoBackAndWaitForNavigations(2); |
| 440 ExpectDisplayingNavigationCorrections(browser(), net::ERR_NAME_NOT_RESOLVED); |
| 441 |
326 GoBackAndWaitForTitle("Title Of Awesomeness", 1); | 442 GoBackAndWaitForTitle("Title Of Awesomeness", 1); |
327 } | 443 } |
328 | 444 |
329 // See crbug.com/109669 | 445 // See crbug.com/109669 |
330 #if defined(USE_AURA) | 446 #if defined(USE_AURA) |
331 #define MAYBE_DNSError_GoBack2AndForward DISABLED_DNSError_GoBack2AndForward | 447 #define MAYBE_DNSError_GoBack2AndForward DISABLED_DNSError_GoBack2AndForward |
332 #else | 448 #else |
333 #define MAYBE_DNSError_GoBack2AndForward DNSError_GoBack2AndForward | 449 #define MAYBE_DNSError_GoBack2AndForward DNSError_GoBack2AndForward |
334 #endif | 450 #endif |
335 // Test that a DNS error occuring in the main frame does not result in an | 451 // Test that a DNS error occuring in the main frame does not result in an |
336 // additional session history entry. | 452 // additional session history entry. |
337 IN_PROC_BROWSER_TEST_F(ErrorPageTest, DNSError_GoBack2AndForward) { | 453 IN_PROC_BROWSER_TEST_F(ErrorPageTest, DNSError_GoBack2AndForward) { |
338 NavigateToFileURL(FILE_PATH_LITERAL("title2.html")); | 454 NavigateToFileURL(FILE_PATH_LITERAL("title2.html")); |
339 | 455 |
340 NavigateToURLAndWaitForTitle(GetDnsErrorURL(), "Mock Link Doctor", 2); | 456 ui_test_utils::NavigateToURLBlockUntilNavigationsComplete( |
| 457 browser(), GetDnsErrorURL(), 2); |
| 458 ExpectDisplayingNavigationCorrections(browser(), net::ERR_NAME_NOT_RESOLVED); |
| 459 |
341 NavigateToFileURL(FILE_PATH_LITERAL("title3.html")); | 460 NavigateToFileURL(FILE_PATH_LITERAL("title3.html")); |
342 | 461 |
343 GoBackAndWaitForTitle("Mock Link Doctor", 2); | 462 GoBackAndWaitForNavigations(2); |
| 463 ExpectDisplayingNavigationCorrections(browser(), net::ERR_NAME_NOT_RESOLVED); |
| 464 |
344 GoBackAndWaitForTitle("Title Of Awesomeness", 1); | 465 GoBackAndWaitForTitle("Title Of Awesomeness", 1); |
345 | 466 |
346 GoForwardAndWaitForTitle("Mock Link Doctor", 2); | 467 GoForwardAndWaitForNavigations(2); |
| 468 ExpectDisplayingNavigationCorrections(browser(), net::ERR_NAME_NOT_RESOLVED); |
347 } | 469 } |
348 | 470 |
349 // See crbug.com/109669 | 471 // See crbug.com/109669 |
350 #if defined(USE_AURA) | 472 #if defined(USE_AURA) |
351 #define MAYBE_DNSError_GoBack2Forward2 DISABLED_DNSError_GoBack2Forward2 | 473 #define MAYBE_DNSError_GoBack2Forward2 DISABLED_DNSError_GoBack2Forward2 |
352 #else | 474 #else |
353 #define MAYBE_DNSError_GoBack2Forward2 DNSError_GoBack2Forward2 | 475 #define MAYBE_DNSError_GoBack2Forward2 DNSError_GoBack2Forward2 |
354 #endif | 476 #endif |
355 // Test that a DNS error occuring in the main frame does not result in an | 477 // Test that a DNS error occuring in the main frame does not result in an |
356 // additional session history entry. | 478 // additional session history entry. |
357 IN_PROC_BROWSER_TEST_F(ErrorPageTest, DNSError_GoBack2Forward2) { | 479 IN_PROC_BROWSER_TEST_F(ErrorPageTest, DNSError_GoBack2Forward2) { |
358 NavigateToFileURL(FILE_PATH_LITERAL("title3.html")); | 480 NavigateToFileURL(FILE_PATH_LITERAL("title3.html")); |
359 | 481 |
360 NavigateToURLAndWaitForTitle(GetDnsErrorURL(), "Mock Link Doctor", 2); | 482 ui_test_utils::NavigateToURLBlockUntilNavigationsComplete( |
| 483 browser(), GetDnsErrorURL(), 2); |
| 484 ExpectDisplayingNavigationCorrections(browser(), net::ERR_NAME_NOT_RESOLVED); |
| 485 |
361 NavigateToFileURL(FILE_PATH_LITERAL("title2.html")); | 486 NavigateToFileURL(FILE_PATH_LITERAL("title2.html")); |
362 | 487 |
363 GoBackAndWaitForTitle("Mock Link Doctor", 2); | 488 GoBackAndWaitForNavigations(2); |
| 489 ExpectDisplayingNavigationCorrections(browser(), net::ERR_NAME_NOT_RESOLVED); |
| 490 |
364 GoBackAndWaitForTitle("Title Of More Awesomeness", 1); | 491 GoBackAndWaitForTitle("Title Of More Awesomeness", 1); |
365 | 492 |
366 GoForwardAndWaitForTitle("Mock Link Doctor", 2); | 493 GoForwardAndWaitForNavigations(2); |
| 494 ExpectDisplayingNavigationCorrections(browser(), net::ERR_NAME_NOT_RESOLVED); |
| 495 |
367 GoForwardAndWaitForTitle("Title Of Awesomeness", 1); | 496 GoForwardAndWaitForTitle("Title Of Awesomeness", 1); |
368 } | 497 } |
369 | 498 |
370 // Test that a DNS error occuring in an iframe. | 499 // See crbug.com/109669 |
| 500 #if defined(USE_AURA) |
| 501 #define MAYBE_DNSError_DoSearch DNSError_DoSearch |
| 502 #else |
| 503 #define MAYBE_DNSError_DoSearch DNSError_DoSearch |
| 504 #endif |
| 505 // Test that the search button on a DNS error page works. |
| 506 IN_PROC_BROWSER_TEST_F(ErrorPageTest, MAYBE_DNSError_DoSearch) { |
| 507 // The first navigation should fail, and the second one should be the error |
| 508 // page. |
| 509 ui_test_utils::NavigateToURLBlockUntilNavigationsComplete( |
| 510 browser(), GetDnsErrorURL(), 2); |
| 511 ExpectDisplayingNavigationCorrections(browser(), net::ERR_NAME_NOT_RESOLVED); |
| 512 |
| 513 // Do a search and make sure the browser ends up at the right page. |
| 514 content::TestNavigationObserver nav_observer( |
| 515 browser()->tab_strip_model()->GetActiveWebContents(), |
| 516 1); |
| 517 content::TitleWatcher title_watcher( |
| 518 browser()->tab_strip_model()->GetActiveWebContents(), |
| 519 base::ASCIIToUTF16("Title Of More Awesomeness")); |
| 520 ASSERT_TRUE(content::ExecuteScript( |
| 521 browser()->tab_strip_model()->GetActiveWebContents(), |
| 522 "document.getElementById('search-button').click();")); |
| 523 nav_observer.Wait(); |
| 524 EXPECT_EQ(base::ASCIIToUTF16("Title Of More Awesomeness"), |
| 525 title_watcher.WaitAndGetTitle()); |
| 526 |
| 527 // Check the path and query string. |
| 528 std::string url; |
| 529 ASSERT_TRUE(content::ExecuteScriptAndExtractString( |
| 530 browser()->tab_strip_model()->GetActiveWebContents(), |
| 531 "domAutomationController.send(window.location.href);", |
| 532 &url)); |
| 533 EXPECT_EQ("/search", GURL(url).path()); |
| 534 EXPECT_EQ("q=search%20query", GURL(url).query()); |
| 535 |
| 536 // Go back to the error page, to make sure the history is correct. |
| 537 GoBackAndWaitForNavigations(2); |
| 538 ExpectDisplayingNavigationCorrections(browser(), net::ERR_NAME_NOT_RESOLVED); |
| 539 } |
| 540 |
| 541 // Test that a DNS error occuring in an iframe does not result in showing |
| 542 // navigation corrections. |
371 IN_PROC_BROWSER_TEST_F(ErrorPageTest, IFrameDNSError_Basic) { | 543 IN_PROC_BROWSER_TEST_F(ErrorPageTest, IFrameDNSError_Basic) { |
372 NavigateToURLAndWaitForTitle( | 544 NavigateToURLAndWaitForTitle( |
373 content::URLRequestMockHTTPJob::GetMockUrl( | 545 content::URLRequestMockHTTPJob::GetMockUrl( |
374 base::FilePath(FILE_PATH_LITERAL("iframe_dns_error.html"))), | 546 base::FilePath(FILE_PATH_LITERAL("iframe_dns_error.html"))), |
375 "Blah", | 547 "Blah", |
376 1); | 548 1); |
377 // We expect to have two history entries, since we started off with navigation | 549 // We expect to have two history entries, since we started off with navigation |
378 // to "about:blank" and then navigated to "iframe_dns_error.html". | 550 // to "about:blank" and then navigated to "iframe_dns_error.html". |
379 EXPECT_EQ(2, | 551 EXPECT_EQ(2, |
380 browser()->tab_strip_model()->GetActiveWebContents()-> | 552 browser()->tab_strip_model()->GetActiveWebContents()-> |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
469 content::NOTIFICATION_LOAD_STOP, | 641 content::NOTIFICATION_LOAD_STOP, |
470 content::Source<NavigationController>(&wc->GetController())); | 642 content::Source<NavigationController>(&wc->GetController())); |
471 wc->GetMainFrame()->ExecuteJavaScript(base::ASCIIToUTF16(script)); | 643 wc->GetMainFrame()->ExecuteJavaScript(base::ASCIIToUTF16(script)); |
472 load_observer.Wait(); | 644 load_observer.Wait(); |
473 | 645 |
474 EXPECT_EQ(fail_url, fail_observer.fail_url()); | 646 EXPECT_EQ(fail_url, fail_observer.fail_url()); |
475 EXPECT_EQ(2, wc->GetController().GetEntryCount()); | 647 EXPECT_EQ(2, wc->GetController().GetEntryCount()); |
476 } | 648 } |
477 } | 649 } |
478 | 650 |
479 // Checks that the Link Doctor is not loaded when we receive an actual 404 page. | 651 // Checks that navigation corrections are not loaded when we receive an actual |
| 652 // 404 page. |
480 IN_PROC_BROWSER_TEST_F(ErrorPageTest, Page404) { | 653 IN_PROC_BROWSER_TEST_F(ErrorPageTest, Page404) { |
481 NavigateToURLAndWaitForTitle( | 654 NavigateToURLAndWaitForTitle( |
482 content::URLRequestMockHTTPJob::GetMockUrl( | 655 content::URLRequestMockHTTPJob::GetMockUrl( |
483 base::FilePath(FILE_PATH_LITERAL("page404.html"))), | 656 base::FilePath(FILE_PATH_LITERAL("page404.html"))), |
484 "SUCCESS", | 657 "SUCCESS", |
485 1); | 658 1); |
486 } | 659 } |
487 | 660 |
488 // Checks that when an error occurs, the stale cache status of the page | 661 // Checks that when an error occurs, the stale cache status of the page |
489 // is correctly transferred, and that stale cached copied can be loaded | 662 // is correctly transferred, and that stale cached copied can be loaded |
490 // from the javascript. | 663 // from the javascript. |
491 IN_PROC_BROWSER_TEST_F(ErrorPageTest, StaleCacheStatus) { | 664 IN_PROC_BROWSER_TEST_F(ErrorPageTest, StaleCacheStatus) { |
492 ASSERT_TRUE(test_server()->Start()); | 665 ASSERT_TRUE(test_server()->Start()); |
493 // Load cache with entry with "nocache" set, to create stale | 666 // Load cache with entry with "nocache" set, to create stale |
494 // cache. | 667 // cache. |
495 GURL test_url(test_server()->GetURL("files/nocache.html")); | 668 GURL test_url(test_server()->GetURL("files/nocache.html")); |
496 NavigateToURLAndWaitForTitle(test_url, "Nocache Test Page", 1); | 669 NavigateToURLAndWaitForTitle(test_url, "Nocache Test Page", 1); |
497 | 670 |
498 // Reload same URL after forcing an error from the the network layer; | 671 // Reload same URL after forcing an error from the the network layer; |
499 // confirm that the error page is told the cached copy exists. | 672 // confirm that the error page is told the cached copy exists. |
500 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter = | 673 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter = |
501 browser()->profile()->GetRequestContext(); | 674 browser()->profile()->GetRequestContext(); |
502 BrowserThread::PostTask( | 675 BrowserThread::PostTask( |
503 BrowserThread::IO, FROM_HERE, | 676 BrowserThread::IO, FROM_HERE, |
504 base::Bind(&InterceptNetworkTransactions, url_request_context_getter, | 677 base::Bind(&InterceptNetworkTransactions, url_request_context_getter, |
505 // Note that we can't use an error that'll invoke the link | |
506 // doctor. In normal network error conditions that would | |
507 // work (because the link doctor fetch would also fail, | |
508 // putting us back in the main offline path), but | |
509 // SetUrlRequestMocksEnabled() has also specfied a link | |
510 // doctor mock, which will be accessible because it | |
511 // won't go through the network cache. | |
512 net::ERR_FAILED)); | 678 net::ERR_FAILED)); |
513 | 679 |
514 ui_test_utils::NavigateToURLBlockUntilNavigationsComplete( | 680 ui_test_utils::NavigateToURLBlockUntilNavigationsComplete( |
515 // With no link doctor load, there's only one navigation. | 681 // With no navigation corrections to load, there's only one navigation. |
516 browser(), test_url, 1); | 682 browser(), test_url, 1); |
517 EXPECT_TRUE(ProbeStaleCopyValue(true)); | 683 EXPECT_TRUE(ProbeStaleCopyValue(true)); |
518 EXPECT_NE(base::ASCIIToUTF16("Nocache Test Page"), | 684 EXPECT_NE(base::ASCIIToUTF16("Nocache Test Page"), |
519 browser()->tab_strip_model()->GetActiveWebContents()->GetTitle()); | 685 browser()->tab_strip_model()->GetActiveWebContents()->GetTitle()); |
520 | 686 |
521 // Confirm that loading the stale copy from the cache works. | 687 // Confirm that loading the stale copy from the cache works. |
522 content::TestNavigationObserver same_tab_observer( | 688 content::TestNavigationObserver same_tab_observer( |
523 browser()->tab_strip_model()->GetActiveWebContents(), 1); | 689 browser()->tab_strip_model()->GetActiveWebContents(), 1); |
524 ASSERT_TRUE(ReloadStaleCopyFromCache()); | 690 ASSERT_TRUE(ReloadStaleCopyFromCache()); |
525 same_tab_observer.Wait(); | 691 same_tab_observer.Wait(); |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
593 InstallProtocolHandler(test_url, kRequestsToFail); | 759 InstallProtocolHandler(test_url, kRequestsToFail); |
594 NavigateToURLAndWaitForTitle(test_url, "Test One", kRequestsToFail + 1); | 760 NavigateToURLAndWaitForTitle(test_url, "Test One", kRequestsToFail + 1); |
595 // Note that the protocol handler updates these variables on the IO thread, | 761 // Note that the protocol handler updates these variables on the IO thread, |
596 // but this function reads them on the main thread. The requests have to be | 762 // but this function reads them on the main thread. The requests have to be |
597 // created (on the IO thread) before NavigateToURLAndWaitForTitle returns or | 763 // created (on the IO thread) before NavigateToURLAndWaitForTitle returns or |
598 // this becomes racey. | 764 // this becomes racey. |
599 EXPECT_EQ(kRequestsToFail, protocol_handler()->failures()); | 765 EXPECT_EQ(kRequestsToFail, protocol_handler()->failures()); |
600 EXPECT_EQ(kRequestsToFail + 1, protocol_handler()->requests()); | 766 EXPECT_EQ(kRequestsToFail + 1, protocol_handler()->requests()); |
601 } | 767 } |
602 | 768 |
603 // Returns Javascript code that executes plain text search for the page. | |
604 // Pass into content::ExecuteScriptAndExtractBool as |script| parameter. | |
605 std::string GetTextContentContainsStringScript( | |
606 const std::string& value_to_search) { | |
607 return base::StringPrintf( | |
608 "var textContent = document.body.textContent;" | |
609 "var hasError = textContent.indexOf('%s') >= 0;" | |
610 "domAutomationController.send(hasError);", | |
611 value_to_search.c_str()); | |
612 } | |
613 | |
614 // Protocol handler that fails all requests with net::ERR_ADDRESS_UNREACHABLE. | 769 // Protocol handler that fails all requests with net::ERR_ADDRESS_UNREACHABLE. |
615 class AddressUnreachableProtocolHandler | 770 class AddressUnreachableProtocolHandler |
616 : public net::URLRequestJobFactory::ProtocolHandler { | 771 : public net::URLRequestJobFactory::ProtocolHandler { |
617 public: | 772 public: |
618 AddressUnreachableProtocolHandler() {} | 773 AddressUnreachableProtocolHandler() {} |
619 virtual ~AddressUnreachableProtocolHandler() {} | 774 virtual ~AddressUnreachableProtocolHandler() {} |
620 | 775 |
621 // net::URLRequestJobFactory::ProtocolHandler: | 776 // net::URLRequestJobFactory::ProtocolHandler: |
622 virtual net::URLRequestJob* MaybeCreateJob( | 777 virtual net::URLRequestJob* MaybeCreateJob( |
623 net::URLRequest* request, | 778 net::URLRequest* request, |
624 net::NetworkDelegate* network_delegate) const OVERRIDE { | 779 net::NetworkDelegate* network_delegate) const OVERRIDE { |
625 return new URLRequestFailedJob(request, | 780 return new URLRequestFailedJob(request, |
626 network_delegate, | 781 network_delegate, |
627 net::ERR_ADDRESS_UNREACHABLE); | 782 net::ERR_ADDRESS_UNREACHABLE); |
628 } | 783 } |
629 | 784 |
630 private: | 785 private: |
631 DISALLOW_COPY_AND_ASSIGN(AddressUnreachableProtocolHandler); | 786 DISALLOW_COPY_AND_ASSIGN(AddressUnreachableProtocolHandler); |
632 }; | 787 }; |
633 | 788 |
634 // A test fixture that returns ERR_ADDRESS_UNREACHABLE for all Link Doctor | 789 // A test fixture that returns ERR_ADDRESS_UNREACHABLE for all navigation |
635 // requests. ERR_NAME_NOT_RESOLVED is more typical, but need to use a different | 790 // correction requests. ERR_NAME_NOT_RESOLVED is more typical, but need to use |
636 // error for the Link Doctor and the original page to validate the right page | 791 // a different error for the correction service and the original page to |
637 // is being displayed. | 792 // validate the right page is being displayed. |
638 class ErrorPageLinkDoctorFailTest : public ErrorPageTest { | 793 class ErrorPageNavigationCorrectionsFailTest : public ErrorPageTest { |
639 public: | 794 public: |
640 // InProcessBrowserTest: | 795 // InProcessBrowserTest: |
641 virtual void SetUpOnMainThread() OVERRIDE { | 796 virtual void SetUpOnMainThread() OVERRIDE { |
642 BrowserThread::PostTask( | 797 BrowserThread::PostTask( |
643 BrowserThread::IO, FROM_HERE, | 798 BrowserThread::IO, FROM_HERE, |
644 base::Bind(&ErrorPageLinkDoctorFailTest::AddFilters)); | 799 base::Bind(&ErrorPageNavigationCorrectionsFailTest::AddFilters)); |
645 } | 800 } |
646 | 801 |
647 virtual void CleanUpOnMainThread() OVERRIDE { | 802 virtual void CleanUpOnMainThread() OVERRIDE { |
648 BrowserThread::PostTask( | 803 BrowserThread::PostTask( |
649 BrowserThread::IO, FROM_HERE, | 804 BrowserThread::IO, FROM_HERE, |
650 base::Bind(&ErrorPageLinkDoctorFailTest::RemoveFilters)); | 805 base::Bind(&ErrorPageNavigationCorrectionsFailTest::RemoveFilters)); |
651 } | 806 } |
652 | 807 |
653 private: | 808 private: |
654 // Adds a filter that causes all requests for the Link Doctor's scheme and | 809 // Adds a filter that causes all correction service requests to fail with |
655 // host to fail with ERR_ADDRESS_UNREACHABLE. Since the Link Doctor adds | 810 // ERR_ADDRESS_UNREACHABLE. |
656 // query strings, it's not enough to just fail exact matches. | |
657 // | 811 // |
658 // Also adds the content::URLRequestFailedJob filter. | 812 // Also adds the content::URLRequestFailedJob filter. |
659 static void AddFilters() { | 813 static void AddFilters() { |
660 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 814 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
661 content::URLRequestFailedJob::AddUrlHandler(); | 815 content::URLRequestFailedJob::AddUrlHandler(); |
662 | 816 |
663 net::URLRequestFilter::GetInstance()->AddHostnameProtocolHandler( | 817 net::URLRequestFilter::GetInstance()->AddUrlProtocolHandler( |
664 google_util::LinkDoctorBaseURL().scheme(), | 818 google_util::LinkDoctorBaseURL(), |
665 google_util::LinkDoctorBaseURL().host(), | |
666 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>( | 819 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>( |
667 new AddressUnreachableProtocolHandler())); | 820 new AddressUnreachableProtocolHandler())); |
668 } | 821 } |
669 | 822 |
670 static void RemoveFilters() { | 823 static void RemoveFilters() { |
671 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 824 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
672 net::URLRequestFilter::GetInstance()->ClearHandlers(); | 825 net::URLRequestFilter::GetInstance()->ClearHandlers(); |
673 } | 826 } |
674 }; | 827 }; |
675 | 828 |
676 // Make sure that when the Link Doctor fails to load, the network error page is | 829 // Make sure that when corrections fail to load, the network error page is |
677 // successfully loaded. | 830 // successfully loaded. |
678 IN_PROC_BROWSER_TEST_F(ErrorPageLinkDoctorFailTest, LinkDoctorFail) { | 831 IN_PROC_BROWSER_TEST_F(ErrorPageNavigationCorrectionsFailTest, |
| 832 FetchCorrectionsFails) { |
679 ui_test_utils::NavigateToURLBlockUntilNavigationsComplete( | 833 ui_test_utils::NavigateToURLBlockUntilNavigationsComplete( |
680 browser(), | 834 browser(), |
681 URLRequestFailedJob::GetMockHttpUrl(net::ERR_NAME_NOT_RESOLVED), | 835 URLRequestFailedJob::GetMockHttpUrl(net::ERR_NAME_NOT_RESOLVED), |
682 2); | 836 2); |
683 | 837 |
684 // Verify that the expected error page is being displayed. Do this by making | 838 // Verify that the expected error page is being displayed. |
685 // sure the original error code (ERR_NAME_NOT_RESOLVED) is displayed. | 839 ExpectDisplayingLocalErrorPage(browser(), net::ERR_NAME_NOT_RESOLVED); |
686 bool result = false; | |
687 EXPECT_TRUE(content::ExecuteScriptAndExtractBool( | |
688 browser()->tab_strip_model()->GetActiveWebContents(), | |
689 GetTextContentContainsStringScript("ERR_NAME_NOT_RESOLVED"), | |
690 &result)); | |
691 EXPECT_TRUE(result); | |
692 } | 840 } |
693 | 841 |
694 // Checks that when an error occurs and a link doctor load fails, the stale | 842 // Checks that when an error occurs and a corrections fail to load, the stale |
695 // cache status of the page is correctly transferred, and we can load the | 843 // cache status of the page is correctly transferred, and we can load the |
696 // stale copy from the javascript. Most logic copied from StaleCacheStatus | 844 // stale copy from the javascript. Most logic copied from StaleCacheStatus |
697 // above. | 845 // above. |
698 IN_PROC_BROWSER_TEST_F(ErrorPageLinkDoctorFailTest, | 846 IN_PROC_BROWSER_TEST_F(ErrorPageNavigationCorrectionsFailTest, |
699 StaleCacheStatusFailedLinkDoctor) { | 847 StaleCacheStatusFailedCorrections) { |
700 ASSERT_TRUE(test_server()->Start()); | 848 ASSERT_TRUE(test_server()->Start()); |
701 // Load cache with entry with "nocache" set, to create stale | 849 // Load cache with entry with "nocache" set, to create stale |
702 // cache. | 850 // cache. |
703 GURL test_url(test_server()->GetURL("files/nocache.html")); | 851 GURL test_url(test_server()->GetURL("files/nocache.html")); |
704 NavigateToURLAndWaitForTitle(test_url, "Nocache Test Page", 1); | 852 NavigateToURLAndWaitForTitle(test_url, "Nocache Test Page", 1); |
705 | 853 |
706 // Reload same URL after forcing an error from the the network layer; | 854 // Reload same URL after forcing an error from the the network layer; |
707 // confirm that the error page is told the cached copy exists. | 855 // confirm that the error page is told the cached copy exists. |
708 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter = | 856 scoped_refptr<net::URLRequestContextGetter> url_request_context_getter = |
709 browser()->profile()->GetRequestContext(); | 857 browser()->profile()->GetRequestContext(); |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
771 }; | 919 }; |
772 | 920 |
773 const char ErrorPageForIDNTest::kHostname[] = | 921 const char ErrorPageForIDNTest::kHostname[] = |
774 "xn--d1abbgf6aiiy.xn--p1ai"; | 922 "xn--d1abbgf6aiiy.xn--p1ai"; |
775 const char ErrorPageForIDNTest::kHostnameJSUnicode[] = | 923 const char ErrorPageForIDNTest::kHostnameJSUnicode[] = |
776 "\\u043f\\u0440\\u0435\\u0437\\u0438\\u0434\\u0435\\u043d\\u0442." | 924 "\\u043f\\u0440\\u0435\\u0437\\u0438\\u0434\\u0435\\u043d\\u0442." |
777 "\\u0440\\u0444"; | 925 "\\u0440\\u0444"; |
778 | 926 |
779 // Make sure error page shows correct unicode for IDN. | 927 // Make sure error page shows correct unicode for IDN. |
780 IN_PROC_BROWSER_TEST_F(ErrorPageForIDNTest, IDN) { | 928 IN_PROC_BROWSER_TEST_F(ErrorPageForIDNTest, IDN) { |
781 // ERR_UNSAFE_PORT will not trigger the link doctor. | 929 // ERR_UNSAFE_PORT will not trigger navigation corrections. |
782 ui_test_utils::NavigateToURLBlockUntilNavigationsComplete( | 930 ui_test_utils::NavigateToURLBlockUntilNavigationsComplete( |
783 browser(), | 931 browser(), |
784 URLRequestFailedJob::GetMockHttpUrlForHostname(net::ERR_UNSAFE_PORT, | 932 URLRequestFailedJob::GetMockHttpUrlForHostname(net::ERR_UNSAFE_PORT, |
785 kHostname), | 933 kHostname), |
786 1); | 934 1); |
787 | 935 |
788 bool result = false; | 936 ToggleHelpBox(browser()); |
789 EXPECT_TRUE(content::ExecuteScriptAndExtractBool( | 937 EXPECT_TRUE(IsDisplayingText(browser(), kHostnameJSUnicode)); |
790 browser()->tab_strip_model()->GetActiveWebContents(), | |
791 GetTextContentContainsStringScript(kHostnameJSUnicode), | |
792 &result)); | |
793 EXPECT_TRUE(result); | |
794 } | 938 } |
795 | 939 |
796 } // namespace | 940 } // namespace |
OLD | NEW |