Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(500)

Side by Side Diff: chrome/browser/translate/translate_manager_browsertest.cc

Issue 1420093004: Straighten up Translate browser tests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Feedback addressed. Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | chrome/browser/ui/browser_browsertest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "components/translate/core/browser/translate_manager.h" 5 #include "components/translate/core/browser/translate_manager.h"
6 6
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "chrome/browser/chrome_notification_types.h" 8 #include "chrome/browser/chrome_notification_types.h"
9 #include "chrome/browser/prefs/session_startup_pref.h" 9 #include "chrome/browser/prefs/session_startup_pref.h"
10 #include "chrome/browser/translate/chrome_translate_client.h" 10 #include "chrome/browser/translate/chrome_translate_client.h"
11 #include "chrome/browser/translate/cld_data_harness.h" 11 #include "chrome/browser/translate/cld_data_harness.h"
12 #include "chrome/browser/translate/cld_data_harness_factory.h" 12 #include "chrome/browser/translate/cld_data_harness_factory.h"
13 #include "chrome/browser/ui/browser.h" 13 #include "chrome/browser/ui/browser.h"
14 #include "chrome/browser/ui/tabs/tab_strip_model.h" 14 #include "chrome/browser/ui/tabs/tab_strip_model.h"
15 #include "chrome/test/base/in_process_browser_test.h" 15 #include "chrome/test/base/in_process_browser_test.h"
16 #include "chrome/test/base/ui_test_utils.h" 16 #include "chrome/test/base/ui_test_utils.h"
17 #include "components/translate/core/common/language_detection_details.h" 17 #include "components/translate/core/common/language_detection_details.h"
18 #include "content/public/browser/notification_service.h"
18 #include "url/gurl.h" 19 #include "url/gurl.h"
19 20
20 class TranslateManagerBrowserTest : public InProcessBrowserTest {}; 21 class TranslateManagerBrowserTest : public InProcessBrowserTest {
22 public:
23 TranslateManagerBrowserTest() {}
24 ~TranslateManagerBrowserTest() override {}
25
26 std::string GetLanguageFor(content::WebContents* web_contents) {
27 translate::LanguageDetectionDetails details;
28 content::Source<content::WebContents> source(web_contents);
29 language_detected_signal_->GetDetailsFor(source.map_key(), &details);
30 return details.adopted_language;
31 }
32
33 void WaitUntilLanguageDetected() { language_detected_signal_->Wait(); }
34
35 void ResetObserver() {
36 language_detected_signal_.reset(new LangageDetectionObserver(
37 chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED,
38 content::NotificationService::AllSources()));
39 }
40
41 protected:
42 // InProcessBrowserTest members.
43 void SetUp() override {
44 scoped_ptr<test::CldDataHarness> cld_data_harness =
45 test::CldDataHarnessFactory::Get()->CreateCldDataHarness();
46 ASSERT_NO_FATAL_FAILURE(cld_data_harness->Init());
47 InProcessBrowserTest::SetUp();
48 }
49 void SetUpOnMainThread() override {
50 ResetObserver();
51 InProcessBrowserTest::SetUpOnMainThread();
52 }
53
54 private:
55 using LangageDetectionObserver =
56 ui_test_utils::WindowedNotificationObserverWithDetails<
57 translate::LanguageDetectionDetails>;
58
59 scoped_ptr<LangageDetectionObserver> language_detected_signal_;
60 };
61
62 // Tests that the CLD (Compact Language Detection) works properly.
63 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageLanguageDetection) {
64 ASSERT_TRUE(test_server()->Start());
65
66 // The InProcessBrowserTest opens a new tab, let's wait for that first.
67 WaitUntilLanguageDetected();
68
69 content::WebContents* current_web_contents =
70 browser()->tab_strip_model()->GetActiveWebContents();
71
72 std::string adopted_language = GetLanguageFor(current_web_contents);
73 EXPECT_EQ("und", adopted_language);
74
75 // Open a new tab with a page in English.
76 AddTabAtIndex(0, GURL(test_server()->GetURL("files/english_page.html")),
77 ui::PAGE_TRANSITION_TYPED);
78
79 ResetObserver();
80
81 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents();
82 ChromeTranslateClient* chrome_translate_client =
83 ChromeTranslateClient::FromWebContents(current_web_contents);
84
85 WaitUntilLanguageDetected();
86 adopted_language = GetLanguageFor(current_web_contents);
87 EXPECT_EQ("en", adopted_language);
88 EXPECT_EQ("en",
89 chrome_translate_client->GetLanguageState().original_language());
90
91 ResetObserver();
92
93 // Now navigate to a page in French.
94 ui_test_utils::NavigateToURL(
95 browser(), GURL(test_server()->GetURL("files/french_page.html")));
96
97 WaitUntilLanguageDetected();
98 adopted_language = GetLanguageFor(current_web_contents);
99 EXPECT_EQ("fr", adopted_language);
100 EXPECT_EQ("fr",
101 chrome_translate_client->GetLanguageState().original_language());
102 }
21 103
22 // Test is flaky on Win http://crbug.com/166334 104 // Test is flaky on Win http://crbug.com/166334
23 #if defined(OS_WIN) 105 #if defined(OS_WIN)
24 #define MAYBE_PRE_TranslateSessionRestore DISABLED_PRE_TranslateSessionRestore 106 #define MAYBE_PRE_TranslateSessionRestore DISABLED_PRE_TranslateSessionRestore
25 #else 107 #else
26 #define MAYBE_PRE_TranslateSessionRestore PRE_TranslateSessionRestore 108 #define MAYBE_PRE_TranslateSessionRestore PRE_TranslateSessionRestore
27 #endif 109 #endif
28 // Test that session restore restores the translate infobar and other translate 110 // Test that session restore restores the translate infobar and other translate
29 // settings. 111 // settings.
30 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, 112 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest,
31 MAYBE_PRE_TranslateSessionRestore) { 113 MAYBE_PRE_TranslateSessionRestore) {
32 scoped_ptr<test::CldDataHarness> cld_data_harness =
33 test::CldDataHarnessFactory::Get()->CreateCldDataHarness();
34 ASSERT_NO_FATAL_FAILURE(cld_data_harness->Init());
35 SessionStartupPref pref(SessionStartupPref::LAST); 114 SessionStartupPref pref(SessionStartupPref::LAST);
36 SessionStartupPref::SetStartupPref(browser()->profile(), pref); 115 SessionStartupPref::SetStartupPref(browser()->profile(), pref);
37 116
117 WaitUntilLanguageDetected();
118
38 content::WebContents* current_web_contents = 119 content::WebContents* current_web_contents =
39 browser()->tab_strip_model()->GetActiveWebContents(); 120 browser()->tab_strip_model()->GetActiveWebContents();
40 ChromeTranslateClient* chrome_translate_client = 121 ChromeTranslateClient* chrome_translate_client =
41 ChromeTranslateClient::FromWebContents(current_web_contents); 122 ChromeTranslateClient::FromWebContents(current_web_contents);
42 content::Source<content::WebContents> source(current_web_contents);
43 123
44 ui_test_utils::WindowedNotificationObserverWithDetails< 124 std::string adopted_language = GetLanguageFor(current_web_contents);
45 translate::LanguageDetectionDetails> 125 EXPECT_EQ("und", adopted_language);
46 fr_language_detected_signal(chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, 126
47 source); 127 ResetObserver();
48 128
49 GURL french_url = ui_test_utils::GetTestUrl( 129 GURL french_url = ui_test_utils::GetTestUrl(
50 base::FilePath(), base::FilePath(FILE_PATH_LITERAL("french_page.html"))); 130 base::FilePath(), base::FilePath(FILE_PATH_LITERAL("french_page.html")));
51 ui_test_utils::NavigateToURL(browser(), french_url); 131 ui_test_utils::NavigateToURL(browser(), french_url);
52 fr_language_detected_signal.Wait(); 132
53 translate::LanguageDetectionDetails details; 133 WaitUntilLanguageDetected();
54 EXPECT_TRUE(fr_language_detected_signal.GetDetailsFor( 134 adopted_language = GetLanguageFor(current_web_contents);
55 source.map_key(), &details)); 135 EXPECT_EQ("fr", adopted_language);
56 EXPECT_EQ("fr", details.adopted_language);
57 EXPECT_EQ("fr", 136 EXPECT_EQ("fr",
58 chrome_translate_client->GetLanguageState().original_language()); 137 chrome_translate_client->GetLanguageState().original_language());
59 } 138 }
60 139
61 #if defined (OS_WIN) 140 #if defined (OS_WIN)
62 #define MAYBE_TranslateSessionRestore DISABLED_TranslateSessionRestore 141 #define MAYBE_TranslateSessionRestore DISABLED_TranslateSessionRestore
63 #else 142 #else
64 #define MAYBE_TranslateSessionRestore TranslateSessionRestore 143 #define MAYBE_TranslateSessionRestore TranslateSessionRestore
65 #endif 144 #endif
66 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, 145 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest,
67 MAYBE_TranslateSessionRestore) { 146 MAYBE_TranslateSessionRestore) {
68 scoped_ptr<test::CldDataHarness> cld_data_harness = 147 WaitUntilLanguageDetected();
69 test::CldDataHarnessFactory::Get()->CreateCldDataHarness(); 148
70 ASSERT_NO_FATAL_FAILURE(cld_data_harness->Init()); 149 content::WebContents* active_web_contents =
71 content::WebContents* current_web_contents =
72 browser()->tab_strip_model()->GetActiveWebContents(); 150 browser()->tab_strip_model()->GetActiveWebContents();
73 content::Source<content::WebContents> source(current_web_contents); 151 std::string active_adopted_language = GetLanguageFor(active_web_contents);
74 152
75 ui_test_utils::WindowedNotificationObserverWithDetails< 153 content::WebContents* restored_web_contents =
76 translate::LanguageDetectionDetails> 154 browser()->tab_strip_model()->GetWebContentsAt(0);
77 fr_language_detected_signal(chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, 155 std::string restored_adopted_language = GetLanguageFor(restored_web_contents);
78 source); 156
79 fr_language_detected_signal.Wait(); 157 // One of the tabs could be still loading, let's check on that and wait,
158 // if necessary.
159 if (active_adopted_language.empty()) {
160 ResetObserver();
161 WaitUntilLanguageDetected();
162 active_adopted_language = GetLanguageFor(active_web_contents);
163 } else if (restored_adopted_language.empty()) {
164 ResetObserver();
165 WaitUntilLanguageDetected();
166 restored_adopted_language = GetLanguageFor(restored_web_contents);
167 }
168
169 EXPECT_EQ("fr", restored_adopted_language);
170 EXPECT_EQ("und", active_adopted_language);
80 } 171 }
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/ui/browser_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698