OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <memory> |
| 6 #include <string> |
| 7 #include <utility> |
| 8 #include <vector> |
| 9 |
5 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| 11 #include "base/memory/ptr_util.h" |
| 12 #include "base/optional.h" |
6 #include "base/strings/utf_string_conversions.h" | 13 #include "base/strings/utf_string_conversions.h" |
7 #include "chrome/browser/browser_process.h" | 14 #include "chrome/browser/browser_process.h" |
8 #include "chrome/browser/chrome_notification_types.h" | 15 #include "chrome/browser/chrome_notification_types.h" |
| 16 #include "chrome/browser/profiles/profile.h" |
| 17 #include "chrome/browser/search/one_google_bar/one_google_bar_data.h" |
| 18 #include "chrome/browser/search/one_google_bar/one_google_bar_fetcher.h" |
| 19 #include "chrome/browser/search/one_google_bar/one_google_bar_service.h" |
| 20 #include "chrome/browser/search/one_google_bar/one_google_bar_service_factory.h" |
9 #include "chrome/browser/search/search.h" | 21 #include "chrome/browser/search/search.h" |
10 #include "chrome/browser/search_engines/template_url_service_factory.h" | 22 #include "chrome/browser/search_engines/template_url_service_factory.h" |
| 23 #include "chrome/browser/signin/signin_manager_factory.h" |
11 #include "chrome/browser/ui/browser_commands.h" | 24 #include "chrome/browser/ui/browser_commands.h" |
12 #include "chrome/browser/ui/search/instant_test_utils.h" | 25 #include "chrome/browser/ui/search/instant_test_utils.h" |
13 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 26 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
14 #include "chrome/common/pref_names.h" | 27 #include "chrome/common/pref_names.h" |
15 #include "chrome/common/url_constants.h" | 28 #include "chrome/common/url_constants.h" |
16 #include "chrome/test/base/in_process_browser_test.h" | 29 #include "chrome/test/base/in_process_browser_test.h" |
17 #include "chrome/test/base/interactive_test_utils.h" | 30 #include "chrome/test/base/interactive_test_utils.h" |
18 #include "chrome/test/base/ui_test_utils.h" | 31 #include "chrome/test/base/ui_test_utils.h" |
| 32 #include "components/keyed_service/content/browser_context_dependency_manager.h" |
19 #include "components/omnibox/browser/omnibox_edit_model.h" | 33 #include "components/omnibox/browser/omnibox_edit_model.h" |
20 #include "components/omnibox/browser/omnibox_view.h" | 34 #include "components/omnibox/browser/omnibox_view.h" |
21 #include "components/omnibox/common/omnibox_focus_state.h" | 35 #include "components/omnibox/common/omnibox_focus_state.h" |
22 #include "components/prefs/pref_service.h" | 36 #include "components/prefs/pref_service.h" |
23 #include "components/search_engines/template_url.h" | 37 #include "components/search_engines/template_url.h" |
24 #include "components/search_engines/template_url_data.h" | 38 #include "components/search_engines/template_url_data.h" |
25 #include "components/search_engines/template_url_service.h" | 39 #include "components/search_engines/template_url_service.h" |
26 #include "content/public/browser/navigation_entry.h" | 40 #include "content/public/browser/navigation_entry.h" |
27 #include "content/public/browser/notification_service.h" | 41 #include "content/public/browser/notification_service.h" |
28 #include "content/public/browser/web_contents.h" | 42 #include "content/public/browser/web_contents.h" |
29 #include "content/public/common/content_switches.h" | 43 #include "content/public/common/content_switches.h" |
30 #include "content/public/test/browser_test_utils.h" | 44 #include "content/public/test/browser_test_utils.h" |
31 #include "content/public/test/test_navigation_observer.h" | 45 #include "content/public/test/test_navigation_observer.h" |
32 #include "content/public/test/test_utils.h" | 46 #include "content/public/test/test_utils.h" |
33 #include "net/test/embedded_test_server/embedded_test_server.h" | 47 #include "net/test/embedded_test_server/embedded_test_server.h" |
34 #include "ui/base/resource/resource_bundle.h" | 48 #include "ui/base/resource/resource_bundle.h" |
35 #include "ui/gfx/geometry/point.h" | 49 #include "ui/gfx/geometry/point.h" |
36 #include "ui/gfx/geometry/rect.h" | 50 #include "ui/gfx/geometry/rect.h" |
37 #include "ui/gfx/geometry/vector2d.h" | 51 #include "ui/gfx/geometry/vector2d.h" |
38 | 52 |
39 namespace { | 53 namespace { |
40 | 54 |
| 55 content::WebContents* OpenNewTab(Browser* browser, const GURL& url) { |
| 56 ui_test_utils::NavigateToURLWithDisposition( |
| 57 browser, url, WindowOpenDisposition::NEW_FOREGROUND_TAB, |
| 58 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB | |
| 59 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
| 60 return browser->tab_strip_model()->GetActiveWebContents(); |
| 61 } |
| 62 |
41 // Switches the browser language to French, and returns true iff successful. | 63 // Switches the browser language to French, and returns true iff successful. |
42 bool SwitchToFrench() { | 64 bool SwitchToFrench() { |
43 // Make sure the default language is not French. | 65 // Make sure the default language is not French. |
44 std::string default_locale = g_browser_process->GetApplicationLocale(); | 66 std::string default_locale = g_browser_process->GetApplicationLocale(); |
45 EXPECT_NE("fr", default_locale); | 67 EXPECT_NE("fr", default_locale); |
46 | 68 |
47 // Switch browser language to French. | 69 // Switch browser language to French. |
48 std::string loaded_locale = | 70 std::string loaded_locale = |
49 ui::ResourceBundle::GetSharedInstance().ReloadLocaleResources("fr"); | 71 ui::ResourceBundle::GetSharedInstance().ReloadLocaleResources("fr"); |
50 | 72 |
(...skipping 21 matching lines...) Expand all Loading... |
72 InstantTestBase::Init(instant_url, ntp_url, false); | 94 InstantTestBase::Init(instant_url, ntp_url, false); |
73 } | 95 } |
74 }; | 96 }; |
75 | 97 |
76 // This runs a bunch of pure JS-side tests, i.e. those that don't require any | 98 // This runs a bunch of pure JS-side tests, i.e. those that don't require any |
77 // interaction from the native side. | 99 // interaction from the native side. |
78 IN_PROC_BROWSER_TEST_F(LocalNTPTest, SimpleJavascriptTests) { | 100 IN_PROC_BROWSER_TEST_F(LocalNTPTest, SimpleJavascriptTests) { |
79 ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 101 ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
80 FocusOmnibox(); | 102 FocusOmnibox(); |
81 | 103 |
82 ui_test_utils::NavigateToURLWithDisposition( | 104 content::WebContents* active_tab = OpenNewTab(browser(), ntp_url()); |
83 browser(), ntp_url(), WindowOpenDisposition::NEW_FOREGROUND_TAB, | |
84 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB | | |
85 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | |
86 content::WebContents* active_tab = | |
87 browser()->tab_strip_model()->GetActiveWebContents(); | |
88 ASSERT_TRUE(search::IsInstantNTP(active_tab)); | 105 ASSERT_TRUE(search::IsInstantNTP(active_tab)); |
89 | 106 |
90 bool success = false; | 107 bool success = false; |
91 ASSERT_TRUE(GetBoolFromJS(active_tab, "!!runSimpleTests()", &success)); | 108 ASSERT_TRUE(GetBoolFromJS(active_tab, "!!runSimpleTests()", &success)); |
92 EXPECT_TRUE(success); | 109 EXPECT_TRUE(success); |
93 } | 110 } |
94 | 111 |
95 IN_PROC_BROWSER_TEST_F(LocalNTPTest, EmbeddedSearchAPIOnlyAvailableOnNTP) { | 112 IN_PROC_BROWSER_TEST_F(LocalNTPTest, EmbeddedSearchAPIOnlyAvailableOnNTP) { |
96 ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 113 ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
97 FocusOmnibox(); | 114 FocusOmnibox(); |
98 | 115 |
99 // Open an NTP. | 116 // Open an NTP. |
100 ui_test_utils::NavigateToURLWithDisposition( | 117 content::WebContents* active_tab = OpenNewTab(browser(), ntp_url()); |
101 browser(), ntp_url(), WindowOpenDisposition::NEW_FOREGROUND_TAB, | |
102 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB | | |
103 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | |
104 content::WebContents* active_tab = | |
105 browser()->tab_strip_model()->GetActiveWebContents(); | |
106 ASSERT_TRUE(search::IsInstantNTP(active_tab)); | 118 ASSERT_TRUE(search::IsInstantNTP(active_tab)); |
107 // Check that the embeddedSearch API is available. | 119 // Check that the embeddedSearch API is available. |
108 bool result = false; | 120 bool result = false; |
109 ASSERT_TRUE( | 121 ASSERT_TRUE( |
110 GetBoolFromJS(active_tab, "!!window.chrome.embeddedSearch", &result)); | 122 GetBoolFromJS(active_tab, "!!window.chrome.embeddedSearch", &result)); |
111 EXPECT_TRUE(result); | 123 EXPECT_TRUE(result); |
112 | 124 |
113 // Navigate somewhere else in the same tab. | 125 // Navigate somewhere else in the same tab. |
114 ui_test_utils::NavigateToURLWithDisposition( | 126 ui_test_utils::NavigateToURLWithDisposition( |
115 browser(), other_url(), WindowOpenDisposition::CURRENT_TAB, | 127 browser(), other_url(), WindowOpenDisposition::CURRENT_TAB, |
(...skipping 30 matching lines...) Expand all Loading... |
146 // Now the API should be available again. | 158 // Now the API should be available again. |
147 ASSERT_TRUE( | 159 ASSERT_TRUE( |
148 GetBoolFromJS(active_tab, "!!window.chrome.embeddedSearch", &result)); | 160 GetBoolFromJS(active_tab, "!!window.chrome.embeddedSearch", &result)); |
149 EXPECT_TRUE(result); | 161 EXPECT_TRUE(result); |
150 } | 162 } |
151 | 163 |
152 IN_PROC_BROWSER_TEST_F(LocalNTPTest, FakeboxRedirectsToOmnibox) { | 164 IN_PROC_BROWSER_TEST_F(LocalNTPTest, FakeboxRedirectsToOmnibox) { |
153 ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 165 ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
154 FocusOmnibox(); | 166 FocusOmnibox(); |
155 | 167 |
156 ui_test_utils::NavigateToURLWithDisposition( | 168 content::WebContents* active_tab = OpenNewTab(browser(), ntp_url()); |
157 browser(), ntp_url(), WindowOpenDisposition::NEW_FOREGROUND_TAB, | |
158 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB | | |
159 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | |
160 content::WebContents* active_tab = | |
161 browser()->tab_strip_model()->GetActiveWebContents(); | |
162 ASSERT_TRUE(search::IsInstantNTP(active_tab)); | 169 ASSERT_TRUE(search::IsInstantNTP(active_tab)); |
163 | 170 |
164 // This is required to make the mouse events we send below arrive at the right | 171 // This is required to make the mouse events we send below arrive at the right |
165 // place. It *should* be the default for all interactive_ui_tests anyway, but | 172 // place. It *should* be the default for all interactive_ui_tests anyway, but |
166 // on Mac it isn't; see crbug.com/641969. | 173 // on Mac it isn't; see crbug.com/641969. |
167 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); | 174 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
168 | 175 |
169 bool result = false; | 176 bool result = false; |
170 ASSERT_TRUE(GetBoolFromJS(active_tab, "!!setupAdvancedTest()", &result)); | 177 ASSERT_TRUE(GetBoolFromJS(active_tab, "!!setupAdvancedTest()", &result)); |
171 ASSERT_TRUE(result); | 178 ASSERT_TRUE(result); |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 NOTREACHED(); | 244 NOTREACHED(); |
238 return nullptr; | 245 return nullptr; |
239 } | 246 } |
240 | 247 |
241 } // namespace | 248 } // namespace |
242 | 249 |
243 IN_PROC_BROWSER_TEST_F(LocalNTPTest, LoadsIframe) { | 250 IN_PROC_BROWSER_TEST_F(LocalNTPTest, LoadsIframe) { |
244 ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 251 ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
245 FocusOmnibox(); | 252 FocusOmnibox(); |
246 | 253 |
247 ui_test_utils::NavigateToURLWithDisposition( | 254 content::WebContents* active_tab = OpenNewTab(browser(), ntp_url()); |
248 browser(), ntp_url(), WindowOpenDisposition::NEW_FOREGROUND_TAB, | |
249 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB | | |
250 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | |
251 content::WebContents* active_tab = | |
252 browser()->tab_strip_model()->GetActiveWebContents(); | |
253 ASSERT_TRUE(search::IsInstantNTP(active_tab)); | 255 ASSERT_TRUE(search::IsInstantNTP(active_tab)); |
254 | 256 |
255 content::DOMMessageQueue msg_queue; | 257 content::DOMMessageQueue msg_queue; |
256 | 258 |
257 bool result = false; | 259 bool result = false; |
258 ASSERT_TRUE(GetBoolFromJS(active_tab, "!!setupAdvancedTest(true)", &result)); | 260 ASSERT_TRUE(GetBoolFromJS(active_tab, "!!setupAdvancedTest(true)", &result)); |
259 ASSERT_TRUE(result); | 261 ASSERT_TRUE(result); |
260 | 262 |
261 // Wait for the MV iframe to load. | 263 // Wait for the MV iframe to load. |
262 std::string message; | 264 std::string message; |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
318 | 320 |
319 g_browser_process->SetApplicationLocale(loaded_locale); | 321 g_browser_process->SetApplicationLocale(loaded_locale); |
320 PrefService* prefs = g_browser_process->local_state(); | 322 PrefService* prefs = g_browser_process->local_state(); |
321 prefs->SetString(prefs::kApplicationLocale, loaded_locale); | 323 prefs->SetString(prefs::kApplicationLocale, loaded_locale); |
322 | 324 |
323 // Setup Instant. | 325 // Setup Instant. |
324 ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); | 326 ASSERT_NO_FATAL_FAILURE(SetupInstant(browser())); |
325 FocusOmnibox(); | 327 FocusOmnibox(); |
326 | 328 |
327 // Open a new tab. | 329 // Open a new tab. |
328 ui_test_utils::NavigateToURLWithDisposition( | 330 content::WebContents* active_tab = |
329 browser(), GURL(chrome::kChromeUINewTabURL), | 331 OpenNewTab(browser(), GURL(chrome::kChromeUINewTabURL)); |
330 WindowOpenDisposition::NEW_FOREGROUND_TAB, | |
331 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB | | |
332 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | |
333 | 332 |
334 // Verify that the NTP is in French. | 333 // Verify that the NTP is in French. |
335 content::WebContents* active_tab = | |
336 browser()->tab_strip_model()->GetActiveWebContents(); | |
337 EXPECT_EQ(base::ASCIIToUTF16("Nouvel onglet"), active_tab->GetTitle()); | 334 EXPECT_EQ(base::ASCIIToUTF16("Nouvel onglet"), active_tab->GetTitle()); |
338 } | 335 } |
339 | 336 |
340 // In contrast to LocalNTPTest, this one doesn't set up any special NTP | 337 // In contrast to LocalNTPTest, this one doesn't set up any special NTP |
341 // wrangling. It just turns on the local NTP. | 338 // wrangling. It just turns on the local NTP. |
342 class LocalNTPSmokeTest : public InProcessBrowserTest { | 339 class LocalNTPSmokeTest : public InProcessBrowserTest { |
343 public: | 340 public: |
344 LocalNTPSmokeTest() {} | 341 LocalNTPSmokeTest() {} |
345 | 342 |
346 protected: | 343 protected: |
(...skipping 10 matching lines...) Expand all Loading... |
357 TemplateURLService* template_url_service = | 354 TemplateURLService* template_url_service = |
358 TemplateURLServiceFactory::GetForProfile(browser()->profile()); | 355 TemplateURLServiceFactory::GetForProfile(browser()->profile()); |
359 TemplateURL* template_url = | 356 TemplateURL* template_url = |
360 template_url_service->Add(base::MakeUnique<TemplateURL>(data)); | 357 template_url_service->Add(base::MakeUnique<TemplateURL>(data)); |
361 template_url_service->SetUserSelectedDefaultSearchProvider(template_url); | 358 template_url_service->SetUserSelectedDefaultSearchProvider(template_url); |
362 } | 359 } |
363 }; | 360 }; |
364 | 361 |
365 IN_PROC_BROWSER_TEST_F(LocalNTPSmokeTest, GoogleNTPLoadsWithoutError) { | 362 IN_PROC_BROWSER_TEST_F(LocalNTPSmokeTest, GoogleNTPLoadsWithoutError) { |
366 // Open a new blank tab. | 363 // Open a new blank tab. |
367 ui_test_utils::NavigateToURLWithDisposition( | 364 content::WebContents* active_tab = OpenNewTab(browser(), GURL("about:blank")); |
368 browser(), GURL("about:blank"), WindowOpenDisposition::NEW_FOREGROUND_TAB, | |
369 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB | | |
370 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | |
371 content::WebContents* active_tab = | |
372 browser()->tab_strip_model()->GetActiveWebContents(); | |
373 ASSERT_FALSE(search::IsInstantNTP(active_tab)); | 365 ASSERT_FALSE(search::IsInstantNTP(active_tab)); |
374 | 366 |
375 // Attach a console observer, listening for any message ("*" pattern). | 367 // Attach a console observer, listening for any message ("*" pattern). |
376 content::ConsoleObserverDelegate console_observer(active_tab, "*"); | 368 content::ConsoleObserverDelegate console_observer(active_tab, "*"); |
377 active_tab->SetDelegate(&console_observer); | 369 active_tab->SetDelegate(&console_observer); |
378 | 370 |
379 // Navigate to the NTP. | 371 // Navigate to the NTP. |
380 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUINewTabURL)); | 372 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUINewTabURL)); |
381 ASSERT_TRUE(search::IsInstantNTP(active_tab)); | 373 ASSERT_TRUE(search::IsInstantNTP(active_tab)); |
382 ASSERT_EQ(GURL(chrome::kChromeSearchLocalNtpUrl), | 374 ASSERT_EQ(GURL(chrome::kChromeSearchLocalNtpUrl), |
383 active_tab->GetController().GetVisibleEntry()->GetURL()); | 375 active_tab->GetController().GetVisibleEntry()->GetURL()); |
384 | 376 |
385 // We shouldn't have gotten any console error messages. | 377 // We shouldn't have gotten any console error messages. |
386 EXPECT_TRUE(console_observer.message().empty()) << console_observer.message(); | 378 EXPECT_TRUE(console_observer.message().empty()) << console_observer.message(); |
387 } | 379 } |
388 | 380 |
389 IN_PROC_BROWSER_TEST_F(LocalNTPSmokeTest, NonGoogleNTPLoadsWithoutError) { | 381 IN_PROC_BROWSER_TEST_F(LocalNTPSmokeTest, NonGoogleNTPLoadsWithoutError) { |
390 SetUserSelectedDefaultSearchProvider("https://www.example.com"); | 382 SetUserSelectedDefaultSearchProvider("https://www.example.com"); |
391 | 383 |
392 // Open a new blank tab. | 384 // Open a new blank tab. |
393 ui_test_utils::NavigateToURLWithDisposition( | 385 content::WebContents* active_tab = OpenNewTab(browser(), GURL("about:blank")); |
394 browser(), GURL("about:blank"), WindowOpenDisposition::NEW_FOREGROUND_TAB, | |
395 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB | | |
396 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | |
397 content::WebContents* active_tab = | |
398 browser()->tab_strip_model()->GetActiveWebContents(); | |
399 ASSERT_FALSE(search::IsInstantNTP(active_tab)); | 386 ASSERT_FALSE(search::IsInstantNTP(active_tab)); |
400 | 387 |
401 // Attach a console observer, listening for any message ("*" pattern). | 388 // Attach a console observer, listening for any message ("*" pattern). |
402 content::ConsoleObserverDelegate console_observer(active_tab, "*"); | 389 content::ConsoleObserverDelegate console_observer(active_tab, "*"); |
403 active_tab->SetDelegate(&console_observer); | 390 active_tab->SetDelegate(&console_observer); |
404 | 391 |
405 // Navigate to the NTP. | 392 // Navigate to the NTP. |
406 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUINewTabURL)); | 393 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUINewTabURL)); |
407 ASSERT_TRUE(search::IsInstantNTP(active_tab)); | 394 ASSERT_TRUE(search::IsInstantNTP(active_tab)); |
408 ASSERT_EQ(GURL(chrome::kChromeSearchLocalNtpUrl), | 395 ASSERT_EQ(GURL(chrome::kChromeSearchLocalNtpUrl), |
409 active_tab->GetController().GetVisibleEntry()->GetURL()); | 396 active_tab->GetController().GetVisibleEntry()->GetURL()); |
410 | 397 |
411 // We shouldn't have gotten any console error messages. | 398 // We shouldn't have gotten any console error messages. |
412 EXPECT_TRUE(console_observer.message().empty()) << console_observer.message(); | 399 EXPECT_TRUE(console_observer.message().empty()) << console_observer.message(); |
413 } | 400 } |
414 | 401 |
415 IN_PROC_BROWSER_TEST_F(LocalNTPSmokeTest, FrenchGoogleNTPLoadsWithoutError) { | 402 IN_PROC_BROWSER_TEST_F(LocalNTPSmokeTest, FrenchGoogleNTPLoadsWithoutError) { |
416 if (!SwitchToFrench()) { | 403 if (!SwitchToFrench()) { |
417 LOG(ERROR) << "Failed switching to French language, aborting test."; | 404 LOG(ERROR) << "Failed switching to French language, aborting test."; |
418 return; | 405 return; |
419 } | 406 } |
420 | 407 |
421 // Open a new blank tab. | 408 // Open a new blank tab. |
422 ui_test_utils::NavigateToURLWithDisposition( | 409 content::WebContents* active_tab = OpenNewTab(browser(), GURL("about:blank")); |
423 browser(), GURL("about:blank"), WindowOpenDisposition::NEW_FOREGROUND_TAB, | |
424 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB | | |
425 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | |
426 content::WebContents* active_tab = | |
427 browser()->tab_strip_model()->GetActiveWebContents(); | |
428 ASSERT_FALSE(search::IsInstantNTP(active_tab)); | 410 ASSERT_FALSE(search::IsInstantNTP(active_tab)); |
429 | 411 |
430 // Attach a console observer, listening for any message ("*" pattern). | 412 // Attach a console observer, listening for any message ("*" pattern). |
431 content::ConsoleObserverDelegate console_observer(active_tab, "*"); | 413 content::ConsoleObserverDelegate console_observer(active_tab, "*"); |
432 active_tab->SetDelegate(&console_observer); | 414 active_tab->SetDelegate(&console_observer); |
433 | 415 |
434 // Navigate to the NTP. | 416 // Navigate to the NTP. |
435 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUINewTabURL)); | 417 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUINewTabURL)); |
436 ASSERT_TRUE(search::IsInstantNTP(active_tab)); | 418 ASSERT_TRUE(search::IsInstantNTP(active_tab)); |
437 ASSERT_EQ(GURL(chrome::kChromeSearchLocalNtpUrl), | 419 ASSERT_EQ(GURL(chrome::kChromeSearchLocalNtpUrl), |
438 active_tab->GetController().GetVisibleEntry()->GetURL()); | 420 active_tab->GetController().GetVisibleEntry()->GetURL()); |
439 // Make sure it's actually in French. | 421 // Make sure it's actually in French. |
440 ASSERT_EQ(base::ASCIIToUTF16("Nouvel onglet"), active_tab->GetTitle()); | 422 ASSERT_EQ(base::ASCIIToUTF16("Nouvel onglet"), active_tab->GetTitle()); |
441 | 423 |
442 // We shouldn't have gotten any console error messages. | 424 // We shouldn't have gotten any console error messages. |
443 EXPECT_TRUE(console_observer.message().empty()) << console_observer.message(); | 425 EXPECT_TRUE(console_observer.message().empty()) << console_observer.message(); |
444 } | 426 } |
| 427 |
| 428 // A simple fake implementation of OneGoogleBarFetcher that immediately returns |
| 429 // a pre-configured OneGoogleBarData, which is null by default. |
| 430 class FakeOneGoogleBarFetcher : public OneGoogleBarFetcher { |
| 431 public: |
| 432 void Fetch(OneGoogleCallback callback) override { |
| 433 std::move(callback).Run(one_google_bar_data_); |
| 434 } |
| 435 |
| 436 void set_one_google_bar_data( |
| 437 const base::Optional<OneGoogleBarData>& one_google_bar_data) { |
| 438 one_google_bar_data_ = one_google_bar_data; |
| 439 } |
| 440 |
| 441 private: |
| 442 base::Optional<OneGoogleBarData> one_google_bar_data_; |
| 443 }; |
| 444 |
| 445 // TODO(treib): This inherits from InstantTestBase only for GetBoolFromJS, which |
| 446 // should just be a global helper somewhere. |
| 447 class LocalNTPOneGoogleBarSmokeTest : public InProcessBrowserTest, |
| 448 public InstantTestBase { |
| 449 public: |
| 450 LocalNTPOneGoogleBarSmokeTest() {} |
| 451 |
| 452 protected: |
| 453 void SetUpCommandLine(base::CommandLine* cmdline) override { |
| 454 cmdline->AppendSwitchASCII(switches::kEnableFeatures, |
| 455 "UseGoogleLocalNtp,OneGoogleBarOnLocalNtp"); |
| 456 } |
| 457 |
| 458 void SetUpInProcessBrowserTestFixture() override { |
| 459 InProcessBrowserTest::SetUpInProcessBrowserTestFixture(); |
| 460 |
| 461 will_create_browser_context_services_subscription_ = |
| 462 BrowserContextDependencyManager::GetInstance() |
| 463 ->RegisterWillCreateBrowserContextServicesCallbackForTesting( |
| 464 base::Bind(&LocalNTPOneGoogleBarSmokeTest:: |
| 465 OnWillCreateBrowserContextServices, |
| 466 base::Unretained(this))); |
| 467 } |
| 468 |
| 469 FakeOneGoogleBarFetcher* one_google_bar_fetcher() { |
| 470 return static_cast<FakeOneGoogleBarFetcher*>( |
| 471 OneGoogleBarServiceFactory::GetForProfile(browser()->profile()) |
| 472 ->fetcher_for_testing()); |
| 473 } |
| 474 |
| 475 private: |
| 476 static std::unique_ptr<KeyedService> CreateOneGoogleBarService( |
| 477 content::BrowserContext* context) { |
| 478 SigninManagerBase* signin_manager = SigninManagerFactory::GetForProfile( |
| 479 Profile::FromBrowserContext(context)); |
| 480 return base::MakeUnique<OneGoogleBarService>( |
| 481 signin_manager, base::MakeUnique<FakeOneGoogleBarFetcher>()); |
| 482 } |
| 483 |
| 484 void OnWillCreateBrowserContextServices(content::BrowserContext* context) { |
| 485 OneGoogleBarServiceFactory::GetInstance()->SetTestingFactory( |
| 486 context, &LocalNTPOneGoogleBarSmokeTest::CreateOneGoogleBarService); |
| 487 } |
| 488 |
| 489 std::unique_ptr< |
| 490 base::CallbackList<void(content::BrowserContext*)>::Subscription> |
| 491 will_create_browser_context_services_subscription_; |
| 492 }; |
| 493 |
| 494 IN_PROC_BROWSER_TEST_F(LocalNTPOneGoogleBarSmokeTest, |
| 495 NTPLoadsWithoutErrorOnNetworkFailure) { |
| 496 // Open a new blank tab. |
| 497 content::WebContents* active_tab = OpenNewTab(browser(), GURL("about:blank")); |
| 498 ASSERT_FALSE(search::IsInstantNTP(active_tab)); |
| 499 |
| 500 // Attach a console observer, listening for any message ("*" pattern). |
| 501 content::ConsoleObserverDelegate console_observer(active_tab, "*"); |
| 502 active_tab->SetDelegate(&console_observer); |
| 503 |
| 504 // Navigate to the NTP. |
| 505 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUINewTabURL)); |
| 506 ASSERT_TRUE(search::IsInstantNTP(active_tab)); |
| 507 ASSERT_EQ(GURL(chrome::kChromeSearchLocalNtpUrl), |
| 508 active_tab->GetController().GetVisibleEntry()->GetURL()); |
| 509 |
| 510 // We shouldn't have gotten any console error messages. |
| 511 EXPECT_TRUE(console_observer.message().empty()) << console_observer.message(); |
| 512 } |
| 513 |
| 514 IN_PROC_BROWSER_TEST_F(LocalNTPOneGoogleBarSmokeTest, |
| 515 NTPLoadsWithOneGoogleBar) { |
| 516 OneGoogleBarData data; |
| 517 data.bar_html = "<div id='thebar'></div>"; |
| 518 data.in_head_script = "window.inHeadRan = true;"; |
| 519 data.after_bar_script = "window.afterBarRan = true;"; |
| 520 data.end_of_body_script = "console.log('ogb-done');"; |
| 521 one_google_bar_fetcher()->set_one_google_bar_data(data); |
| 522 |
| 523 // Open a new blank tab. |
| 524 content::WebContents* active_tab = OpenNewTab(browser(), GURL("about:blank")); |
| 525 ASSERT_FALSE(search::IsInstantNTP(active_tab)); |
| 526 |
| 527 // Attach a console observer, listening for the "ogb-done" message, which |
| 528 // indicates that the OGB has finished loading. |
| 529 content::ConsoleObserverDelegate console_observer(active_tab, "ogb-done"); |
| 530 active_tab->SetDelegate(&console_observer); |
| 531 |
| 532 // Navigate to the NTP. |
| 533 ui_test_utils::NavigateToURL(browser(), GURL(chrome::kChromeUINewTabURL)); |
| 534 ASSERT_TRUE(search::IsInstantNTP(active_tab)); |
| 535 ASSERT_EQ(GURL(chrome::kChromeSearchLocalNtpUrl), |
| 536 active_tab->GetController().GetVisibleEntry()->GetURL()); |
| 537 // Make sure the OGB is finished loading. |
| 538 console_observer.Wait(); |
| 539 |
| 540 EXPECT_EQ("ogb-done", console_observer.message()); |
| 541 |
| 542 bool in_head_ran = false; |
| 543 ASSERT_TRUE(GetBoolFromJS(active_tab, "!!window.inHeadRan", &in_head_ran)); |
| 544 EXPECT_TRUE(in_head_ran); |
| 545 bool after_bar_ran = false; |
| 546 ASSERT_TRUE( |
| 547 GetBoolFromJS(active_tab, "!!window.afterBarRan", &after_bar_ran)); |
| 548 EXPECT_TRUE(after_bar_ran); |
| 549 } |
OLD | NEW |