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 7dab3efe9ecf711e9430195186d1e6b442dd3d9f..379f194884f9ec7f04ea4211b9dfa9d24e1b1abe 100644 |
--- a/chrome/browser/translate/translate_manager_browsertest.cc |
+++ b/chrome/browser/translate/translate_manager_browsertest.cc |
@@ -15,9 +15,92 @@ |
#include "chrome/test/base/in_process_browser_test.h" |
#include "chrome/test/base/ui_test_utils.h" |
#include "components/translate/core/common/language_detection_details.h" |
+#include "content/public/browser/notification_service.h" |
#include "url/gurl.h" |
-class TranslateManagerBrowserTest : public InProcessBrowserTest {}; |
+class TranslateManagerBrowserTest : public InProcessBrowserTest { |
+ public: |
+ TranslateManagerBrowserTest() {} |
jochen (gone - plz use gerrit)
2015/10/26 15:41:36
please add a virtual dtor
dglazkov
2015/10/30 18:43:53
Done.
|
+ |
+ std::string GetLanguageFor(content::WebContents* web_contents) { |
+ translate::LanguageDetectionDetails details; |
+ content::Source<content::WebContents> source(web_contents); |
+ language_detected_signal_->GetDetailsFor(source.map_key(), &details); |
+ return details.adopted_language; |
+ } |
+ |
+ void WaitUntilLanguageDetected() { |
+ language_detected_signal_->Wait(); |
+ } |
+ |
+ void ResetObserver() { |
+ language_detected_signal_.reset(new LangageDetectionObserver( |
+ chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, |
+ content::NotificationService::AllSources())); |
+ } |
+ |
+ protected: |
+ // InProcessBrowserTest members. |
+ void SetUp() override { |
+ scoped_ptr<test::CldDataHarness> cld_data_harness = |
+ test::CldDataHarnessFactory::Get()->CreateCldDataHarness(); |
+ ASSERT_NO_FATAL_FAILURE(cld_data_harness->Init()); |
+ InProcessBrowserTest::SetUp(); |
+ } |
+ void SetUpOnMainThread() override { |
+ ResetObserver(); |
+ InProcessBrowserTest::SetUpOnMainThread(); |
+ } |
+ |
+ private: |
+ using LangageDetectionObserver = |
+ ui_test_utils::WindowedNotificationObserverWithDetails< |
+ translate::LanguageDetectionDetails>; |
+ |
+ scoped_ptr<LangageDetectionObserver> language_detected_signal_; |
+}; |
jochen (gone - plz use gerrit)
2015/10/26 15:41:36
disallow copy & assign
dglazkov
2015/10/30 18:43:53
This is not necessary, since the base class testin
|
+ |
+// Tests that the CLD (Compact Language Detection) works properly. |
+IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageLanguageDetection) { |
+ ASSERT_TRUE(test_server()->Start()); |
+ |
+ // The InProcessBrowserTest opens a new tab, let's wait for that first. |
+ WaitUntilLanguageDetected(); |
+ |
+ content::WebContents* current_web_contents = |
+ browser()->tab_strip_model()->GetActiveWebContents(); |
+ |
+ std::string adopted_language = GetLanguageFor(current_web_contents); |
+ EXPECT_EQ("und", adopted_language); |
+ |
+ // Open a new tab with a page in English. |
+ AddTabAtIndex(0, GURL(test_server()->GetURL("files/english_page.html")), |
+ ui::PAGE_TRANSITION_TYPED); |
+ |
+ ResetObserver(); |
+ |
+ current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); |
+ ChromeTranslateClient* chrome_translate_client = |
+ ChromeTranslateClient::FromWebContents(current_web_contents); |
+ |
+ WaitUntilLanguageDetected(); |
+ adopted_language = GetLanguageFor(current_web_contents); |
+ EXPECT_EQ("en", adopted_language); |
+ EXPECT_EQ("en", |
+ chrome_translate_client->GetLanguageState().original_language()); |
+ |
+ ResetObserver(); |
+ |
+ // Now navigate to a page in French. |
+ ui_test_utils::NavigateToURL( |
+ browser(), GURL(test_server()->GetURL("files/french_page.html"))); |
+ |
+ WaitUntilLanguageDetected(); |
+ adopted_language = GetLanguageFor(current_web_contents); |
+ EXPECT_EQ("fr", adopted_language); |
+ EXPECT_EQ("fr", |
+ chrome_translate_client->GetLanguageState().original_language()); |
+} |
// Test is flaky on Win http://crbug.com/166334 |
#if defined(OS_WIN) |
@@ -29,31 +112,28 @@ class TranslateManagerBrowserTest : public InProcessBrowserTest {}; |
// settings. |
IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, |
MAYBE_PRE_TranslateSessionRestore) { |
- scoped_ptr<test::CldDataHarness> cld_data_harness = |
- test::CldDataHarnessFactory::Get()->CreateCldDataHarness(); |
- ASSERT_NO_FATAL_FAILURE(cld_data_harness->Init()); |
SessionStartupPref pref(SessionStartupPref::LAST); |
SessionStartupPref::SetStartupPref(browser()->profile(), pref); |
+ WaitUntilLanguageDetected(); |
+ |
content::WebContents* current_web_contents = |
browser()->tab_strip_model()->GetActiveWebContents(); |
ChromeTranslateClient* chrome_translate_client = |
ChromeTranslateClient::FromWebContents(current_web_contents); |
- content::Source<content::WebContents> source(current_web_contents); |
- ui_test_utils::WindowedNotificationObserverWithDetails< |
- translate::LanguageDetectionDetails> |
- fr_language_detected_signal(chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, |
- source); |
+ std::string adopted_language = GetLanguageFor(current_web_contents); |
+ EXPECT_EQ("und", adopted_language); |
+ |
+ ResetObserver(); |
GURL french_url = ui_test_utils::GetTestUrl( |
base::FilePath(), base::FilePath(FILE_PATH_LITERAL("french_page.html"))); |
ui_test_utils::NavigateToURL(browser(), french_url); |
- fr_language_detected_signal.Wait(); |
- translate::LanguageDetectionDetails details; |
- EXPECT_TRUE(fr_language_detected_signal.GetDetailsFor( |
- source.map_key(), &details)); |
- EXPECT_EQ("fr", details.adopted_language); |
+ |
+ WaitUntilLanguageDetected(); |
+ adopted_language = GetLanguageFor(current_web_contents); |
+ EXPECT_EQ("fr", adopted_language); |
EXPECT_EQ("fr", |
chrome_translate_client->GetLanguageState().original_language()); |
} |
@@ -65,16 +145,11 @@ IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, |
#endif |
IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, |
MAYBE_TranslateSessionRestore) { |
- scoped_ptr<test::CldDataHarness> cld_data_harness = |
- test::CldDataHarnessFactory::Get()->CreateCldDataHarness(); |
- ASSERT_NO_FATAL_FAILURE(cld_data_harness->Init()); |
- content::WebContents* current_web_contents = |
- browser()->tab_strip_model()->GetActiveWebContents(); |
- content::Source<content::WebContents> source(current_web_contents); |
+ WaitUntilLanguageDetected(); |
+ |
+ content::WebContents* restored_web_contents = |
+ browser()->tab_strip_model()->GetWebContentsAt(0); |
- ui_test_utils::WindowedNotificationObserverWithDetails< |
- translate::LanguageDetectionDetails> |
- fr_language_detected_signal(chrome::NOTIFICATION_TAB_LANGUAGE_DETERMINED, |
- source); |
- fr_language_detected_signal.Wait(); |
+ std::string adopted_language = GetLanguageFor(restored_web_contents); |
+ EXPECT_EQ("fr", adopted_language); |
} |