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

Unified Diff: chrome/browser/translate/translate_manager_unittest.cc

Issue 6532034: GTTF: Use a fresh TestingBrowserProcess for each test, part #2 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: '' Created 9 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/translate/translate_manager_browsertest.cc ('k') | chrome/chrome_tests.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/translate/translate_manager_unittest.cc
===================================================================
--- chrome/browser/translate/translate_manager_unittest.cc (revision 75925)
+++ chrome/browser/translate/translate_manager_unittest.cc (working copy)
@@ -1,1230 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-
-#include <set>
-
-#include "base/utf_string_conversions.h"
-#include "chrome/app/chrome_command_ids.h"
-#include "chrome/browser/prefs/pref_service.h"
-#include "chrome/browser/prefs/pref_change_registrar.h"
-#include "chrome/browser/tab_contents/render_view_context_menu.h"
-#include "chrome/browser/translate/translate_infobar_delegate.h"
-#include "chrome/browser/translate/translate_manager.h"
-#include "chrome/browser/translate/translate_prefs.h"
-#include "chrome/common/notification_details.h"
-#include "chrome/common/notification_observer_mock.h"
-#include "chrome/common/notification_registrar.h"
-#include "chrome/common/notification_type.h"
-#include "chrome/common/pref_names.h"
-#include "chrome/common/render_messages.h"
-#include "chrome/common/net/test_url_fetcher_factory.h"
-#include "chrome/test/testing_browser_process.h"
-#include "chrome/test/testing_profile.h"
-#include "content/browser/renderer_host/mock_render_process_host.h"
-#include "content/browser/renderer_host/test_render_view_host.h"
-#include "content/browser/tab_contents/navigation_controller.h"
-#include "content/browser/tab_contents/test_tab_contents.h"
-#include "grit/generated_resources.h"
-#include "ipc/ipc_test_sink.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "third_party/cld/languages/public/languages.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebContextMenuData.h"
-
-using testing::_;
-using testing::Pointee;
-using testing::Property;
-using WebKit::WebContextMenuData;
-
-class TranslateManagerTest : public RenderViewHostTestHarness,
- public NotificationObserver {
- public:
- TranslateManagerTest() {}
-
- // Simluates navigating to a page and getting the page contents and language
- // for that navigation.
- void SimulateNavigation(const GURL& url,
- const std::string& contents,
- const std::string& lang,
- bool page_translatable) {
- NavigateAndCommit(url);
- int page_id = RenderViewHostTestHarness::contents()->controller().
- GetLastCommittedEntry()->page_id();
- SimulateOnPageContents(url, page_id, contents, lang, page_translatable);
- }
-
- void SimulateOnPageContents(const GURL& url, int page_id,
- const std::string& contents,
- const std::string& lang,
- bool page_translatable) {
- rvh()->TestOnMessageReceived(ViewHostMsg_PageContents(0, url, page_id,
- UTF8ToUTF16(contents),
- lang,
- page_translatable));
- }
-
- bool GetTranslateMessage(int* page_id,
- std::string* original_lang,
- std::string* target_lang) {
- const IPC::Message* message =
- process()->sink().GetFirstMessageMatching(ViewMsg_TranslatePage::ID);
- if (!message)
- return false;
- Tuple4<int, std::string, std::string, std::string> translate_param;
- ViewMsg_TranslatePage::Read(message, &translate_param);
- if (page_id)
- *page_id = translate_param.a;
- // Ignore translate_param.b which is the script injected in the page.
- if (original_lang)
- *original_lang = translate_param.c;
- if (target_lang)
- *target_lang = translate_param.d;
- return true;
- }
-
- // Returns the translate infobar if there is 1 infobar and it is a translate
- // infobar.
- TranslateInfoBarDelegate* GetTranslateInfoBar() {
- return (contents()->infobar_count() == 1) ?
- contents()->GetInfoBarDelegateAt(0)->AsTranslateInfoBarDelegate() :
- NULL;
- }
-
- // If there is 1 infobar and it is a translate infobar, closes it and returns
- // true. Returns false otherwise.
- bool CloseTranslateInfoBar() {
- InfoBarDelegate* infobar = GetTranslateInfoBar();
- if (!infobar)
- return false;
- infobar->InfoBarDismissed(); // Simulates closing the infobar.
- contents()->RemoveInfoBar(infobar);
- return true;
- }
-
- // Checks whether |infobar| has been removed and clears the removed infobar
- // list.
- bool CheckInfoBarRemovedAndReset(InfoBarDelegate* delegate) {
- bool found = removed_infobars_.count(delegate) != 0;
- removed_infobars_.clear();
- return found;
- }
-
- // Returns true if at least one infobar was closed.
- bool InfoBarRemoved() {
- return !removed_infobars_.empty();
- }
-
- // Clears the list of stored removed infobars.
- void ClearRemovedInfoBars() {
- removed_infobars_.clear();
- }
-
- void ExpireTranslateScriptImmediately() {
- TranslateManager::GetInstance()->set_translate_script_expiration_delay(0);
- }
-
- // If there is 1 infobar and it is a translate infobar, deny translation and
- // returns true. Returns false otherwise.
- bool DenyTranslation() {
- TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
- if (!infobar)
- return false;
- infobar->TranslationDeclined();
- contents()->RemoveInfoBar(infobar);
- return true;
- }
-
- virtual void Observe(NotificationType type,
- const NotificationSource& source,
- const NotificationDetails& details) {
- DCHECK_EQ(NotificationType::TAB_CONTENTS_INFOBAR_REMOVED, type.value);
- removed_infobars_.insert(Details<InfoBarDelegate>(details).ptr());
- }
-
- protected:
- virtual void SetUp() {
- URLFetcher::set_factory(&url_fetcher_factory_);
-
- // Access the TranslateManager singleton so it is created before we call
- // RenderViewHostTestHarness::SetUp() to match what's done in Chrome, where
- // the TranslateManager is created before the TabContents. This matters as
- // they both register for similar events and we want the notifications to
- // happen in the same sequence (TranslateManager first, TabContents second).
- // Also clears the translate script so it is fetched everytime and sets the
- // expiration delay to a large value by default (in case it was zeroed in
- // a previous test).
- TranslateManager::GetInstance()->ClearTranslateScript();
- TranslateManager::GetInstance()->
- set_translate_script_expiration_delay(60 * 60 * 1000);
-
- RenderViewHostTestHarness::SetUp();
-
- notification_registrar_.Add(this,
- NotificationType::TAB_CONTENTS_INFOBAR_REMOVED,
- Source<TabContents>(contents()));
- }
-
- virtual void TearDown() {
- process()->sink().ClearMessages();
-
- notification_registrar_.Remove(this,
- NotificationType::TAB_CONTENTS_INFOBAR_REMOVED,
- Source<TabContents>(contents()));
-
- RenderViewHostTestHarness::TearDown();
-
- URLFetcher::set_factory(NULL);
- }
-
- void SimulateURLFetch(bool success) {
- TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0);
- ASSERT_TRUE(fetcher);
- net::URLRequestStatus status;
- status.set_status(success ? net::URLRequestStatus::SUCCESS :
- net::URLRequestStatus::FAILED);
- fetcher->delegate()->OnURLFetchComplete(fetcher, fetcher->original_url(),
- status, success ? 200 : 500,
- ResponseCookies(),
- std::string());
- }
-
- void SetPrefObserverExpectation(const char* path) {
- EXPECT_CALL(
- pref_observer_,
- Observe(NotificationType(NotificationType::PREF_CHANGED),
- _,
- Property(&Details<std::string>::ptr, Pointee(path))));
- }
-
- NotificationObserverMock pref_observer_;
-
- private:
- NotificationRegistrar notification_registrar_;
- TestURLFetcherFactory url_fetcher_factory_;
-
- // The infobars that have been removed.
- // WARNING: the pointers point to deleted objects, use only for comparison.
- std::set<InfoBarDelegate*> removed_infobars_;
-
- DISALLOW_COPY_AND_ASSIGN(TranslateManagerTest);
-};
-
-// An observer that keeps track of whether a navigation entry was committed.
-class NavEntryCommittedObserver : public NotificationObserver {
- public:
- explicit NavEntryCommittedObserver(TabContents* tab_contents) {
- registrar_.Add(this, NotificationType::NAV_ENTRY_COMMITTED,
- Source<NavigationController>(&tab_contents->controller()));
- }
-
- virtual void Observe(NotificationType type,
- const NotificationSource& source,
- const NotificationDetails& details) {
- DCHECK(type == NotificationType::NAV_ENTRY_COMMITTED);
- details_ =
- *(Details<NavigationController::LoadCommittedDetails>(details).ptr());
- }
-
- const NavigationController::LoadCommittedDetails&
- get_load_commited_details() const {
- return details_;
- }
-
- private:
- NavigationController::LoadCommittedDetails details_;
- NotificationRegistrar registrar_;
-
- DISALLOW_COPY_AND_ASSIGN(NavEntryCommittedObserver);
-};
-
-class TestRenderViewContextMenu : public RenderViewContextMenu {
- public:
- static TestRenderViewContextMenu* CreateContextMenu(
- TabContents* tab_contents) {
- ContextMenuParams params;
- params.media_type = WebKit::WebContextMenuData::MediaTypeNone;
- params.x = 0;
- params.y = 0;
- params.is_image_blocked = false;
- params.media_flags = 0;
- params.spellcheck_enabled = false;
- params.is_editable = false;
- params.page_url = tab_contents->controller().GetActiveEntry()->url();
-#if defined(OS_MACOSX)
- params.writing_direction_default = 0;
- params.writing_direction_left_to_right = 0;
- params.writing_direction_right_to_left = 0;
-#endif // OS_MACOSX
- params.edit_flags = WebContextMenuData::CanTranslate;
- return new TestRenderViewContextMenu(tab_contents, params);
- }
-
- bool IsItemPresent(int id) {
- return menu_model_.GetIndexOfCommandId(id) != -1;
- }
-
- virtual void PlatformInit() { }
- virtual bool GetAcceleratorForCommandId(
- int command_id,
- ui::Accelerator* accelerator) { return false; }
-
- private:
- TestRenderViewContextMenu(TabContents* tab_contents,
- const ContextMenuParams& params)
- : RenderViewContextMenu(tab_contents, params) {
- }
-
- DISALLOW_COPY_AND_ASSIGN(TestRenderViewContextMenu);
-};
-
-TEST_F(TranslateManagerTest, NormalTranslate) {
- // Simulate navigating to a page.
- SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
-
- // We should have an infobar.
- TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
- ASSERT_TRUE(infobar != NULL);
- EXPECT_EQ(TranslateInfoBarDelegate::BEFORE_TRANSLATE, infobar->type());
-
- // Simulate clicking translate.
- process()->sink().ClearMessages();
- infobar->Translate();
-
- // The "Translating..." infobar should be showing.
- infobar = GetTranslateInfoBar();
- ASSERT_TRUE(infobar != NULL);
- EXPECT_EQ(TranslateInfoBarDelegate::TRANSLATING, infobar->type());
-
- // Simulate the translate script being retrieved (it only needs to be done
- // once in the test as it is cached).
- SimulateURLFetch(true);
-
- // Test that we sent the right message to the renderer.
- int page_id = 0;
- std::string original_lang, target_lang;
- EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
- EXPECT_EQ("fr", original_lang);
- EXPECT_EQ("en", target_lang);
-
- // Simulate the render notifying the translation has been done.
- rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "fr", "en",
- TranslateErrors::NONE));
-
- // The after translate infobar should be showing.
- infobar = GetTranslateInfoBar();
- ASSERT_TRUE(infobar != NULL);
- EXPECT_EQ(TranslateInfoBarDelegate::AFTER_TRANSLATE, infobar->type());
-
- // Simulate changing the original language, this should trigger a translation.
- process()->sink().ClearMessages();
- std::string new_original_lang = infobar->GetLanguageCodeAt(0);
- infobar->SetOriginalLanguage(0);
- EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
- EXPECT_EQ(new_original_lang, original_lang);
- EXPECT_EQ("en", target_lang);
- // Simulate the render notifying the translation has been done.
- rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0,
- new_original_lang, "en", TranslateErrors::NONE));
- // infobar is now invalid.
- TranslateInfoBarDelegate* new_infobar = GetTranslateInfoBar();
- ASSERT_TRUE(new_infobar != NULL);
- infobar = new_infobar;
-
- // Simulate changing the target language, this should trigger a translation.
- process()->sink().ClearMessages();
- std::string new_target_lang = infobar->GetLanguageCodeAt(1);
- infobar->SetTargetLanguage(1);
- EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
- EXPECT_EQ(new_original_lang, original_lang);
- EXPECT_EQ(new_target_lang, target_lang);
- // Simulate the render notifying the translation has been done.
- rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0,
- new_original_lang, new_target_lang, TranslateErrors::NONE));
- // infobar is now invalid.
- new_infobar = GetTranslateInfoBar();
- ASSERT_TRUE(new_infobar != NULL);
-}
-
-TEST_F(TranslateManagerTest, TranslateScriptNotAvailable) {
- // Simulate navigating to a page.
- SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
-
- // We should have an infobar.
- TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
- ASSERT_TRUE(infobar != NULL);
- EXPECT_EQ(TranslateInfoBarDelegate::BEFORE_TRANSLATE, infobar->type());
-
- // Simulate clicking translate.
- process()->sink().ClearMessages();
- infobar->Translate();
- // Simulate a failure retrieving the translate script.
- SimulateURLFetch(false);
-
- // We should not have sent any message to translate to the renderer.
- EXPECT_FALSE(GetTranslateMessage(NULL, NULL, NULL));
-
- // And we should have an error infobar showing.
- infobar = GetTranslateInfoBar();
- ASSERT_TRUE(infobar != NULL);
- EXPECT_EQ(TranslateInfoBarDelegate::TRANSLATION_ERROR, infobar->type());
-}
-
-// Ensures we deal correctly with pages for which the browser does not recognize
-// the language (the translate server may or not detect the language).
-TEST_F(TranslateManagerTest, TranslateUnknownLanguage) {
- // Simulate navigating to a page ("und" is the string returned by the CLD for
- // languages it does not recognize).
- SimulateNavigation(GURL("http://www.google.mys"), "G00g1e", "und", true);
-
- // We should not have an infobar as we don't know the language.
- ASSERT_TRUE(GetTranslateInfoBar() == NULL);
-
- // Translate the page anyway throught the context menu.
- scoped_ptr<TestRenderViewContextMenu> menu(
- TestRenderViewContextMenu::CreateContextMenu(contents()));
- menu->Init();
- menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE);
-
- // To test that bug #49018 if fixed, make sure we deal correctly with errors.
- SimulateURLFetch(false); // Simulate a failure to fetch the translate script.
- TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
- ASSERT_TRUE(infobar != NULL);
- EXPECT_EQ(TranslateInfoBarDelegate::TRANSLATION_ERROR, infobar->type());
- EXPECT_TRUE(infobar->IsError());
- infobar->MessageInfoBarButtonPressed();
- SimulateURLFetch(true); // This time succeed.
-
- // Simulate the render notifying the translation has been done, the server
- // having detected the page was in a known and supported language.
- rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "fr", "en",
- TranslateErrors::NONE));
-
- // The after translate infobar should be showing.
- infobar = GetTranslateInfoBar();
- ASSERT_TRUE(infobar != NULL);
- EXPECT_EQ(TranslateInfoBarDelegate::AFTER_TRANSLATE, infobar->type());
- EXPECT_EQ("fr", infobar->GetOriginalLanguageCode());
- EXPECT_EQ("en", infobar->GetTargetLanguageCode());
-
- // Let's run the same steps but this time the server detects the page is
- // already in English.
- SimulateNavigation(GURL("http://www.google.com"), "The Google", "und", true);
- menu.reset(TestRenderViewContextMenu::CreateContextMenu(contents()));
- menu->Init();
- menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE);
- rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(1, 0, "en", "en",
- TranslateErrors::IDENTICAL_LANGUAGES));
- infobar = GetTranslateInfoBar();
- ASSERT_TRUE(infobar != NULL);
- EXPECT_EQ(TranslateInfoBarDelegate::TRANSLATION_ERROR, infobar->type());
- EXPECT_EQ(TranslateErrors::IDENTICAL_LANGUAGES, infobar->error());
-
- // Let's run the same steps again but this time the server fails to detect the
- // page's language (it returns an empty string).
- SimulateNavigation(GURL("http://www.google.com"), "The Google", "und", true);
- menu.reset(TestRenderViewContextMenu::CreateContextMenu(contents()));
- menu->Init();
- menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE);
- rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(2, 0, "", "en",
- TranslateErrors::UNKNOWN_LANGUAGE));
- infobar = GetTranslateInfoBar();
- ASSERT_TRUE(infobar != NULL);
- EXPECT_EQ(TranslateInfoBarDelegate::TRANSLATION_ERROR, infobar->type());
- EXPECT_EQ(TranslateErrors::UNKNOWN_LANGUAGE, infobar->error());
-}
-
-// Tests that we show/don't show an info-bar for all languages the CLD can
-// report.
-TEST_F(TranslateManagerTest, TestAllLanguages) {
- // The index in kExpectation are the Language enum (see languages.pb.h).
- // true if we expect a translate infobar for that language.
- // Note the supported languages are in translation_manager.cc, see
- // kSupportedLanguages.
- bool kExpectations[] = {
- // 0-9
- false, true, true, true, true, true, true, true, true, true,
- // 10-19
- true, true, true, true, true, true, true, true, true, true,
- // 20-29
- true, true, true, true, true, false, false, true, true, true,
- // 30-39
- true, true, true, true, true, true, true, false, true, false,
- // 40-49
- true, false, true, false, false, true, false, true, false, false,
- // 50-59
- true, false, false, true, true, true, false, true, false, false,
- // 60-69
- false, false, true, true, false, true, true, false, true, true,
- // 70-79
- false, false, false, false, true, true, false, true, false, false,
- // 80-89
- false, false, false, false, false, false, false, false, false, false,
- // 90-99
- false, true, false, false, false, false, false, true, false, false,
- // 100-109
- false, true, false, false, false, false, false, false, false, false,
- // 110-119
- false, false, false, false, false, false, false, false, false, false,
- // 120-129
- false, false, false, false, false, false, false, false, false, false,
- // 130-139
- false, false, false, false, false, false, false, false, false, true,
- // 140-149
- false, false, false, false, false, false, false, false, false, false,
- // 150-159
- false, false, false, false, false, false, false, false, false, false,
- // 160
- false
- };
-
- GURL url("http://www.google.com");
- for (size_t i = 0; i < arraysize(kExpectations); ++i) {
- ASSERT_LT(i, static_cast<size_t>(NUM_LANGUAGES));
-
- std::string lang = LanguageCodeWithDialects(static_cast<Language>(i));
- SCOPED_TRACE(::testing::Message::Message() << "Iteration " << i <<
- " language=" << lang);
-
- // We should not have a translate infobar.
- TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
- ASSERT_TRUE(infobar == NULL);
-
- // Simulate navigating to a page.
- NavigateAndCommit(url);
- SimulateOnPageContents(url, i, "", lang, true);
-
- // Verify we have/don't have an info-bar as expected.
- infobar = GetTranslateInfoBar();
- EXPECT_EQ(kExpectations[i], infobar != NULL);
-
- // Close the info-bar if applicable.
- if (infobar != NULL)
- EXPECT_TRUE(CloseTranslateInfoBar());
- }
-}
-
-// Tests auto-translate on page.
-TEST_F(TranslateManagerTest, AutoTranslateOnNavigate) {
- // Simulate navigating to a page and getting its language.
- SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
-
- // Simulate the user translating.
- TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
- ASSERT_TRUE(infobar != NULL);
- infobar->Translate();
- SimulateURLFetch(true); // Simulate the translate script being retrieved.
-
- rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "fr", "en",
- TranslateErrors::NONE));
-
- // Now navigate to a new page in the same language.
- process()->sink().ClearMessages();
- SimulateNavigation(GURL("http://news.google.fr"), "Les news", "fr", true);
-
- // This should have automatically triggered a translation.
- int page_id = 0;
- std::string original_lang, target_lang;
- EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
- EXPECT_EQ(1, page_id);
- EXPECT_EQ("fr", original_lang);
- EXPECT_EQ("en", target_lang);
-
- // Now navigate to a page in a different language.
- process()->sink().ClearMessages();
- SimulateNavigation(GURL("http://news.google.es"), "Las news", "es", true);
-
- // This should not have triggered a translate.
- EXPECT_FALSE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
-}
-
-// Tests that multiple OnPageContents do not cause multiple infobars.
-TEST_F(TranslateManagerTest, MultipleOnPageContents) {
- // Simulate navigating to a page and getting its language.
- SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
-
- // Simulate clicking 'Nope' (don't translate).
- EXPECT_TRUE(DenyTranslation());
- EXPECT_EQ(0U, contents()->infobar_count());
-
- // Send a new PageContents, we should not show an infobar.
- SimulateOnPageContents(GURL("http://www.google.fr"), 0, "Le Google", "fr",
- true);
- EXPECT_EQ(0U, contents()->infobar_count());
-
- // Do the same steps but simulate closing the infobar this time.
- SimulateNavigation(GURL("http://www.youtube.fr"), "Le YouTube", "fr",
- true);
- EXPECT_TRUE(CloseTranslateInfoBar());
- EXPECT_EQ(0U, contents()->infobar_count());
- SimulateOnPageContents(GURL("http://www.youtube.fr"), 1, "Le YouTube", "fr",
- true);
- EXPECT_EQ(0U, contents()->infobar_count());
-}
-
-// Test that reloading the page brings back the infobar.
-TEST_F(TranslateManagerTest, Reload) {
- // Simulate navigating to a page and getting its language.
- SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
-
- // Close the infobar.
- EXPECT_TRUE(CloseTranslateInfoBar());
-
- // Reload should bring back the infobar.
- NavEntryCommittedObserver nav_observer(contents());
- Reload();
-
- // Ensures it is really handled a reload.
- const NavigationController::LoadCommittedDetails& nav_details =
- nav_observer.get_load_commited_details();
- EXPECT_TRUE(nav_details.entry != NULL); // There was a navigation.
- EXPECT_EQ(NavigationType::EXISTING_PAGE, nav_details.type);
-
- // The TranslateManager class processes the navigation entry committed
- // notification in a posted task; process that task.
- MessageLoop::current()->RunAllPending();
- EXPECT_TRUE(GetTranslateInfoBar() != NULL);
-}
-
-// Test that reloading the page by way of typing again the URL in the
-// location bar brings back the infobar.
-TEST_F(TranslateManagerTest, ReloadFromLocationBar) {
- GURL url("http://www.google.fr");
-
- // Simulate navigating to a page and getting its language.
- SimulateNavigation(url, "Le Google", "fr", true);
-
- // Close the infobar.
- EXPECT_TRUE(CloseTranslateInfoBar());
-
- // Create a pending navigation and simulate a page load. That should be the
- // equivalent of typing the URL again in the location bar.
- NavEntryCommittedObserver nav_observer(contents());
- contents()->controller().LoadURL(url, GURL(), PageTransition::TYPED);
- rvh()->SendNavigate(0, url);
-
- // Test that we are really getting a same page navigation, the test would be
- // useless if it was not the case.
- const NavigationController::LoadCommittedDetails& nav_details =
- nav_observer.get_load_commited_details();
- EXPECT_TRUE(nav_details.entry != NULL); // There was a navigation.
- EXPECT_EQ(NavigationType::SAME_PAGE, nav_details.type);
-
- // The TranslateManager class processes the navigation entry committed
- // notification in a posted task; process that task.
- MessageLoop::current()->RunAllPending();
- EXPECT_TRUE(GetTranslateInfoBar() != NULL);
-}
-
-// Tests that a closed translate infobar does not reappear when navigating
-// in-page.
-TEST_F(TranslateManagerTest, CloseInfoBarInPageNavigation) {
- // Simulate navigating to a page and getting its language.
- SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
-
- // Close the infobar.
- EXPECT_TRUE(CloseTranslateInfoBar());
-
- // Navigate in page, no infobar should be shown.
- SimulateNavigation(GURL("http://www.google.fr/#ref1"), "Le Google", "fr",
- true);
- EXPECT_TRUE(GetTranslateInfoBar() == NULL);
-
- // Navigate out of page, a new infobar should show.
- SimulateNavigation(GURL("http://www.google.fr/foot"), "Le Google", "fr",
- true);
- EXPECT_TRUE(GetTranslateInfoBar() != NULL);
-}
-
-// Tests that a closed translate infobar does not reappear when navigating
-// in a subframe. (http://crbug.com/48215)
-TEST_F(TranslateManagerTest, CloseInfoBarInSubframeNavigation) {
- // Simulate navigating to a page and getting its language.
- SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
-
- // Close the infobar.
- EXPECT_TRUE(CloseTranslateInfoBar());
-
- // Simulate a sub-frame auto-navigating.
- rvh()->SendNavigateWithTransition(1, GURL("http://pub.com"),
- PageTransition::AUTO_SUBFRAME);
- EXPECT_TRUE(GetTranslateInfoBar() == NULL);
-
- // Simulate the user navigating in a sub-frame.
- rvh()->SendNavigateWithTransition(2, GURL("http://pub.com"),
- PageTransition::MANUAL_SUBFRAME);
- EXPECT_TRUE(GetTranslateInfoBar() == NULL);
-
- // Navigate out of page, a new infobar should show.
- SimulateNavigation(GURL("http://www.google.fr/foot"), "Le Google", "fr",
- true);
- EXPECT_TRUE(GetTranslateInfoBar() != NULL);
-}
-
-
-
-// Tests that denying translation is sticky when navigating in page.
-TEST_F(TranslateManagerTest, DenyTranslateInPageNavigation) {
- // Simulate navigating to a page and getting its language.
- SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
-
- // Simulate clicking 'Nope' (don't translate).
- EXPECT_TRUE(DenyTranslation());
-
- // Navigate in page, no infobar should be shown.
- SimulateNavigation(GURL("http://www.google.fr/#ref1"), "Le Google", "fr",
- true);
- EXPECT_TRUE(GetTranslateInfoBar() == NULL);
-
- // Navigate out of page, a new infobar should show.
- SimulateNavigation(GURL("http://www.google.fr/foot"), "Le Google", "fr",
- true);
- EXPECT_TRUE(GetTranslateInfoBar() != NULL);
-}
-
-// Tests that after translating and closing the infobar, the infobar does not
-// return when navigating in page.
-TEST_F(TranslateManagerTest, TranslateCloseInfoBarInPageNavigation) {
- // Simulate navigating to a page and getting its language.
- SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
-
- // Simulate the user translating.
- TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
- ASSERT_TRUE(infobar != NULL);
- infobar->Translate();
- SimulateURLFetch(true); // Simulate the translate script being retrieved.
- rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "fr", "en",
- TranslateErrors::NONE));
-
- // Close the infobar.
- EXPECT_TRUE(CloseTranslateInfoBar());
-
- // Navigate in page, no infobar should be shown.
- SimulateNavigation(GURL("http://www.google.fr/#ref1"), "Le Google", "fr",
- true);
- EXPECT_TRUE(GetTranslateInfoBar() == NULL);
-
- // Navigate out of page, a new infobar should show.
- // Note that we navigate to a page in a different language so we don't trigger
- // the auto-translate feature (it would translate the page automatically and
- // the before translate inforbar would not be shown).
- SimulateNavigation(GURL("http://www.google.de"), "Das Google", "de", true);
- EXPECT_TRUE(GetTranslateInfoBar() != NULL);
-}
-
-// Tests that the after translate the infobar still shows when navigating
-// in-page.
-TEST_F(TranslateManagerTest, TranslateInPageNavigation) {
- // Simulate navigating to a page and getting its language.
- SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
-
- // Simulate the user translating.
- TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
- ASSERT_TRUE(infobar != NULL);
- infobar->Translate();
- SimulateURLFetch(true); // Simulate the translate script being retrieved.
- rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "fr", "en",
- TranslateErrors::NONE));
- // The after translate infobar is showing.
- infobar = GetTranslateInfoBar();
- ASSERT_TRUE(infobar != NULL);
-
- // Navigate in page, the same infobar should still be shown.
- ClearRemovedInfoBars();
- SimulateNavigation(GURL("http://www.google.fr/#ref1"), "Le Google", "fr",
- true);
- EXPECT_FALSE(InfoBarRemoved());
- EXPECT_EQ(infobar, GetTranslateInfoBar());
-
- // Navigate out of page, a new infobar should show.
- // See note in TranslateCloseInfoBarInPageNavigation test on why it is
- // important to navigate to a page in a different language for this test.
- SimulateNavigation(GURL("http://www.google.de"), "Das Google", "de", true);
- // The old infobar is gone.
- EXPECT_TRUE(CheckInfoBarRemovedAndReset(infobar));
- // And there is a new one.
- EXPECT_TRUE(GetTranslateInfoBar() != NULL);
-}
-
-// Tests that no translate infobar is shown when navigating to a page in an
-// unsupported language.
-TEST_F(TranslateManagerTest, CLDReportsUnsupportedPageLanguage) {
- // Simulate navigating to a page and getting an unsupported language.
- SimulateNavigation(GURL("http://www.google.com"), "Google", "qbz", true);
-
- // No info-bar should be shown.
- EXPECT_TRUE(GetTranslateInfoBar() == NULL);
-}
-
-// Tests that we deal correctly with unsupported languages returned by the
-// server.
-// The translation server might return a language we don't support.
-TEST_F(TranslateManagerTest, ServerReportsUnsupportedLanguage) {
- // Simulate navigating to a page and translating it.
- SimulateNavigation(GURL("http://mail.google.fr"), "Le Google", "fr", true);
- TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
- ASSERT_TRUE(infobar != NULL);
- process()->sink().ClearMessages();
- infobar->Translate();
- SimulateURLFetch(true);
- // Simulate the render notifying the translation has been done, but it
- // reports a language we don't support.
- rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "qbz", "en",
- TranslateErrors::NONE));
-
- // An error infobar should be showing to report that we don't support this
- // language.
- infobar = GetTranslateInfoBar();
- ASSERT_TRUE(infobar != NULL);
- EXPECT_EQ(TranslateInfoBarDelegate::TRANSLATION_ERROR, infobar->type());
-
- // This infobar should have a button (so the string should not be empty).
- ASSERT_FALSE(infobar->GetMessageInfoBarButtonText().empty());
-
- // Pressing the button on that infobar should revert to the original language.
- process()->sink().ClearMessages();
- infobar->MessageInfoBarButtonPressed();
- const IPC::Message* message =
- process()->sink().GetFirstMessageMatching(ViewMsg_RevertTranslation::ID);
- EXPECT_TRUE(message != NULL);
- // And it should have removed the infobar.
- EXPECT_TRUE(GetTranslateInfoBar() == NULL);
-}
-
-// Tests that no translate infobar is shown when Chrome is in a language that
-// the translate server does not support.
-TEST_F(TranslateManagerTest, UnsupportedUILanguage) {
- TestingBrowserProcess* browser_process =
- static_cast<TestingBrowserProcess*>(g_browser_process);
- std::string original_lang = browser_process->GetApplicationLocale();
- browser_process->SetApplicationLocale("qbz");
-
- // Simulate navigating to a page in a language supported by the translate
- // server.
- SimulateNavigation(GURL("http://www.google.com"), "Google", "en", true);
-
- // No info-bar should be shown.
- EXPECT_TRUE(GetTranslateInfoBar() == NULL);
-
- browser_process->SetApplicationLocale(original_lang);
-}
-
-// Tests that the translate enabled preference is honored.
-TEST_F(TranslateManagerTest, TranslateEnabledPref) {
- // Make sure the pref allows translate.
- PrefService* prefs = contents()->profile()->GetPrefs();
- prefs->SetBoolean(prefs::kEnableTranslate, true);
-
- // Simulate navigating to a page and getting its language.
- SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
-
- // An infobar should be shown.
- TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
- EXPECT_TRUE(infobar != NULL);
-
- // Disable translate.
- prefs->SetBoolean(prefs::kEnableTranslate, false);
-
- // Navigate to a new page, that should close the previous infobar.
- GURL url("http://www.youtube.fr");
- NavigateAndCommit(url);
- infobar = GetTranslateInfoBar();
- EXPECT_TRUE(infobar == NULL);
-
- // Simulate getting the page contents and language, that should not trigger
- // a translate infobar.
- SimulateOnPageContents(url, 1, "Le YouTube", "fr", true);
- infobar = GetTranslateInfoBar();
- EXPECT_TRUE(infobar == NULL);
-}
-
-// Tests the "Never translate <language>" pref.
-TEST_F(TranslateManagerTest, NeverTranslateLanguagePref) {
- // Simulate navigating to a page and getting its language.
- GURL url("http://www.google.fr");
- SimulateNavigation(url, "Le Google", "fr", true);
-
- // An infobar should be shown.
- EXPECT_TRUE(GetTranslateInfoBar() != NULL);
-
- // Select never translate this language.
- PrefService* prefs = contents()->profile()->GetPrefs();
- PrefChangeRegistrar registrar;
- registrar.Init(prefs);
- registrar.Add(TranslatePrefs::kPrefTranslateLanguageBlacklist,
- &pref_observer_);
- TranslatePrefs translate_prefs(prefs);
- EXPECT_FALSE(translate_prefs.IsLanguageBlacklisted("fr"));
- EXPECT_TRUE(translate_prefs.CanTranslate(prefs, "fr", url));
- SetPrefObserverExpectation(TranslatePrefs::kPrefTranslateLanguageBlacklist);
- translate_prefs.BlacklistLanguage("fr");
- EXPECT_TRUE(translate_prefs.IsLanguageBlacklisted("fr"));
- EXPECT_FALSE(translate_prefs.CanTranslate(prefs, "fr", url));
-
- // Close the infobar.
- EXPECT_TRUE(CloseTranslateInfoBar());
-
- // Navigate to a new page also in French.
- SimulateNavigation(GURL("http://wwww.youtube.fr"), "Le YouTube", "fr", true);
-
- // There should not be a translate infobar.
- EXPECT_TRUE(GetTranslateInfoBar() == NULL);
-
- // Remove the language from the blacklist.
- SetPrefObserverExpectation(TranslatePrefs::kPrefTranslateLanguageBlacklist);
- translate_prefs.RemoveLanguageFromBlacklist("fr");
- EXPECT_FALSE(translate_prefs.IsLanguageBlacklisted("fr"));
- EXPECT_TRUE(translate_prefs.CanTranslate(prefs, "fr", url));
-
- // Navigate to a page in French.
- SimulateNavigation(url, "Le Google", "fr", true);
-
- // There should be a translate infobar.
- EXPECT_TRUE(GetTranslateInfoBar() != NULL);
-}
-
-// Tests the "Never translate this site" pref.
-TEST_F(TranslateManagerTest, NeverTranslateSitePref) {
- // Simulate navigating to a page and getting its language.
- GURL url("http://www.google.fr");
- std::string host(url.host());
- SimulateNavigation(url, "Le Google", "fr", true);
-
- // An infobar should be shown.
- EXPECT_TRUE(GetTranslateInfoBar() != NULL);
-
- // Select never translate this site.
- PrefService* prefs = contents()->profile()->GetPrefs();
- PrefChangeRegistrar registrar;
- registrar.Init(prefs);
- registrar.Add(TranslatePrefs::kPrefTranslateSiteBlacklist,
- &pref_observer_);
- TranslatePrefs translate_prefs(prefs);
- EXPECT_FALSE(translate_prefs.IsSiteBlacklisted(host));
- EXPECT_TRUE(translate_prefs.CanTranslate(prefs, "fr", url));
- SetPrefObserverExpectation(TranslatePrefs::kPrefTranslateSiteBlacklist);
- translate_prefs.BlacklistSite(host);
- EXPECT_TRUE(translate_prefs.IsSiteBlacklisted(host));
- EXPECT_FALSE(translate_prefs.CanTranslate(prefs, "fr", url));
-
- // Close the infobar.
- EXPECT_TRUE(CloseTranslateInfoBar());
-
- // Navigate to a new page also on the same site.
- SimulateNavigation(GURL("http://www.google.fr/hello"), "Bonjour", "fr", true);
-
- // There should not be a translate infobar.
- EXPECT_TRUE(GetTranslateInfoBar() == NULL);
-
- // Remove the site from the blacklist.
- SetPrefObserverExpectation(TranslatePrefs::kPrefTranslateSiteBlacklist);
- translate_prefs.RemoveSiteFromBlacklist(host);
- EXPECT_FALSE(translate_prefs.IsSiteBlacklisted(host));
- EXPECT_TRUE(translate_prefs.CanTranslate(prefs, "fr", url));
-
- // Navigate to a page in French.
- SimulateNavigation(url, "Le Google", "fr", true);
-
- // There should be a translate infobar.
- EXPECT_TRUE(GetTranslateInfoBar() != NULL);
-}
-
-// Tests the "Always translate this language" pref.
-TEST_F(TranslateManagerTest, AlwaysTranslateLanguagePref) {
- // Select always translate French to English.
- PrefService* prefs = contents()->profile()->GetPrefs();
- PrefChangeRegistrar registrar;
- registrar.Init(prefs);
- registrar.Add(TranslatePrefs::kPrefTranslateWhitelists,
- &pref_observer_);
- TranslatePrefs translate_prefs(prefs);
- SetPrefObserverExpectation(TranslatePrefs::kPrefTranslateWhitelists);
- translate_prefs.WhitelistLanguagePair("fr", "en");
-
- // Load a page in French.
- SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
-
- // It should have triggered an automatic translation to English.
-
- // The translating infobar should be showing.
- TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
- ASSERT_TRUE(infobar != NULL);
- EXPECT_EQ(TranslateInfoBarDelegate::TRANSLATING, infobar->type());
-
- SimulateURLFetch(true); // Simulate the translate script being retrieved.
- int page_id = 0;
- std::string original_lang, target_lang;
- EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
- EXPECT_EQ("fr", original_lang);
- EXPECT_EQ("en", target_lang);
- process()->sink().ClearMessages();
-
- // Try another language, it should not be autotranslated.
- SimulateNavigation(GURL("http://www.google.es"), "El Google", "es", true);
- EXPECT_FALSE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
- EXPECT_TRUE(GetTranslateInfoBar() != NULL);
- EXPECT_TRUE(CloseTranslateInfoBar());
-
- // Let's switch to incognito mode, it should not be autotranslated in that
- // case either.
- TestingProfile* test_profile =
- static_cast<TestingProfile*>(contents()->profile());
- test_profile->set_off_the_record(true);
- SimulateNavigation(GURL("http://www.youtube.fr"), "Le YouTube", "fr", true);
- EXPECT_FALSE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
- EXPECT_TRUE(GetTranslateInfoBar() != NULL);
- EXPECT_TRUE(CloseTranslateInfoBar());
- test_profile->set_off_the_record(false); // Get back to non incognito.
-
- // Now revert the always translate pref and make sure we go back to expected
- // behavior, which is show a "before translate" infobar.
- SetPrefObserverExpectation(TranslatePrefs::kPrefTranslateWhitelists);
- translate_prefs.RemoveLanguagePairFromWhitelist("fr", "en");
- SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
- EXPECT_FALSE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
- infobar = GetTranslateInfoBar();
- ASSERT_TRUE(infobar != NULL);
- EXPECT_EQ(TranslateInfoBarDelegate::BEFORE_TRANSLATE, infobar->type());
-}
-
-// Context menu.
-TEST_F(TranslateManagerTest, ContextMenu) {
- // Blacklist www.google.fr and French for translation.
- GURL url("http://www.google.fr");
- TranslatePrefs translate_prefs(contents()->profile()->GetPrefs());
- translate_prefs.BlacklistLanguage("fr");
- translate_prefs.BlacklistSite(url.host());
- EXPECT_TRUE(translate_prefs.IsLanguageBlacklisted("fr"));
- EXPECT_TRUE(translate_prefs.IsSiteBlacklisted(url.host()));
-
- // Simulate navigating to a page in French. The translate menu should show but
- // should only be enabled when the page language has been received.
- NavigateAndCommit(url);
- scoped_ptr<TestRenderViewContextMenu> menu(
- TestRenderViewContextMenu::CreateContextMenu(contents()));
- menu->Init();
- EXPECT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_TRANSLATE));
- EXPECT_FALSE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE));
-
- // Simulate receiving the language.
- SimulateOnPageContents(url, 0, "Le Google", "fr", true);
- menu.reset(TestRenderViewContextMenu::CreateContextMenu(contents()));
- menu->Init();
- EXPECT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_TRANSLATE));
- EXPECT_TRUE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE));
-
- // Use the menu to translate the page.
- menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE);
-
- // That should have triggered a translation.
- // The "translating..." infobar should be showing.
- TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
- ASSERT_TRUE(infobar != NULL);
- EXPECT_EQ(TranslateInfoBarDelegate::TRANSLATING, infobar->type());
- SimulateURLFetch(true); // Simulate the translate script being retrieved.
- int page_id = 0;
- std::string original_lang, target_lang;
- EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
- EXPECT_EQ("fr", original_lang);
- EXPECT_EQ("en", target_lang);
- process()->sink().ClearMessages();
-
- // This should also have reverted the blacklisting of this site and language.
- EXPECT_FALSE(translate_prefs.IsLanguageBlacklisted("fr"));
- EXPECT_FALSE(translate_prefs.IsSiteBlacklisted(url.host()));
-
- // Let's simulate the page being translated.
- rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "fr", "en",
- TranslateErrors::NONE));
-
- // The translate menu should now be disabled.
- menu.reset(TestRenderViewContextMenu::CreateContextMenu(contents()));
- menu->Init();
- EXPECT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_TRANSLATE));
- EXPECT_FALSE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE));
-
- // Test that selecting translate in the context menu WHILE the page is being
- // translated does nothing (this could happen if autotranslate kicks-in and
- // the user selects the menu while the translation is being performed).
- SimulateNavigation(GURL("http://www.google.es"), "El Google", "es", true);
- infobar = GetTranslateInfoBar();
- ASSERT_TRUE(infobar != NULL);
- infobar->Translate();
- EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
- process()->sink().ClearMessages();
- menu.reset(TestRenderViewContextMenu::CreateContextMenu(contents()));
- menu->Init();
- EXPECT_TRUE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE));
- menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE);
- // No message expected since the translation should have been ignored.
- EXPECT_FALSE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
-
- // Now test that selecting translate in the context menu AFTER the page has
- // been translated does nothing.
- SimulateNavigation(GURL("http://www.google.de"), "Das Google", "de", true);
- infobar = GetTranslateInfoBar();
- ASSERT_TRUE(infobar != NULL);
- infobar->Translate();
- EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
- process()->sink().ClearMessages();
- menu.reset(TestRenderViewContextMenu::CreateContextMenu(contents()));
- menu->Init();
- EXPECT_TRUE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE));
- rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "de", "en",
- TranslateErrors::NONE));
- menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE);
- // No message expected since the translation should have been ignored.
- EXPECT_FALSE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
-
- // Test that the translate context menu is disabled when the page is in the
- // same language as the UI.
- SimulateNavigation(url, "Google", "en", true);
- menu.reset(TestRenderViewContextMenu::CreateContextMenu(contents()));
- menu->Init();
- EXPECT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_TRANSLATE));
- EXPECT_FALSE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE));
-
- // Test that the translate context menu is enabled when the page is in an
- // unknown language.
- SimulateNavigation(url, "G00g1e", "und", true);
- menu.reset(TestRenderViewContextMenu::CreateContextMenu(contents()));
- menu->Init();
- EXPECT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_TRANSLATE));
- EXPECT_TRUE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE));
-
- // Test that the translate context menu is disabled when the page is in an
- // unsupported language.
- SimulateNavigation(url, "G00g1e", "qbz", true);
- menu.reset(TestRenderViewContextMenu::CreateContextMenu(contents()));
- menu->Init();
- EXPECT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_TRANSLATE));
- EXPECT_FALSE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE));
-}
-
-// Tests that an extra always/never translate button is shown on the "before
-// translate" infobar when the translation is accepted/declined 3 times,
-// only when not in incognito mode.
-TEST_F(TranslateManagerTest, BeforeTranslateExtraButtons) {
- TranslatePrefs translate_prefs(contents()->profile()->GetPrefs());
- translate_prefs.ResetTranslationAcceptedCount("fr");
- translate_prefs.ResetTranslationDeniedCount("fr");
- translate_prefs.ResetTranslationAcceptedCount("de");
- translate_prefs.ResetTranslationDeniedCount("de");
-
- // We'll do 4 times in incognito mode first to make sure the button is not
- // shown in that case, then 4 times in normal mode.
- TranslateInfoBarDelegate* infobar;
- TestingProfile* test_profile =
- static_cast<TestingProfile*>(contents()->profile());
- test_profile->set_off_the_record(true);
- for (int i = 0; i < 8; ++i) {
- SCOPED_TRACE(::testing::Message::Message() << "Iteration " << i <<
- " incognito mode=" << test_profile->IsOffTheRecord());
- SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
- infobar = GetTranslateInfoBar();
- ASSERT_TRUE(infobar != NULL);
- EXPECT_EQ(TranslateInfoBarDelegate::BEFORE_TRANSLATE, infobar->type());
- if (i < 7) {
- EXPECT_FALSE(infobar->ShouldShowAlwaysTranslateButton());
- infobar->Translate();
- process()->sink().ClearMessages();
- } else {
- EXPECT_TRUE(infobar->ShouldShowAlwaysTranslateButton());
- }
- if (i == 3)
- test_profile->set_off_the_record(false);
- }
- // Simulate the user pressing "Always translate French".
- infobar->AlwaysTranslatePageLanguage();
- EXPECT_TRUE(translate_prefs.IsLanguagePairWhitelisted("fr", "en"));
- // Simulate the translate script being retrieved (it only needs to be done
- // once in the test as it is cached).
- SimulateURLFetch(true);
- // That should have triggered a page translate.
- int page_id = 0;
- std::string original_lang, target_lang;
- EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
- process()->sink().ClearMessages();
-
- // Now test that declining the translation causes a "never translate" button
- // to be shown (in non incognito mode only).
- test_profile->set_off_the_record(true);
- for (int i = 0; i < 8; ++i) {
- SCOPED_TRACE(::testing::Message::Message() << "Iteration " << i <<
- " incognito mode=" << test_profile->IsOffTheRecord());
- SimulateNavigation(GURL("http://www.google.de"), "Das Google", "de", true);
- infobar = GetTranslateInfoBar();
- ASSERT_TRUE(infobar != NULL);
- EXPECT_EQ(TranslateInfoBarDelegate::BEFORE_TRANSLATE, infobar->type());
- if (i < 7) {
- EXPECT_FALSE(infobar->ShouldShowNeverTranslateButton());
- infobar->TranslationDeclined();
- } else {
- EXPECT_TRUE(infobar->ShouldShowNeverTranslateButton());
- }
- if (i == 3)
- test_profile->set_off_the_record(false);
- }
- // Simulate the user pressing "Never translate French".
- infobar->NeverTranslatePageLanguage();
- EXPECT_TRUE(translate_prefs.IsLanguageBlacklisted("de"));
- // No translation should have occured and the infobar should be gone.
- EXPECT_FALSE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
- process()->sink().ClearMessages();
- ASSERT_TRUE(GetTranslateInfoBar() == NULL);
-}
-
-// Tests that we don't show a translate infobar when a page instructs that it
-// should not be translated.
-TEST_F(TranslateManagerTest, NonTranslatablePage) {
- // Simulate navigating to a page.
- SimulateNavigation(GURL("http://mail.google.fr"), "Le Google", "fr", false);
-
- // We should not have an infobar.
- EXPECT_TRUE(GetTranslateInfoBar() == NULL);
-
- // The context menu should be disabled.
- scoped_ptr<TestRenderViewContextMenu> menu(
- TestRenderViewContextMenu::CreateContextMenu(contents()));
- menu->Init();
- EXPECT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_TRANSLATE));
- EXPECT_FALSE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE));
-}
-
-// Tests that the script is expired and refetched as expected.
-TEST_F(TranslateManagerTest, ScriptExpires) {
- ExpireTranslateScriptImmediately();
-
- // Simulate navigating to a page and translating it.
- SimulateNavigation(GURL("http://www.google.fr"), "Le Google", "fr", true);
- TranslateInfoBarDelegate* infobar = GetTranslateInfoBar();
- ASSERT_TRUE(infobar != NULL);
- process()->sink().ClearMessages();
- infobar->Translate();
- SimulateURLFetch(true);
- rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "fr", "en",
- TranslateErrors::NONE));
-
- // A task should have been posted to clear the script, run it.
- MessageLoop::current()->RunAllPending();
-
- // Do another navigation and translation.
- SimulateNavigation(GURL("http://www.google.es"), "El Google", "es", true);
- infobar = GetTranslateInfoBar();
- ASSERT_TRUE(infobar != NULL);
- process()->sink().ClearMessages();
- infobar->Translate();
- // If we don't simulate the URL fetch, the TranslateManager should be waiting
- // for the script and no message should have been sent to the renderer.
- EXPECT_TRUE(
- process()->sink().GetFirstMessageMatching(ViewMsg_TranslatePage::ID) ==
- NULL);
- // Now simulate the URL fetch.
- SimulateURLFetch(true);
- // Now the message should have been sent.
- int page_id = 0;
- std::string original_lang, target_lang;
- EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang));
- EXPECT_EQ("es", original_lang);
- EXPECT_EQ("en", target_lang);
-}
« no previous file with comments | « chrome/browser/translate/translate_manager_browsertest.cc ('k') | chrome/chrome_tests.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698