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

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

Issue 3655007: Merge 58701 - Relanding this:... (Closed) Base URL: svn://svn.chromium.org/chrome/branches/517/src/
Patch Set: Created 10 years, 2 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 | Annotate | Revision Log
« no previous file with comments | « chrome/browser/tab_contents/test_tab_contents.cc ('k') | no next file » | 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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "chrome/browser/renderer_host/test/test_render_view_host.h" 5 #include "chrome/browser/renderer_host/test/test_render_view_host.h"
6 6
7 #include "base/utf_string_conversions.h" 7 #include "base/utf_string_conversions.h"
8 #include "chrome/app/chrome_dll_resource.h" 8 #include "chrome/app/chrome_dll_resource.h"
9 #include "chrome/browser/prefs/pref_service.h" 9 #include "chrome/browser/prefs/pref_service.h"
10 #include "chrome/browser/renderer_host/mock_render_process_host.h" 10 #include "chrome/browser/renderer_host/mock_render_process_host.h"
11 #include "chrome/browser/tab_contents/navigation_controller.h"
11 #include "chrome/browser/tab_contents/render_view_context_menu.h" 12 #include "chrome/browser/tab_contents/render_view_context_menu.h"
12 #include "chrome/browser/tab_contents/test_tab_contents.h" 13 #include "chrome/browser/tab_contents/test_tab_contents.h"
13 #include "chrome/browser/translate/translate_infobar_delegate.h" 14 #include "chrome/browser/translate/translate_infobar_delegate.h"
14 #include "chrome/browser/translate/translate_manager.h" 15 #include "chrome/browser/translate/translate_manager.h"
15 #include "chrome/browser/translate/translate_prefs.h" 16 #include "chrome/browser/translate/translate_prefs.h"
16 #include "chrome/common/ipc_test_sink.h" 17 #include "chrome/common/ipc_test_sink.h"
17 #include "chrome/common/notification_details.h" 18 #include "chrome/common/notification_details.h"
18 #include "chrome/common/notification_observer_mock.h" 19 #include "chrome/common/notification_observer_mock.h"
19 #include "chrome/common/notification_registrar.h" 20 #include "chrome/common/notification_registrar.h"
20 #include "chrome/common/notification_service.h" 21 #include "chrome/common/notification_service.h"
(...skipping 13 matching lines...) Expand all
34 using testing::Property; 35 using testing::Property;
35 using WebKit::WebContextMenuData; 36 using WebKit::WebContextMenuData;
36 37
37 class TranslateManagerTest : public RenderViewHostTestHarness, 38 class TranslateManagerTest : public RenderViewHostTestHarness,
38 public NotificationObserver { 39 public NotificationObserver {
39 public: 40 public:
40 TranslateManagerTest() {} 41 TranslateManagerTest() {}
41 42
42 // Simluates navigating to a page and getting the page contents and language 43 // Simluates navigating to a page and getting the page contents and language
43 // for that navigation. 44 // for that navigation.
44 void SimulateNavigation(const GURL& url, int page_id, 45 void SimulateNavigation(const GURL& url,
45 const std::string& contents, 46 const std::string& contents,
46 const std::string& lang, 47 const std::string& lang,
47 bool page_translatable) { 48 bool page_translatable) {
48 NavigateAndCommit(url); 49 NavigateAndCommit(url);
50 int page_id = RenderViewHostTestHarness::contents()->controller().
51 GetLastCommittedEntry()->page_id();
49 SimulateOnPageContents(url, page_id, contents, lang, page_translatable); 52 SimulateOnPageContents(url, page_id, contents, lang, page_translatable);
50 } 53 }
51 54
52 void SimulateOnPageContents(const GURL& url, int page_id, 55 void SimulateOnPageContents(const GURL& url, int page_id,
53 const std::string& contents, 56 const std::string& contents,
54 const std::string& lang, 57 const std::string& lang,
55 bool page_translatable) { 58 bool page_translatable) {
56 rvh()->TestOnMessageReceived(ViewHostMsg_PageContents(0, url, page_id, 59 rvh()->TestOnMessageReceived(ViewHostMsg_PageContents(0, url, page_id,
57 UTF8ToUTF16(contents), 60 UTF8ToUTF16(contents),
58 lang, 61 lang,
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 TestRenderViewContextMenu(TabContents* tab_contents, 275 TestRenderViewContextMenu(TabContents* tab_contents,
273 const ContextMenuParams& params) 276 const ContextMenuParams& params)
274 : RenderViewContextMenu(tab_contents, params) { 277 : RenderViewContextMenu(tab_contents, params) {
275 } 278 }
276 279
277 DISALLOW_COPY_AND_ASSIGN(TestRenderViewContextMenu); 280 DISALLOW_COPY_AND_ASSIGN(TestRenderViewContextMenu);
278 }; 281 };
279 282
280 TEST_F(TranslateManagerTest, NormalTranslate) { 283 TEST_F(TranslateManagerTest, NormalTranslate) {
281 // Simulate navigating to a page. 284 // Simulate navigating to a page.
282 SimulateNavigation(GURL("http://www.google.fr"), 0, "Le Google", "fr", true); 285 SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
283 286
284 // We should have an infobar. 287 // We should have an infobar.
285 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); 288 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
286 ASSERT_TRUE(infobar != NULL); 289 ASSERT_TRUE(infobar != NULL);
287 EXPECT_EQ(TranslateInfoBarDelegate::BEFORE_TRANSLATE, infobar->type()); 290 EXPECT_EQ(TranslateInfoBarDelegate::BEFORE_TRANSLATE, infobar->type());
288 291
289 // Simulate clicking translate. 292 // Simulate clicking translate.
290 process()->sink().ClearMessages(); 293 process()->sink().ClearMessages();
291 infobar->Translate(); 294 infobar->Translate();
292 295
293 // The "Translating..." infobar should be showing. 296 // The "Translating..." infobar should be showing.
294 infobar = GetTranslateInfoBar(); 297 infobar = GetTranslateInfoBar();
295 ASSERT_TRUE(infobar != NULL); 298 ASSERT_TRUE(infobar != NULL);
296 EXPECT_EQ(TranslateInfoBarDelegate::TRANSLATING, infobar->type()); 299 EXPECT_EQ(TranslateInfoBarDelegate::TRANSLATING, infobar->type());
297 300
298 // Simulate the translate script being retrieved (it only needs to be done 301 // Simulate the translate script being retrieved (it only needs to be done
299 // once in the test as it is cached). 302 // once in the test as it is cached).
300 SimulateURLFetch(true); 303 SimulateURLFetch(true);
301 304
302 // Test that we sent the right message to the renderer. 305 // Test that we sent the right message to the renderer.
303 int page_id = 0; 306 int page_id = 0;
304 std::string original_lang, target_lang; 307 std::string original_lang, target_lang;
305 EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang)); 308 EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
306 EXPECT_EQ(0, page_id);
307 EXPECT_EQ("fr", original_lang); 309 EXPECT_EQ("fr", original_lang);
308 EXPECT_EQ("en", target_lang); 310 EXPECT_EQ("en", target_lang);
309 311
310 // Simulate the render notifying the translation has been done. 312 // Simulate the render notifying the translation has been done.
311 rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "fr", "en", 313 rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "fr", "en",
312 TranslateErrors::NONE)); 314 TranslateErrors::NONE));
313 315
314 // The after translate infobar should be showing. 316 // The after translate infobar should be showing.
315 infobar = GetTranslateInfoBar(); 317 infobar = GetTranslateInfoBar();
316 ASSERT_TRUE(infobar != NULL); 318 ASSERT_TRUE(infobar != NULL);
317 EXPECT_EQ(TranslateInfoBarDelegate::AFTER_TRANSLATE, infobar->type()); 319 EXPECT_EQ(TranslateInfoBarDelegate::AFTER_TRANSLATE, infobar->type());
318 320
319 // Simulate changing the original language, this should trigger a translation. 321 // Simulate changing the original language, this should trigger a translation.
320 process()->sink().ClearMessages(); 322 process()->sink().ClearMessages();
321 std::string new_original_lang = infobar->GetLanguageCodeAt(0); 323 std::string new_original_lang = infobar->GetLanguageCodeAt(0);
322 infobar->SetOriginalLanguage(0); 324 infobar->SetOriginalLanguage(0);
323 EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang)); 325 EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
324 EXPECT_EQ(0, page_id);
325 EXPECT_EQ(new_original_lang, original_lang); 326 EXPECT_EQ(new_original_lang, original_lang);
326 EXPECT_EQ("en", target_lang); 327 EXPECT_EQ("en", target_lang);
327 // Simulate the render notifying the translation has been done. 328 // Simulate the render notifying the translation has been done.
328 rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, 329 rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0,
329 new_original_lang, "en", TranslateErrors::NONE)); 330 new_original_lang, "en", TranslateErrors::NONE));
330 // infobar is now invalid. 331 // infobar is now invalid.
331 TranslateInfoBarDelegate* new_infobar = GetTranslateInfoBar(); 332 TranslateInfoBarDelegate* new_infobar = GetTranslateInfoBar();
332 ASSERT_TRUE(new_infobar != NULL); 333 ASSERT_TRUE(new_infobar != NULL);
333 infobar = new_infobar; 334 infobar = new_infobar;
334 335
335 // Simulate changing the target language, this should trigger a translation. 336 // Simulate changing the target language, this should trigger a translation.
336 process()->sink().ClearMessages(); 337 process()->sink().ClearMessages();
337 std::string new_target_lang = infobar->GetLanguageCodeAt(1); 338 std::string new_target_lang = infobar->GetLanguageCodeAt(1);
338 infobar->SetTargetLanguage(1); 339 infobar->SetTargetLanguage(1);
339 EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang)); 340 EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
340 EXPECT_EQ(0, page_id);
341 EXPECT_EQ(new_original_lang, original_lang); 341 EXPECT_EQ(new_original_lang, original_lang);
342 EXPECT_EQ(new_target_lang, target_lang); 342 EXPECT_EQ(new_target_lang, target_lang);
343 // Simulate the render notifying the translation has been done. 343 // Simulate the render notifying the translation has been done.
344 rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, 344 rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0,
345 new_original_lang, new_target_lang, TranslateErrors::NONE)); 345 new_original_lang, new_target_lang, TranslateErrors::NONE));
346 // infobar is now invalid. 346 // infobar is now invalid.
347 new_infobar = GetTranslateInfoBar(); 347 new_infobar = GetTranslateInfoBar();
348 ASSERT_TRUE(new_infobar != NULL); 348 ASSERT_TRUE(new_infobar != NULL);
349 } 349 }
350 350
351 TEST_F(TranslateManagerTest, TranslateScriptNotAvailable) { 351 TEST_F(TranslateManagerTest, TranslateScriptNotAvailable) {
352 // Simulate navigating to a page. 352 // Simulate navigating to a page.
353 SimulateNavigation(GURL("http://www.google.fr"), 0, "Le Google", "fr", true); 353 SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
354 354
355 // We should have an infobar. 355 // We should have an infobar.
356 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); 356 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
357 ASSERT_TRUE(infobar != NULL); 357 ASSERT_TRUE(infobar != NULL);
358 EXPECT_EQ(TranslateInfoBarDelegate::BEFORE_TRANSLATE, infobar->type()); 358 EXPECT_EQ(TranslateInfoBarDelegate::BEFORE_TRANSLATE, infobar->type());
359 359
360 // Simulate clicking translate. 360 // Simulate clicking translate.
361 process()->sink().ClearMessages(); 361 process()->sink().ClearMessages();
362 infobar->Translate(); 362 infobar->Translate();
363 // Simulate a failure retrieving the translate script. 363 // Simulate a failure retrieving the translate script.
364 SimulateURLFetch(false); 364 SimulateURLFetch(false);
365 365
366 // We should not have sent any message to translate to the renderer. 366 // We should not have sent any message to translate to the renderer.
367 EXPECT_FALSE(GetTranslateMessage(NULL, NULL, NULL)); 367 EXPECT_FALSE(GetTranslateMessage(NULL, NULL, NULL));
368 368
369 // And we should have an error infobar showing. 369 // And we should have an error infobar showing.
370 infobar = GetTranslateInfoBar(); 370 infobar = GetTranslateInfoBar();
371 ASSERT_TRUE(infobar != NULL); 371 ASSERT_TRUE(infobar != NULL);
372 EXPECT_EQ(TranslateInfoBarDelegate::TRANSLATION_ERROR, infobar->type()); 372 EXPECT_EQ(TranslateInfoBarDelegate::TRANSLATION_ERROR, infobar->type());
373 } 373 }
374 374
375 // Ensures we deal correctly with pages for which the browser does not recognize 375 // Ensures we deal correctly with pages for which the browser does not recognize
376 // the language (the translate server may or not detect the language). 376 // the language (the translate server may or not detect the language).
377 TEST_F(TranslateManagerTest, TranslateUnknownLanguage) { 377 TEST_F(TranslateManagerTest, TranslateUnknownLanguage) {
378 // Simulate navigating to a page ("und" is the string returned by the CLD for 378 // Simulate navigating to a page ("und" is the string returned by the CLD for
379 // languages it does not recognize). 379 // languages it does not recognize).
380 SimulateNavigation(GURL("http://www.google.mys"), 0, "G00g1e", "und", true); 380 SimulateNavigation(GURL("http://www.google.mys"), "G00g1e", "und", true);
381 381
382 // We should not have an infobar as we don't know the language. 382 // We should not have an infobar as we don't know the language.
383 ASSERT_TRUE(GetTranslateInfoBar() == NULL); 383 ASSERT_TRUE(GetTranslateInfoBar() == NULL);
384 384
385 // Translate the page anyway throught the context menu. 385 // Translate the page anyway throught the context menu.
386 scoped_ptr<TestRenderViewContextMenu> menu( 386 scoped_ptr<TestRenderViewContextMenu> menu(
387 TestRenderViewContextMenu::CreateContextMenu(contents())); 387 TestRenderViewContextMenu::CreateContextMenu(contents()));
388 menu->Init(); 388 menu->Init();
389 menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE); 389 menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE);
390 390
(...skipping 13 matching lines...) Expand all
404 404
405 // The after translate infobar should be showing. 405 // The after translate infobar should be showing.
406 infobar = GetTranslateInfoBar(); 406 infobar = GetTranslateInfoBar();
407 ASSERT_TRUE(infobar != NULL); 407 ASSERT_TRUE(infobar != NULL);
408 EXPECT_EQ(TranslateInfoBarDelegate::AFTER_TRANSLATE, infobar->type()); 408 EXPECT_EQ(TranslateInfoBarDelegate::AFTER_TRANSLATE, infobar->type());
409 EXPECT_EQ("fr", infobar->GetOriginalLanguageCode()); 409 EXPECT_EQ("fr", infobar->GetOriginalLanguageCode());
410 EXPECT_EQ("en", infobar->GetTargetLanguageCode()); 410 EXPECT_EQ("en", infobar->GetTargetLanguageCode());
411 411
412 // Let's run the same steps but this time the server detects the page is 412 // Let's run the same steps but this time the server detects the page is
413 // already in English. 413 // already in English.
414 SimulateNavigation(GURL("http://www.google.com"), 1, "The Google", "und", 414 SimulateNavigation(GURL("http://www.google.com"), "The Google", "und", true);
415 true);
416 menu.reset(TestRenderViewContextMenu::CreateContextMenu(contents())); 415 menu.reset(TestRenderViewContextMenu::CreateContextMenu(contents()));
417 menu->Init(); 416 menu->Init();
418 menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE); 417 menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE);
419 rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(1, 0, "en", "en", 418 rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(1, 0, "en", "en",
420 TranslateErrors::IDENTICAL_LANGUAGES)); 419 TranslateErrors::IDENTICAL_LANGUAGES));
421 infobar = GetTranslateInfoBar(); 420 infobar = GetTranslateInfoBar();
422 ASSERT_TRUE(infobar != NULL); 421 ASSERT_TRUE(infobar != NULL);
423 EXPECT_EQ(TranslateInfoBarDelegate::TRANSLATION_ERROR, infobar->type()); 422 EXPECT_EQ(TranslateInfoBarDelegate::TRANSLATION_ERROR, infobar->type());
424 EXPECT_EQ(TranslateErrors::IDENTICAL_LANGUAGES, infobar->error()); 423 EXPECT_EQ(TranslateErrors::IDENTICAL_LANGUAGES, infobar->error());
425 424
426 // Let's run the same steps again but this time the server fails to detect the 425 // Let's run the same steps again but this time the server fails to detect the
427 // page's language (it returns an empty string). 426 // page's language (it returns an empty string).
428 SimulateNavigation(GURL("http://www.google.com"), 2, "The Google", "und", 427 SimulateNavigation(GURL("http://www.google.com"), "The Google", "und", true);
429 true);
430 menu.reset(TestRenderViewContextMenu::CreateContextMenu(contents())); 428 menu.reset(TestRenderViewContextMenu::CreateContextMenu(contents()));
431 menu->Init(); 429 menu->Init();
432 menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE); 430 menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE);
433 rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(2, 0, "", "en", 431 rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(2, 0, "", "en",
434 TranslateErrors::UNKNOWN_LANGUAGE)); 432 TranslateErrors::UNKNOWN_LANGUAGE));
435 infobar = GetTranslateInfoBar(); 433 infobar = GetTranslateInfoBar();
436 ASSERT_TRUE(infobar != NULL); 434 ASSERT_TRUE(infobar != NULL);
437 EXPECT_EQ(TranslateInfoBarDelegate::TRANSLATION_ERROR, infobar->type()); 435 EXPECT_EQ(TranslateInfoBarDelegate::TRANSLATION_ERROR, infobar->type());
438 EXPECT_EQ(TranslateErrors::UNKNOWN_LANGUAGE, infobar->error()); 436 EXPECT_EQ(TranslateErrors::UNKNOWN_LANGUAGE, infobar->error());
439 } 437 }
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 502
505 // Close the info-bar if applicable. 503 // Close the info-bar if applicable.
506 if (infobar != NULL) 504 if (infobar != NULL)
507 EXPECT_TRUE(CloseTranslateInfoBar()); 505 EXPECT_TRUE(CloseTranslateInfoBar());
508 } 506 }
509 } 507 }
510 508
511 // Tests auto-translate on page. 509 // Tests auto-translate on page.
512 TEST_F(TranslateManagerTest, AutoTranslateOnNavigate) { 510 TEST_F(TranslateManagerTest, AutoTranslateOnNavigate) {
513 // Simulate navigating to a page and getting its language. 511 // Simulate navigating to a page and getting its language.
514 SimulateNavigation(GURL("http://www.google.fr"), 0, "Le Google", "fr", true); 512 SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
515 513
516 // Simulate the user translating. 514 // Simulate the user translating.
517 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); 515 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
518 ASSERT_TRUE(infobar != NULL); 516 ASSERT_TRUE(infobar != NULL);
519 infobar->Translate(); 517 infobar->Translate();
520 SimulateURLFetch(true); // Simulate the translate script being retrieved. 518 SimulateURLFetch(true); // Simulate the translate script being retrieved.
521 519
522 rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "fr", "en", 520 rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "fr", "en",
523 TranslateErrors::NONE)); 521 TranslateErrors::NONE));
524 522
525 // Now navigate to a new page in the same language. 523 // Now navigate to a new page in the same language.
526 process()->sink().ClearMessages(); 524 process()->sink().ClearMessages();
527 SimulateNavigation(GURL("http://news.google.fr"), 1, "Les news", "fr", true); 525 SimulateNavigation(GURL("http://news.google.fr"), "Les news", "fr", true);
528 526
529 // This should have automatically triggered a translation. 527 // This should have automatically triggered a translation.
530 int page_id = 0; 528 int page_id = 0;
531 std::string original_lang, target_lang; 529 std::string original_lang, target_lang;
532 EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang)); 530 EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
533 EXPECT_EQ(1, page_id); 531 EXPECT_EQ(1, page_id);
534 EXPECT_EQ("fr", original_lang); 532 EXPECT_EQ("fr", original_lang);
535 EXPECT_EQ("en", target_lang); 533 EXPECT_EQ("en", target_lang);
536 534
537 // Now navigate to a page in a different language. 535 // Now navigate to a page in a different language.
538 process()->sink().ClearMessages(); 536 process()->sink().ClearMessages();
539 SimulateNavigation(GURL("http://news.google.es"), 1, "Las news", "es", true); 537 SimulateNavigation(GURL("http://news.google.es"), "Las news", "es", true);
540 538
541 // This should not have triggered a translate. 539 // This should not have triggered a translate.
542 EXPECT_FALSE(GetTranslateMessage(&page_id, &original_lang, &target_lang)); 540 EXPECT_FALSE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
543 } 541 }
544 542
545 // Tests that multiple OnPageContents do not cause multiple infobars. 543 // Tests that multiple OnPageContents do not cause multiple infobars.
546 TEST_F(TranslateManagerTest, MultipleOnPageContents) { 544 TEST_F(TranslateManagerTest, MultipleOnPageContents) {
547 // Simulate navigating to a page and getting its language. 545 // Simulate navigating to a page and getting its language.
548 SimulateNavigation(GURL("http://www.google.fr"), 0, "Le Google", "fr", true); 546 SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
549 547
550 // Simulate clicking 'Nope' (don't translate). 548 // Simulate clicking 'Nope' (don't translate).
551 EXPECT_TRUE(DenyTranslation()); 549 EXPECT_TRUE(DenyTranslation());
552 EXPECT_EQ(0, contents()->infobar_delegate_count()); 550 EXPECT_EQ(0, contents()->infobar_delegate_count());
553 551
554 // Send a new PageContents, we should not show an infobar. 552 // Send a new PageContents, we should not show an infobar.
555 SimulateOnPageContents(GURL("http://www.google.fr"), 0, "Le Google", "fr", 553 SimulateOnPageContents(GURL("http://www.google.fr"), 0, "Le Google", "fr",
556 true); 554 true);
557 EXPECT_EQ(0, contents()->infobar_delegate_count()); 555 EXPECT_EQ(0, contents()->infobar_delegate_count());
558 556
559 // Do the same steps but simulate closing the infobar this time. 557 // Do the same steps but simulate closing the infobar this time.
560 SimulateNavigation(GURL("http://www.youtube.fr"), 1, "Le YouTube", "fr", 558 SimulateNavigation(GURL("http://www.youtube.fr"), "Le YouTube", "fr",
561 true); 559 true);
562 EXPECT_TRUE(CloseTranslateInfoBar()); 560 EXPECT_TRUE(CloseTranslateInfoBar());
563 EXPECT_EQ(0, contents()->infobar_delegate_count()); 561 EXPECT_EQ(0, contents()->infobar_delegate_count());
564 SimulateOnPageContents(GURL("http://www.youtube.fr"), 1, "Le YouTube", "fr", 562 SimulateOnPageContents(GURL("http://www.youtube.fr"), 1, "Le YouTube", "fr",
565 true); 563 true);
566 EXPECT_EQ(0, contents()->infobar_delegate_count()); 564 EXPECT_EQ(0, contents()->infobar_delegate_count());
567 } 565 }
568 566
569 // Test that reloading the page brings back the infobar. 567 // Test that reloading the page brings back the infobar.
570 TEST_F(TranslateManagerTest, Reload) { 568 TEST_F(TranslateManagerTest, Reload) {
571 // Simulate navigating to a page and getting its language. 569 // Simulate navigating to a page and getting its language.
572 SimulateNavigation(GURL("http://www.google.fr"), 0, "Le Google", "fr", true); 570 SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
573 571
574 // Close the infobar. 572 // Close the infobar.
575 EXPECT_TRUE(CloseTranslateInfoBar()); 573 EXPECT_TRUE(CloseTranslateInfoBar());
576 574
577 // Reload should bring back the infobar. 575 // Reload should bring back the infobar.
578 NavEntryCommittedObserver nav_observer(contents()); 576 NavEntryCommittedObserver nav_observer(contents());
579 Reload(); 577 Reload();
580 578
581 // Ensures it is really handled a reload. 579 // Ensures it is really handled a reload.
582 const NavigationController::LoadCommittedDetails& nav_details = 580 const NavigationController::LoadCommittedDetails& nav_details =
583 nav_observer.get_load_commited_details(); 581 nav_observer.get_load_commited_details();
584 EXPECT_TRUE(nav_details.entry != NULL); // There was a navigation. 582 EXPECT_TRUE(nav_details.entry != NULL); // There was a navigation.
585 EXPECT_EQ(NavigationType::EXISTING_PAGE, nav_details.type); 583 EXPECT_EQ(NavigationType::EXISTING_PAGE, nav_details.type);
586 584
587 // The TranslateManager class processes the navigation entry committed 585 // The TranslateManager class processes the navigation entry committed
588 // notification in a posted task; process that task. 586 // notification in a posted task; process that task.
589 MessageLoop::current()->RunAllPending(); 587 MessageLoop::current()->RunAllPending();
590 EXPECT_TRUE(GetTranslateInfoBar() != NULL); 588 EXPECT_TRUE(GetTranslateInfoBar() != NULL);
591 } 589 }
592 590
593 // Test that reloading the page by way of typing again the URL in the 591 // Test that reloading the page by way of typing again the URL in the
594 // location bar brings back the infobar. 592 // location bar brings back the infobar.
595 TEST_F(TranslateManagerTest, ReloadFromLocationBar) { 593 TEST_F(TranslateManagerTest, ReloadFromLocationBar) {
596 GURL url("http://www.google.fr"); 594 GURL url("http://www.google.fr");
597 595
598 // Simulate navigating to a page and getting its language. 596 // Simulate navigating to a page and getting its language.
599 SimulateNavigation(url, 0, "Le Google", "fr", true); 597 SimulateNavigation(url, "Le Google", "fr", true);
600 598
601 // Close the infobar. 599 // Close the infobar.
602 EXPECT_TRUE(CloseTranslateInfoBar()); 600 EXPECT_TRUE(CloseTranslateInfoBar());
603 601
604 // Create a pending navigation and simulate a page load. That should be the 602 // Create a pending navigation and simulate a page load. That should be the
605 // equivalent of typing the URL again in the location bar. 603 // equivalent of typing the URL again in the location bar.
606 NavEntryCommittedObserver nav_observer(contents()); 604 NavEntryCommittedObserver nav_observer(contents());
607 contents()->controller().LoadURL(url, GURL(), PageTransition::TYPED); 605 contents()->controller().LoadURL(url, GURL(), PageTransition::TYPED);
608 rvh()->SendNavigate(0, url); 606 rvh()->SendNavigate(0, url);
609 607
610 // Test that we are really getting a same page navigation, the test would be 608 // Test that we are really getting a same page navigation, the test would be
611 // useless if it was not the case. 609 // useless if it was not the case.
612 const NavigationController::LoadCommittedDetails& nav_details = 610 const NavigationController::LoadCommittedDetails& nav_details =
613 nav_observer.get_load_commited_details(); 611 nav_observer.get_load_commited_details();
614 EXPECT_TRUE(nav_details.entry != NULL); // There was a navigation. 612 EXPECT_TRUE(nav_details.entry != NULL); // There was a navigation.
615 EXPECT_EQ(NavigationType::SAME_PAGE, nav_details.type); 613 EXPECT_EQ(NavigationType::SAME_PAGE, nav_details.type);
616 614
617 // The TranslateManager class processes the navigation entry committed 615 // The TranslateManager class processes the navigation entry committed
618 // notification in a posted task; process that task. 616 // notification in a posted task; process that task.
619 MessageLoop::current()->RunAllPending(); 617 MessageLoop::current()->RunAllPending();
620 EXPECT_TRUE(GetTranslateInfoBar() != NULL); 618 EXPECT_TRUE(GetTranslateInfoBar() != NULL);
621 } 619 }
622 620
623 // Tests that a closed translate infobar does not reappear when navigating 621 // Tests that a closed translate infobar does not reappear when navigating
624 // in-page. 622 // in-page.
625 TEST_F(TranslateManagerTest, CloseInfoBarInPageNavigation) { 623 TEST_F(TranslateManagerTest, CloseInfoBarInPageNavigation) {
626 // Simulate navigating to a page and getting its language. 624 // Simulate navigating to a page and getting its language.
627 SimulateNavigation(GURL("http://www.google.fr"), 0, "Le Google", "fr", true); 625 SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
628 626
629 // Close the infobar. 627 // Close the infobar.
630 EXPECT_TRUE(CloseTranslateInfoBar()); 628 EXPECT_TRUE(CloseTranslateInfoBar());
631 629
632 // Navigate in page, no infobar should be shown. 630 // Navigate in page, no infobar should be shown.
633 SimulateNavigation(GURL("http://www.google.fr/#ref1"), 0, "Le Google", "fr", 631 SimulateNavigation(GURL("http://www.google.fr/#ref1"), "Le Google", "fr",
634 true); 632 true);
635 EXPECT_TRUE(GetTranslateInfoBar() == NULL); 633 EXPECT_TRUE(GetTranslateInfoBar() == NULL);
636 634
637 // Navigate out of page, a new infobar should show. 635 // Navigate out of page, a new infobar should show.
638 SimulateNavigation(GURL("http://www.google.fr/foot"), 0, "Le Google", "fr", 636 SimulateNavigation(GURL("http://www.google.fr/foot"), "Le Google", "fr",
639 true); 637 true);
640 EXPECT_TRUE(GetTranslateInfoBar() != NULL); 638 EXPECT_TRUE(GetTranslateInfoBar() != NULL);
641 } 639 }
642 640
643 // Tests that a closed translate infobar does not reappear when navigating 641 // Tests that a closed translate infobar does not reappear when navigating
644 // in a subframe. (http://crbug.com/48215) 642 // in a subframe. (http://crbug.com/48215)
645 TEST_F(TranslateManagerTest, CloseInfoBarInSubframeNavigation) { 643 TEST_F(TranslateManagerTest, CloseInfoBarInSubframeNavigation) {
646 // Simulate navigating to a page and getting its language. 644 // Simulate navigating to a page and getting its language.
647 SimulateNavigation(GURL("http://www.google.fr"), 0, "Le Google", "fr", true); 645 SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
648 646
649 // Close the infobar. 647 // Close the infobar.
650 EXPECT_TRUE(CloseTranslateInfoBar()); 648 EXPECT_TRUE(CloseTranslateInfoBar());
651 649
652 // Simulate a sub-frame auto-navigating. 650 // Simulate a sub-frame auto-navigating.
653 rvh()->SendNavigateWithTransition(1, GURL("http://pub.com"), 651 rvh()->SendNavigateWithTransition(1, GURL("http://pub.com"),
654 PageTransition::AUTO_SUBFRAME); 652 PageTransition::AUTO_SUBFRAME);
655 EXPECT_TRUE(GetTranslateInfoBar() == NULL); 653 EXPECT_TRUE(GetTranslateInfoBar() == NULL);
656 654
657 // Simulate the user navigating in a sub-frame. 655 // Simulate the user navigating in a sub-frame.
658 rvh()->SendNavigateWithTransition(2, GURL("http://pub.com"), 656 rvh()->SendNavigateWithTransition(2, GURL("http://pub.com"),
659 PageTransition::MANUAL_SUBFRAME); 657 PageTransition::MANUAL_SUBFRAME);
660 EXPECT_TRUE(GetTranslateInfoBar() == NULL); 658 EXPECT_TRUE(GetTranslateInfoBar() == NULL);
661 659
662 // Navigate out of page, a new infobar should show. 660 // Navigate out of page, a new infobar should show.
663 SimulateNavigation(GURL("http://www.google.fr/foot"), 3, "Le Google", "fr", 661 SimulateNavigation(GURL("http://www.google.fr/foot"), "Le Google", "fr",
664 true); 662 true);
665 EXPECT_TRUE(GetTranslateInfoBar() != NULL); 663 EXPECT_TRUE(GetTranslateInfoBar() != NULL);
666 } 664 }
667 665
668 666
669 667
670 // Tests that denying translation is sticky when navigating in page. 668 // Tests that denying translation is sticky when navigating in page.
671 TEST_F(TranslateManagerTest, DenyTranslateInPageNavigation) { 669 TEST_F(TranslateManagerTest, DenyTranslateInPageNavigation) {
672 // Simulate navigating to a page and getting its language. 670 // Simulate navigating to a page and getting its language.
673 SimulateNavigation(GURL("http://www.google.fr"), 0, "Le Google", "fr", true); 671 SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
674 672
675 // Simulate clicking 'Nope' (don't translate). 673 // Simulate clicking 'Nope' (don't translate).
676 EXPECT_TRUE(DenyTranslation()); 674 EXPECT_TRUE(DenyTranslation());
677 675
678 // Navigate in page, no infobar should be shown. 676 // Navigate in page, no infobar should be shown.
679 SimulateNavigation(GURL("http://www.google.fr/#ref1"), 0, "Le Google", "fr", 677 SimulateNavigation(GURL("http://www.google.fr/#ref1"), "Le Google", "fr",
680 true); 678 true);
681 EXPECT_TRUE(GetTranslateInfoBar() == NULL); 679 EXPECT_TRUE(GetTranslateInfoBar() == NULL);
682 680
683 // Navigate out of page, a new infobar should show. 681 // Navigate out of page, a new infobar should show.
684 SimulateNavigation(GURL("http://www.google.fr/foot"), 0, "Le Google", "fr", 682 SimulateNavigation(GURL("http://www.google.fr/foot"), "Le Google", "fr",
685 true); 683 true);
686 EXPECT_TRUE(GetTranslateInfoBar() != NULL); 684 EXPECT_TRUE(GetTranslateInfoBar() != NULL);
687 } 685 }
688 686
689 // Tests that after translating and closing the infobar, the infobar does not 687 // Tests that after translating and closing the infobar, the infobar does not
690 // return when navigating in page. 688 // return when navigating in page.
691 TEST_F(TranslateManagerTest, TranslateCloseInfoBarInPageNavigation) { 689 TEST_F(TranslateManagerTest, TranslateCloseInfoBarInPageNavigation) {
692 // Simulate navigating to a page and getting its language. 690 // Simulate navigating to a page and getting its language.
693 SimulateNavigation(GURL("http://www.google.fr"), 0, "Le Google", "fr", true); 691 SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
694 692
695 // Simulate the user translating. 693 // Simulate the user translating.
696 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); 694 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
697 ASSERT_TRUE(infobar != NULL); 695 ASSERT_TRUE(infobar != NULL);
698 infobar->Translate(); 696 infobar->Translate();
699 SimulateURLFetch(true); // Simulate the translate script being retrieved. 697 SimulateURLFetch(true); // Simulate the translate script being retrieved.
700 rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "fr", "en", 698 rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "fr", "en",
701 TranslateErrors::NONE)); 699 TranslateErrors::NONE));
702 700
703 // Close the infobar. 701 // Close the infobar.
704 EXPECT_TRUE(CloseTranslateInfoBar()); 702 EXPECT_TRUE(CloseTranslateInfoBar());
705 703
706 // Navigate in page, no infobar should be shown. 704 // Navigate in page, no infobar should be shown.
707 SimulateNavigation(GURL("http://www.google.fr/#ref1"), 0, "Le Google", "fr", 705 SimulateNavigation(GURL("http://www.google.fr/#ref1"), "Le Google", "fr",
708 true); 706 true);
709 EXPECT_TRUE(GetTranslateInfoBar() == NULL); 707 EXPECT_TRUE(GetTranslateInfoBar() == NULL);
710 708
711 // Navigate out of page, a new infobar should show. 709 // Navigate out of page, a new infobar should show.
712 // Note that we navigate to a page in a different language so we don't trigger 710 // Note that we navigate to a page in a different language so we don't trigger
713 // the auto-translate feature (it would translate the page automatically and 711 // the auto-translate feature (it would translate the page automatically and
714 // the before translate inforbar would not be shown). 712 // the before translate inforbar would not be shown).
715 SimulateNavigation(GURL("http://www.google.de"), 0, "Das Google", "de", true); 713 SimulateNavigation(GURL("http://www.google.de"), "Das Google", "de", true);
716 EXPECT_TRUE(GetTranslateInfoBar() != NULL); 714 EXPECT_TRUE(GetTranslateInfoBar() != NULL);
717 } 715 }
718 716
719 // Tests that the after translate the infobar still shows when navigating 717 // Tests that the after translate the infobar still shows when navigating
720 // in-page. 718 // in-page.
721 TEST_F(TranslateManagerTest, TranslateInPageNavigation) { 719 TEST_F(TranslateManagerTest, TranslateInPageNavigation) {
722 // Simulate navigating to a page and getting its language. 720 // Simulate navigating to a page and getting its language.
723 SimulateNavigation(GURL("http://www.google.fr"), 0, "Le Google", "fr", true); 721 SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
724 722
725 // Simulate the user translating. 723 // Simulate the user translating.
726 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); 724 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
727 ASSERT_TRUE(infobar != NULL); 725 ASSERT_TRUE(infobar != NULL);
728 infobar->Translate(); 726 infobar->Translate();
729 SimulateURLFetch(true); // Simulate the translate script being retrieved. 727 SimulateURLFetch(true); // Simulate the translate script being retrieved.
730 rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "fr", "en", 728 rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "fr", "en",
731 TranslateErrors::NONE)); 729 TranslateErrors::NONE));
732 // The after translate infobar is showing. 730 // The after translate infobar is showing.
733 infobar = GetTranslateInfoBar(); 731 infobar = GetTranslateInfoBar();
734 ASSERT_TRUE(infobar != NULL); 732 ASSERT_TRUE(infobar != NULL);
735 733
736 // Navigate in page, the same infobar should still be shown. 734 // Navigate in page, the same infobar should still be shown.
737 ClearRemovedInfoBars(); 735 ClearRemovedInfoBars();
738 SimulateNavigation(GURL("http://www.google.fr/#ref1"), 0, "Le Google", "fr", 736 SimulateNavigation(GURL("http://www.google.fr/#ref1"), "Le Google", "fr",
739 true); 737 true);
740 EXPECT_FALSE(InfoBarRemoved()); 738 EXPECT_FALSE(InfoBarRemoved());
741 EXPECT_EQ(infobar, GetTranslateInfoBar()); 739 EXPECT_EQ(infobar, GetTranslateInfoBar());
742 740
743 // Navigate out of page, a new infobar should show. 741 // Navigate out of page, a new infobar should show.
744 // See note in TranslateCloseInfoBarInPageNavigation test on why it is 742 // See note in TranslateCloseInfoBarInPageNavigation test on why it is
745 // important to navigate to a page in a different language for this test. 743 // important to navigate to a page in a different language for this test.
746 SimulateNavigation(GURL("http://www.google.de"), 0, "Das Google", "de", true); 744 SimulateNavigation(GURL("http://www.google.de"), "Das Google", "de", true);
747 // The old infobar is gone. 745 // The old infobar is gone.
748 EXPECT_TRUE(CheckInfoBarRemovedAndReset(infobar)); 746 EXPECT_TRUE(CheckInfoBarRemovedAndReset(infobar));
749 // And there is a new one. 747 // And there is a new one.
750 EXPECT_TRUE(GetTranslateInfoBar() != NULL); 748 EXPECT_TRUE(GetTranslateInfoBar() != NULL);
751 } 749 }
752 750
753 // Tests that no translate infobar is shown when navigating to a page in an 751 // Tests that no translate infobar is shown when navigating to a page in an
754 // unsupported language. 752 // unsupported language.
755 TEST_F(TranslateManagerTest, CLDReportsUnsupportedPageLanguage) { 753 TEST_F(TranslateManagerTest, CLDReportsUnsupportedPageLanguage) {
756 // Simulate navigating to a page and getting an unsupported language. 754 // Simulate navigating to a page and getting an unsupported language.
757 SimulateNavigation(GURL("http://www.google.com"), 0, "Google", "qbz", true); 755 SimulateNavigation(GURL("http://www.google.com"), "Google", "qbz", true);
758 756
759 // No info-bar should be shown. 757 // No info-bar should be shown.
760 EXPECT_TRUE(GetTranslateInfoBar() == NULL); 758 EXPECT_TRUE(GetTranslateInfoBar() == NULL);
761 } 759 }
762 760
763 // Tests that we deal correctly with unsupported languages returned by the 761 // Tests that we deal correctly with unsupported languages returned by the
764 // server. 762 // server.
765 // The translation server might return a language we don't support. 763 // The translation server might return a language we don't support.
766 TEST_F(TranslateManagerTest, ServerReportsUnsupportedLanguage) { 764 TEST_F(TranslateManagerTest, ServerReportsUnsupportedLanguage) {
767 // Simulate navigating to a page and translating it. 765 // Simulate navigating to a page and translating it.
768 SimulateNavigation(GURL("http://mail.google.fr"), 0, "Le Google", "fr", 766 SimulateNavigation(GURL("http://mail.google.fr"), "Le Google", "fr", true);
769 true);
770 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); 767 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
771 ASSERT_TRUE(infobar != NULL); 768 ASSERT_TRUE(infobar != NULL);
772 process()->sink().ClearMessages(); 769 process()->sink().ClearMessages();
773 infobar->Translate(); 770 infobar->Translate();
774 SimulateURLFetch(true); 771 SimulateURLFetch(true);
775 // Simulate the render notifying the translation has been done, but it 772 // Simulate the render notifying the translation has been done, but it
776 // reports a language we don't support. 773 // reports a language we don't support.
777 rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "qbz", "en", 774 rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "qbz", "en",
778 TranslateErrors::NONE)); 775 TranslateErrors::NONE));
779 776
(...skipping 19 matching lines...) Expand all
799 // Tests that no translate infobar is shown when Chrome is in a language that 796 // Tests that no translate infobar is shown when Chrome is in a language that
800 // the translate server does not support. 797 // the translate server does not support.
801 TEST_F(TranslateManagerTest, UnsupportedUILanguage) { 798 TEST_F(TranslateManagerTest, UnsupportedUILanguage) {
802 TestingBrowserProcess* browser_process = 799 TestingBrowserProcess* browser_process =
803 static_cast<TestingBrowserProcess*>(g_browser_process); 800 static_cast<TestingBrowserProcess*>(g_browser_process);
804 std::string original_lang = browser_process->GetApplicationLocale(); 801 std::string original_lang = browser_process->GetApplicationLocale();
805 browser_process->SetApplicationLocale("qbz"); 802 browser_process->SetApplicationLocale("qbz");
806 803
807 // Simulate navigating to a page in a language supported by the translate 804 // Simulate navigating to a page in a language supported by the translate
808 // server. 805 // server.
809 SimulateNavigation(GURL("http://www.google.com"), 0, "Google", "en", true); 806 SimulateNavigation(GURL("http://www.google.com"), "Google", "en", true);
810 807
811 // No info-bar should be shown. 808 // No info-bar should be shown.
812 EXPECT_TRUE(GetTranslateInfoBar() == NULL); 809 EXPECT_TRUE(GetTranslateInfoBar() == NULL);
813 810
814 browser_process->SetApplicationLocale(original_lang); 811 browser_process->SetApplicationLocale(original_lang);
815 } 812 }
816 813
817 // Tests that the translate enabled preference is honored. 814 // Tests that the translate enabled preference is honored.
818 TEST_F(TranslateManagerTest, TranslateEnabledPref) { 815 TEST_F(TranslateManagerTest, TranslateEnabledPref) {
819 // Make sure the pref allows translate. 816 // Make sure the pref allows translate.
820 PrefService* prefs = contents()->profile()->GetPrefs(); 817 PrefService* prefs = contents()->profile()->GetPrefs();
821 prefs->SetBoolean(prefs::kEnableTranslate, true); 818 prefs->SetBoolean(prefs::kEnableTranslate, true);
822 819
823 // Simulate navigating to a page and getting its language. 820 // Simulate navigating to a page and getting its language.
824 SimulateNavigation(GURL("http://www.google.fr"), 0, "Le Google", "fr", true); 821 SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
825 822
826 // An infobar should be shown. 823 // An infobar should be shown.
827 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); 824 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
828 EXPECT_TRUE(infobar != NULL); 825 EXPECT_TRUE(infobar != NULL);
829 826
830 // Disable translate. 827 // Disable translate.
831 prefs->SetBoolean(prefs::kEnableTranslate, false); 828 prefs->SetBoolean(prefs::kEnableTranslate, false);
832 829
833 // Navigate to a new page, that should close the previous infobar. 830 // Navigate to a new page, that should close the previous infobar.
834 GURL url("http://www.youtube.fr"); 831 GURL url("http://www.youtube.fr");
835 NavigateAndCommit(url); 832 NavigateAndCommit(url);
836 infobar = GetTranslateInfoBar(); 833 infobar = GetTranslateInfoBar();
837 EXPECT_TRUE(infobar == NULL); 834 EXPECT_TRUE(infobar == NULL);
838 835
839 // Simulate getting the page contents and language, that should not trigger 836 // Simulate getting the page contents and language, that should not trigger
840 // a translate infobar. 837 // a translate infobar.
841 SimulateOnPageContents(url, 1, "Le YouTube", "fr", true); 838 SimulateOnPageContents(url, 1, "Le YouTube", "fr", true);
842 infobar = GetTranslateInfoBar(); 839 infobar = GetTranslateInfoBar();
843 EXPECT_TRUE(infobar == NULL); 840 EXPECT_TRUE(infobar == NULL);
844 } 841 }
845 842
846 // Tests the "Never translate <language>" pref. 843 // Tests the "Never translate <language>" pref.
847 TEST_F(TranslateManagerTest, NeverTranslateLanguagePref) { 844 TEST_F(TranslateManagerTest, NeverTranslateLanguagePref) {
848 // Simulate navigating to a page and getting its language. 845 // Simulate navigating to a page and getting its language.
849 GURL url("http://www.google.fr"); 846 GURL url("http://www.google.fr");
850 SimulateNavigation(url, 0, "Le Google", "fr", true); 847 SimulateNavigation(url, "Le Google", "fr", true);
851 848
852 // An infobar should be shown. 849 // An infobar should be shown.
853 EXPECT_TRUE(GetTranslateInfoBar() != NULL); 850 EXPECT_TRUE(GetTranslateInfoBar() != NULL);
854 851
855 // Select never translate this language. 852 // Select never translate this language.
856 PrefService* prefs = contents()->profile()->GetPrefs(); 853 PrefService* prefs = contents()->profile()->GetPrefs();
857 prefs->AddPrefObserver(TranslatePrefs::kPrefTranslateLanguageBlacklist, 854 prefs->AddPrefObserver(TranslatePrefs::kPrefTranslateLanguageBlacklist,
858 &pref_observer_); 855 &pref_observer_);
859 TranslatePrefs translate_prefs(prefs); 856 TranslatePrefs translate_prefs(prefs);
860 EXPECT_FALSE(translate_prefs.IsLanguageBlacklisted("fr")); 857 EXPECT_FALSE(translate_prefs.IsLanguageBlacklisted("fr"));
861 EXPECT_TRUE(translate_prefs.CanTranslate(prefs, "fr", url)); 858 EXPECT_TRUE(translate_prefs.CanTranslate(prefs, "fr", url));
862 SetPrefObserverExpectation(TranslatePrefs::kPrefTranslateLanguageBlacklist); 859 SetPrefObserverExpectation(TranslatePrefs::kPrefTranslateLanguageBlacklist);
863 translate_prefs.BlacklistLanguage("fr"); 860 translate_prefs.BlacklistLanguage("fr");
864 EXPECT_TRUE(translate_prefs.IsLanguageBlacklisted("fr")); 861 EXPECT_TRUE(translate_prefs.IsLanguageBlacklisted("fr"));
865 EXPECT_FALSE(translate_prefs.CanTranslate(prefs, "fr", url)); 862 EXPECT_FALSE(translate_prefs.CanTranslate(prefs, "fr", url));
866 863
867 // Close the infobar. 864 // Close the infobar.
868 EXPECT_TRUE(CloseTranslateInfoBar()); 865 EXPECT_TRUE(CloseTranslateInfoBar());
869 866
870 // Navigate to a new page also in French. 867 // Navigate to a new page also in French.
871 SimulateNavigation(GURL("http://wwww.youtube.fr"), 1, "Le YouTube", "fr", 868 SimulateNavigation(GURL("http://wwww.youtube.fr"), "Le YouTube", "fr", true);
872 true);
873 869
874 // There should not be a translate infobar. 870 // There should not be a translate infobar.
875 EXPECT_TRUE(GetTranslateInfoBar() == NULL); 871 EXPECT_TRUE(GetTranslateInfoBar() == NULL);
876 872
877 // Remove the language from the blacklist. 873 // Remove the language from the blacklist.
878 SetPrefObserverExpectation(TranslatePrefs::kPrefTranslateLanguageBlacklist); 874 SetPrefObserverExpectation(TranslatePrefs::kPrefTranslateLanguageBlacklist);
879 translate_prefs.RemoveLanguageFromBlacklist("fr"); 875 translate_prefs.RemoveLanguageFromBlacklist("fr");
880 EXPECT_FALSE(translate_prefs.IsLanguageBlacklisted("fr")); 876 EXPECT_FALSE(translate_prefs.IsLanguageBlacklisted("fr"));
881 EXPECT_TRUE(translate_prefs.CanTranslate(prefs, "fr", url)); 877 EXPECT_TRUE(translate_prefs.CanTranslate(prefs, "fr", url));
882 878
883 // Navigate to a page in French. 879 // Navigate to a page in French.
884 SimulateNavigation(url, 2, "Le Google", "fr", true); 880 SimulateNavigation(url, "Le Google", "fr", true);
885 881
886 // There should be a translate infobar. 882 // There should be a translate infobar.
887 EXPECT_TRUE(GetTranslateInfoBar() != NULL); 883 EXPECT_TRUE(GetTranslateInfoBar() != NULL);
888 prefs->RemovePrefObserver(TranslatePrefs::kPrefTranslateLanguageBlacklist, 884 prefs->RemovePrefObserver(TranslatePrefs::kPrefTranslateLanguageBlacklist,
889 &pref_observer_); 885 &pref_observer_);
890 } 886 }
891 887
892 // Tests the "Never translate this site" pref. 888 // Tests the "Never translate this site" pref.
893 TEST_F(TranslateManagerTest, NeverTranslateSitePref) { 889 TEST_F(TranslateManagerTest, NeverTranslateSitePref) {
894 // Simulate navigating to a page and getting its language. 890 // Simulate navigating to a page and getting its language.
895 GURL url("http://www.google.fr"); 891 GURL url("http://www.google.fr");
896 std::string host(url.host()); 892 std::string host(url.host());
897 SimulateNavigation(url, 0, "Le Google", "fr", true); 893 SimulateNavigation(url, "Le Google", "fr", true);
898 894
899 // An infobar should be shown. 895 // An infobar should be shown.
900 EXPECT_TRUE(GetTranslateInfoBar() != NULL); 896 EXPECT_TRUE(GetTranslateInfoBar() != NULL);
901 897
902 // Select never translate this site. 898 // Select never translate this site.
903 PrefService* prefs = contents()->profile()->GetPrefs(); 899 PrefService* prefs = contents()->profile()->GetPrefs();
904 prefs->AddPrefObserver(TranslatePrefs::kPrefTranslateSiteBlacklist, 900 prefs->AddPrefObserver(TranslatePrefs::kPrefTranslateSiteBlacklist,
905 &pref_observer_); 901 &pref_observer_);
906 TranslatePrefs translate_prefs(prefs); 902 TranslatePrefs translate_prefs(prefs);
907 EXPECT_FALSE(translate_prefs.IsSiteBlacklisted(host)); 903 EXPECT_FALSE(translate_prefs.IsSiteBlacklisted(host));
908 EXPECT_TRUE(translate_prefs.CanTranslate(prefs, "fr", url)); 904 EXPECT_TRUE(translate_prefs.CanTranslate(prefs, "fr", url));
909 SetPrefObserverExpectation(TranslatePrefs::kPrefTranslateSiteBlacklist); 905 SetPrefObserverExpectation(TranslatePrefs::kPrefTranslateSiteBlacklist);
910 translate_prefs.BlacklistSite(host); 906 translate_prefs.BlacklistSite(host);
911 EXPECT_TRUE(translate_prefs.IsSiteBlacklisted(host)); 907 EXPECT_TRUE(translate_prefs.IsSiteBlacklisted(host));
912 EXPECT_FALSE(translate_prefs.CanTranslate(prefs, "fr", url)); 908 EXPECT_FALSE(translate_prefs.CanTranslate(prefs, "fr", url));
913 909
914 // Close the infobar. 910 // Close the infobar.
915 EXPECT_TRUE(CloseTranslateInfoBar()); 911 EXPECT_TRUE(CloseTranslateInfoBar());
916 912
917 // Navigate to a new page also on the same site. 913 // Navigate to a new page also on the same site.
918 SimulateNavigation(GURL("http://www.google.fr/hello"), 1, "Bonjour", "fr", 914 SimulateNavigation(GURL("http://www.google.fr/hello"), "Bonjour", "fr", true);
919 true);
920 915
921 // There should not be a translate infobar. 916 // There should not be a translate infobar.
922 EXPECT_TRUE(GetTranslateInfoBar() == NULL); 917 EXPECT_TRUE(GetTranslateInfoBar() == NULL);
923 918
924 // Remove the site from the blacklist. 919 // Remove the site from the blacklist.
925 SetPrefObserverExpectation(TranslatePrefs::kPrefTranslateSiteBlacklist); 920 SetPrefObserverExpectation(TranslatePrefs::kPrefTranslateSiteBlacklist);
926 translate_prefs.RemoveSiteFromBlacklist(host); 921 translate_prefs.RemoveSiteFromBlacklist(host);
927 EXPECT_FALSE(translate_prefs.IsSiteBlacklisted(host)); 922 EXPECT_FALSE(translate_prefs.IsSiteBlacklisted(host));
928 EXPECT_TRUE(translate_prefs.CanTranslate(prefs, "fr", url)); 923 EXPECT_TRUE(translate_prefs.CanTranslate(prefs, "fr", url));
929 924
930 // Navigate to a page in French. 925 // Navigate to a page in French.
931 SimulateNavigation(url, 0, "Le Google", "fr", true); 926 SimulateNavigation(url, "Le Google", "fr", true);
932 927
933 // There should be a translate infobar. 928 // There should be a translate infobar.
934 EXPECT_TRUE(GetTranslateInfoBar() != NULL); 929 EXPECT_TRUE(GetTranslateInfoBar() != NULL);
935 prefs->RemovePrefObserver(TranslatePrefs::kPrefTranslateSiteBlacklist, 930 prefs->RemovePrefObserver(TranslatePrefs::kPrefTranslateSiteBlacklist,
936 &pref_observer_); 931 &pref_observer_);
937 } 932 }
938 933
939 // Tests the "Always translate this language" pref. 934 // Tests the "Always translate this language" pref.
940 TEST_F(TranslateManagerTest, AlwaysTranslateLanguagePref) { 935 TEST_F(TranslateManagerTest, AlwaysTranslateLanguagePref) {
941 // Select always translate French to English. 936 // Select always translate French to English.
942 PrefService* prefs = contents()->profile()->GetPrefs(); 937 PrefService* prefs = contents()->profile()->GetPrefs();
943 prefs->AddPrefObserver(TranslatePrefs::kPrefTranslateWhitelists, 938 prefs->AddPrefObserver(TranslatePrefs::kPrefTranslateWhitelists,
944 &pref_observer_); 939 &pref_observer_);
945 TranslatePrefs translate_prefs(prefs); 940 TranslatePrefs translate_prefs(prefs);
946 SetPrefObserverExpectation(TranslatePrefs::kPrefTranslateWhitelists); 941 SetPrefObserverExpectation(TranslatePrefs::kPrefTranslateWhitelists);
947 translate_prefs.WhitelistLanguagePair("fr", "en"); 942 translate_prefs.WhitelistLanguagePair("fr", "en");
948 943
949 // Load a page in French. 944 // Load a page in French.
950 SimulateNavigation(GURL("http://www.google.fr"), 0, "Le Google", "fr", true); 945 SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
951 946
952 // It should have triggered an automatic translation to English. 947 // It should have triggered an automatic translation to English.
953 948
954 // The translating infobar should be showing. 949 // The translating infobar should be showing.
955 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); 950 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
956 ASSERT_TRUE(infobar != NULL); 951 ASSERT_TRUE(infobar != NULL);
957 EXPECT_EQ(TranslateInfoBarDelegate::TRANSLATING, infobar->type()); 952 EXPECT_EQ(TranslateInfoBarDelegate::TRANSLATING, infobar->type());
958 953
959 SimulateURLFetch(true); // Simulate the translate script being retrieved. 954 SimulateURLFetch(true); // Simulate the translate script being retrieved.
960 int page_id = 0; 955 int page_id = 0;
961 std::string original_lang, target_lang; 956 std::string original_lang, target_lang;
962 EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang)); 957 EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
963 EXPECT_EQ(0, page_id);
964 EXPECT_EQ("fr", original_lang); 958 EXPECT_EQ("fr", original_lang);
965 EXPECT_EQ("en", target_lang); 959 EXPECT_EQ("en", target_lang);
966 process()->sink().ClearMessages(); 960 process()->sink().ClearMessages();
967 961
968 // Try another language, it should not be autotranslated. 962 // Try another language, it should not be autotranslated.
969 SimulateNavigation(GURL("http://www.google.es"), 1, "El Google", "es", true); 963 SimulateNavigation(GURL("http://www.google.es"), "El Google", "es", true);
970 EXPECT_FALSE(GetTranslateMessage(&page_id, &original_lang, &target_lang)); 964 EXPECT_FALSE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
971 EXPECT_TRUE(GetTranslateInfoBar() != NULL); 965 EXPECT_TRUE(GetTranslateInfoBar() != NULL);
972 EXPECT_TRUE(CloseTranslateInfoBar()); 966 EXPECT_TRUE(CloseTranslateInfoBar());
973 967
974 // Let's switch to incognito mode, it should not be autotranslated in that 968 // Let's switch to incognito mode, it should not be autotranslated in that
975 // case either. 969 // case either.
976 TestingProfile* test_profile = 970 TestingProfile* test_profile =
977 static_cast<TestingProfile*>(contents()->profile()); 971 static_cast<TestingProfile*>(contents()->profile());
978 test_profile->set_off_the_record(true); 972 test_profile->set_off_the_record(true);
979 SimulateNavigation(GURL("http://www.youtube.fr"), 2, "Le YouTube", "fr", 973 SimulateNavigation(GURL("http://www.youtube.fr"), "Le YouTube", "fr", true);
980 true);
981 EXPECT_FALSE(GetTranslateMessage(&page_id, &original_lang, &target_lang)); 974 EXPECT_FALSE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
982 EXPECT_TRUE(GetTranslateInfoBar() != NULL); 975 EXPECT_TRUE(GetTranslateInfoBar() != NULL);
983 EXPECT_TRUE(CloseTranslateInfoBar()); 976 EXPECT_TRUE(CloseTranslateInfoBar());
984 test_profile->set_off_the_record(false); // Get back to non incognito. 977 test_profile->set_off_the_record(false); // Get back to non incognito.
985 978
986 // Now revert the always translate pref and make sure we go back to expected 979 // Now revert the always translate pref and make sure we go back to expected
987 // behavior, which is show a "before translate" infobar. 980 // behavior, which is show a "before translate" infobar.
988 SetPrefObserverExpectation(TranslatePrefs::kPrefTranslateWhitelists); 981 SetPrefObserverExpectation(TranslatePrefs::kPrefTranslateWhitelists);
989 translate_prefs.RemoveLanguagePairFromWhitelist("fr", "en"); 982 translate_prefs.RemoveLanguagePairFromWhitelist("fr", "en");
990 SimulateNavigation(GURL("http://www.google.fr"), 3, "Le Google", "fr", true); 983 SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
991 EXPECT_FALSE(GetTranslateMessage(&page_id, &original_lang, &target_lang)); 984 EXPECT_FALSE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
992 infobar = GetTranslateInfoBar(); 985 infobar = GetTranslateInfoBar();
993 ASSERT_TRUE(infobar != NULL); 986 ASSERT_TRUE(infobar != NULL);
994 EXPECT_EQ(TranslateInfoBarDelegate::BEFORE_TRANSLATE, infobar->type()); 987 EXPECT_EQ(TranslateInfoBarDelegate::BEFORE_TRANSLATE, infobar->type());
995 prefs->RemovePrefObserver(TranslatePrefs::kPrefTranslateWhitelists, 988 prefs->RemovePrefObserver(TranslatePrefs::kPrefTranslateWhitelists,
996 &pref_observer_); 989 &pref_observer_);
997 } 990 }
998 991
999 // Context menu. 992 // Context menu.
1000 TEST_F(TranslateManagerTest, ContextMenu) { 993 TEST_F(TranslateManagerTest, ContextMenu) {
(...skipping 26 matching lines...) Expand all
1027 1020
1028 // That should have triggered a translation. 1021 // That should have triggered a translation.
1029 // The "translating..." infobar should be showing. 1022 // The "translating..." infobar should be showing.
1030 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); 1023 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
1031 ASSERT_TRUE(infobar != NULL); 1024 ASSERT_TRUE(infobar != NULL);
1032 EXPECT_EQ(TranslateInfoBarDelegate::TRANSLATING, infobar->type()); 1025 EXPECT_EQ(TranslateInfoBarDelegate::TRANSLATING, infobar->type());
1033 SimulateURLFetch(true); // Simulate the translate script being retrieved. 1026 SimulateURLFetch(true); // Simulate the translate script being retrieved.
1034 int page_id = 0; 1027 int page_id = 0;
1035 std::string original_lang, target_lang; 1028 std::string original_lang, target_lang;
1036 EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang)); 1029 EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
1037 EXPECT_EQ(0, page_id);
1038 EXPECT_EQ("fr", original_lang); 1030 EXPECT_EQ("fr", original_lang);
1039 EXPECT_EQ("en", target_lang); 1031 EXPECT_EQ("en", target_lang);
1040 process()->sink().ClearMessages(); 1032 process()->sink().ClearMessages();
1041 1033
1042 // This should also have reverted the blacklisting of this site and language. 1034 // This should also have reverted the blacklisting of this site and language.
1043 EXPECT_FALSE(translate_prefs.IsLanguageBlacklisted("fr")); 1035 EXPECT_FALSE(translate_prefs.IsLanguageBlacklisted("fr"));
1044 EXPECT_FALSE(translate_prefs.IsSiteBlacklisted(url.host())); 1036 EXPECT_FALSE(translate_prefs.IsSiteBlacklisted(url.host()));
1045 1037
1046 // Let's simulate the page being translated. 1038 // Let's simulate the page being translated.
1047 rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "fr", "en", 1039 rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "fr", "en",
1048 TranslateErrors::NONE)); 1040 TranslateErrors::NONE));
1049 1041
1050 // The translate menu should now be disabled. 1042 // The translate menu should now be disabled.
1051 menu.reset(TestRenderViewContextMenu::CreateContextMenu(contents())); 1043 menu.reset(TestRenderViewContextMenu::CreateContextMenu(contents()));
1052 menu->Init(); 1044 menu->Init();
1053 EXPECT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_TRANSLATE)); 1045 EXPECT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_TRANSLATE));
1054 EXPECT_FALSE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE)); 1046 EXPECT_FALSE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE));
1055 1047
1056 // Test that selecting translate in the context menu WHILE the page is being 1048 // Test that selecting translate in the context menu WHILE the page is being
1057 // translated does nothing (this could happen if autotranslate kicks-in and 1049 // translated does nothing (this could happen if autotranslate kicks-in and
1058 // the user selects the menu while the translation is being performed). 1050 // the user selects the menu while the translation is being performed).
1059 SimulateNavigation(GURL("http://www.google.es"), 1, "El Google", "es", true); 1051 SimulateNavigation(GURL("http://www.google.es"), "El Google", "es", true);
1060 infobar = GetTranslateInfoBar(); 1052 infobar = GetTranslateInfoBar();
1061 ASSERT_TRUE(infobar != NULL); 1053 ASSERT_TRUE(infobar != NULL);
1062 infobar->Translate(); 1054 infobar->Translate();
1063 EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang)); 1055 EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
1064 EXPECT_EQ(1, page_id);
1065 process()->sink().ClearMessages(); 1056 process()->sink().ClearMessages();
1066 menu.reset(TestRenderViewContextMenu::CreateContextMenu(contents())); 1057 menu.reset(TestRenderViewContextMenu::CreateContextMenu(contents()));
1067 menu->Init(); 1058 menu->Init();
1068 EXPECT_TRUE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE)); 1059 EXPECT_TRUE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE));
1069 menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE); 1060 menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE);
1070 // No message expected since the translation should have been ignored. 1061 // No message expected since the translation should have been ignored.
1071 EXPECT_FALSE(GetTranslateMessage(&page_id, &original_lang, &target_lang)); 1062 EXPECT_FALSE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
1072 1063
1073 // Now test that selecting translate in the context menu AFTER the page has 1064 // Now test that selecting translate in the context menu AFTER the page has
1074 // been translated does nothing. 1065 // been translated does nothing.
1075 SimulateNavigation(GURL("http://www.google.de"), 2, "Das Google", "de", true); 1066 SimulateNavigation(GURL("http://www.google.de"), "Das Google", "de", true);
1076 infobar = GetTranslateInfoBar(); 1067 infobar = GetTranslateInfoBar();
1077 ASSERT_TRUE(infobar != NULL); 1068 ASSERT_TRUE(infobar != NULL);
1078 infobar->Translate(); 1069 infobar->Translate();
1079 EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang)); 1070 EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
1080 EXPECT_EQ(2, page_id);
1081 process()->sink().ClearMessages(); 1071 process()->sink().ClearMessages();
1082 menu.reset(TestRenderViewContextMenu::CreateContextMenu(contents())); 1072 menu.reset(TestRenderViewContextMenu::CreateContextMenu(contents()));
1083 menu->Init(); 1073 menu->Init();
1084 EXPECT_TRUE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE)); 1074 EXPECT_TRUE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE));
1085 rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "de", "en", 1075 rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "de", "en",
1086 TranslateErrors::NONE)); 1076 TranslateErrors::NONE));
1087 menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE); 1077 menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE);
1088 // No message expected since the translation should have been ignored. 1078 // No message expected since the translation should have been ignored.
1089 EXPECT_FALSE(GetTranslateMessage(&page_id, &original_lang, &target_lang)); 1079 EXPECT_FALSE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
1090 1080
1091 // Test that the translate context menu is disabled when the page is in the 1081 // Test that the translate context menu is disabled when the page is in the
1092 // same language as the UI. 1082 // same language as the UI.
1093 SimulateNavigation(url, 0, "Google", "en", true); 1083 SimulateNavigation(url, "Google", "en", true);
1094 menu.reset(TestRenderViewContextMenu::CreateContextMenu(contents())); 1084 menu.reset(TestRenderViewContextMenu::CreateContextMenu(contents()));
1095 menu->Init(); 1085 menu->Init();
1096 EXPECT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_TRANSLATE)); 1086 EXPECT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_TRANSLATE));
1097 EXPECT_FALSE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE)); 1087 EXPECT_FALSE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE));
1098 1088
1099 // Test that the translate context menu is enabled when the page is in an 1089 // Test that the translate context menu is enabled when the page is in an
1100 // unknown language. 1090 // unknown language.
1101 SimulateNavigation(url, 0, "G00g1e", "und", true); 1091 SimulateNavigation(url, "G00g1e", "und", true);
1102 menu.reset(TestRenderViewContextMenu::CreateContextMenu(contents())); 1092 menu.reset(TestRenderViewContextMenu::CreateContextMenu(contents()));
1103 menu->Init(); 1093 menu->Init();
1104 EXPECT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_TRANSLATE)); 1094 EXPECT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_TRANSLATE));
1105 EXPECT_TRUE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE)); 1095 EXPECT_TRUE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE));
1106 1096
1107 // Test that the translate context menu is disabled when the page is in an 1097 // Test that the translate context menu is disabled when the page is in an
1108 // unsupported language. 1098 // unsupported language.
1109 SimulateNavigation(url, 0, "G00g1e", "qbz", true); 1099 SimulateNavigation(url, "G00g1e", "qbz", true);
1110 menu.reset(TestRenderViewContextMenu::CreateContextMenu(contents())); 1100 menu.reset(TestRenderViewContextMenu::CreateContextMenu(contents()));
1111 menu->Init(); 1101 menu->Init();
1112 EXPECT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_TRANSLATE)); 1102 EXPECT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_TRANSLATE));
1113 EXPECT_FALSE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE)); 1103 EXPECT_FALSE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE));
1114 } 1104 }
1115 1105
1116 // Tests that an extra always/never translate button is shown on the "before 1106 // Tests that an extra always/never translate button is shown on the "before
1117 // translate" infobar when the translation is accepted/declined 3 times, 1107 // translate" infobar when the translation is accepted/declined 3 times,
1118 // only when not in incognito mode. 1108 // only when not in incognito mode.
1119 TEST_F(TranslateManagerTest, BeforeTranslateExtraButtons) { 1109 TEST_F(TranslateManagerTest, BeforeTranslateExtraButtons) {
1120 TranslatePrefs translate_prefs(contents()->profile()->GetPrefs()); 1110 TranslatePrefs translate_prefs(contents()->profile()->GetPrefs());
1121 translate_prefs.ResetTranslationAcceptedCount("fr"); 1111 translate_prefs.ResetTranslationAcceptedCount("fr");
1122 translate_prefs.ResetTranslationDeniedCount("fr"); 1112 translate_prefs.ResetTranslationDeniedCount("fr");
1123 translate_prefs.ResetTranslationAcceptedCount("de"); 1113 translate_prefs.ResetTranslationAcceptedCount("de");
1124 translate_prefs.ResetTranslationDeniedCount("de"); 1114 translate_prefs.ResetTranslationDeniedCount("de");
1125 1115
1126 // We'll do 4 times in incognito mode first to make sure the button is not 1116 // We'll do 4 times in incognito mode first to make sure the button is not
1127 // shown in that case, then 4 times in normal mode. 1117 // shown in that case, then 4 times in normal mode.
1128 TranslateInfoBarDelegate* infobar; 1118 TranslateInfoBarDelegate* infobar;
1129 TestingProfile* test_profile = 1119 TestingProfile* test_profile =
1130 static_cast<TestingProfile*>(contents()->profile()); 1120 static_cast<TestingProfile*>(contents()->profile());
1131 test_profile->set_off_the_record(true); 1121 test_profile->set_off_the_record(true);
1132 for (int i = 0; i < 8; ++i) { 1122 for (int i = 0; i < 8; ++i) {
1133 SCOPED_TRACE(::testing::Message::Message() << "Iteration " << i << 1123 SCOPED_TRACE(::testing::Message::Message() << "Iteration " << i <<
1134 " incognito mode=" << test_profile->IsOffTheRecord()); 1124 " incognito mode=" << test_profile->IsOffTheRecord());
1135 SimulateNavigation(GURL("http://www.google.fr"), 1, "Le Google", "fr", 1125 SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
1136 true);
1137 infobar = GetTranslateInfoBar(); 1126 infobar = GetTranslateInfoBar();
1138 ASSERT_TRUE(infobar != NULL); 1127 ASSERT_TRUE(infobar != NULL);
1139 EXPECT_EQ(TranslateInfoBarDelegate::BEFORE_TRANSLATE, infobar->type()); 1128 EXPECT_EQ(TranslateInfoBarDelegate::BEFORE_TRANSLATE, infobar->type());
1140 if (i < 7) { 1129 if (i < 7) {
1141 EXPECT_FALSE(infobar->ShouldShowAlwaysTranslateButton()); 1130 EXPECT_FALSE(infobar->ShouldShowAlwaysTranslateButton());
1142 infobar->Translate(); 1131 infobar->Translate();
1143 process()->sink().ClearMessages(); 1132 process()->sink().ClearMessages();
1144 } else { 1133 } else {
1145 EXPECT_TRUE(infobar->ShouldShowAlwaysTranslateButton()); 1134 EXPECT_TRUE(infobar->ShouldShowAlwaysTranslateButton());
1146 } 1135 }
(...skipping 11 matching lines...) Expand all
1158 std::string original_lang, target_lang; 1147 std::string original_lang, target_lang;
1159 EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang)); 1148 EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
1160 process()->sink().ClearMessages(); 1149 process()->sink().ClearMessages();
1161 1150
1162 // Now test that declining the translation causes a "never translate" button 1151 // Now test that declining the translation causes a "never translate" button
1163 // to be shown (in non incognito mode only). 1152 // to be shown (in non incognito mode only).
1164 test_profile->set_off_the_record(true); 1153 test_profile->set_off_the_record(true);
1165 for (int i = 0; i < 8; ++i) { 1154 for (int i = 0; i < 8; ++i) {
1166 SCOPED_TRACE(::testing::Message::Message() << "Iteration " << i << 1155 SCOPED_TRACE(::testing::Message::Message() << "Iteration " << i <<
1167 " incognito mode=" << test_profile->IsOffTheRecord()); 1156 " incognito mode=" << test_profile->IsOffTheRecord());
1168 SimulateNavigation(GURL("http://www.google.de"), 1, "Das Google", "de", 1157 SimulateNavigation(GURL("http://www.google.de"), "Das Google", "de", true);
1169 true);
1170 infobar = GetTranslateInfoBar(); 1158 infobar = GetTranslateInfoBar();
1171 ASSERT_TRUE(infobar != NULL); 1159 ASSERT_TRUE(infobar != NULL);
1172 EXPECT_EQ(TranslateInfoBarDelegate::BEFORE_TRANSLATE, infobar->type()); 1160 EXPECT_EQ(TranslateInfoBarDelegate::BEFORE_TRANSLATE, infobar->type());
1173 if (i < 7) { 1161 if (i < 7) {
1174 EXPECT_FALSE(infobar->ShouldShowNeverTranslateButton()); 1162 EXPECT_FALSE(infobar->ShouldShowNeverTranslateButton());
1175 infobar->TranslationDeclined(); 1163 infobar->TranslationDeclined();
1176 } else { 1164 } else {
1177 EXPECT_TRUE(infobar->ShouldShowNeverTranslateButton()); 1165 EXPECT_TRUE(infobar->ShouldShowNeverTranslateButton());
1178 } 1166 }
1179 if (i == 3) 1167 if (i == 3)
1180 test_profile->set_off_the_record(false); 1168 test_profile->set_off_the_record(false);
1181 } 1169 }
1182 // Simulate the user pressing "Never translate French". 1170 // Simulate the user pressing "Never translate French".
1183 infobar->NeverTranslatePageLanguage(); 1171 infobar->NeverTranslatePageLanguage();
1184 EXPECT_TRUE(translate_prefs.IsLanguageBlacklisted("de")); 1172 EXPECT_TRUE(translate_prefs.IsLanguageBlacklisted("de"));
1185 // No translation should have occured and the infobar should be gone. 1173 // No translation should have occured and the infobar should be gone.
1186 EXPECT_FALSE(GetTranslateMessage(&page_id, &original_lang, &target_lang)); 1174 EXPECT_FALSE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
1187 process()->sink().ClearMessages(); 1175 process()->sink().ClearMessages();
1188 ASSERT_TRUE(GetTranslateInfoBar() == NULL); 1176 ASSERT_TRUE(GetTranslateInfoBar() == NULL);
1189 } 1177 }
1190 1178
1191 // Tests that we don't show a translate infobar when a page instructs that it 1179 // Tests that we don't show a translate infobar when a page instructs that it
1192 // should not be translated. 1180 // should not be translated.
1193 TEST_F(TranslateManagerTest, NonTranslatablePage) { 1181 TEST_F(TranslateManagerTest, NonTranslatablePage) {
1194 // Simulate navigating to a page. 1182 // Simulate navigating to a page.
1195 SimulateNavigation(GURL("http://mail.google.fr"), 0, "Le Google", "fr", 1183 SimulateNavigation(GURL("http://mail.google.fr"), "Le Google", "fr", false);
1196 false);
1197 1184
1198 // We should not have an infobar. 1185 // We should not have an infobar.
1199 EXPECT_TRUE(GetTranslateInfoBar() == NULL); 1186 EXPECT_TRUE(GetTranslateInfoBar() == NULL);
1200 1187
1201 // The context menu should be disabled. 1188 // The context menu should be disabled.
1202 scoped_ptr<TestRenderViewContextMenu> menu( 1189 scoped_ptr<TestRenderViewContextMenu> menu(
1203 TestRenderViewContextMenu::CreateContextMenu(contents())); 1190 TestRenderViewContextMenu::CreateContextMenu(contents()));
1204 menu->Init(); 1191 menu->Init();
1205 EXPECT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_TRANSLATE)); 1192 EXPECT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_TRANSLATE));
1206 EXPECT_FALSE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE)); 1193 EXPECT_FALSE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE));
1207 } 1194 }
1208 1195
1209 // Tests that the script is expired and refetched as expected. 1196 // Tests that the script is expired and refetched as expected.
1210 TEST_F(TranslateManagerTest, ScriptExpires) { 1197 TEST_F(TranslateManagerTest, ScriptExpires) {
1211 ExpireTranslateScriptImmediately(); 1198 ExpireTranslateScriptImmediately();
1212 1199
1213 // Simulate navigating to a page and translating it. 1200 // Simulate navigating to a page and translating it.
1214 SimulateNavigation(GURL("http://www.google.fr"), 0, "Le Google", "fr", true); 1201 SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
1215 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); 1202 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
1216 ASSERT_TRUE(infobar != NULL); 1203 ASSERT_TRUE(infobar != NULL);
1217 process()->sink().ClearMessages(); 1204 process()->sink().ClearMessages();
1218 infobar->Translate(); 1205 infobar->Translate();
1219 SimulateURLFetch(true); 1206 SimulateURLFetch(true);
1220 rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "fr", "en", 1207 rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "fr", "en",
1221 TranslateErrors::NONE)); 1208 TranslateErrors::NONE));
1222 1209
1223 // A task should have been posted to clear the script, run it. 1210 // A task should have been posted to clear the script, run it.
1224 MessageLoop::current()->RunAllPending(); 1211 MessageLoop::current()->RunAllPending();
1225 1212
1226 // Do another navigation and translation. 1213 // Do another navigation and translation.
1227 SimulateNavigation(GURL("http://www.google.es"), 1, "El Google", "es", true); 1214 SimulateNavigation(GURL("http://www.google.es"), "El Google", "es", true);
1228 infobar = GetTranslateInfoBar(); 1215 infobar = GetTranslateInfoBar();
1229 ASSERT_TRUE(infobar != NULL); 1216 ASSERT_TRUE(infobar != NULL);
1230 process()->sink().ClearMessages(); 1217 process()->sink().ClearMessages();
1231 infobar->Translate(); 1218 infobar->Translate();
1232 // If we don't simulate the URL fetch, the TranslateManager should be waiting 1219 // If we don't simulate the URL fetch, the TranslateManager should be waiting
1233 // for the script and no message should have been sent to the renderer. 1220 // for the script and no message should have been sent to the renderer.
1234 EXPECT_TRUE( 1221 EXPECT_TRUE(
1235 process()->sink().GetFirstMessageMatching(ViewMsg_TranslatePage::ID) == 1222 process()->sink().GetFirstMessageMatching(ViewMsg_TranslatePage::ID) ==
1236 NULL); 1223 NULL);
1237 // Now simulate the URL fetch. 1224 // Now simulate the URL fetch.
1238 SimulateURLFetch(true); 1225 SimulateURLFetch(true);
1239 // Now the message should have been sent. 1226 // Now the message should have been sent.
1240 int page_id = 0; 1227 int page_id = 0;
1241 std::string original_lang, target_lang; 1228 std::string original_lang, target_lang;
1242 EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang)); 1229 EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
1243 EXPECT_EQ(1, page_id);
1244 EXPECT_EQ("es", original_lang); 1230 EXPECT_EQ("es", original_lang);
1245 EXPECT_EQ("en", target_lang); 1231 EXPECT_EQ("en", target_lang);
1246 } 1232 }
OLDNEW
« no previous file with comments | « chrome/browser/tab_contents/test_tab_contents.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698