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()); | |
Takashi Toyoshima
2017/06/27 12:04:55
This check fails because error_type_ wasn't initia
Gaja
2017/06/28 03:43:31
This check does not fail with your suggestion i.e
| |
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 |