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 = {};" | |
napper
2017/06/16 12:41:51
indent looks wrong
napper
2017/06/16 12:41:51
indent looks wrong
Gaja
2017/06/17 06:41:46
Acknowledged.
Gaja
2017/06/17 13:25:48
Done.
| |
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 kTestScriptTimeout[] = | |
64 " var google = {};" | |
65 "google.translate = (function() {" | |
66 " return {" | |
67 " TranslateService: function() {" | |
68 " return {" | |
69 " isAvailable : function() {" | |
70 " return false;" | |
71 " }," | |
72 " };" | |
73 " }" | |
74 " };" | |
75 "})();" | |
76 "cr.googleTranslate.onTranslateElementLoad();"; | |
77 | |
78 static const char kTestScriptUnexpectedScriptError[] = | |
79 " var google = {};" | |
80 "google.translate = (function() {" | |
81 " return {" | |
82 " TranslateService: function() {" | |
83 " return {" | |
84 " isAvailable : function() {" | |
85 " return true;" | |
86 " }," | |
87 " restore : function() {" | |
88 " return;" | |
89 " }," | |
90 " getDetectedLanguage : function() {" | |
91 " return \"fr\";" | |
92 " }," | |
93 " translatePage : function(originalLang, targetLang," | |
94 " onTranslateProgress) {" | |
95 " return error;" | |
96 " }" | |
97 " };" | |
98 " }" | |
99 " };" | |
100 "})();" | |
101 "cr.googleTranslate.onTranslateElementLoad();"; | |
102 | |
103 static const char kTestScriptBadOrigin[] = | |
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 " var url = \"\";" | |
121 " cr.googleTranslate.onLoadJavascript(url);" | |
122 " }" | |
123 " };" | |
124 " }" | |
125 " };" | |
126 "})();" | |
127 "cr.googleTranslate.onTranslateElementLoad();"; | |
128 | |
129 static const char kTestScriptLoadError[] = | |
130 " var google = {};" | |
131 "google.translate = (function() {" | |
132 " return {" | |
133 " TranslateService: function() {" | |
134 " return {" | |
135 " isAvailable : function() {" | |
136 " return true;" | |
137 " }," | |
138 " restore : function() {" | |
139 " return;" | |
140 " }," | |
141 " getDetectedLanguage : function() {" | |
142 " return \"fr\";" | |
143 " }," | |
144 " translatePage : function(originalLang, targetLang," | |
145 " onTranslateProgress) {" | |
146 " var url = \"https://translate.googleapis.com/INVALID\";" | |
147 " cr.googleTranslate.onLoadJavascript(url);" | |
148 " }" | |
149 " };" | |
150 " }" | |
151 " };" | |
152 "})();" | |
153 "cr.googleTranslate.onTranslateElementLoad();"; | |
154 | |
155 } // namespace | |
156 | |
23 class TranslateManagerBrowserTest : public InProcessBrowserTest { | 157 class TranslateManagerBrowserTest : public InProcessBrowserTest { |
24 public: | 158 public: |
25 TranslateManagerBrowserTest() {} | 159 TranslateManagerBrowserTest() {} |
26 ~TranslateManagerBrowserTest() override {} | 160 ~TranslateManagerBrowserTest() override {} |
27 | 161 |
28 void WaitUntilLanguageDetected() { language_detected_signal_->Wait(); } | 162 void WaitUntilLanguageDetected() { language_detected_signal_->Wait(); } |
29 void WaitUntilPageTranslated() { page_translated_signal_->Wait(); } | 163 void WaitUntilPageTranslated() { page_translated_signal_->Wait(); } |
30 | 164 |
31 void ResetObserver() { | 165 void ResetObserver() { |
32 language_detected_signal_.reset(new LangageDetectionObserver( | 166 language_detected_signal_.reset(new LangageDetectionObserver( |
33 chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, | 167 chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, |
34 content::NotificationService::AllSources())); | 168 content::NotificationService::AllSources())); |
35 page_translated_signal_.reset(new content::WindowedNotificationObserver( | 169 page_translated_signal_.reset(new content::WindowedNotificationObserver( |
36 chrome::NOTIFICATION_PAGE_TRANSLATED, | 170 chrome::NOTIFICATION_PAGE_TRANSLATED, |
37 content::NotificationService::AllSources())); | 171 content::NotificationService::AllSources())); |
38 } | 172 } |
39 | 173 |
40 void SimulateURLFetch(bool success) { | 174 void SimulateURLFetch(const std::string& script, bool success) { |
41 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); | 175 net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); |
42 ASSERT_TRUE(fetcher); | 176 ASSERT_TRUE(fetcher); |
43 net::Error error = success ? net::OK : net::ERR_FAILED; | 177 net::Error error = success ? net::OK : net::ERR_FAILED; |
44 | 178 |
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()); | 179 fetcher->set_url(fetcher->GetOriginalURL()); |
72 fetcher->set_status(net::URLRequestStatus::FromError(error)); | 180 fetcher->set_status(net::URLRequestStatus::FromError(error)); |
73 fetcher->set_response_code(success ? 200 : 500); | 181 fetcher->set_response_code(success ? 200 : 500); |
74 fetcher->SetResponseString(script); | 182 fetcher->SetResponseString(script); |
75 fetcher->delegate()->OnURLFetchComplete(fetcher); | 183 fetcher->delegate()->OnURLFetchComplete(fetcher); |
76 } | 184 } |
77 | 185 |
186 void OnTranslateError(const translate::TranslateErrorDetails& details) { | |
187 error_type_ = details.error; | |
188 } | |
189 | |
190 translate::TranslateErrors::Type GetPageTranslatedResult() { | |
191 return error_type_; | |
192 } | |
193 | |
78 protected: | 194 protected: |
79 // InProcessBrowserTest members. | 195 // InProcessBrowserTest members. |
80 void SetUp() override { | 196 void SetUp() override { |
81 InProcessBrowserTest::SetUp(); | 197 InProcessBrowserTest::SetUp(); |
82 } | 198 } |
83 void SetUpOnMainThread() override { | 199 void SetUpOnMainThread() override { |
84 ResetObserver(); | 200 ResetObserver(); |
85 InProcessBrowserTest::SetUpOnMainThread(); | 201 InProcessBrowserTest::SetUpOnMainThread(); |
86 } | 202 } |
87 | 203 |
88 private: | 204 private: |
89 net::TestURLFetcherFactory url_fetcher_factory_; | 205 net::TestURLFetcherFactory url_fetcher_factory_; |
90 | 206 |
207 translate::TranslateErrors::Type error_type_; | |
208 | |
91 using LangageDetectionObserver = | 209 using LangageDetectionObserver = |
92 ui_test_utils::WindowedNotificationObserverWithDetails< | 210 ui_test_utils::WindowedNotificationObserverWithDetails< |
93 translate::LanguageDetectionDetails>; | 211 translate::LanguageDetectionDetails>; |
94 | 212 |
95 std::unique_ptr<LangageDetectionObserver> language_detected_signal_; | 213 std::unique_ptr<LangageDetectionObserver> language_detected_signal_; |
96 std::unique_ptr<content::WindowedNotificationObserver> | 214 std::unique_ptr<content::WindowedNotificationObserver> |
97 page_translated_signal_; | 215 page_translated_signal_; |
98 }; | 216 }; |
99 | 217 |
100 // Tests that the CLD (Compact Language Detection) works properly. | 218 // Tests that the CLD (Compact Language Detection) works properly. |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
158 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), | 276 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), |
159 ui::PAGE_TRANSITION_TYPED); | 277 ui::PAGE_TRANSITION_TYPED); |
160 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); | 278 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); |
161 chrome_translate_client = | 279 chrome_translate_client = |
162 ChromeTranslateClient::FromWebContents(current_web_contents); | 280 ChromeTranslateClient::FromWebContents(current_web_contents); |
163 WaitUntilLanguageDetected(); | 281 WaitUntilLanguageDetected(); |
164 | 282 |
165 EXPECT_EQ("fr", | 283 EXPECT_EQ("fr", |
166 chrome_translate_client->GetLanguageState().original_language()); | 284 chrome_translate_client->GetLanguageState().original_language()); |
167 | 285 |
286 std::unique_ptr< | |
287 translate::TranslateManager::TranslateErrorCallbackList::Subscription> | |
288 error_subscription; | |
289 error_subscription = | |
napper
2017/06/16 12:41:51
why not just use the constructor?
Gaja
2017/06/17 06:41:46
Acknowledged.
Gaja
2017/06/17 13:25:48
Done.
| |
290 translate::TranslateManager::RegisterTranslateErrorCallback( | |
291 base::Bind(&TranslateManagerBrowserTest::OnTranslateError, | |
292 base::Unretained(this))); | |
293 | |
168 // Translate the page through TranslateManager. | 294 // Translate the page through TranslateManager. |
169 translate::TranslateManager* manager = | 295 translate::TranslateManager* manager = |
170 chrome_translate_client->GetTranslateManager(); | 296 chrome_translate_client->GetTranslateManager(); |
171 manager->TranslatePage( | 297 manager->TranslatePage( |
172 chrome_translate_client->GetLanguageState().original_language(), "en", | 298 chrome_translate_client->GetLanguageState().original_language(), "en", |
173 true); | 299 true); |
174 | 300 |
175 SimulateURLFetch(true); | 301 SimulateURLFetch(kTestValidScript, true); |
176 | 302 |
177 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. | 303 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. |
178 WaitUntilPageTranslated(); | 304 WaitUntilPageTranslated(); |
179 | 305 |
180 EXPECT_FALSE(chrome_translate_client->GetLanguageState().translation_error()); | 306 EXPECT_FALSE(chrome_translate_client->GetLanguageState().translation_error()); |
307 EXPECT_EQ(translate::TranslateErrors::NONE, GetPageTranslatedResult()); | |
181 } | 308 } |
182 | 309 |
183 // Test if there was an error during translation. | 310 // Test if there was an error during translation. |
184 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageTranslationError) { | 311 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageTranslationError) { |
185 ASSERT_TRUE(embedded_test_server()->Start()); | 312 ASSERT_TRUE(embedded_test_server()->Start()); |
186 | 313 |
187 content::WebContents* current_web_contents = | 314 content::WebContents* current_web_contents = |
188 browser()->tab_strip_model()->GetActiveWebContents(); | 315 browser()->tab_strip_model()->GetActiveWebContents(); |
189 ChromeTranslateClient* chrome_translate_client = | 316 ChromeTranslateClient* chrome_translate_client = |
190 ChromeTranslateClient::FromWebContents(current_web_contents); | 317 ChromeTranslateClient::FromWebContents(current_web_contents); |
(...skipping 10 matching lines...) Expand all Loading... | |
201 ResetObserver(); | 328 ResetObserver(); |
202 AddTabAtIndex(0, GURL("about:blank"), ui::PAGE_TRANSITION_TYPED); | 329 AddTabAtIndex(0, GURL("about:blank"), ui::PAGE_TRANSITION_TYPED); |
203 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); | 330 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); |
204 chrome_translate_client = | 331 chrome_translate_client = |
205 ChromeTranslateClient::FromWebContents(current_web_contents); | 332 ChromeTranslateClient::FromWebContents(current_web_contents); |
206 WaitUntilLanguageDetected(); | 333 WaitUntilLanguageDetected(); |
207 | 334 |
208 EXPECT_EQ("und", | 335 EXPECT_EQ("und", |
209 chrome_translate_client->GetLanguageState().original_language()); | 336 chrome_translate_client->GetLanguageState().original_language()); |
210 | 337 |
211 // Translate the page through TranslateManager. | 338 std::unique_ptr< |
212 translate::TranslateManager* manager = | 339 translate::TranslateManager::TranslateErrorCallbackList::Subscription> |
213 chrome_translate_client->GetTranslateManager(); | 340 error_subscription; |
341 error_subscription = | |
342 translate::TranslateManager::RegisterTranslateErrorCallback( | |
343 base::Bind(&TranslateManagerBrowserTest::OnTranslateError, | |
344 base::Unretained(this))); | |
345 | |
346 // Translate the page through TranslateManager. | |
347 translate::TranslateManager* manager = | |
348 chrome_translate_client->GetTranslateManager(); | |
349 manager->TranslatePage( | |
350 chrome_translate_client->GetLanguageState().original_language(), "en", | |
351 true); | |
352 | |
353 SimulateURLFetch(kTestValidScript, true); | |
354 | |
355 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. | |
356 WaitUntilPageTranslated(); | |
357 | |
358 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); | |
359 EXPECT_EQ(translate::TranslateErrors::TRANSLATION_ERROR, | |
360 GetPageTranslatedResult()); | |
361 } | |
362 | |
363 // Test if there was an error during translate library initialization. | |
364 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, | |
365 PageTranslationInitializationError) { | |
366 ASSERT_TRUE(embedded_test_server()->Start()); | |
367 | |
368 content::WebContents* current_web_contents = | |
369 browser()->tab_strip_model()->GetActiveWebContents(); | |
370 ChromeTranslateClient* chrome_translate_client = | |
371 ChromeTranslateClient::FromWebContents(current_web_contents); | |
372 | |
373 // There is a possible race condition, when the language is not yet detected, | |
374 // so we check for that and wait if necessary. | |
375 if (chrome_translate_client->GetLanguageState().original_language().empty()) | |
376 WaitUntilLanguageDetected(); | |
377 | |
378 EXPECT_EQ("und", | |
379 chrome_translate_client->GetLanguageState().original_language()); | |
380 | |
381 // Open a new tab with a page in French. | |
382 ResetObserver(); | |
383 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), | |
384 ui::PAGE_TRANSITION_TYPED); | |
385 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); | |
386 chrome_translate_client = | |
387 ChromeTranslateClient::FromWebContents(current_web_contents); | |
388 WaitUntilLanguageDetected(); | |
389 | |
390 EXPECT_EQ("fr", | |
391 chrome_translate_client->GetLanguageState().original_language()); | |
392 | |
393 std::unique_ptr< | |
394 translate::TranslateManager::TranslateErrorCallbackList::Subscription> | |
395 error_subscription; | |
396 error_subscription = | |
397 translate::TranslateManager::RegisterTranslateErrorCallback( | |
398 base::Bind(&TranslateManagerBrowserTest::OnTranslateError, | |
399 base::Unretained(this))); | |
400 | |
401 // Translate the page through TranslateManager. | |
402 translate::TranslateManager* manager = | |
403 chrome_translate_client->GetTranslateManager(); | |
404 manager->TranslatePage( | |
405 chrome_translate_client->GetLanguageState().original_language(), "en", | |
406 true); | |
407 | |
408 SimulateURLFetch(kTestScriptInitializationError, true); | |
409 | |
410 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. | |
411 WaitUntilPageTranslated(); | |
412 | |
413 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); | |
414 EXPECT_EQ(translate::TranslateErrors::INITIALIZATION_ERROR, | |
415 GetPageTranslatedResult()); | |
416 } | |
417 | |
418 // Test the checks translate lib never gets ready and throws timeout. | |
419 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, | |
420 PageTranslationTimeoutError) { | |
421 ASSERT_TRUE(embedded_test_server()->Start()); | |
422 | |
423 content::WebContents* current_web_contents = | |
424 browser()->tab_strip_model()->GetActiveWebContents(); | |
425 ChromeTranslateClient* chrome_translate_client = | |
426 ChromeTranslateClient::FromWebContents(current_web_contents); | |
427 | |
428 // There is a possible race condition, when the language is not yet detected, | |
429 // so we check for that and wait if necessary. | |
430 if (chrome_translate_client->GetLanguageState().original_language().empty()) | |
431 WaitUntilLanguageDetected(); | |
432 | |
433 EXPECT_EQ("und", | |
434 chrome_translate_client->GetLanguageState().original_language()); | |
435 | |
436 // Open a new tab with a page in French. | |
437 ResetObserver(); | |
438 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), | |
439 ui::PAGE_TRANSITION_TYPED); | |
440 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); | |
441 chrome_translate_client = | |
442 ChromeTranslateClient::FromWebContents(current_web_contents); | |
443 WaitUntilLanguageDetected(); | |
444 | |
445 EXPECT_EQ("fr", | |
446 chrome_translate_client->GetLanguageState().original_language()); | |
447 | |
448 std::unique_ptr< | |
449 translate::TranslateManager::TranslateErrorCallbackList::Subscription> | |
450 error_subscription; | |
451 error_subscription = | |
452 translate::TranslateManager::RegisterTranslateErrorCallback( | |
453 base::Bind(&TranslateManagerBrowserTest::OnTranslateError, | |
454 base::Unretained(this))); | |
455 | |
456 // Translate the page through TranslateManager. | |
457 translate::TranslateManager* manager = | |
458 chrome_translate_client->GetTranslateManager(); | |
459 manager->TranslatePage( | |
460 chrome_translate_client->GetLanguageState().original_language(), "en", | |
461 true); | |
462 | |
463 SimulateURLFetch(kTestScriptTimeout, true); | |
464 | |
465 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. | |
466 WaitUntilPageTranslated(); | |
467 | |
468 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); | |
469 EXPECT_EQ(translate::TranslateErrors::TRANSLATION_TIMEOUT, | |
470 GetPageTranslatedResult()); | |
471 } | |
472 | |
473 // Test the checks if both source and target languages mentioned are identical. | |
474 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, | |
475 PageTranslationIdenticalLanguagesError) { | |
476 ASSERT_TRUE(embedded_test_server()->Start()); | |
477 | |
478 content::WebContents* current_web_contents = | |
479 browser()->tab_strip_model()->GetActiveWebContents(); | |
480 ChromeTranslateClient* chrome_translate_client = | |
481 ChromeTranslateClient::FromWebContents(current_web_contents); | |
482 | |
483 // There is a possible race condition, when the language is not yet detected, | |
484 // so we check for that and wait if necessary. | |
485 if (chrome_translate_client->GetLanguageState().original_language().empty()) | |
486 WaitUntilLanguageDetected(); | |
487 | |
488 EXPECT_EQ("und", | |
489 chrome_translate_client->GetLanguageState().original_language()); | |
490 | |
491 // Open a new tab with a page in French. | |
492 ResetObserver(); | |
493 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), | |
494 ui::PAGE_TRANSITION_TYPED); | |
495 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); | |
496 chrome_translate_client = | |
497 ChromeTranslateClient::FromWebContents(current_web_contents); | |
498 WaitUntilLanguageDetected(); | |
499 | |
500 EXPECT_EQ("fr", | |
501 chrome_translate_client->GetLanguageState().original_language()); | |
502 | |
503 std::unique_ptr< | |
504 translate::TranslateManager::TranslateErrorCallbackList::Subscription> | |
505 error_subscription; | |
506 error_subscription = | |
507 translate::TranslateManager::RegisterTranslateErrorCallback( | |
508 base::Bind(&TranslateManagerBrowserTest::OnTranslateError, | |
509 base::Unretained(this))); | |
510 | |
511 // Translate the page through TranslateManager. | |
512 translate::TranslateManager* manager = | |
513 chrome_translate_client->GetTranslateManager(); | |
514 std::string original_lang = | |
515 chrome_translate_client->GetLanguageState().original_language(); | |
516 manager->TranslatePage(original_lang, original_lang, true); | |
517 | |
518 SimulateURLFetch(kTestValidScript, true); | |
519 | |
520 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. | |
521 WaitUntilPageTranslated(); | |
522 | |
523 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); | |
524 EXPECT_EQ(translate::TranslateErrors::IDENTICAL_LANGUAGES, | |
525 GetPageTranslatedResult()); | |
526 } | |
527 | |
528 // Test if there was an error during translatePage script execution. | |
529 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, | |
530 PageTranslationUnexpectedScriptError) { | |
531 ASSERT_TRUE(embedded_test_server()->Start()); | |
532 | |
533 content::WebContents* current_web_contents = | |
534 browser()->tab_strip_model()->GetActiveWebContents(); | |
535 ChromeTranslateClient* chrome_translate_client = | |
536 ChromeTranslateClient::FromWebContents(current_web_contents); | |
537 | |
538 // There is a possible race condition, when the language is not yet detected, | |
539 // so we check for that and wait if necessary. | |
540 if (chrome_translate_client->GetLanguageState().original_language().empty()) | |
541 WaitUntilLanguageDetected(); | |
542 | |
543 EXPECT_EQ("und", | |
544 chrome_translate_client->GetLanguageState().original_language()); | |
545 | |
546 // Open a new tab with a page in French. | |
547 ResetObserver(); | |
548 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), | |
549 ui::PAGE_TRANSITION_TYPED); | |
550 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); | |
551 chrome_translate_client = | |
552 ChromeTranslateClient::FromWebContents(current_web_contents); | |
553 WaitUntilLanguageDetected(); | |
554 | |
555 EXPECT_EQ("fr", | |
556 chrome_translate_client->GetLanguageState().original_language()); | |
557 | |
558 std::unique_ptr< | |
559 translate::TranslateManager::TranslateErrorCallbackList::Subscription> | |
560 error_subscription; | |
561 error_subscription = | |
562 translate::TranslateManager::RegisterTranslateErrorCallback( | |
563 base::Bind(&TranslateManagerBrowserTest::OnTranslateError, | |
564 base::Unretained(this))); | |
565 | |
566 // Translate the page through TranslateManager. | |
567 translate::TranslateManager* manager = | |
568 chrome_translate_client->GetTranslateManager(); | |
569 manager->TranslatePage( | |
570 chrome_translate_client->GetLanguageState().original_language(), "en", | |
571 true); | |
572 | |
573 SimulateURLFetch(kTestScriptUnexpectedScriptError, true); | |
574 | |
575 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. | |
576 WaitUntilPageTranslated(); | |
577 | |
578 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); | |
579 EXPECT_EQ(translate::TranslateErrors::UNEXPECTED_SCRIPT_ERROR, | |
580 GetPageTranslatedResult()); | |
581 } | |
582 | |
583 // Test if securityOrigin mentioned in url is valid. | |
584 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, | |
585 PageTranslationBadOriginError) { | |
586 ASSERT_TRUE(embedded_test_server()->Start()); | |
587 | |
588 content::WebContents* current_web_contents = | |
589 browser()->tab_strip_model()->GetActiveWebContents(); | |
590 ChromeTranslateClient* chrome_translate_client = | |
591 ChromeTranslateClient::FromWebContents(current_web_contents); | |
592 | |
593 // There is a possible race condition, when the language is not yet detected, | |
594 // so we check for that and wait if necessary. | |
595 if (chrome_translate_client->GetLanguageState().original_language().empty()) | |
596 WaitUntilLanguageDetected(); | |
597 | |
598 EXPECT_EQ("und", | |
599 chrome_translate_client->GetLanguageState().original_language()); | |
600 | |
601 // Open a new tab with a page in French. | |
602 ResetObserver(); | |
603 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), | |
604 ui::PAGE_TRANSITION_TYPED); | |
605 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); | |
606 chrome_translate_client = | |
607 ChromeTranslateClient::FromWebContents(current_web_contents); | |
608 WaitUntilLanguageDetected(); | |
609 | |
610 EXPECT_EQ("fr", | |
611 chrome_translate_client->GetLanguageState().original_language()); | |
612 | |
613 std::unique_ptr< | |
614 translate::TranslateManager::TranslateErrorCallbackList::Subscription> | |
615 error_subscription; | |
616 error_subscription = | |
617 translate::TranslateManager::RegisterTranslateErrorCallback( | |
618 base::Bind(&TranslateManagerBrowserTest::OnTranslateError, | |
619 base::Unretained(this))); | |
620 | |
621 // Translate the page through TranslateManager. | |
622 translate::TranslateManager* manager = | |
623 chrome_translate_client->GetTranslateManager(); | |
624 manager->TranslatePage( | |
625 chrome_translate_client->GetLanguageState().original_language(), "en", | |
626 true); | |
627 | |
628 SimulateURLFetch(kTestScriptBadOrigin, true); | |
629 | |
630 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. | |
631 WaitUntilPageTranslated(); | |
632 | |
633 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); | |
634 EXPECT_EQ(translate::TranslateErrors::BAD_ORIGIN, GetPageTranslatedResult()); | |
635 } | |
636 | |
637 // Test if there was an error during script load. | |
638 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, | |
639 PageTranslationScriptLoadError) { | |
640 ASSERT_TRUE(embedded_test_server()->Start()); | |
641 | |
642 content::WebContents* current_web_contents = | |
643 browser()->tab_strip_model()->GetActiveWebContents(); | |
644 ChromeTranslateClient* chrome_translate_client = | |
645 ChromeTranslateClient::FromWebContents(current_web_contents); | |
646 | |
647 // There is a possible race condition, when the language is not yet detected, | |
648 // so we check for that and wait if necessary. | |
649 if (chrome_translate_client->GetLanguageState().original_language().empty()) | |
650 WaitUntilLanguageDetected(); | |
651 | |
652 EXPECT_EQ("und", | |
653 chrome_translate_client->GetLanguageState().original_language()); | |
654 | |
655 // Open a new tab with a page in French. | |
656 ResetObserver(); | |
657 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), | |
658 ui::PAGE_TRANSITION_TYPED); | |
659 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); | |
660 chrome_translate_client = | |
661 ChromeTranslateClient::FromWebContents(current_web_contents); | |
662 WaitUntilLanguageDetected(); | |
663 | |
664 EXPECT_EQ("fr", | |
665 chrome_translate_client->GetLanguageState().original_language()); | |
666 | |
667 std::unique_ptr< | |
668 translate::TranslateManager::TranslateErrorCallbackList::Subscription> | |
669 error_subscription; | |
670 error_subscription = | |
671 translate::TranslateManager::RegisterTranslateErrorCallback( | |
672 base::Bind(&TranslateManagerBrowserTest::OnTranslateError, | |
673 base::Unretained(this))); | |
674 | |
675 // Translate the page through TranslateManager. | |
676 translate::TranslateManager* manager = | |
677 chrome_translate_client->GetTranslateManager(); | |
214 manager->TranslatePage( | 678 manager->TranslatePage( |
215 chrome_translate_client->GetLanguageState().original_language(), "en", | 679 chrome_translate_client->GetLanguageState().original_language(), "en", |
216 true); | 680 true); |
217 | 681 |
218 SimulateURLFetch(true); | 682 SimulateURLFetch(kTestScriptLoadError, true); |
219 | 683 |
220 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. | 684 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. |
221 WaitUntilPageTranslated(); | 685 WaitUntilPageTranslated(); |
222 | 686 |
223 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); | 687 EXPECT_TRUE(chrome_translate_client->GetLanguageState().translation_error()); |
688 EXPECT_EQ(translate::TranslateErrors::SCRIPT_LOAD_ERROR, | |
689 GetPageTranslatedResult()); | |
224 } | 690 } |
225 | 691 |
226 // Test that session restore restores the translate infobar and other translate | 692 // Test that session restore restores the translate infobar and other translate |
227 // settings. | 693 // settings. |
228 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, | 694 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, |
229 PRE_TranslateSessionRestore) { | 695 PRE_TranslateSessionRestore) { |
230 SessionStartupPref pref(SessionStartupPref::LAST); | 696 SessionStartupPref pref(SessionStartupPref::LAST); |
231 SessionStartupPref::SetStartupPref(browser()->profile(), pref); | 697 SessionStartupPref::SetStartupPref(browser()->profile(), pref); |
232 | 698 |
233 content::WebContents* current_web_contents = | 699 content::WebContents* current_web_contents = |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
275 ChromeTranslateClient::FromWebContents(restored_web_contents); | 741 ChromeTranslateClient::FromWebContents(restored_web_contents); |
276 if (restored_translate_client->GetLanguageState() | 742 if (restored_translate_client->GetLanguageState() |
277 .current_language() | 743 .current_language() |
278 .empty()) { | 744 .empty()) { |
279 ResetObserver(); | 745 ResetObserver(); |
280 WaitUntilLanguageDetected(); | 746 WaitUntilLanguageDetected(); |
281 } | 747 } |
282 EXPECT_EQ("fr", | 748 EXPECT_EQ("fr", |
283 restored_translate_client->GetLanguageState().current_language()); | 749 restored_translate_client->GetLanguageState().current_language()); |
284 } | 750 } |
OLD | NEW |