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 dbc78affa929d51bad442f2d4b4dc5ae1f4ea26d..1a1202ba26cbe2a83aa8e3fa1c6799b2882b1fc2 100644 |
--- a/chrome/browser/translate/translate_manager_browsertest.cc |
+++ b/chrome/browser/translate/translate_manager_browsertest.cc |
@@ -23,6 +23,13 @@ |
public: |
TranslateManagerBrowserTest() {} |
~TranslateManagerBrowserTest() override {} |
+ |
+ 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(); } |
@@ -57,37 +64,40 @@ |
IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, PageLanguageDetection) { |
ASSERT_TRUE(embedded_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(embedded_test_server()->GetURL("/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); |
- // The InProcessBrowserTest opens a new tab, let's wait for that first. |
- // There is a possible race condition, when the language is not yet detected, |
- // so we check for that and wait if necessary. |
- if (chrome_translate_client->GetLanguageState().original_language().empty()) |
- WaitUntilLanguageDetected(); |
- EXPECT_EQ("und", |
- chrome_translate_client->GetLanguageState().original_language()); |
- |
- // Open a new tab with a page in English. |
- ResetObserver(); |
- AddTabAtIndex(0, GURL(embedded_test_server()->GetURL("/english_page.html")), |
- ui::PAGE_TRANSITION_TYPED); |
- current_web_contents = browser()->tab_strip_model()->GetActiveWebContents(); |
- 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(embedded_test_server()->GetURL("/french_page.html"))); |
+ |
WaitUntilLanguageDetected(); |
- |
+ adopted_language = GetLanguageFor(current_web_contents); |
+ EXPECT_EQ("fr", adopted_language); |
EXPECT_EQ("fr", |
chrome_translate_client->GetLanguageState().original_language()); |
} |
@@ -105,18 +115,15 @@ |
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); |
- // There is a possible race condition, when the language is not yet detected, |
- // so we check for that and wait if necessary. |
- if (chrome_translate_client->GetLanguageState().original_language().empty()) |
- WaitUntilLanguageDetected(); |
- |
- EXPECT_EQ("und", |
- chrome_translate_client->GetLanguageState().original_language()); |
+ std::string adopted_language = GetLanguageFor(current_web_contents); |
+ EXPECT_EQ("und", adopted_language); |
ResetObserver(); |
@@ -125,6 +132,8 @@ |
ui_test_utils::NavigateToURL(browser(), french_url); |
WaitUntilLanguageDetected(); |
+ adopted_language = GetLanguageFor(current_web_contents); |
+ EXPECT_EQ("fr", adopted_language); |
EXPECT_EQ("fr", |
chrome_translate_client->GetLanguageState().original_language()); |
} |
@@ -136,25 +145,28 @@ |
#endif |
IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest, |
MAYBE_TranslateSessionRestore) { |
+ WaitUntilLanguageDetected(); |
+ |
content::WebContents* active_web_contents = |
browser()->tab_strip_model()->GetActiveWebContents(); |
- ChromeTranslateClient* active_translate_client = |
- ChromeTranslateClient::FromWebContents(active_web_contents); |
- if (active_translate_client->GetLanguageState().current_language().empty()) |
- WaitUntilLanguageDetected(); |
- EXPECT_EQ("und", |
- active_translate_client->GetLanguageState().current_language()); |
- |
- // Make restored tab active to (on some platforms) initiate language |
- // detection. |
- browser()->tab_strip_model()->ActivateTabAt(0, true); |
+ std::string active_adopted_language = GetLanguageFor(active_web_contents); |
content::WebContents* restored_web_contents = |
browser()->tab_strip_model()->GetWebContentsAt(0); |
- ChromeTranslateClient* restored_translate_client = |
- ChromeTranslateClient::FromWebContents(restored_web_contents); |
- if (restored_translate_client->GetLanguageState().current_language().empty()) |
+ std::string restored_adopted_language = GetLanguageFor(restored_web_contents); |
+ |
+ // One of the tabs could be still loading, let's check on that and wait, |
+ // if necessary. |
+ if (active_adopted_language.empty()) { |
+ ResetObserver(); |
WaitUntilLanguageDetected(); |
- EXPECT_EQ("fr", |
- restored_translate_client->GetLanguageState().current_language()); |
+ active_adopted_language = GetLanguageFor(active_web_contents); |
+ } else if (restored_adopted_language.empty()) { |
+ ResetObserver(); |
+ WaitUntilLanguageDetected(); |
+ restored_adopted_language = GetLanguageFor(restored_web_contents); |
+ } |
+ |
+ EXPECT_EQ("fr", restored_adopted_language); |
+ EXPECT_EQ("und", active_adopted_language); |
} |