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 "components/translate/core/browser/translate_manager.h" | 5 #include "components/translate/core/browser/translate_manager.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 | 8 |
9 #include "build/build_config.h" | 9 #include "build/build_config.h" |
10 #include "chrome/browser/chrome_notification_types.h" | 10 #include "chrome/browser/chrome_notification_types.h" |
11 #include "chrome/browser/prefs/session_startup_pref.h" | 11 #include "chrome/browser/prefs/session_startup_pref.h" |
12 #include "chrome/browser/translate/chrome_translate_client.h" | 12 #include "chrome/browser/translate/chrome_translate_client.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/browser/translate_error_details.h" |
17 #include "components/translate/core/common/language_detection_details.h" | 18 #include "components/translate/core/common/language_detection_details.h" |
18 #include "content/public/browser/notification_service.h" | 19 #include "content/public/browser/notification_service.h" |
19 #include "net/url_request/test_url_fetcher_factory.h" | 20 #include "net/url_request/test_url_fetcher_factory.h" |
20 #include "net/url_request/url_fetcher_delegate.h" | 21 #include "net/url_request/url_fetcher_delegate.h" |
21 #include "url/gurl.h" | 22 #include "url/gurl.h" |
22 | 23 |
| 24 namespace { |
| 25 |
| 26 static const char kTestValidScript[] = |
| 27 "var google = {};" |
| 28 "google.translate = (function() {" |
| 29 " return {" |
| 30 " TranslateService: function() {" |
| 31 " return {" |
| 32 " isAvailable : function() {" |
| 33 " return true;" |
| 34 " }," |
| 35 " restore : function() {" |
| 36 " return;" |
| 37 " }," |
| 38 " getDetectedLanguage : function() {" |
| 39 " return \"fr\";" |
| 40 " }," |
| 41 " translatePage : function(originalLang, targetLang," |
| 42 " onTranslateProgress) {" |
| 43 " var error = (originalLang == 'auto') ? true : false;" |
| 44 " onTranslateProgress(100, true, error);" |
| 45 " }" |
| 46 " };" |
| 47 " }" |
| 48 " };" |
| 49 "})();" |
| 50 "cr.googleTranslate.onTranslateElementLoad();"; |
| 51 |
| 52 static const char kTestScriptInitializationError[] = |
| 53 "var google = {};" |
| 54 "google.translate = (function() {" |
| 55 " return {" |
| 56 " TranslateService: function() {" |
| 57 " return error;" |
| 58 " }" |
| 59 " };" |
| 60 "})();" |
| 61 "cr.googleTranslate.onTranslateElementLoad();"; |
| 62 |
| 63 static const char kTestScriptIdenticalLanguages[] = |
| 64 "var google = {};" |
| 65 "google.translate = (function() {" |
| 66 " return {" |
| 67 " TranslateService: function() {" |
| 68 " return {" |
| 69 " isAvailable : function() {" |
| 70 " return true;" |
| 71 " }," |
| 72 " restore : function() {" |
| 73 " return;" |
| 74 " }," |
| 75 " getDetectedLanguage : function() {" |
| 76 " return \"en\";" |
| 77 " }," |
| 78 " translatePage : function(originalLang, targetLang," |
| 79 " onTranslateProgress) {" |
| 80 " onTranslateProgress(100, true, 0);" |
| 81 " }" |
| 82 " };" |
| 83 " }" |
| 84 " };" |
| 85 "})();" |
| 86 "cr.googleTranslate.onTranslateElementLoad();"; |
| 87 |
| 88 static const char kTestScriptTimeout[] = |
| 89 "var google = {};" |
| 90 "google.translate = (function() {" |
| 91 " return {" |
| 92 " TranslateService: function() {" |
| 93 " return {" |
| 94 " isAvailable : function() {" |
| 95 " return false;" |
| 96 " }," |
| 97 " };" |
| 98 " }" |
| 99 " };" |
| 100 "})();" |
| 101 "cr.googleTranslate.onTranslateElementLoad();"; |
| 102 |
| 103 static const char kTestScriptUnexpectedScriptError[] = |
| 104 "var google = {};" |
| 105 "google.translate = (function() {" |
| 106 " return {" |
| 107 " TranslateService: function() {" |
| 108 " return {" |
| 109 " isAvailable : function() {" |
| 110 " return true;" |
| 111 " }," |
| 112 " restore : function() {" |
| 113 " return;" |
| 114 " }," |
| 115 " getDetectedLanguage : function() {" |
| 116 " return \"fr\";" |
| 117 " }," |
| 118 " translatePage : function(originalLang, targetLang," |
| 119 " onTranslateProgress) {" |
| 120 " return error;" |
| 121 " }" |
| 122 " };" |
| 123 " }" |
| 124 " };" |
| 125 "})();" |
| 126 "cr.googleTranslate.onTranslateElementLoad();"; |
| 127 |
| 128 static const char kTestScriptBadOrigin[] = |
| 129 "var google = {};" |
| 130 "google.translate = (function() {" |
| 131 " return {" |
| 132 " TranslateService: function() {" |
| 133 " return {" |
| 134 " isAvailable : function() {" |
| 135 " return true;" |
| 136 " }," |
| 137 " restore : function() {" |
| 138 " return;" |
| 139 " }," |
| 140 " getDetectedLanguage : function() {" |
| 141 " return \"fr\";" |
| 142 " }," |
| 143 " translatePage : function(originalLang, targetLang," |
| 144 " onTranslateProgress) {" |
| 145 " var url = \"\";" |
| 146 " cr.googleTranslate.onLoadJavascript(url);" |
| 147 " }" |
| 148 " };" |
| 149 " }" |
| 150 " };" |
| 151 "})();" |
| 152 "cr.googleTranslate.onTranslateElementLoad();"; |
| 153 |
| 154 static const char kTestScriptLoadError[] = |
| 155 "var google = {};" |
| 156 "google.translate = (function() {" |
| 157 " return {" |
| 158 " TranslateService: function() {" |
| 159 " return {" |
| 160 " isAvailable : function() {" |
| 161 " return true;" |
| 162 " }," |
| 163 " restore : function() {" |
| 164 " return;" |
| 165 " }," |
| 166 " getDetectedLanguage : function() {" |
| 167 " return \"fr\";" |
| 168 " }," |
| 169 " translatePage : function(originalLang, targetLang," |
| 170 " onTranslateProgress) {" |
| 171 " var url = \"https://translate.googleapis.com/INVALID\";" |
| 172 " cr.googleTranslate.onLoadJavascript(url);" |
| 173 " }" |
| 174 " };" |
| 175 " }" |
| 176 " };" |
| 177 "})();" |
| 178 "cr.googleTranslate.onTranslateElementLoad();"; |
| 179 |
| 180 } // namespace |
| 181 |
23 class TranslateManagerBrowserTest : public InProcessBrowserTest { | 182 class TranslateManagerBrowserTest : public InProcessBrowserTest { |
24 public: | 183 public: |
25 TranslateManagerBrowserTest() {} | 184 TranslateManagerBrowserTest() { |
| 185 error_subscription_ = |
| 186 translate::TranslateManager::RegisterTranslateErrorCallback( |
| 187 base::Bind(&TranslateManagerBrowserTest::OnTranslateError, |
| 188 base::Unretained(this))); |
| 189 } |
26 ~TranslateManagerBrowserTest() override {} | 190 ~TranslateManagerBrowserTest() override {} |
27 | 191 |
28 void WaitUntilLanguageDetected() { language_detected_signal_->Wait(); } | 192 void WaitUntilLanguageDetected() { language_detected_signal_->Wait(); } |
29 void WaitUntilPageTranslated() { page_translated_signal_->Wait(); } | 193 void WaitUntilPageTranslated() { page_translated_signal_->Wait(); } |
30 | 194 |
31 void ResetObserver() { | 195 void ResetObserver() { |
32 language_detected_signal_.reset(new LangageDetectionObserver( | 196 language_detected_signal_.reset(new LangageDetectionObserver( |
33 chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, | 197 chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, |
34 content::NotificationService::AllSources())); | 198 content::NotificationService::AllSources())); |
35 page_translated_signal_.reset(new content::WindowedNotificationObserver( | 199 page_translated_signal_.reset(new content::WindowedNotificationObserver( |
36 chrome::NOTIFICATION_PAGE_TRANSLATED, | 200 chrome::NOTIFICATION_PAGE_TRANSLATED, |
37 content::NotificationService::AllSources())); | 201 content::NotificationService::AllSources())); |
38 } | 202 } |
39 | 203 |
40 void SimulateURLFetch(bool success) { | 204 void SimulateURLFetch(const std::string& script, bool success) { |
41 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); | 205 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); |
42 ASSERT_TRUE(fetcher); | 206 ASSERT_TRUE(fetcher); |
43 net::Error error = success ? net::OK : net::ERR_FAILED; | 207 net::Error error = success ? net::OK : net::ERR_FAILED; |
44 | 208 |
45 std::string script = | |
46 " var google = {};" | |
47 "google.translate = (function() {" | |
48 " return {" | |
49 " TranslateService: function() {" | |
50 " return {" | |
51 " isAvailable : function() {" | |
52 " return true;" | |
53 " }," | |
54 " restore : function() {" | |
55 " return;" | |
56 " }," | |
57 " getDetectedLanguage : function() {" | |
58 " return \"fr\";" | |
59 " }," | |
60 " translatePage : function(originalLang, targetLang," | |
61 " onTranslateProgress) {" | |
62 " var error = (originalLang == 'auto') ? true : false;" | |
63 " onTranslateProgress(100, true, error);" | |
64 " }" | |
65 " };" | |
66 " }" | |
67 " };" | |
68 "})();" | |
69 "cr.googleTranslate.onTranslateElementLoad();"; | |
70 | |
71 fetcher->set_url(fetcher->GetOriginalURL()); | 209 fetcher->set_url(fetcher->GetOriginalURL()); |
72 fetcher->set_status(net::URLRequestStatus::FromError(error)); | 210 fetcher->set_status(net::URLRequestStatus::FromError(error)); |
73 fetcher->set_response_code(success ? 200 : 500); | 211 fetcher->set_response_code(success ? 200 : 500); |
74 fetcher->SetResponseString(script); | 212 fetcher->SetResponseString(script); |
75 fetcher->delegate()->OnURLFetchComplete(fetcher); | 213 fetcher->delegate()->OnURLFetchComplete(fetcher); |
76 } | 214 } |
77 | 215 |
| 216 void OnTranslateError(const translate::TranslateErrorDetails& details) { |
| 217 error_type_ = details.error; |
| 218 } |
| 219 |
| 220 translate::TranslateErrors::Type GetPageTranslatedResult() { |
| 221 return error_type_; |
| 222 } |
| 223 |
| 224 ChromeTranslateClient* GetChromeTranslateClient() { |
| 225 return ChromeTranslateClient::FromWebContents( |
| 226 browser()->tab_strip_model()->GetActiveWebContents()); |
| 227 } |
| 228 |
78 protected: | 229 protected: |
79 // InProcessBrowserTest members. | 230 // InProcessBrowserTest members. |
80 void SetUp() override { | 231 void SetUp() override { |
81 InProcessBrowserTest::SetUp(); | 232 InProcessBrowserTest::SetUp(); |
82 } | 233 } |
83 void SetUpOnMainThread() override { | 234 void SetUpOnMainThread() override { |
84 ResetObserver(); | 235 ResetObserver(); |
| 236 error_type_ = translate::TranslateErrors::NONE; |
85 } | 237 } |
86 | 238 |
87 private: | 239 private: |
88 net::TestURLFetcherFactory url_fetcher_factory_; | 240 net::TestURLFetcherFactory url_fetcher_factory_; |
89 | 241 |
| 242 translate::TranslateErrors::Type error_type_; |
| 243 |
| 244 std::unique_ptr< |
| 245 translate::TranslateManager::TranslateErrorCallbackList::Subscription> |
| 246 error_subscription_; |
| 247 |
90 using LangageDetectionObserver = | 248 using LangageDetectionObserver = |
91 ui_test_utils::WindowedNotificationObserverWithDetails< | 249 ui_test_utils::WindowedNotificationObserverWithDetails< |
92 translate::LanguageDetectionDetails>; | 250 translate::LanguageDetectionDetails>; |
93 | 251 |
94 std::unique_ptr<LangageDetectionObserver> language_detected_signal_; | 252 std::unique_ptr<LangageDetectionObserver> language_detected_signal_; |
95 std::unique_ptr<content::WindowedNotificationObserver> | 253 std::unique_ptr<content::WindowedNotificationObserver> |
96 page_translated_signal_; | 254 page_translated_signal_; |
97 }; | 255 }; |
98 | 256 |
99 // Tests that the CLD (Compact Language Detection) works properly. | 257 // Tests that the CLD (Compact Language Detection) works properly. |
100 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageLanguageDetection) { | 258 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageLanguageDetection) { |
101 ASSERT_TRUE(embedded_test_server()->Start()); | 259 ASSERT_TRUE(embedded_test_server()->Start()); |
102 | 260 |
103 content::WebContents* current_web_contents = | 261 ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient(); |
104 browser()->tab_strip_model()->GetActiveWebContents(); | 262 |
105 ChromeTranslateClient* chrome_translate_client = | |
106 ChromeTranslateClient::FromWebContents(current_web_contents); | |
107 // The InProcessBrowserTest opens a new tab, let's wait for that first. | 263 // The InProcessBrowserTest opens a new tab, let's wait for that first. |
108 // There is a possible race condition, when the language is not yet detected, | 264 // There is a possible race condition, when the language is not yet detected, |
109 // so we check for that and wait if necessary. | 265 // so we check for that and wait if necessary. |
110 if (chrome_translate_client->GetLanguageState().original_language().empty()) | 266 if (chrome_translate_client->GetLanguageState().original_language().empty()) |
111 WaitUntilLanguageDetected(); | 267 WaitUntilLanguageDetected(); |
112 | 268 |
113 EXPECT_EQ("und", | 269 EXPECT_EQ("und", |
114 chrome_translate_client->GetLanguageState().original_language()); | 270 chrome_translate_client->GetLanguageState().original_language()); |
115 | 271 |
116 // Open a new tab with a page in English. | 272 // Open a new tab with a page in English. |
117 ResetObserver(); | 273 ResetObserver(); |
118 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/english_page.html")), | 274 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/english_page.html")), |
119 ui::PAGE_TRANSITION_TYPED); | 275 ui::PAGE_TRANSITION_TYPED); |
120 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); | 276 chrome_translate_client = GetChromeTranslateClient(); |
121 chrome_translate_client = | |
122 ChromeTranslateClient::FromWebContents(current_web_contents); | |
123 WaitUntilLanguageDetected(); | 277 WaitUntilLanguageDetected(); |
124 | 278 |
125 EXPECT_EQ("en", | 279 EXPECT_EQ("en", |
126 chrome_translate_client->GetLanguageState().original_language()); | 280 chrome_translate_client->GetLanguageState().original_language()); |
127 | 281 |
128 ResetObserver(); | 282 ResetObserver(); |
129 // Now navigate to a page in French. | 283 // Now navigate to a page in French. |
130 ui_test_utils::NavigateToURL( | 284 ui_test_utils::NavigateToURL( |
131 browser(), GURL(embedded_test_server()->GetURL("/french_page.html"))); | 285 browser(), GURL(embedded_test_server()->GetURL("/french_page.html"))); |
132 WaitUntilLanguageDetected(); | 286 WaitUntilLanguageDetected(); |
133 | 287 |
134 EXPECT_EQ("fr", | 288 EXPECT_EQ("fr", |
135 chrome_translate_client->GetLanguageState().original_language()); | 289 chrome_translate_client->GetLanguageState().original_language()); |
136 } | 290 } |
137 | 291 |
138 // Test that the translation was successful. | 292 // Test that the translation was successful. |
139 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageTranslationSuccess) { | 293 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageTranslationSuccess) { |
140 ASSERT_TRUE(embedded_test_server()->Start()); | 294 ASSERT_TRUE(embedded_test_server()->Start()); |
141 | 295 |
142 content::WebContents* current_web_contents = | 296 ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient(); |
143 browser()->tab_strip_model()->GetActiveWebContents(); | |
144 ChromeTranslateClient* chrome_translate_client = | |
145 ChromeTranslateClient::FromWebContents(current_web_contents); | |
146 | 297 |
147 // There is a possible race condition, when the language is not yet detected, | 298 // There is a possible race condition, when the language is not yet detected, |
148 // so we check for that and wait if necessary. | 299 // so we check for that and wait if necessary. |
149 if (chrome_translate_client->GetLanguageState().original_language().empty()) | 300 if (chrome_translate_client->GetLanguageState().original_language().empty()) |
150 WaitUntilLanguageDetected(); | 301 WaitUntilLanguageDetected(); |
151 | 302 |
152 EXPECT_EQ("und", | 303 EXPECT_EQ("und", |
153 chrome_translate_client->GetLanguageState().original_language()); | 304 chrome_translate_client->GetLanguageState().original_language()); |
154 | 305 |
155 // Open a new tab with a page in French. | 306 // Open a new tab with a page in French. |
156 ResetObserver(); | 307 ResetObserver(); |
157 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), | 308 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), |
158 ui::PAGE_TRANSITION_TYPED); | 309 ui::PAGE_TRANSITION_TYPED); |
159 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); | 310 chrome_translate_client = GetChromeTranslateClient(); |
160 chrome_translate_client = | |
161 ChromeTranslateClient::FromWebContents(current_web_contents); | |
162 WaitUntilLanguageDetected(); | 311 WaitUntilLanguageDetected(); |
163 | 312 |
164 EXPECT_EQ("fr", | 313 EXPECT_EQ("fr", |
165 chrome_translate_client->GetLanguageState().original_language()); | 314 chrome_translate_client->GetLanguageState().original_language()); |
166 | 315 |
167 // Translate the page through TranslateManager. | 316 // Translate the page through TranslateManager. |
168 translate::TranslateManager* manager = | 317 translate::TranslateManager* manager = |
169 chrome_translate_client->GetTranslateManager(); | 318 chrome_translate_client->GetTranslateManager(); |
170 manager->TranslatePage( | 319 manager->TranslatePage( |
171 chrome_translate_client->GetLanguageState().original_language(), "en", | 320 chrome_translate_client->GetLanguageState().original_language(), "en", |
172 true); | 321 true); |
173 | 322 |
174 SimulateURLFetch(true); | 323 SimulateURLFetch(kTestValidScript, true); |
175 | 324 |
176 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. | 325 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. |
177 WaitUntilPageTranslated(); | 326 WaitUntilPageTranslated(); |
178 | 327 |
179 EXPECT_FALSE(chrome_translate_client->GetLanguageState().translation_error()); | 328 EXPECT_FALSE(chrome_translate_client->GetLanguageState().translation_error()); |
| 329 EXPECT_EQ(translate::TranslateErrors::NONE, GetPageTranslatedResult()); |
180 } | 330 } |
181 | 331 |
182 // Test if there was an error during translation. | 332 // Test if there was an error during translation. |
183 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageTranslationError) { | 333 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageTranslationError) { |
184 ASSERT_TRUE(embedded_test_server()->Start()); | 334 ASSERT_TRUE(embedded_test_server()->Start()); |
185 | 335 |
186 content::WebContents* current_web_contents = | 336 ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient(); |
187 browser()->tab_strip_model()->GetActiveWebContents(); | |
188 ChromeTranslateClient* chrome_translate_client = | |
189 ChromeTranslateClient::FromWebContents(current_web_contents); | |
190 | 337 |
191 // There is a possible race condition, when the language is not yet detected, | 338 // There is a possible race condition, when the language is not yet detected, |
192 // so we check for that and wait if necessary. | 339 // so we check for that and wait if necessary. |
193 if (chrome_translate_client->GetLanguageState().original_language().empty()) | 340 if (chrome_translate_client->GetLanguageState().original_language().empty()) |
194 WaitUntilLanguageDetected(); | 341 WaitUntilLanguageDetected(); |
195 | 342 |
196 EXPECT_EQ("und", | 343 EXPECT_EQ("und", |
197 chrome_translate_client->GetLanguageState().original_language()); | 344 chrome_translate_client->GetLanguageState().original_language()); |
198 | 345 |
199 // Open a new tab with about:blank page. | 346 // Open a new tab with about:blank page. |
200 ResetObserver(); | 347 ResetObserver(); |
201 AddTabAtIndex(0, GURL("about:blank"), ui::PAGE_TRANSITION_TYPED); | 348 AddTabAtIndex(0, GURL("about:blank"), ui::PAGE_TRANSITION_TYPED); |
202 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); | 349 chrome_translate_client = GetChromeTranslateClient(); |
203 chrome_translate_client = | 350 WaitUntilLanguageDetected(); |
204 ChromeTranslateClient::FromWebContents(current_web_contents); | 351 |
205 WaitUntilLanguageDetected(); | 352 EXPECT_EQ("und", |
206 | 353 chrome_translate_client->GetLanguageState().original_language()); |
207 EXPECT_EQ("und", | 354 |
208 chrome_translate_client->GetLanguageState().original_language()); | 355 // Translate the page through TranslateManager. |
209 | 356 translate::TranslateManager* manager = |
210 // Translate the page through TranslateManager. | 357 chrome_translate_client->GetTranslateManager(); |
211 translate::TranslateManager* manager = | 358 manager->TranslatePage( |
212 chrome_translate_client->GetTranslateManager(); | 359 chrome_translate_client->GetLanguageState().original_language(), "en", |
| 360 true); |
| 361 |
| 362 SimulateURLFetch(kTestValidScript, true); |
| 363 |
| 364 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. |
| 365 WaitUntilPageTranslated(); |
| 366 |
| 367 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); |
| 368 EXPECT_EQ(translate::TranslateErrors::TRANSLATION_ERROR, |
| 369 GetPageTranslatedResult()); |
| 370 } |
| 371 |
| 372 // Test if there was an error during translate library initialization. |
| 373 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, |
| 374 PageTranslationInitializationError) { |
| 375 ASSERT_TRUE(embedded_test_server()->Start()); |
| 376 |
| 377 ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient(); |
| 378 |
| 379 // There is a possible race condition, when the language is not yet detected, |
| 380 // so we check for that and wait if necessary. |
| 381 if (chrome_translate_client->GetLanguageState().original_language().empty()) |
| 382 WaitUntilLanguageDetected(); |
| 383 |
| 384 EXPECT_EQ("und", |
| 385 chrome_translate_client->GetLanguageState().original_language()); |
| 386 |
| 387 // Open a new tab with a page in French. |
| 388 ResetObserver(); |
| 389 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), |
| 390 ui::PAGE_TRANSITION_TYPED); |
| 391 chrome_translate_client = GetChromeTranslateClient(); |
| 392 WaitUntilLanguageDetected(); |
| 393 |
| 394 EXPECT_EQ("fr", |
| 395 chrome_translate_client->GetLanguageState().original_language()); |
| 396 |
| 397 // Translate the page through TranslateManager. |
| 398 translate::TranslateManager* manager = |
| 399 chrome_translate_client->GetTranslateManager(); |
| 400 manager->TranslatePage( |
| 401 chrome_translate_client->GetLanguageState().original_language(), "en", |
| 402 true); |
| 403 |
| 404 SimulateURLFetch(kTestScriptInitializationError, true); |
| 405 |
| 406 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. |
| 407 WaitUntilPageTranslated(); |
| 408 |
| 409 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); |
| 410 EXPECT_EQ(translate::TranslateErrors::INITIALIZATION_ERROR, |
| 411 GetPageTranslatedResult()); |
| 412 } |
| 413 |
| 414 // Test the checks translate lib never gets ready and throws timeout. |
| 415 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, |
| 416 PageTranslationTimeoutError) { |
| 417 ASSERT_TRUE(embedded_test_server()->Start()); |
| 418 |
| 419 ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient(); |
| 420 |
| 421 // There is a possible race condition, when the language is not yet detected, |
| 422 // so we check for that and wait if necessary. |
| 423 if (chrome_translate_client->GetLanguageState().original_language().empty()) |
| 424 WaitUntilLanguageDetected(); |
| 425 |
| 426 EXPECT_EQ("und", |
| 427 chrome_translate_client->GetLanguageState().original_language()); |
| 428 |
| 429 // Open a new tab with a page in French. |
| 430 ResetObserver(); |
| 431 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), |
| 432 ui::PAGE_TRANSITION_TYPED); |
| 433 chrome_translate_client = GetChromeTranslateClient(); |
| 434 WaitUntilLanguageDetected(); |
| 435 |
| 436 EXPECT_EQ("fr", |
| 437 chrome_translate_client->GetLanguageState().original_language()); |
| 438 |
| 439 // Translate the page through TranslateManager. |
| 440 translate::TranslateManager* manager = |
| 441 chrome_translate_client->GetTranslateManager(); |
| 442 manager->TranslatePage( |
| 443 chrome_translate_client->GetLanguageState().original_language(), "en", |
| 444 true); |
| 445 |
| 446 SimulateURLFetch(kTestScriptTimeout, true); |
| 447 |
| 448 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. |
| 449 WaitUntilPageTranslated(); |
| 450 |
| 451 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); |
| 452 EXPECT_EQ(translate::TranslateErrors::TRANSLATION_TIMEOUT, |
| 453 GetPageTranslatedResult()); |
| 454 } |
| 455 |
| 456 // Test the checks if both source and target languages mentioned are identical. |
| 457 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, |
| 458 PageTranslationIdenticalLanguagesError) { |
| 459 ASSERT_TRUE(embedded_test_server()->Start()); |
| 460 |
| 461 ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient(); |
| 462 |
| 463 // There is a possible race condition, when the language is not yet detected, |
| 464 // so we check for that and wait if necessary. |
| 465 if (chrome_translate_client->GetLanguageState().original_language().empty()) |
| 466 WaitUntilLanguageDetected(); |
| 467 |
| 468 EXPECT_EQ("und", |
| 469 chrome_translate_client->GetLanguageState().original_language()); |
| 470 |
| 471 // Open a new tab with a page in French. |
| 472 ResetObserver(); |
| 473 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), |
| 474 ui::PAGE_TRANSITION_TYPED); |
| 475 chrome_translate_client = GetChromeTranslateClient(); |
| 476 WaitUntilLanguageDetected(); |
| 477 |
| 478 EXPECT_EQ("fr", |
| 479 chrome_translate_client->GetLanguageState().original_language()); |
| 480 |
| 481 // Translate the page through TranslateManager. |
| 482 translate::TranslateManager* manager = |
| 483 chrome_translate_client->GetTranslateManager(); |
| 484 manager->TranslatePage("aa", "en", true); |
| 485 |
| 486 SimulateURLFetch(kTestScriptIdenticalLanguages, true); |
| 487 |
| 488 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. |
| 489 WaitUntilPageTranslated(); |
| 490 |
| 491 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); |
| 492 EXPECT_EQ(translate::TranslateErrors::IDENTICAL_LANGUAGES, |
| 493 GetPageTranslatedResult()); |
| 494 } |
| 495 |
| 496 // Test if there was an error during translatePage script execution. |
| 497 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, |
| 498 PageTranslationUnexpectedScriptError) { |
| 499 ASSERT_TRUE(embedded_test_server()->Start()); |
| 500 |
| 501 ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient(); |
| 502 |
| 503 // There is a possible race condition, when the language is not yet detected, |
| 504 // so we check for that and wait if necessary. |
| 505 if (chrome_translate_client->GetLanguageState().original_language().empty()) |
| 506 WaitUntilLanguageDetected(); |
| 507 |
| 508 EXPECT_EQ("und", |
| 509 chrome_translate_client->GetLanguageState().original_language()); |
| 510 |
| 511 // Open a new tab with a page in French. |
| 512 ResetObserver(); |
| 513 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), |
| 514 ui::PAGE_TRANSITION_TYPED); |
| 515 chrome_translate_client = GetChromeTranslateClient(); |
| 516 WaitUntilLanguageDetected(); |
| 517 |
| 518 EXPECT_EQ("fr", |
| 519 chrome_translate_client->GetLanguageState().original_language()); |
| 520 |
| 521 // Translate the page through TranslateManager. |
| 522 translate::TranslateManager* manager = |
| 523 chrome_translate_client->GetTranslateManager(); |
| 524 manager->TranslatePage( |
| 525 chrome_translate_client->GetLanguageState().original_language(), "en", |
| 526 true); |
| 527 |
| 528 SimulateURLFetch(kTestScriptUnexpectedScriptError, true); |
| 529 |
| 530 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. |
| 531 WaitUntilPageTranslated(); |
| 532 |
| 533 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); |
| 534 EXPECT_EQ(translate::TranslateErrors::UNEXPECTED_SCRIPT_ERROR, |
| 535 GetPageTranslatedResult()); |
| 536 } |
| 537 |
| 538 // Test if securityOrigin mentioned in url is valid. |
| 539 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, |
| 540 PageTranslationBadOriginError) { |
| 541 ASSERT_TRUE(embedded_test_server()->Start()); |
| 542 |
| 543 ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient(); |
| 544 |
| 545 // There is a possible race condition, when the language is not yet detected, |
| 546 // so we check for that and wait if necessary. |
| 547 if (chrome_translate_client->GetLanguageState().original_language().empty()) |
| 548 WaitUntilLanguageDetected(); |
| 549 |
| 550 EXPECT_EQ("und", |
| 551 chrome_translate_client->GetLanguageState().original_language()); |
| 552 |
| 553 // Open a new tab with a page in French. |
| 554 ResetObserver(); |
| 555 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), |
| 556 ui::PAGE_TRANSITION_TYPED); |
| 557 chrome_translate_client = GetChromeTranslateClient(); |
| 558 WaitUntilLanguageDetected(); |
| 559 |
| 560 EXPECT_EQ("fr", |
| 561 chrome_translate_client->GetLanguageState().original_language()); |
| 562 |
| 563 // Translate the page through TranslateManager. |
| 564 translate::TranslateManager* manager = |
| 565 chrome_translate_client->GetTranslateManager(); |
| 566 manager->TranslatePage( |
| 567 chrome_translate_client->GetLanguageState().original_language(), "en", |
| 568 true); |
| 569 |
| 570 SimulateURLFetch(kTestScriptBadOrigin, true); |
| 571 |
| 572 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. |
| 573 WaitUntilPageTranslated(); |
| 574 |
| 575 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); |
| 576 EXPECT_EQ(translate::TranslateErrors::BAD_ORIGIN, GetPageTranslatedResult()); |
| 577 } |
| 578 |
| 579 // Test if there was an error during script load. |
| 580 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, |
| 581 PageTranslationScriptLoadError) { |
| 582 ASSERT_TRUE(embedded_test_server()->Start()); |
| 583 |
| 584 ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient(); |
| 585 |
| 586 // There is a possible race condition, when the language is not yet detected, |
| 587 // so we check for that and wait if necessary. |
| 588 if (chrome_translate_client->GetLanguageState().original_language().empty()) |
| 589 WaitUntilLanguageDetected(); |
| 590 |
| 591 EXPECT_EQ("und", |
| 592 chrome_translate_client->GetLanguageState().original_language()); |
| 593 |
| 594 // Open a new tab with a page in French. |
| 595 ResetObserver(); |
| 596 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), |
| 597 ui::PAGE_TRANSITION_TYPED); |
| 598 chrome_translate_client = GetChromeTranslateClient(); |
| 599 WaitUntilLanguageDetected(); |
| 600 |
| 601 EXPECT_EQ("fr", |
| 602 chrome_translate_client->GetLanguageState().original_language()); |
| 603 |
| 604 // Translate the page through TranslateManager. |
| 605 translate::TranslateManager* manager = |
| 606 chrome_translate_client->GetTranslateManager(); |
213 manager->TranslatePage( | 607 manager->TranslatePage( |
214 chrome_translate_client->GetLanguageState().original_language(), "en", | 608 chrome_translate_client->GetLanguageState().original_language(), "en", |
215 true); | 609 true); |
216 | 610 |
217 SimulateURLFetch(true); | 611 SimulateURLFetch(kTestScriptLoadError, true); |
218 | 612 |
219 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. | 613 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. |
220 WaitUntilPageTranslated(); | 614 WaitUntilPageTranslated(); |
221 | 615 |
222 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); | 616 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); |
| 617 EXPECT_EQ(translate::TranslateErrors::SCRIPT_LOAD_ERROR, |
| 618 GetPageTranslatedResult()); |
223 } | 619 } |
224 | 620 |
225 // Test that session restore restores the translate infobar and other translate | 621 // Test that session restore restores the translate infobar and other translate |
226 // settings. | 622 // settings. |
227 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, | 623 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, |
228 PRE_TranslateSessionRestore) { | 624 PRE_TranslateSessionRestore) { |
229 SessionStartupPref pref(SessionStartupPref::LAST); | 625 SessionStartupPref pref(SessionStartupPref::LAST); |
230 SessionStartupPref::SetStartupPref(browser()->profile(), pref); | 626 SessionStartupPref::SetStartupPref(browser()->profile(), pref); |
231 | 627 |
232 content::WebContents* current_web_contents = | 628 ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient(); |
233 browser()->tab_strip_model()->GetActiveWebContents(); | |
234 ChromeTranslateClient* chrome_translate_client = | |
235 ChromeTranslateClient::FromWebContents(current_web_contents); | |
236 | 629 |
237 // There is a possible race condition, when the language is not yet detected, | 630 // There is a possible race condition, when the language is not yet detected, |
238 // so we check for that and wait if necessary. | 631 // so we check for that and wait if necessary. |
239 if (chrome_translate_client->GetLanguageState().original_language().empty()) | 632 if (chrome_translate_client->GetLanguageState().original_language().empty()) |
240 WaitUntilLanguageDetected(); | 633 WaitUntilLanguageDetected(); |
241 | 634 |
242 EXPECT_EQ("und", | 635 EXPECT_EQ("und", |
243 chrome_translate_client->GetLanguageState().original_language()); | 636 chrome_translate_client->GetLanguageState().original_language()); |
244 | 637 |
245 ResetObserver(); | 638 ResetObserver(); |
246 | 639 |
247 GURL french_url = ui_test_utils::GetTestUrl( | 640 GURL french_url = ui_test_utils::GetTestUrl( |
248 base::FilePath(), base::FilePath(FILE_PATH_LITERAL("french_page.html"))); | 641 base::FilePath(), base::FilePath(FILE_PATH_LITERAL("french_page.html"))); |
249 ui_test_utils::NavigateToURL(browser(), french_url); | 642 ui_test_utils::NavigateToURL(browser(), french_url); |
250 | 643 |
251 WaitUntilLanguageDetected(); | 644 WaitUntilLanguageDetected(); |
252 EXPECT_EQ("fr", | 645 EXPECT_EQ("fr", |
253 chrome_translate_client->GetLanguageState().original_language()); | 646 chrome_translate_client->GetLanguageState().original_language()); |
254 } | 647 } |
255 | 648 |
256 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, | 649 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, |
257 TranslateSessionRestore) { | 650 TranslateSessionRestore) { |
258 content::WebContents* active_web_contents = | 651 ChromeTranslateClient* active_translate_client = GetChromeTranslateClient(); |
259 browser()->tab_strip_model()->GetActiveWebContents(); | |
260 ChromeTranslateClient* active_translate_client = | |
261 ChromeTranslateClient::FromWebContents(active_web_contents); | |
262 if (active_translate_client->GetLanguageState().current_language().empty()) | 652 if (active_translate_client->GetLanguageState().current_language().empty()) |
263 WaitUntilLanguageDetected(); | 653 WaitUntilLanguageDetected(); |
264 EXPECT_EQ("und", | 654 EXPECT_EQ("und", |
265 active_translate_client->GetLanguageState().current_language()); | 655 active_translate_client->GetLanguageState().current_language()); |
266 | 656 |
267 // Make restored tab active to (on some platforms) initiate language | 657 // Make restored tab active to (on some platforms) initiate language |
268 // detection. | 658 // detection. |
269 browser()->tab_strip_model()->ActivateTabAt(0, true); | 659 browser()->tab_strip_model()->ActivateTabAt(0, true); |
270 | 660 |
271 content::WebContents* restored_web_contents = | 661 content::WebContents* restored_web_contents = |
272 browser()->tab_strip_model()->GetWebContentsAt(0); | 662 browser()->tab_strip_model()->GetWebContentsAt(0); |
273 ChromeTranslateClient* restored_translate_client = | 663 ChromeTranslateClient* restored_translate_client = |
274 ChromeTranslateClient::FromWebContents(restored_web_contents); | 664 ChromeTranslateClient::FromWebContents(restored_web_contents); |
275 if (restored_translate_client->GetLanguageState() | 665 if (restored_translate_client->GetLanguageState() |
276 .current_language() | 666 .current_language() |
277 .empty()) { | 667 .empty()) { |
278 ResetObserver(); | 668 ResetObserver(); |
279 WaitUntilLanguageDetected(); | 669 WaitUntilLanguageDetected(); |
280 } | 670 } |
281 EXPECT_EQ("fr", | 671 EXPECT_EQ("fr", |
282 restored_translate_client->GetLanguageState().current_language()); | 672 restored_translate_client->GetLanguageState().current_language()); |
283 } | 673 } |
OLD | NEW |