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

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

Powered by Google App Engine
This is Rietveld 408576698