Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 | 5 |
| 6 #include <algorithm> | 6 #include <algorithm> |
| 7 #include <set> | 7 #include <set> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
| 11 #include "base/stringprintf.h" | 11 #include "base/stringprintf.h" |
| 12 #include "chrome/app/chrome_command_ids.h" | 12 #include "chrome/app/chrome_command_ids.h" |
| 13 #include "chrome/browser/infobars/infobar_tab_helper.h" | |
| 13 #include "chrome/browser/prefs/pref_change_registrar.h" | 14 #include "chrome/browser/prefs/pref_change_registrar.h" |
| 14 #include "chrome/browser/prefs/pref_service.h" | 15 #include "chrome/browser/prefs/pref_service.h" |
| 15 #include "chrome/browser/tab_contents/infobar.h" | 16 #include "chrome/browser/tab_contents/infobar.h" |
| 16 #include "chrome/browser/tab_contents/render_view_context_menu.h" | 17 #include "chrome/browser/tab_contents/render_view_context_menu.h" |
| 17 #include "chrome/browser/translate/translate_infobar_delegate.h" | 18 #include "chrome/browser/translate/translate_infobar_delegate.h" |
| 18 #include "chrome/browser/translate/translate_manager.h" | 19 #include "chrome/browser/translate/translate_manager.h" |
| 19 #include "chrome/browser/translate/translate_prefs.h" | 20 #include "chrome/browser/translate/translate_prefs.h" |
| 20 #include "chrome/browser/ui/tab_contents/test_tab_contents_wrapper.h" | 21 #include "chrome/browser/ui/tab_contents/test_tab_contents_wrapper.h" |
| 21 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" | 22 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
| 22 #include "chrome/common/chrome_notification_types.h" | 23 #include "chrome/common/chrome_notification_types.h" |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 83 if (original_lang) | 84 if (original_lang) |
| 84 *original_lang = translate_param.c; | 85 *original_lang = translate_param.c; |
| 85 if (target_lang) | 86 if (target_lang) |
| 86 *target_lang = translate_param.d; | 87 *target_lang = translate_param.d; |
| 87 return true; | 88 return true; |
| 88 } | 89 } |
| 89 | 90 |
| 90 // Returns the translate infobar if there is 1 infobar and it is a translate | 91 // Returns the translate infobar if there is 1 infobar and it is a translate |
| 91 // infobar. | 92 // infobar. |
| 92 TranslateInfoBarDelegate* GetTranslateInfoBar() { | 93 TranslateInfoBarDelegate* GetTranslateInfoBar() { |
| 93 return (contents_wrapper()->infobar_count() == 1) ? | 94 return (contents_wrapper()->infobar_tab_helper()->infobar_count() == 1) ? |
|
Peter Kasting
2011/08/31 18:47:32
Nit: Factor this infobar_tab_helper() out to a tem
| |
| 94 contents_wrapper()->GetInfoBarDelegateAt(0)-> | 95 contents_wrapper()->infobar_tab_helper()->GetInfoBarDelegateAt(0)-> |
| 95 AsTranslateInfoBarDelegate() : NULL; | 96 AsTranslateInfoBarDelegate() : NULL; |
| 96 } | 97 } |
| 97 | 98 |
| 98 // If there is 1 infobar and it is a translate infobar, closes it and returns | 99 // If there is 1 infobar and it is a translate infobar, closes it and returns |
| 99 // true. Returns false otherwise. | 100 // true. Returns false otherwise. |
| 100 bool CloseTranslateInfoBar() { | 101 bool CloseTranslateInfoBar() { |
| 101 InfoBarDelegate* infobar = GetTranslateInfoBar(); | 102 InfoBarDelegate* infobar = GetTranslateInfoBar(); |
| 102 if (!infobar) | 103 if (!infobar) |
| 103 return false; | 104 return false; |
| 104 infobar->InfoBarDismissed(); // Simulates closing the infobar. | 105 infobar->InfoBarDismissed(); // Simulates closing the infobar. |
| 105 contents_wrapper()->RemoveInfoBar(infobar); | 106 contents_wrapper()->infobar_tab_helper()->RemoveInfoBar(infobar); |
| 106 return true; | 107 return true; |
| 107 } | 108 } |
| 108 | 109 |
| 109 // Checks whether |infobar| has been removed and clears the removed infobar | 110 // Checks whether |infobar| has been removed and clears the removed infobar |
| 110 // list. | 111 // list. |
| 111 bool CheckInfoBarRemovedAndReset(InfoBarDelegate* delegate) { | 112 bool CheckInfoBarRemovedAndReset(InfoBarDelegate* delegate) { |
| 112 bool found = removed_infobars_.count(delegate) != 0; | 113 bool found = removed_infobars_.count(delegate) != 0; |
| 113 removed_infobars_.clear(); | 114 removed_infobars_.clear(); |
| 114 return found; | 115 return found; |
| 115 } | 116 } |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 128 TranslateManager::GetInstance()->set_translate_script_expiration_delay(0); | 129 TranslateManager::GetInstance()->set_translate_script_expiration_delay(0); |
| 129 } | 130 } |
| 130 | 131 |
| 131 // If there is 1 infobar and it is a translate infobar, deny translation and | 132 // If there is 1 infobar and it is a translate infobar, deny translation and |
| 132 // returns true. Returns false otherwise. | 133 // returns true. Returns false otherwise. |
| 133 bool DenyTranslation() { | 134 bool DenyTranslation() { |
| 134 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); | 135 TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
| 135 if (!infobar) | 136 if (!infobar) |
| 136 return false; | 137 return false; |
| 137 infobar->TranslationDeclined(); | 138 infobar->TranslationDeclined(); |
| 138 contents_wrapper()->RemoveInfoBar(infobar); | 139 contents_wrapper()->infobar_tab_helper()->RemoveInfoBar(infobar); |
| 139 return true; | 140 return true; |
| 140 } | 141 } |
| 141 | 142 |
| 142 virtual void Observe(int type, | 143 virtual void Observe(int type, |
| 143 const NotificationSource& source, | 144 const NotificationSource& source, |
| 144 const NotificationDetails& details) { | 145 const NotificationDetails& details) { |
| 145 DCHECK_EQ(chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, type); | 146 DCHECK_EQ(chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, type); |
| 146 removed_infobars_.insert(Details<InfoBarRemovedDetails>(details)->first); | 147 removed_infobars_.insert(Details<InfoBarRemovedDetails>(details)->first); |
| 147 } | 148 } |
| 148 | 149 |
| (...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 625 EXPECT_FALSE(GetTranslateMessage(&page_id, &original_lang, &target_lang)); | 626 EXPECT_FALSE(GetTranslateMessage(&page_id, &original_lang, &target_lang)); |
| 626 } | 627 } |
| 627 | 628 |
| 628 // Tests that multiple OnPageContents do not cause multiple infobars. | 629 // Tests that multiple OnPageContents do not cause multiple infobars. |
| 629 TEST_F(TranslateManagerTest, MultipleOnPageContents) { | 630 TEST_F(TranslateManagerTest, MultipleOnPageContents) { |
| 630 // Simulate navigating to a page and getting its language. | 631 // Simulate navigating to a page and getting its language. |
| 631 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); | 632 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
| 632 | 633 |
| 633 // Simulate clicking 'Nope' (don't translate). | 634 // Simulate clicking 'Nope' (don't translate). |
| 634 EXPECT_TRUE(DenyTranslation()); | 635 EXPECT_TRUE(DenyTranslation()); |
| 635 EXPECT_EQ(0U, contents_wrapper()->infobar_count()); | 636 EXPECT_EQ(0U, contents_wrapper()->infobar_tab_helper()->infobar_count()); |
|
Peter Kasting
2011/08/31 18:47:32
Nit: Factor this infobar_tab_helper() out to a tem
| |
| 636 | 637 |
| 637 // Send a new PageContents, we should not show an infobar. | 638 // Send a new PageContents, we should not show an infobar. |
| 638 SimulateOnTranslateLanguageDetermined("fr", true); | 639 SimulateOnTranslateLanguageDetermined("fr", true); |
| 639 EXPECT_EQ(0U, contents_wrapper()->infobar_count()); | 640 EXPECT_EQ(0U, contents_wrapper()->infobar_tab_helper()->infobar_count()); |
| 640 | 641 |
| 641 // Do the same steps but simulate closing the infobar this time. | 642 // Do the same steps but simulate closing the infobar this time. |
| 642 SimulateNavigation(GURL("http://www.youtube.fr"), "fr", true); | 643 SimulateNavigation(GURL("http://www.youtube.fr"), "fr", true); |
| 643 EXPECT_TRUE(CloseTranslateInfoBar()); | 644 EXPECT_TRUE(CloseTranslateInfoBar()); |
| 644 EXPECT_EQ(0U, contents_wrapper()->infobar_count()); | 645 EXPECT_EQ(0U, contents_wrapper()->infobar_tab_helper()->infobar_count()); |
| 645 SimulateOnTranslateLanguageDetermined("fr", true); | 646 SimulateOnTranslateLanguageDetermined("fr", true); |
| 646 EXPECT_EQ(0U, contents_wrapper()->infobar_count()); | 647 EXPECT_EQ(0U, contents_wrapper()->infobar_tab_helper()->infobar_count()); |
| 647 } | 648 } |
| 648 | 649 |
| 649 // Test that reloading the page brings back the infobar. | 650 // Test that reloading the page brings back the infobar. |
| 650 TEST_F(TranslateManagerTest, Reload) { | 651 TEST_F(TranslateManagerTest, Reload) { |
| 651 // Simulate navigating to a page and getting its language. | 652 // Simulate navigating to a page and getting its language. |
| 652 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); | 653 SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
| 653 | 654 |
| 654 // Close the infobar. | 655 // Close the infobar. |
| 655 EXPECT_TRUE(CloseTranslateInfoBar()); | 656 EXPECT_TRUE(CloseTranslateInfoBar()); |
| 656 | 657 |
| (...skipping 671 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1328 NULL); | 1329 NULL); |
| 1329 // Now simulate the URL fetch. | 1330 // Now simulate the URL fetch. |
| 1330 SimulateTranslateScriptURLFetch(true); | 1331 SimulateTranslateScriptURLFetch(true); |
| 1331 // Now the message should have been sent. | 1332 // Now the message should have been sent. |
| 1332 int page_id = 0; | 1333 int page_id = 0; |
| 1333 std::string original_lang, target_lang; | 1334 std::string original_lang, target_lang; |
| 1334 EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang)); | 1335 EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang)); |
| 1335 EXPECT_EQ("es", original_lang); | 1336 EXPECT_EQ("es", original_lang); |
| 1336 EXPECT_EQ("en", target_lang); | 1337 EXPECT_EQ("en", target_lang); |
| 1337 } | 1338 } |
| OLD | NEW |