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

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

Powered by Google App Engine
This is Rietveld 408576698