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 \"aa\";" |
| 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(); |
85 InProcessBrowserTest::SetUpOnMainThread(); | 236 InProcessBrowserTest::SetUpOnMainThread(); |
86 } | 237 } |
87 | 238 |
88 private: | 239 private: |
89 net::TestURLFetcherFactory url_fetcher_factory_; | 240 net::TestURLFetcherFactory url_fetcher_factory_; |
90 | 241 |
| 242 translate::TranslateErrors::Type error_type_; |
| 243 |
| 244 std::unique_ptr< |
| 245 translate::TranslateManager::TranslateErrorCallbackList::Subscription> |
| 246 error_subscription_; |
| 247 |
91 using LangageDetectionObserver = | 248 using LangageDetectionObserver = |
92 ui_test_utils::WindowedNotificationObserverWithDetails< | 249 ui_test_utils::WindowedNotificationObserverWithDetails< |
93 translate::LanguageDetectionDetails>; | 250 translate::LanguageDetectionDetails>; |
94 | 251 |
95 std::unique_ptr<LangageDetectionObserver> language_detected_signal_; | 252 std::unique_ptr<LangageDetectionObserver> language_detected_signal_; |
96 std::unique_ptr<content::WindowedNotificationObserver> | 253 std::unique_ptr<content::WindowedNotificationObserver> |
97 page_translated_signal_; | 254 page_translated_signal_; |
98 }; | 255 }; |
99 | 256 |
100 // Tests that the CLD (Compact Language Detection) works properly. | 257 // Tests that the CLD (Compact Language Detection) works properly. |
101 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageLanguageDetection) { | 258 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageLanguageDetection) { |
102 ASSERT_TRUE(embedded_test_server()->Start()); | 259 ASSERT_TRUE(embedded_test_server()->Start()); |
103 | 260 |
104 content::WebContents* current_web_contents = | 261 ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient(); |
105 browser()->tab_strip_model()->GetActiveWebContents(); | 262 |
106 ChromeTranslateClient* chrome_translate_client = | |
107 ChromeTranslateClient::FromWebContents(current_web_contents); | |
108 // 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. |
109 // 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, |
110 // so we check for that and wait if necessary. | 265 // so we check for that and wait if necessary. |
111 if (chrome_translate_client->GetLanguageState().original_language().empty()) | 266 if (chrome_translate_client->GetLanguageState().original_language().empty()) |
112 WaitUntilLanguageDetected(); | 267 WaitUntilLanguageDetected(); |
113 | 268 |
114 EXPECT_EQ("und", | 269 EXPECT_EQ("und", |
115 chrome_translate_client->GetLanguageState().original_language()); | 270 chrome_translate_client->GetLanguageState().original_language()); |
116 | 271 |
117 // Open a new tab with a page in English. | 272 // Open a new tab with a page in English. |
118 ResetObserver(); | 273 ResetObserver(); |
119 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/english_page.html")), | 274 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/english_page.html")), |
120 ui::PAGE_TRANSITION_TYPED); | 275 ui::PAGE_TRANSITION_TYPED); |
121 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); | 276 chrome_translate_client = GetChromeTranslateClient(); |
122 chrome_translate_client = | |
123 ChromeTranslateClient::FromWebContents(current_web_contents); | |
124 WaitUntilLanguageDetected(); | 277 WaitUntilLanguageDetected(); |
125 | 278 |
126 EXPECT_EQ("en", | 279 EXPECT_EQ("en", |
127 chrome_translate_client->GetLanguageState().original_language()); | 280 chrome_translate_client->GetLanguageState().original_language()); |
128 | 281 |
129 ResetObserver(); | 282 ResetObserver(); |
130 // Now navigate to a page in French. | 283 // Now navigate to a page in French. |
131 ui_test_utils::NavigateToURL( | 284 ui_test_utils::NavigateToURL( |
132 browser(), GURL(embedded_test_server()->GetURL("/french_page.html"))); | 285 browser(), GURL(embedded_test_server()->GetURL("/french_page.html"))); |
133 WaitUntilLanguageDetected(); | 286 WaitUntilLanguageDetected(); |
134 | 287 |
135 EXPECT_EQ("fr", | 288 EXPECT_EQ("fr", |
136 chrome_translate_client->GetLanguageState().original_language()); | 289 chrome_translate_client->GetLanguageState().original_language()); |
137 } | 290 } |
138 | 291 |
139 // Test that the translation was successful. | 292 // Test that the translation was successful. |
140 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageTranslationSuccess) { | 293 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageTranslationSuccess) { |
141 ASSERT_TRUE(embedded_test_server()->Start()); | 294 ASSERT_TRUE(embedded_test_server()->Start()); |
142 | 295 |
143 content::WebContents* current_web_contents = | 296 ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient(); |
144 browser()->tab_strip_model()->GetActiveWebContents(); | |
145 ChromeTranslateClient* chrome_translate_client = | |
146 ChromeTranslateClient::FromWebContents(current_web_contents); | |
147 | 297 |
148 // 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, |
149 // so we check for that and wait if necessary. | 299 // so we check for that and wait if necessary. |
150 if (chrome_translate_client->GetLanguageState().original_language().empty()) | 300 if (chrome_translate_client->GetLanguageState().original_language().empty()) |
151 WaitUntilLanguageDetected(); | 301 WaitUntilLanguageDetected(); |
152 | 302 |
153 EXPECT_EQ("und", | 303 EXPECT_EQ("und", |
154 chrome_translate_client->GetLanguageState().original_language()); | 304 chrome_translate_client->GetLanguageState().original_language()); |
155 | 305 |
156 // Open a new tab with a page in French. | 306 // Open a new tab with a page in French. |
157 ResetObserver(); | 307 ResetObserver(); |
158 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), | 308 AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/french_page.html")), |
159 ui::PAGE_TRANSITION_TYPED); | 309 ui::PAGE_TRANSITION_TYPED); |
160 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); | 310 chrome_translate_client = GetChromeTranslateClient(); |
161 chrome_translate_client = | |
162 ChromeTranslateClient::FromWebContents(current_web_contents); | |
163 WaitUntilLanguageDetected(); | 311 WaitUntilLanguageDetected(); |
164 | 312 |
165 EXPECT_EQ("fr", | 313 EXPECT_EQ("fr", |
166 chrome_translate_client->GetLanguageState().original_language()); | 314 chrome_translate_client->GetLanguageState().original_language()); |
167 | 315 |
168 // Translate the page through TranslateManager. | 316 // Translate the page through TranslateManager. |
169 translate::TranslateManager* manager = | 317 translate::TranslateManager* manager = |
170 chrome_translate_client->GetTranslateManager(); | 318 chrome_translate_client->GetTranslateManager(); |
171 manager->TranslatePage( | 319 manager->TranslatePage( |
172 chrome_translate_client->GetLanguageState().original_language(), "en", | 320 chrome_translate_client->GetLanguageState().original_language(), "en", |
173 true); | 321 true); |
174 | 322 |
175 SimulateURLFetch(true); | 323 SimulateURLFetch(kTestValidScript, true); |
176 | 324 |
177 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. | 325 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. |
178 WaitUntilPageTranslated(); | 326 WaitUntilPageTranslated(); |
179 | 327 |
180 EXPECT_FALSE(chrome_translate_client->GetLanguageState().translation_error()); | 328 EXPECT_FALSE(chrome_translate_client->GetLanguageState().translation_error()); |
| 329 EXPECT_EQ(translate::TranslateErrors::NONE, GetPageTranslatedResult()); |
181 } | 330 } |
182 | 331 |
183 // Test if there was an error during translation. | 332 // Test if there was an error during translation. |
184 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageTranslationError) { | 333 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageTranslationError) { |
185 ASSERT_TRUE(embedded_test_server()->Start()); | 334 ASSERT_TRUE(embedded_test_server()->Start()); |
186 | 335 |
187 content::WebContents* current_web_contents = | 336 ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient(); |
188 browser()->tab_strip_model()->GetActiveWebContents(); | |
189 ChromeTranslateClient* chrome_translate_client = | |
190 ChromeTranslateClient::FromWebContents(current_web_contents); | |
191 | 337 |
192 // 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, |
193 // so we check for that and wait if necessary. | 339 // so we check for that and wait if necessary. |
194 if (chrome_translate_client->GetLanguageState().original_language().empty()) | 340 if (chrome_translate_client->GetLanguageState().original_language().empty()) |
195 WaitUntilLanguageDetected(); | 341 WaitUntilLanguageDetected(); |
196 | 342 |
197 EXPECT_EQ("und", | 343 EXPECT_EQ("und", |
198 chrome_translate_client->GetLanguageState().original_language()); | 344 chrome_translate_client->GetLanguageState().original_language()); |
199 | 345 |
200 // Open a new tab with about:blank page. | 346 // Open a new tab with about:blank page. |
201 ResetObserver(); | 347 ResetObserver(); |
202 AddTabAtIndex(0, GURL("about:blank"), ui::PAGE_TRANSITION_TYPED); | 348 AddTabAtIndex(0, GURL("about:blank"), ui::PAGE_TRANSITION_TYPED); |
203 current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); | 349 chrome_translate_client = GetChromeTranslateClient(); |
204 chrome_translate_client = | 350 WaitUntilLanguageDetected(); |
205 ChromeTranslateClient::FromWebContents(current_web_contents); | 351 |
206 WaitUntilLanguageDetected(); | 352 EXPECT_EQ("und", |
207 | 353 chrome_translate_client->GetLanguageState().original_language()); |
208 EXPECT_EQ("und", | 354 |
209 chrome_translate_client->GetLanguageState().original_language()); | 355 // Translate the page through TranslateManager. |
210 | 356 translate::TranslateManager* manager = |
211 // Translate the page through TranslateManager. | 357 chrome_translate_client->GetTranslateManager(); |
212 translate::TranslateManager* manager = | 358 manager->TranslatePage( |
213 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", "aa", 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(); |
214 manager->TranslatePage( | 607 manager->TranslatePage( |
215 chrome_translate_client->GetLanguageState().original_language(), "en", | 608 chrome_translate_client->GetLanguageState().original_language(), "en", |
216 true); | 609 true); |
217 | 610 |
218 SimulateURLFetch(true); | 611 SimulateURLFetch(kTestScriptLoadError, true); |
219 | 612 |
220 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. | 613 // Wait for NOTIFICATION_PAGE_TRANSLATED notification. |
221 WaitUntilPageTranslated(); | 614 WaitUntilPageTranslated(); |
222 | 615 |
223 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()); |
224 } | 619 } |
225 | 620 |
226 // Test that session restore restores the translate infobar and other translate | 621 // Test that session restore restores the translate infobar and other translate |
227 // settings. | 622 // settings. |
228 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, | 623 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, |
229 PRE_TranslateSessionRestore) { | 624 PRE_TranslateSessionRestore) { |
230 SessionStartupPref pref(SessionStartupPref::LAST); | 625 SessionStartupPref pref(SessionStartupPref::LAST); |
231 SessionStartupPref::SetStartupPref(browser()->profile(), pref); | 626 SessionStartupPref::SetStartupPref(browser()->profile(), pref); |
232 | 627 |
233 content::WebContents* current_web_contents = | 628 ChromeTranslateClient* chrome_translate_client = GetChromeTranslateClient(); |
234 browser()->tab_strip_model()->GetActiveWebContents(); | |
235 ChromeTranslateClient* chrome_translate_client = | |
236 ChromeTranslateClient::FromWebContents(current_web_contents); | |
237 | 629 |
238 // 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, |
239 // so we check for that and wait if necessary. | 631 // so we check for that and wait if necessary. |
240 if (chrome_translate_client->GetLanguageState().original_language().empty()) | 632 if (chrome_translate_client->GetLanguageState().original_language().empty()) |
241 WaitUntilLanguageDetected(); | 633 WaitUntilLanguageDetected(); |
242 | 634 |
243 EXPECT_EQ("und", | 635 EXPECT_EQ("und", |
244 chrome_translate_client->GetLanguageState().original_language()); | 636 chrome_translate_client->GetLanguageState().original_language()); |
245 | 637 |
246 ResetObserver(); | 638 ResetObserver(); |
247 | 639 |
248 GURL french_url = ui_test_utils::GetTestUrl( | 640 GURL french_url = ui_test_utils::GetTestUrl( |
249 base::FilePath(), base::FilePath(FILE_PATH_LITERAL("french_page.html"))); | 641 base::FilePath(), base::FilePath(FILE_PATH_LITERAL("french_page.html"))); |
250 ui_test_utils::NavigateToURL(browser(), french_url); | 642 ui_test_utils::NavigateToURL(browser(), french_url); |
251 | 643 |
252 WaitUntilLanguageDetected(); | 644 WaitUntilLanguageDetected(); |
253 EXPECT_EQ("fr", | 645 EXPECT_EQ("fr", |
254 chrome_translate_client->GetLanguageState().original_language()); | 646 chrome_translate_client->GetLanguageState().original_language()); |
255 } | 647 } |
256 | 648 |
257 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, | 649 IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, |
258 TranslateSessionRestore) { | 650 TranslateSessionRestore) { |
259 content::WebContents* active_web_contents = | 651 ChromeTranslateClient* active_translate_client = GetChromeTranslateClient(); |
260 browser()->tab_strip_model()->GetActiveWebContents(); | |
261 ChromeTranslateClient* active_translate_client = | |
262 ChromeTranslateClient::FromWebContents(active_web_contents); | |
263 if (active_translate_client->GetLanguageState().current_language().empty()) | 652 if (active_translate_client->GetLanguageState().current_language().empty()) |
264 WaitUntilLanguageDetected(); | 653 WaitUntilLanguageDetected(); |
265 EXPECT_EQ("und", | 654 EXPECT_EQ("und", |
266 active_translate_client->GetLanguageState().current_language()); | 655 active_translate_client->GetLanguageState().current_language()); |
267 | 656 |
268 // Make restored tab active to (on some platforms) initiate language | 657 // Make restored tab active to (on some platforms) initiate language |
269 // detection. | 658 // detection. |
270 browser()->tab_strip_model()->ActivateTabAt(0, true); | 659 browser()->tab_strip_model()->ActivateTabAt(0, true); |
271 | 660 |
272 content::WebContents* restored_web_contents = | 661 content::WebContents* restored_web_contents = |
273 browser()->tab_strip_model()->GetWebContentsAt(0); | 662 browser()->tab_strip_model()->GetWebContentsAt(0); |
274 ChromeTranslateClient* restored_translate_client = | 663 ChromeTranslateClient* restored_translate_client = |
275 ChromeTranslateClient::FromWebContents(restored_web_contents); | 664 ChromeTranslateClient::FromWebContents(restored_web_contents); |
276 if (restored_translate_client->GetLanguageState() | 665 if (restored_translate_client->GetLanguageState() |
277 .current_language() | 666 .current_language() |
278 .empty()) { | 667 .empty()) { |
279 ResetObserver(); | 668 ResetObserver(); |
280 WaitUntilLanguageDetected(); | 669 WaitUntilLanguageDetected(); |
281 } | 670 } |
282 EXPECT_EQ("fr", | 671 EXPECT_EQ("fr", |
283 restored_translate_client->GetLanguageState().current_language()); | 672 restored_translate_client->GetLanguageState().current_language()); |
284 } | 673 } |
OLD | NEW |