Index: chrome/browser/translate/translate_manager_browsertest.cc |
diff --git a/chrome/browser/translate/translate_manager_browsertest.cc b/chrome/browser/translate/translate_manager_browsertest.cc |
index d391272dd92fec8b584923d60e1ac5e42c8840f2..99335778774f53b20d8bd573aa88baaf70689ae8 100644 |
--- a/chrome/browser/translate/translate_manager_browsertest.cc |
+++ b/chrome/browser/translate/translate_manager_browsertest.cc |
@@ -2,1584 +2,19 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include <algorithm> |
-#include <set> |
-#include <vector> |
+#include "chrome/browser/translate/translate_manager.h" |
-#include "base/command_line.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/prefs/pref_change_registrar.h" |
-#include "base/prefs/pref_service.h" |
-#include "base/strings/stringprintf.h" |
-#include "chrome/app/chrome_command_ids.h" |
#include "chrome/browser/chrome_notification_types.h" |
-#include "chrome/browser/extensions/test_extension_system.h" |
-#include "chrome/browser/infobars/infobar.h" |
-#include "chrome/browser/infobars/infobar_service.h" |
#include "chrome/browser/prefs/session_startup_pref.h" |
-#include "chrome/browser/renderer_context_menu/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_service.h" |
#include "chrome/browser/translate/translate_tab_helper.h" |
#include "chrome/browser/ui/browser.h" |
#include "chrome/browser/ui/tabs/tab_strip_model.h" |
-#include "chrome/browser/ui/translate/translate_bubble_factory.h" |
-#include "chrome/browser/ui/translate/translate_bubble_model.h" |
-#include "chrome/browser/ui/translate/translate_bubble_model_impl.h" |
-#include "chrome/common/chrome_switches.h" |
-#include "chrome/common/pref_names.h" |
-#include "chrome/common/render_messages.h" |
-#include "chrome/common/url_constants.h" |
-#include "chrome/test/base/chrome_render_view_host_test_harness.h" |
#include "chrome/test/base/in_process_browser_test.h" |
-#include "chrome/test/base/testing_browser_process.h" |
-#include "chrome/test/base/testing_profile.h" |
#include "chrome/test/base/ui_test_utils.h" |
-#include "components/translate/core/browser/translate_accept_languages.h" |
-#include "components/translate/core/browser/translate_download_manager.h" |
-#include "components/translate/core/browser/translate_language_list.h" |
-#include "components/translate/core/browser/translate_prefs.h" |
-#include "components/translate/core/browser/translate_script.h" |
#include "components/translate/core/common/language_detection_details.h" |
-#include "components/translate/core/common/translate_pref_names.h" |
-#include "content/public/browser/navigation_details.h" |
-#include "content/public/browser/navigation_entry.h" |
-#include "content/public/browser/notification_details.h" |
-#include "content/public/browser/notification_registrar.h" |
-#include "content/public/browser/web_contents.h" |
-#include "content/public/test/mock_render_process_host.h" |
-#include "content/public/test/test_renderer_host.h" |
-#include "net/url_request/test_url_fetcher_factory.h" |
-#include "net/url_request/url_fetcher_delegate.h" |
-#include "testing/gmock/include/gmock/gmock.h" |
-#include "third_party/WebKit/public/web/WebContextMenuData.h" |
- |
- |
-// An observer that keeps track of whether a navigation entry was committed. |
-class NavEntryCommittedObserver : public content::NotificationObserver { |
- public: |
- explicit NavEntryCommittedObserver(content::WebContents* web_contents) { |
- registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED, |
- content::Source<content::NavigationController>( |
- &web_contents->GetController())); |
- } |
- |
- virtual void Observe(int type, |
- const content::NotificationSource& source, |
- const content::NotificationDetails& details) OVERRIDE { |
- DCHECK(type == content::NOTIFICATION_NAV_ENTRY_COMMITTED); |
- details_ = |
- *(content::Details<content::LoadCommittedDetails>(details).ptr()); |
- } |
- |
- const content::LoadCommittedDetails& load_committed_details() const { |
- return details_; |
- } |
- |
- private: |
- content::LoadCommittedDetails details_; |
- content::NotificationRegistrar registrar_; |
- |
- DISALLOW_COPY_AND_ASSIGN(NavEntryCommittedObserver); |
-}; |
- |
-class TranslateManagerBrowserTest : public ChromeRenderViewHostTestHarness, |
- public content::NotificationObserver { |
- public: |
- TranslateManagerBrowserTest() |
- : pref_callback_( |
- base::Bind(&TranslateManagerBrowserTest::OnPreferenceChanged, |
- base::Unretained(this))) { |
- } |
- |
- // Simulates navigating to a page and getting the page contents and language |
- // for that navigation. |
- void SimulateNavigation(const GURL& url, |
- const std::string& lang, |
- bool page_translatable) { |
- NavigateAndCommit(url); |
- SimulateOnTranslateLanguageDetermined(lang, page_translatable); |
- } |
- |
- void SimulateOnTranslateLanguageDetermined(const std::string& lang, |
- bool page_translatable) { |
- LanguageDetectionDetails details; |
- details.adopted_language = lang; |
- content::RenderViewHostTester::TestOnMessageReceived( |
- rvh(), |
- ChromeViewHostMsg_TranslateLanguageDetermined( |
- 0, details, page_translatable)); |
- } |
- |
- void SimulateOnPageTranslated(int routing_id, |
- const std::string& source_lang, |
- const std::string& target_lang, |
- TranslateErrors::Type error) { |
- content::RenderViewHostTester::TestOnMessageReceived( |
- rvh(), |
- ChromeViewHostMsg_PageTranslated( |
- routing_id, 0, source_lang, target_lang, error)); |
- } |
- |
- void SimulateOnPageTranslated(const std::string& source_lang, |
- const std::string& target_lang) { |
- SimulateOnPageTranslated(0, source_lang, target_lang, |
- TranslateErrors::NONE); |
- } |
- |
- bool GetTranslateMessage(int* page_id, |
- std::string* original_lang, |
- std::string* target_lang) { |
- const IPC::Message* message = |
- process()->sink().GetFirstMessageMatching( |
- ChromeViewMsg_TranslatePage::ID); |
- if (!message) |
- return false; |
- Tuple4<int, std::string, std::string, std::string> translate_param; |
- ChromeViewMsg_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; |
- } |
- |
- InfoBarService* infobar_service() { |
- return InfoBarService::FromWebContents(web_contents()); |
- } |
- |
- // Returns the translate infobar if there is 1 infobar and it is a translate |
- // infobar. |
- TranslateInfoBarDelegate* GetTranslateInfoBar() { |
- return (infobar_service()->infobar_count() == 1) ? |
- infobar_service()->infobar_at(0)->delegate()-> |
- 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. |
- infobar_service()->RemoveInfoBar(infobar_service()->infobar_at(0)); |
- 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; |
- } |
- |
- void ExpireTranslateScriptImmediately() { |
- TranslateDownloadManager::GetInstance()->SetTranslateScriptExpirationDelay( |
- 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(); |
- infobar_service()->RemoveInfoBar(infobar_service()->infobar_at(0)); |
- return true; |
- } |
- |
- void ReloadAndWait(bool successful_reload) { |
- NavEntryCommittedObserver nav_observer(web_contents()); |
- if (successful_reload) |
- Reload(); |
- else |
- FailedReload(); |
- |
- // Ensures it is really handled a reload. |
- const content::LoadCommittedDetails& nav_details = |
- nav_observer.load_committed_details(); |
- EXPECT_TRUE(nav_details.entry != NULL); // There was a navigation. |
- EXPECT_EQ(content::NAVIGATION_TYPE_EXISTING_PAGE, nav_details.type); |
- |
- // The TranslateManager class processes the navigation entry committed |
- // notification in a posted task; process that task. |
- base::MessageLoop::current()->RunUntilIdle(); |
- } |
- |
- virtual void Observe(int type, |
- const content::NotificationSource& source, |
- const content::NotificationDetails& details) { |
- DCHECK_EQ(chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, type); |
- removed_infobars_.insert( |
- content::Details<InfoBar::RemovedDetails>(details)->first->delegate()); |
- } |
- |
- MOCK_METHOD1(OnPreferenceChanged, void(const std::string&)); |
- |
- protected: |
- virtual void SetUp() { |
- // This test is a unit test but runs in the browser_tests suite. Therefore |
- // it needs to manage its own TestingBrowserProcess. |
- // TODO(jamescook): Figure out how to move this suite back to unit_tests. |
- // Right now it fails to get the translate infobar if you run it there. |
- TestingBrowserProcess::CreateInstance(); |
- |
- TranslateService::Initialize(); |
- TranslateService::SetUseInfobar(true); |
- |
- // 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). |
- TranslateDownloadManager* download_manager = |
- TranslateDownloadManager::GetInstance(); |
- download_manager->ClearTranslateScriptForTesting(); |
- download_manager->SetTranslateScriptExpirationDelay(60 * 60 * 1000); |
- |
- ChromeRenderViewHostTestHarness::SetUp(); |
- InfoBarService::CreateForWebContents(web_contents()); |
- TranslateTabHelper::CreateForWebContents(web_contents()); |
- TranslateManager* manager = |
- TranslateTabHelper::GetManagerFromWebContents(web_contents()); |
- manager->set_translate_max_reload_attemps(0); |
- |
- notification_registrar_.Add(this, |
- chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, |
- content::Source<InfoBarService>(infobar_service())); |
- } |
- |
- virtual void TearDown() { |
- process()->sink().ClearMessages(); |
- |
- notification_registrar_.Remove(this, |
- chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, |
- content::Source<InfoBarService>(infobar_service())); |
- |
- ChromeRenderViewHostTestHarness::TearDown(); |
- TestingBrowserProcess::DeleteInstance(); |
- } |
- |
- void SetApplicationLocale(const std::string& locale) { |
- g_browser_process->SetApplicationLocale(locale); |
- TranslateDownloadManager::GetInstance()->set_application_locale( |
- g_browser_process->GetApplicationLocale()); |
- } |
- |
- void SimulateTranslateScriptURLFetch(bool success) { |
- net::TestURLFetcher* fetcher = |
- url_fetcher_factory_.GetFetcherByID(TranslateScript::kFetcherId); |
- ASSERT_TRUE(fetcher); |
- net::URLRequestStatus status; |
- status.set_status(success ? net::URLRequestStatus::SUCCESS : |
- net::URLRequestStatus::FAILED); |
- fetcher->set_url(fetcher->GetOriginalURL()); |
- fetcher->set_status(status); |
- fetcher->set_response_code(success ? 200 : 500); |
- fetcher->delegate()->OnURLFetchComplete(fetcher); |
- } |
- |
- void SimulateSupportedLanguagesURLFetch( |
- bool success, |
- const std::vector<std::string>& languages, |
- bool use_alpha_languages, |
- const std::vector<std::string>& alpha_languages) { |
- net::URLRequestStatus status; |
- status.set_status(success ? net::URLRequestStatus::SUCCESS : |
- net::URLRequestStatus::FAILED); |
- |
- std::string data; |
- if (success) { |
- data = base::StringPrintf( |
- "%s{\"sl\": {\"bla\": \"bla\"}, \"%s\": {", |
- TranslateLanguageList::kLanguageListCallbackName, |
- TranslateLanguageList::kTargetLanguagesKey); |
- const char* comma = ""; |
- for (size_t i = 0; i < languages.size(); ++i) { |
- data += base::StringPrintf( |
- "%s\"%s\": \"UnusedFullName\"", comma, languages[i].c_str()); |
- if (i == 0) |
- comma = ","; |
- } |
- |
- if (use_alpha_languages) { |
- data += base::StringPrintf("},\"%s\": {", |
- TranslateLanguageList::kAlphaLanguagesKey); |
- comma = ""; |
- for (size_t i = 0; i < alpha_languages.size(); ++i) { |
- data += base::StringPrintf("%s\"%s\": 1", comma, |
- alpha_languages[i].c_str()); |
- if (i == 0) |
- comma = ","; |
- } |
- } |
- |
- data += "}})"; |
- } |
- net::TestURLFetcher* fetcher = |
- url_fetcher_factory_.GetFetcherByID(TranslateLanguageList::kFetcherId); |
- ASSERT_TRUE(fetcher != NULL); |
- fetcher->set_url(fetcher->GetOriginalURL()); |
- fetcher->set_status(status); |
- fetcher->set_response_code(success ? 200 : 500); |
- fetcher->SetResponseString(data); |
- fetcher->delegate()->OnURLFetchComplete(fetcher); |
- } |
- |
- void SetPrefObserverExpectation(const char* path) { |
- EXPECT_CALL(*this, OnPreferenceChanged(std::string(path))); |
- } |
- |
- PrefChangeRegistrar::NamedChangeCallback pref_callback_; |
- |
- private: |
- content::NotificationRegistrar notification_registrar_; |
- net::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(TranslateManagerBrowserTest); |
-}; |
- |
-class MockTranslateBubbleFactory : public TranslateBubbleFactory { |
- public: |
- MockTranslateBubbleFactory() { |
- } |
- |
- virtual void ShowImplementation(BrowserWindow* window, |
- content::WebContents* web_contents, |
- TranslateTabHelper::TranslateStep step, |
- TranslateErrors::Type error_type) OVERRIDE { |
- if (model_) { |
- model_->SetViewState( |
- TranslateBubbleModelImpl::TranslateStepToViewState(step)); |
- return; |
- } |
- |
- TranslateTabHelper* translate_tab_helper = |
- TranslateTabHelper::FromWebContents(web_contents); |
- std::string source_language = |
- translate_tab_helper->GetLanguageState().original_language(); |
- std::string target_language = TranslateDownloadManager::GetLanguageCode( |
- g_browser_process->GetApplicationLocale()); |
- scoped_ptr<TranslateUIDelegate> ui_delegate( |
- new TranslateUIDelegate(web_contents, |
- source_language, |
- target_language)); |
- model_.reset(new TranslateBubbleModelImpl(step, ui_delegate.Pass())); |
- } |
- |
- TranslateBubbleModel* model() { return model_.get(); } |
- |
- private: |
- scoped_ptr<TranslateBubbleModel> model_; |
- |
- DISALLOW_COPY_AND_ASSIGN(MockTranslateBubbleFactory); |
-}; |
- |
-namespace { |
- |
-class TestRenderViewContextMenu : public RenderViewContextMenu { |
- public: |
- static TestRenderViewContextMenu* CreateContextMenu( |
- content::WebContents* web_contents) { |
- content::ContextMenuParams params; |
- params.media_type = blink::WebContextMenuData::MediaTypeNone; |
- params.x = 0; |
- params.y = 0; |
- params.has_image_contents = true; |
- params.media_flags = 0; |
- params.spellcheck_enabled = false; |
- params.is_editable = false; |
- params.page_url = web_contents->GetController().GetActiveEntry()->GetURL(); |
-#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 = blink::WebContextMenuData::CanTranslate; |
- return new TestRenderViewContextMenu(web_contents->GetMainFrame(), params); |
- } |
- |
- bool IsItemPresent(int id) { |
- return menu_model_.GetIndexOfCommandId(id) != -1; |
- } |
- |
- virtual void PlatformInit() OVERRIDE { } |
- virtual void PlatformCancel() OVERRIDE { } |
- virtual bool GetAcceleratorForCommandId( |
- int command_id, |
- ui::Accelerator* accelerator) OVERRIDE { return false; } |
- |
- private: |
- TestRenderViewContextMenu(content::RenderFrameHost* render_frame_host, |
- const content::ContextMenuParams& params) |
- : RenderViewContextMenu(render_frame_host, params) { |
- } |
- |
- DISALLOW_COPY_AND_ASSIGN(TestRenderViewContextMenu); |
-}; |
- |
-} // namespace |
- |
-TEST_F(TranslateManagerBrowserTest, NormalTranslate) { |
- SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
- |
- // We should have an infobar. |
- TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
- ASSERT_TRUE(infobar != NULL); |
- EXPECT_EQ(TranslateTabHelper::BEFORE_TRANSLATE, infobar->translate_step()); |
- |
- // Simulate clicking translate. |
- process()->sink().ClearMessages(); |
- infobar->Translate(); |
- |
- // The "Translating..." infobar should be showing. |
- infobar = GetTranslateInfoBar(); |
- ASSERT_TRUE(infobar != NULL); |
- EXPECT_EQ(TranslateTabHelper::TRANSLATING, infobar->translate_step()); |
- |
- // Simulate the translate script being retrieved (it only needs to be done |
- // once in the test as it is cached). |
- SimulateTranslateScriptURLFetch(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. |
- SimulateOnPageTranslated("fr", "en"); |
- |
- // The after translate infobar should be showing. |
- infobar = GetTranslateInfoBar(); |
- ASSERT_TRUE(infobar != NULL); |
- EXPECT_EQ(TranslateTabHelper::AFTER_TRANSLATE, infobar->translate_step()); |
- |
- // Simulate changing the original language and translating. |
- process()->sink().ClearMessages(); |
- std::string new_original_lang = infobar->language_code_at(0); |
- infobar->UpdateOriginalLanguageIndex(0); |
- infobar->Translate(); |
- 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. |
- SimulateOnPageTranslated(new_original_lang, "en"); |
- infobar = GetTranslateInfoBar(); |
- ASSERT_TRUE(infobar != NULL); |
- |
- // Simulate changing the target language and translating. |
- process()->sink().ClearMessages(); |
- std::string new_target_lang = infobar->language_code_at(1); |
- infobar->UpdateTargetLanguageIndex(1); |
- infobar->Translate(); |
- 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. |
- SimulateOnPageTranslated(new_original_lang, new_target_lang); |
- infobar = GetTranslateInfoBar(); |
- ASSERT_TRUE(infobar != NULL); |
- EXPECT_EQ(new_target_lang, infobar->target_language_code()); |
- |
- // Reloading should trigger translation iff Always Translate is on. |
- ReloadAndWait(true); |
- infobar = GetTranslateInfoBar(); |
- ASSERT_TRUE(infobar != NULL); |
- EXPECT_EQ(TranslateTabHelper::BEFORE_TRANSLATE, infobar->translate_step()); |
- infobar->UpdateTargetLanguageIndex(1); |
- infobar->ToggleAlwaysTranslate(); |
- ReloadAndWait(true); |
- infobar = GetTranslateInfoBar(); |
- ASSERT_TRUE(infobar != NULL); |
- EXPECT_EQ(TranslateTabHelper::TRANSLATING, infobar->translate_step()); |
- EXPECT_EQ(new_target_lang, infobar->target_language_code()); |
-} |
- |
-TEST_F(TranslateManagerBrowserTest, TranslateScriptNotAvailable) { |
- SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
- |
- // We should have an infobar. |
- TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
- ASSERT_TRUE(infobar != NULL); |
- EXPECT_EQ(TranslateTabHelper::BEFORE_TRANSLATE, infobar->translate_step()); |
- |
- // Simulate clicking translate. |
- process()->sink().ClearMessages(); |
- infobar->Translate(); |
- SimulateTranslateScriptURLFetch(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(TranslateTabHelper::TRANSLATE_ERROR, infobar->translate_step()); |
-} |
- |
-// 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(TranslateManagerBrowserTest, 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"), "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(web_contents())); |
- menu->Init(); |
- menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE, 0); |
- |
- // To test that bug #49018 if fixed, make sure we deal correctly with errors. |
- // Simulate a failure to fetch the translate script. |
- SimulateTranslateScriptURLFetch(false); |
- TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
- ASSERT_TRUE(infobar != NULL); |
- EXPECT_EQ(TranslateTabHelper::TRANSLATE_ERROR, infobar->translate_step()); |
- EXPECT_TRUE(infobar->is_error()); |
- infobar->MessageInfoBarButtonPressed(); |
- SimulateTranslateScriptURLFetch(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. |
- SimulateOnPageTranslated("fr", "en"); |
- |
- // The after translate infobar should be showing. |
- infobar = GetTranslateInfoBar(); |
- ASSERT_TRUE(infobar != NULL); |
- EXPECT_EQ(TranslateTabHelper::AFTER_TRANSLATE, infobar->translate_step()); |
- EXPECT_EQ("fr", infobar->original_language_code()); |
- EXPECT_EQ("en", infobar->target_language_code()); |
- |
- // Let's run the same steps but this time the server detects the page is |
- // already in English. |
- SimulateNavigation(GURL("http://www.google.com"), "und", true); |
- menu.reset(TestRenderViewContextMenu::CreateContextMenu(web_contents())); |
- menu->Init(); |
- menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE, 0); |
- SimulateOnPageTranslated(1, "en", "en", TranslateErrors::IDENTICAL_LANGUAGES); |
- infobar = GetTranslateInfoBar(); |
- ASSERT_TRUE(infobar != NULL); |
- EXPECT_EQ(TranslateTabHelper::TRANSLATE_ERROR, infobar->translate_step()); |
- EXPECT_EQ(TranslateErrors::IDENTICAL_LANGUAGES, infobar->error_type()); |
- |
- // 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"), "und", true); |
- menu.reset(TestRenderViewContextMenu::CreateContextMenu(web_contents())); |
- menu->Init(); |
- menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE, 0); |
- SimulateOnPageTranslated(2, std::string(), "en", |
- TranslateErrors::UNKNOWN_LANGUAGE); |
- infobar = GetTranslateInfoBar(); |
- ASSERT_TRUE(infobar != NULL); |
- EXPECT_EQ(TranslateTabHelper::TRANSLATE_ERROR, infobar->translate_step()); |
- EXPECT_EQ(TranslateErrors::UNKNOWN_LANGUAGE, infobar->error_type()); |
-} |
- |
-// Tests that we show/don't show an info-bar for the languages. |
-TEST_F(TranslateManagerBrowserTest, TestLanguages) { |
- std::vector<std::string> languages; |
- languages.push_back("en"); |
- languages.push_back("ja"); |
- languages.push_back("fr"); |
- languages.push_back("ht"); |
- languages.push_back("xx"); |
- languages.push_back("zh"); |
- languages.push_back("zh-CN"); |
- languages.push_back("und"); |
- |
- GURL url("http://www.google.com"); |
- for (size_t i = 0; i < languages.size(); ++i) { |
- std::string lang = languages[i]; |
- SCOPED_TRACE(::testing::Message() << "Iteration " << i << |
- " language=" << lang); |
- |
- // We should not have a translate infobar. |
- TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
- ASSERT_TRUE(infobar == NULL); |
- |
- SimulateNavigation(url, lang, true); |
- |
- // Verify we have/don't have an info-bar as expected. |
- infobar = GetTranslateInfoBar(); |
- bool expected = |
- TranslateDownloadManager::IsSupportedLanguage(lang) && lang != "en"; |
- EXPECT_EQ(expected, infobar != NULL); |
- |
- if (infobar != NULL) |
- EXPECT_TRUE(CloseTranslateInfoBar()); |
- } |
-} |
- |
-// Test the fetching of languages from the translate server |
-TEST_F(TranslateManagerBrowserTest, FetchLanguagesFromTranslateServer) { |
- std::vector<std::string> server_languages; |
- // A list of languages to fake being returned by the translate server. |
- server_languages.push_back("aa"); |
- server_languages.push_back("ak"); |
- server_languages.push_back("ab"); |
- server_languages.push_back("en-CA"); |
- server_languages.push_back("zh"); |
- server_languages.push_back("yi"); |
- server_languages.push_back("fr-FR"); |
- server_languages.push_back("xx"); |
- |
- std::vector<std::string> alpha_languages; |
- alpha_languages.push_back("aa"); |
- alpha_languages.push_back("yi"); |
- |
- // First, get the default languages list. Note that calling |
- // GetSupportedLanguages() invokes RequestLanguageList() internally. |
- std::vector<std::string> default_supported_languages; |
- TranslateDownloadManager::GetSupportedLanguages(&default_supported_languages); |
- // To make sure we got the defaults and don't confuse them with the mocks. |
- ASSERT_NE(default_supported_languages.size(), server_languages.size()); |
- |
- // Check that we still get the defaults until the URLFetch has completed. |
- std::vector<std::string> current_supported_languages; |
- TranslateDownloadManager::GetSupportedLanguages(¤t_supported_languages); |
- EXPECT_EQ(default_supported_languages, current_supported_languages); |
- |
- // Also check that it didn't change if we failed the URL fetch. |
- SimulateSupportedLanguagesURLFetch(false, std::vector<std::string>(), |
- true, std::vector<std::string>()); |
- current_supported_languages.clear(); |
- TranslateDownloadManager::GetSupportedLanguages(¤t_supported_languages); |
- EXPECT_EQ(default_supported_languages, current_supported_languages); |
- |
- // Now check that we got the appropriate set of languages from the server. |
- SimulateSupportedLanguagesURLFetch(true, server_languages, |
- true, alpha_languages); |
- current_supported_languages.clear(); |
- TranslateDownloadManager::GetSupportedLanguages(¤t_supported_languages); |
- // "xx" can't be displayed in the Translate inforbar, so this is eliminated. |
- EXPECT_EQ(server_languages.size() - 1, current_supported_languages.size()); |
- // Not sure we need to guarantee the order of languages, so we find them. |
- for (size_t i = 0; i < server_languages.size(); ++i) { |
- const std::string& lang = server_languages[i]; |
- if (lang == "xx") |
- continue; |
- EXPECT_NE(current_supported_languages.end(), |
- std::find(current_supported_languages.begin(), |
- current_supported_languages.end(), |
- lang)); |
- bool is_alpha = std::find(alpha_languages.begin(), |
- alpha_languages.end(), |
- lang) != alpha_languages.end(); |
- EXPECT_EQ(TranslateDownloadManager::IsAlphaLanguage(lang), is_alpha); |
- } |
-} |
- |
-// Test the fetching of languages from the translate server without 'al' |
-// parameter. |
-TEST_F(TranslateManagerBrowserTest, |
- FetchLanguagesFromTranslateServerWithoutAlpha) { |
- std::vector<std::string> server_languages; |
- server_languages.push_back("aa"); |
- server_languages.push_back("ak"); |
- server_languages.push_back("ab"); |
- server_languages.push_back("en-CA"); |
- server_languages.push_back("zh"); |
- server_languages.push_back("yi"); |
- server_languages.push_back("fr-FR"); |
- server_languages.push_back("xx"); |
- |
- std::vector<std::string> alpha_languages; |
- alpha_languages.push_back("aa"); |
- alpha_languages.push_back("yi"); |
- |
- // call GetSupportedLanguages to call RequestLanguageList internally. |
- std::vector<std::string> default_supported_languages; |
- TranslateDownloadManager::GetSupportedLanguages(&default_supported_languages); |
- |
- SimulateSupportedLanguagesURLFetch(true, server_languages, |
- false, alpha_languages); |
- |
- std::vector<std::string> current_supported_languages; |
- TranslateDownloadManager::GetSupportedLanguages(¤t_supported_languages); |
- |
- // "xx" can't be displayed in the Translate inforbar, so this is eliminated. |
- EXPECT_EQ(server_languages.size() - 1, current_supported_languages.size()); |
- |
- for (size_t i = 0; i < server_languages.size(); ++i) { |
- const std::string& lang = server_languages[i]; |
- if (lang == "xx") |
- continue; |
- EXPECT_NE(current_supported_languages.end(), |
- std::find(current_supported_languages.begin(), |
- current_supported_languages.end(), |
- lang)); |
- EXPECT_FALSE(TranslateDownloadManager::IsAlphaLanguage(lang)); |
- } |
-} |
- |
-// Tests auto-translate on page. |
-TEST_F(TranslateManagerBrowserTest, AutoTranslateOnNavigate) { |
- SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
- |
- // Simulate the user translating. |
- TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
- ASSERT_TRUE(infobar != NULL); |
- infobar->Translate(); |
- // Simulate the translate script being retrieved. |
- SimulateTranslateScriptURLFetch(true); |
- SimulateOnPageTranslated("fr", "en"); |
- |
- // Now navigate to a new page in the same language. |
- process()->sink().ClearMessages(); |
- SimulateNavigation(GURL("http://news.google.fr"), "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"), "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(TranslateManagerBrowserTest, MultipleOnPageContents) { |
- SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
- |
- // Simulate clicking 'Nope' (don't translate). |
- EXPECT_TRUE(DenyTranslation()); |
- EXPECT_EQ(0U, infobar_service()->infobar_count()); |
- |
- // Send a new PageContents, we should not show an infobar. |
- SimulateOnTranslateLanguageDetermined("fr", true); |
- EXPECT_EQ(0U, infobar_service()->infobar_count()); |
- |
- // Do the same steps but simulate closing the infobar this time. |
- SimulateNavigation(GURL("http://www.youtube.fr"), "fr", true); |
- EXPECT_TRUE(CloseTranslateInfoBar()); |
- EXPECT_EQ(0U, infobar_service()->infobar_count()); |
- SimulateOnTranslateLanguageDetermined("fr", true); |
- EXPECT_EQ(0U, infobar_service()->infobar_count()); |
-} |
- |
-// Test that reloading the page brings back the infobar if the |
-// reload succeeded and does not bring it back the reload fails. |
-TEST_F(TranslateManagerBrowserTest, Reload) { |
- SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
- |
- EXPECT_TRUE(CloseTranslateInfoBar()); |
- |
- // Reload should bring back the infobar if the reload succeeds. |
- ReloadAndWait(true); |
- EXPECT_TRUE(GetTranslateInfoBar() != NULL); |
- EXPECT_TRUE(CloseTranslateInfoBar()); |
- |
- // ...But not show it if the reload fails. |
- ReloadAndWait(false); |
- EXPECT_TRUE(GetTranslateInfoBar() == NULL); |
- |
- // If we set reload attempts to a high value, we will not see the infobar |
- // immediately. |
- TranslateManager* manager = |
- TranslateTabHelper::GetManagerFromWebContents(web_contents()); |
- manager->set_translate_max_reload_attemps(100); |
- ReloadAndWait(true); |
- 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(TranslateManagerBrowserTest, ReloadFromLocationBar) { |
- GURL url("http://www.google.fr"); |
- SimulateNavigation(url, "fr", true); |
- |
- 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(web_contents()); |
- web_contents()->GetController().LoadURL(url, content::Referrer(), |
- content::PAGE_TRANSITION_TYPED, |
- std::string()); |
- rvh_tester()->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 content::LoadCommittedDetails& nav_details = |
- nav_observer.load_committed_details(); |
- EXPECT_TRUE(nav_details.entry != NULL); // There was a navigation. |
- EXPECT_EQ(content::NAVIGATION_TYPE_SAME_PAGE, nav_details.type); |
- |
- // The TranslateManager class processes the navigation entry committed |
- // notification in a posted task; process that task. |
- base::MessageLoop::current()->RunUntilIdle(); |
- EXPECT_TRUE(GetTranslateInfoBar() != NULL); |
-} |
- |
-// Tests that a closed translate infobar does not reappear when navigating |
-// in-page. |
-TEST_F(TranslateManagerBrowserTest, CloseInfoBarInPageNavigation) { |
- SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
- |
- EXPECT_TRUE(CloseTranslateInfoBar()); |
- |
- // Navigate in page, no infobar should be shown. |
- SimulateNavigation(GURL("http://www.google.fr/#ref1"), "fr", true); |
- EXPECT_TRUE(GetTranslateInfoBar() == NULL); |
- |
- // Navigate out of page, a new infobar should show. |
- SimulateNavigation(GURL("http://www.google.fr/foot"), "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(TranslateManagerBrowserTest, CloseInfoBarInSubframeNavigation) { |
- SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
- |
- EXPECT_TRUE(CloseTranslateInfoBar()); |
- |
- // Simulate a sub-frame auto-navigating. |
- rvh_tester()->SendNavigateWithTransition( |
- 1, GURL("http://pub.com"), content::PAGE_TRANSITION_AUTO_SUBFRAME); |
- EXPECT_TRUE(GetTranslateInfoBar() == NULL); |
- |
- // Simulate the user navigating in a sub-frame. |
- rvh_tester()->SendNavigateWithTransition( |
- 2, GURL("http://pub.com"), content::PAGE_TRANSITION_MANUAL_SUBFRAME); |
- EXPECT_TRUE(GetTranslateInfoBar() == NULL); |
- |
- // Navigate out of page, a new infobar should show. |
- SimulateNavigation(GURL("http://www.google.fr/foot"), "fr", true); |
- EXPECT_TRUE(GetTranslateInfoBar() != NULL); |
-} |
- |
-// Tests that denying translation is sticky when navigating in page. |
-TEST_F(TranslateManagerBrowserTest, DenyTranslateInPageNavigation) { |
- SimulateNavigation(GURL("http://www.google.fr"), "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"), "fr", true); |
- EXPECT_TRUE(GetTranslateInfoBar() == NULL); |
- |
- // Navigate out of page, a new infobar should show. |
- SimulateNavigation(GURL("http://www.google.fr/foot"), "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(TranslateManagerBrowserTest, TranslateCloseInfoBarInPageNavigation) { |
- SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
- |
- // Simulate the user translating. |
- TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
- ASSERT_TRUE(infobar != NULL); |
- infobar->Translate(); |
- // Simulate the translate script being retrieved. |
- SimulateTranslateScriptURLFetch(true); |
- SimulateOnPageTranslated("fr", "en"); |
- |
- EXPECT_TRUE(CloseTranslateInfoBar()); |
- |
- // Navigate in page, no infobar should be shown. |
- SimulateNavigation(GURL("http://www.google.fr/#ref1"), "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"), "de", true); |
- EXPECT_TRUE(GetTranslateInfoBar() != NULL); |
-} |
- |
-// Tests that the after translate the infobar still shows when navigating |
-// in-page. |
-TEST_F(TranslateManagerBrowserTest, TranslateInPageNavigation) { |
- SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
- |
- // Simulate the user translating. |
- TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
- ASSERT_TRUE(infobar != NULL); |
- infobar->Translate(); |
- SimulateTranslateScriptURLFetch(true); |
- SimulateOnPageTranslated("fr", "en"); |
- // The after translate infobar is showing. |
- infobar = GetTranslateInfoBar(); |
- ASSERT_TRUE(infobar != NULL); |
- |
- // 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"), "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(TranslateManagerBrowserTest, CLDReportsUnsupportedPageLanguage) { |
- // Simulate navigating to a page and getting an unsupported language. |
- SimulateNavigation(GURL("http://www.google.com"), "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(TranslateManagerBrowserTest, ServerReportsUnsupportedLanguage) { |
- SimulateNavigation(GURL("http://mail.google.fr"), "fr", true); |
- TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
- ASSERT_TRUE(infobar != NULL); |
- process()->sink().ClearMessages(); |
- infobar->Translate(); |
- SimulateTranslateScriptURLFetch(true); |
- // Simulate the render notifying the translation has been done, but it |
- // reports a language we don't support. |
- SimulateOnPageTranslated("qbz", "en"); |
- |
- // An error infobar should be showing to report that we don't support this |
- // language. |
- infobar = GetTranslateInfoBar(); |
- ASSERT_TRUE(infobar != NULL); |
- EXPECT_EQ(TranslateTabHelper::TRANSLATE_ERROR, infobar->translate_step()); |
- |
- // 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( |
- ChromeViewMsg_RevertTranslation::ID); |
- EXPECT_TRUE(message != NULL); |
- // And it should have removed the infobar. |
- EXPECT_TRUE(GetTranslateInfoBar() == NULL); |
-} |
- |
-// Tests that no translate infobar is shown and context menu is disabled, when |
-// Chrome is in a language that the translate server does not support. |
-TEST_F(TranslateManagerBrowserTest, UnsupportedUILanguage) { |
- std::string original_lang = g_browser_process->GetApplicationLocale(); |
- SetApplicationLocale("qbz"); |
- |
- // Make sure that the accept language list only contains unsupported languages |
- Profile* profile = |
- Profile::FromBrowserContext(web_contents()->GetBrowserContext()); |
- PrefService* prefs = profile->GetPrefs(); |
- prefs->SetString(prefs::kAcceptLanguages, "qbz"); |
- |
- // Simulate navigating to a page in a language supported by the translate |
- // server. |
- SimulateNavigation(GURL("http://www.google.com"), "en", true); |
- |
- // No info-bar should be shown. |
- EXPECT_TRUE(GetTranslateInfoBar() == NULL); |
- |
- // And the context menu option should be disabled too. |
- scoped_ptr<TestRenderViewContextMenu> menu( |
- TestRenderViewContextMenu::CreateContextMenu(web_contents())); |
- menu->Init(); |
- EXPECT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_TRANSLATE)); |
- EXPECT_FALSE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE)); |
- |
- SetApplicationLocale(original_lang); |
-} |
- |
-// Tests that the first supported accept language is selected |
-TEST_F(TranslateManagerBrowserTest, TranslateAcceptLanguage) { |
- // Set locate to non-existant language |
- std::string original_lang = g_browser_process->GetApplicationLocale(); |
- SetApplicationLocale("qbz"); |
- |
- // Set Qbz and French as the only accepted languages |
- Profile* profile = |
- Profile::FromBrowserContext(web_contents()->GetBrowserContext()); |
- PrefService* prefs = profile->GetPrefs(); |
- prefs->SetString(prefs::kAcceptLanguages, "qbz,fr"); |
- |
- // Go to a German page |
- SimulateNavigation(GURL("http://google.de"), "de", true); |
- |
- // Expect the infobar to pop up |
- EXPECT_TRUE(GetTranslateInfoBar() != NULL); |
- |
- // Set Qbz and English-US as the only accepted languages to test the country |
- // code removal code which was causing a crash as filed in Issue 90106, |
- // a crash caused by a language with a country code that wasn't recognized. |
- prefs->SetString(prefs::kAcceptLanguages, "qbz,en-us"); |
- |
- // Go to a German page |
- SimulateNavigation(GURL("http://google.de"), "de", true); |
- |
- // Expect the infobar to pop up |
- EXPECT_TRUE(GetTranslateInfoBar() != NULL); |
-} |
- |
-// Tests that the translate enabled preference is honored. |
-TEST_F(TranslateManagerBrowserTest, TranslateEnabledPref) { |
- // Make sure the pref allows translate. |
- Profile* profile = |
- Profile::FromBrowserContext(web_contents()->GetBrowserContext()); |
- PrefService* prefs = profile->GetPrefs(); |
- prefs->SetBoolean(prefs::kEnableTranslate, true); |
- |
- SimulateNavigation(GURL("http://www.google.fr"), "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. |
- SimulateOnTranslateLanguageDetermined("fr", true); |
- infobar = GetTranslateInfoBar(); |
- EXPECT_TRUE(infobar == NULL); |
-} |
- |
-// Tests the "Never translate <language>" pref. |
-TEST_F(TranslateManagerBrowserTest, NeverTranslateLanguagePref) { |
- GURL url("http://www.google.fr"); |
- SimulateNavigation(url, "fr", true); |
- |
- // An infobar should be shown. |
- EXPECT_TRUE(GetTranslateInfoBar() != NULL); |
- |
- // Select never translate this language. |
- Profile* profile = |
- Profile::FromBrowserContext(web_contents()->GetBrowserContext()); |
- PrefService* prefs = profile->GetPrefs(); |
- PrefChangeRegistrar registrar; |
- registrar.Init(prefs); |
- registrar.Add(TranslatePrefs::kPrefTranslateBlockedLanguages, |
- pref_callback_); |
- scoped_ptr<TranslatePrefs> translate_prefs( |
- TranslateTabHelper::CreateTranslatePrefs(prefs)); |
- EXPECT_FALSE(translate_prefs->IsBlockedLanguage("fr")); |
- TranslateAcceptLanguages* accept_languages = |
- TranslateTabHelper::GetTranslateAcceptLanguages(profile); |
- EXPECT_TRUE(translate_prefs->CanTranslateLanguage(accept_languages, "fr")); |
- SetPrefObserverExpectation(TranslatePrefs::kPrefTranslateBlockedLanguages); |
- translate_prefs->BlockLanguage("fr"); |
- EXPECT_TRUE(translate_prefs->IsBlockedLanguage("fr")); |
- EXPECT_FALSE(translate_prefs->IsSiteBlacklisted(url.host())); |
- EXPECT_FALSE(translate_prefs->CanTranslateLanguage(accept_languages, "fr")); |
- |
- EXPECT_TRUE(CloseTranslateInfoBar()); |
- |
- // Navigate to a new page also in French. |
- SimulateNavigation(GURL("http://wwww.youtube.fr"), "fr", true); |
- |
- // There should not be a translate infobar. |
- EXPECT_TRUE(GetTranslateInfoBar() == NULL); |
- |
- // Remove the language from the blacklist. |
- SetPrefObserverExpectation(TranslatePrefs::kPrefTranslateBlockedLanguages); |
- translate_prefs->UnblockLanguage("fr"); |
- EXPECT_FALSE(translate_prefs->IsBlockedLanguage("fr")); |
- EXPECT_FALSE(translate_prefs->IsSiteBlacklisted(url.host())); |
- EXPECT_TRUE(translate_prefs->CanTranslateLanguage(accept_languages, "fr")); |
- |
- // Navigate to a page in French. |
- SimulateNavigation(url, "fr", true); |
- |
- // There should be a translate infobar. |
- EXPECT_TRUE(GetTranslateInfoBar() != NULL); |
-} |
- |
-// Tests the "Never translate this site" pref. |
-TEST_F(TranslateManagerBrowserTest, NeverTranslateSitePref) { |
- GURL url("http://www.google.fr"); |
- std::string host(url.host()); |
- SimulateNavigation(url, "fr", true); |
- |
- // An infobar should be shown. |
- EXPECT_TRUE(GetTranslateInfoBar() != NULL); |
- |
- // Select never translate this site. |
- Profile* profile = |
- Profile::FromBrowserContext(web_contents()->GetBrowserContext()); |
- PrefService* prefs = profile->GetPrefs(); |
- PrefChangeRegistrar registrar; |
- registrar.Init(prefs); |
- registrar.Add(TranslatePrefs::kPrefTranslateSiteBlacklist, pref_callback_); |
- scoped_ptr<TranslatePrefs> translate_prefs( |
- TranslateTabHelper::CreateTranslatePrefs(prefs)); |
- EXPECT_FALSE(translate_prefs->IsSiteBlacklisted(host)); |
- TranslateAcceptLanguages* accept_languages = |
- TranslateTabHelper::GetTranslateAcceptLanguages(profile); |
- EXPECT_TRUE(translate_prefs->CanTranslateLanguage(accept_languages, "fr")); |
- SetPrefObserverExpectation(TranslatePrefs::kPrefTranslateSiteBlacklist); |
- translate_prefs->BlacklistSite(host); |
- EXPECT_TRUE(translate_prefs->IsSiteBlacklisted(host)); |
- EXPECT_TRUE(translate_prefs->CanTranslateLanguage(accept_languages, "fr")); |
- |
- EXPECT_TRUE(CloseTranslateInfoBar()); |
- |
- // Navigate to a new page also on the same site. |
- SimulateNavigation(GURL("http://www.google.fr/hello"), "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->CanTranslateLanguage(accept_languages, "fr")); |
- |
- // Navigate to a page in French. |
- SimulateNavigation(url, "fr", true); |
- |
- // There should be a translate infobar. |
- EXPECT_TRUE(GetTranslateInfoBar() != NULL); |
-} |
- |
-// Tests the "Always translate this language" pref. |
-TEST_F(TranslateManagerBrowserTest, AlwaysTranslateLanguagePref) { |
- // Select always translate French to English. |
- Profile* profile = |
- Profile::FromBrowserContext(web_contents()->GetBrowserContext()); |
- PrefService* prefs = profile->GetPrefs(); |
- PrefChangeRegistrar registrar; |
- registrar.Init(prefs); |
- registrar.Add(TranslatePrefs::kPrefTranslateWhitelists, pref_callback_); |
- scoped_ptr<TranslatePrefs> translate_prefs( |
- TranslateTabHelper::CreateTranslatePrefs(prefs)); |
- SetPrefObserverExpectation(TranslatePrefs::kPrefTranslateWhitelists); |
- translate_prefs->WhitelistLanguagePair("fr", "en"); |
- |
- // Load a page in French. |
- SimulateNavigation(GURL("http://www.google.fr"), "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(TranslateTabHelper::TRANSLATING, infobar->translate_step()); |
- SimulateTranslateScriptURLFetch(true); |
- 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"), "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*>(web_contents()->GetBrowserContext()); |
- test_profile->ForceIncognito(true); |
- SimulateNavigation(GURL("http://www.youtube.fr"), "fr", true); |
- EXPECT_FALSE(GetTranslateMessage(&page_id, &original_lang, &target_lang)); |
- EXPECT_TRUE(GetTranslateInfoBar() != NULL); |
- EXPECT_TRUE(CloseTranslateInfoBar()); |
- test_profile->ForceIncognito(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"), "fr", true); |
- EXPECT_FALSE(GetTranslateMessage(&page_id, &original_lang, &target_lang)); |
- infobar = GetTranslateInfoBar(); |
- ASSERT_TRUE(infobar != NULL); |
- EXPECT_EQ(TranslateTabHelper::BEFORE_TRANSLATE, infobar->translate_step()); |
-} |
- |
-// Context menu. |
-TEST_F(TranslateManagerBrowserTest, ContextMenu) { |
- // Blacklist www.google.fr and French for translation. |
- GURL url("http://www.google.fr"); |
- Profile* profile = |
- Profile::FromBrowserContext(web_contents()->GetBrowserContext()); |
- scoped_ptr<TranslatePrefs> translate_prefs( |
- TranslateTabHelper::CreateTranslatePrefs(profile->GetPrefs())); |
- translate_prefs->BlockLanguage("fr"); |
- translate_prefs->BlacklistSite(url.host()); |
- EXPECT_TRUE(translate_prefs->IsBlockedLanguage("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(web_contents())); |
- menu->Init(); |
- EXPECT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_TRANSLATE)); |
- EXPECT_FALSE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE)); |
- |
- // Simulate receiving the language. |
- SimulateOnTranslateLanguageDetermined("fr", true); |
- menu.reset(TestRenderViewContextMenu::CreateContextMenu(web_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, 0); |
- |
- // That should have triggered a translation. |
- // The "translating..." infobar should be showing. |
- TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
- ASSERT_TRUE(infobar != NULL); |
- EXPECT_EQ(TranslateTabHelper::TRANSLATING, infobar->translate_step()); |
- SimulateTranslateScriptURLFetch(true); |
- 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->IsBlockedLanguage("fr")); |
- EXPECT_FALSE(translate_prefs->IsSiteBlacklisted(url.host())); |
- |
- // Let's simulate the page being translated. |
- SimulateOnPageTranslated("fr", "en"); |
- |
- // The translate menu should now be disabled. |
- menu.reset(TestRenderViewContextMenu::CreateContextMenu(web_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"), "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(web_contents())); |
- menu->Init(); |
- EXPECT_TRUE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE)); |
- menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE, 0); |
- // 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"), "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(web_contents())); |
- menu->Init(); |
- EXPECT_TRUE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE)); |
- SimulateOnPageTranslated("de", "en"); |
- menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE, 0); |
- // 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 enabled when the page is in an |
- // unknown language. |
- SimulateNavigation(url, "und", true); |
- menu.reset(TestRenderViewContextMenu::CreateContextMenu(web_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 enabled even if the page is in an |
- // unsupported language. |
- SimulateNavigation(url, "qbz", true); |
- menu.reset(TestRenderViewContextMenu::CreateContextMenu(web_contents())); |
- menu->Init(); |
- EXPECT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_TRANSLATE)); |
- EXPECT_TRUE(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(TranslateManagerBrowserTest, BeforeTranslateExtraButtons) { |
- Profile* profile = |
- Profile::FromBrowserContext(web_contents()->GetBrowserContext()); |
- scoped_ptr<TranslatePrefs> translate_prefs( |
- TranslateTabHelper::CreateTranslatePrefs(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*>(web_contents()->GetBrowserContext()); |
- static_cast<extensions::TestExtensionSystem*>( |
- extensions::ExtensionSystem::Get(test_profile))-> |
- CreateProcessManager(); |
- test_profile->ForceIncognito(true); |
- for (int i = 0; i < 8; ++i) { |
- SCOPED_TRACE(::testing::Message() << "Iteration " << i << |
- " incognito mode=" << test_profile->IsOffTheRecord()); |
- SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
- infobar = GetTranslateInfoBar(); |
- ASSERT_TRUE(infobar != NULL); |
- EXPECT_EQ(TranslateTabHelper::BEFORE_TRANSLATE, infobar->translate_step()); |
- if (i < 7) { |
- EXPECT_FALSE(infobar->ShouldShowAlwaysTranslateShortcut()); |
- infobar->Translate(); |
- process()->sink().ClearMessages(); |
- } else { |
- EXPECT_TRUE(infobar->ShouldShowAlwaysTranslateShortcut()); |
- } |
- if (i == 3) |
- test_profile->ForceIncognito(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). |
- SimulateTranslateScriptURLFetch(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->ForceIncognito(true); |
- for (int i = 0; i < 8; ++i) { |
- SCOPED_TRACE(::testing::Message() << "Iteration " << i << |
- " incognito mode=" << test_profile->IsOffTheRecord()); |
- SimulateNavigation(GURL("http://www.google.de"), "de", true); |
- infobar = GetTranslateInfoBar(); |
- ASSERT_TRUE(infobar != NULL); |
- EXPECT_EQ(TranslateTabHelper::BEFORE_TRANSLATE, infobar->translate_step()); |
- if (i < 7) { |
- EXPECT_FALSE(infobar->ShouldShowNeverTranslateShortcut()); |
- infobar->TranslationDeclined(); |
- } else { |
- EXPECT_TRUE(infobar->ShouldShowNeverTranslateShortcut()); |
- } |
- if (i == 3) |
- test_profile->ForceIncognito(false); |
- } |
- // Simulate the user pressing "Never translate French". |
- infobar->NeverTranslatePageLanguage(); |
- EXPECT_TRUE(translate_prefs->IsBlockedLanguage("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(TranslateManagerBrowserTest, NonTranslatablePage) { |
- SimulateNavigation(GURL("http://mail.google.fr"), "fr", false); |
- |
- // We should not have an infobar. |
- EXPECT_TRUE(GetTranslateInfoBar() == NULL); |
- |
- // The context menu is enabled to allow users to force translation. |
- scoped_ptr<TestRenderViewContextMenu> menu( |
- TestRenderViewContextMenu::CreateContextMenu(web_contents())); |
- menu->Init(); |
- EXPECT_TRUE(menu->IsItemPresent(IDC_CONTENT_CONTEXT_TRANSLATE)); |
- EXPECT_TRUE(menu->IsCommandIdEnabled(IDC_CONTENT_CONTEXT_TRANSLATE)); |
-} |
- |
-// Tests that the script is expired and refetched as expected. |
-TEST_F(TranslateManagerBrowserTest, ScriptExpires) { |
- ExpireTranslateScriptImmediately(); |
- |
- SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
- TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
- ASSERT_TRUE(infobar != NULL); |
- process()->sink().ClearMessages(); |
- infobar->Translate(); |
- SimulateTranslateScriptURLFetch(true); |
- SimulateOnPageTranslated("fr", "en"); |
- |
- // A task should have been posted to clear the script, run it. |
- base::MessageLoop::current()->RunUntilIdle(); |
- |
- // Do another navigation and translation. |
- SimulateNavigation(GURL("http://www.google.es"), "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( |
- ChromeViewMsg_TranslatePage::ID) == NULL); |
- // Now simulate the URL fetch. |
- SimulateTranslateScriptURLFetch(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); |
-} |
- |
-TEST_F(TranslateManagerBrowserTest, DownloadsAndHistoryNotTranslated) { |
- ASSERT_FALSE(TranslateManager::IsTranslatableURL( |
- GURL(chrome::kChromeUIDownloadsURL))); |
- ASSERT_FALSE(TranslateManager::IsTranslatableURL( |
- GURL(chrome::kChromeUIHistoryURL))); |
-} |
- |
-#if defined(USE_AURA) |
- |
-TEST_F(TranslateManagerBrowserTest, BubbleNormalTranslate) { |
- // Prepare for the bubble |
- TranslateService::SetUseInfobar(false); |
- MockTranslateBubbleFactory* factory = new MockTranslateBubbleFactory; |
- scoped_ptr<TranslateBubbleFactory> factory_ptr(factory); |
- TranslateBubbleFactory::SetFactory(factory); |
- |
- SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
- |
- // Check the bubble exists instead of the infobar. |
- TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
- ASSERT_TRUE(infobar == NULL); |
- TranslateBubbleModel* bubble = factory->model(); |
- ASSERT_TRUE(bubble != NULL); |
- EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE, |
- bubble->GetViewState()); |
- |
- // Simulate clicking translate. |
- process()->sink().ClearMessages(); |
- bubble->Translate(); |
- |
- // Check the bubble shows "Translating...". |
- bubble = factory->model(); |
- ASSERT_TRUE(bubble != NULL); |
- EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_TRANSLATING, |
- bubble->GetViewState()); |
- |
- // Simulate the translate script being retrieved (it only needs to be done |
- // once in the test as it is cached). |
- SimulateTranslateScriptURLFetch(true); |
- |
- // Simulate the render notifying the translation has been done. |
- SimulateOnPageTranslated("fr", "en"); |
- |
- // Check the bubble shows "Translated." |
- bubble = factory->model(); |
- ASSERT_TRUE(bubble != NULL); |
- EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_AFTER_TRANSLATE, |
- bubble->GetViewState()); |
-} |
- |
-TEST_F(TranslateManagerBrowserTest, BubbleTranslateScriptNotAvailable) { |
- // Prepare for the bubble |
- TranslateService::SetUseInfobar(false); |
- MockTranslateBubbleFactory* factory = new MockTranslateBubbleFactory; |
- scoped_ptr<TranslateBubbleFactory> factory_ptr(factory); |
- TranslateBubbleFactory::SetFactory(factory); |
- |
- SimulateNavigation(GURL("http://www.google.fr"), "fr", true); |
- |
- // Check the bubble exists instead of the infobar. |
- TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
- ASSERT_TRUE(infobar == NULL); |
- TranslateBubbleModel* bubble = factory->model(); |
- ASSERT_TRUE(bubble != NULL); |
- EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_BEFORE_TRANSLATE, |
- bubble->GetViewState()); |
- |
- // Simulate clicking translate. |
- process()->sink().ClearMessages(); |
- bubble->Translate(); |
- SimulateTranslateScriptURLFetch(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. |
- bubble = factory->model(); |
- ASSERT_TRUE(bubble != NULL); |
- EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_ERROR, |
- bubble->GetViewState()); |
-} |
- |
-TEST_F(TranslateManagerBrowserTest, BubbleUnknownLanguage) { |
- // Prepare for the bubble |
- TranslateService::SetUseInfobar(false); |
- MockTranslateBubbleFactory* factory = new MockTranslateBubbleFactory; |
- scoped_ptr<TranslateBubbleFactory> factory_ptr(factory); |
- TranslateBubbleFactory::SetFactory(factory); |
- |
- // 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"), "und", true); |
- |
- // We should not have a bubble as we don't know the language. |
- ASSERT_TRUE(factory->model() == NULL); |
- |
- // Translate the page anyway throught the context menu. |
- scoped_ptr<TestRenderViewContextMenu> menu( |
- TestRenderViewContextMenu::CreateContextMenu(web_contents())); |
- menu->Init(); |
- menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE, 0); |
- |
- // Check the bubble exists instead of the infobar. |
- TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); |
- ASSERT_TRUE(infobar == NULL); |
- TranslateBubbleModel* bubble = factory->model(); |
- ASSERT_TRUE(bubble != NULL); |
- EXPECT_EQ(TranslateBubbleModel::VIEW_STATE_TRANSLATING, |
- bubble->GetViewState()); |
-} |
+#include "url/gurl.h" |
-#endif // defined(USE_AURA) |
+class TranslateManagerBrowserTest : public InProcessBrowserTest {}; |
// Test is flaky on Win http://crbug.com/166334 |
#if defined(OS_WIN) |
@@ -1589,7 +24,7 @@ TEST_F(TranslateManagerBrowserTest, BubbleUnknownLanguage) { |
#endif |
// Test that session restore restores the translate infobar and other translate |
// settings. |
-IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, |
+IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, |
MAYBE_PRE_TranslateSessionRestore) { |
SessionStartupPref pref(SessionStartupPref::LAST); |
SessionStartupPref::SetStartupPref(browser()->profile(), pref); |
@@ -1621,7 +56,8 @@ IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, |
#else |
#define MAYBE_TranslateSessionRestore TranslateSessionRestore |
#endif |
-IN_PROC_BROWSER_TEST_F(InProcessBrowserTest, MAYBE_TranslateSessionRestore) { |
+IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, |
+ MAYBE_TranslateSessionRestore) { |
content::WebContents* current_web_contents = |
browser()->tab_strip_model()->GetActiveWebContents(); |
content::Source<content::WebContents> source(current_web_contents); |