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

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

Issue 2919343007: Check |errorCode| of translate.js and notify to Browser (Closed)
Patch Set: Addressed review comments. Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/translate/core/browser/translate_manager.h" 5 #include "components/translate/core/browser/translate_manager.h"
6 6
7 #include <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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698