Index: chrome/browser/translate/translate_browsertest.cc |
diff --git a/chrome/browser/translate/translate_browsertest.cc b/chrome/browser/translate/translate_browsertest.cc |
index 26d4202212da67be1d44611701891f7de25fd164..35581cd105ca6f59f29c2022541fcae48e704352 100644 |
--- a/chrome/browser/translate/translate_browsertest.cc |
+++ b/chrome/browser/translate/translate_browsertest.cc |
@@ -48,10 +48,16 @@ class TranslateBrowserTest : public InProcessBrowserTest { |
TranslateBrowserTest() |
: https_server_(net::SpawnedTestServer::TYPE_HTTPS, |
SSLOptions(SSLOptions::CERT_OK), |
- base::FilePath(kTranslateRoot)) {} |
+ base::FilePath(kTranslateRoot)), |
+ infobar_service_(NULL) {} |
- virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { |
+ virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
ASSERT_TRUE(https_server_.Start()); |
+ // Setup alternate security origin for testing in order to allow XHR against |
+ // local test server. Note that this flag shows a confirm infobar in tests. |
+ GURL base_url = GetSecureURL(""); |
+ command_line->AppendSwitchASCII(switches::kTranslateSecurityOrigin, |
+ base_url.GetOrigin().spec()); |
} |
protected: |
@@ -65,41 +71,75 @@ class TranslateBrowserTest : public InProcessBrowserTest { |
return https_server_.GetURL(prefix + path); |
} |
+ TranslateInfoBarDelegate* GetExistingTranslateInfoBarDelegate() { |
+ if (!infobar_service_) { |
+ content::WebContents* web_contents = |
+ browser()->tab_strip_model()->GetActiveWebContents(); |
+ if (web_contents) |
+ infobar_service_ = InfoBarService::FromWebContents(web_contents); |
+ } |
+ if (!infobar_service_) { |
+ EXPECT_TRUE(false) << "infobar service is not available"; |
+ return NULL; |
+ } |
+ |
+ TranslateInfoBarDelegate* delegate = NULL; |
+ for (size_t i = 0; i < infobar_service_->infobar_count(); ++i) { |
+ // Check if the shown infobar is a confirm infobar coming from the |
+ // |kTranslateSecurityOrigin| flag specified in SetUpCommandLine(). |
+ // This infobar appears in all tests of TranslateBrowserTest and can be |
+ // ignored here. |
+ ConfirmInfoBarDelegate* confirm = |
+ infobar_service_->infobar_at(i)->AsConfirmInfoBarDelegate(); |
+ if (confirm) |
+ continue; |
+ |
+ TranslateInfoBarDelegate* translate = |
+ infobar_service_->infobar_at(i)->AsTranslateInfoBarDelegate(); |
+ if (translate) { |
+ EXPECT_FALSE(delegate) << "multiple infobars are shown unexpectedly"; |
+ delegate = translate; |
+ continue; |
+ } |
+ |
+ // Other infobar should not be shown. |
+ EXPECT_TRUE(delegate); |
+ } |
+ return delegate; |
+ } |
+ |
private: |
net::SpawnedTestServer https_server_; |
+ InfoBarService* infobar_service_; |
typedef net::SpawnedTestServer::SSLOptions SSLOptions; |
DISALLOW_COPY_AND_ASSIGN(TranslateBrowserTest); |
}; |
-// TODO(toyoshim): This test should be changed to work in an isolated world. |
-// See also http://crbug.com/164547 . |
-IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, DISABLED_Translate) { |
+IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, TranslateInIsolatedWorld) { |
#if defined(OS_WIN) && defined(USE_ASH) |
// Disable this test in Metro+Ash for now (http://crbug.com/262796). |
if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) |
return; |
#endif |
+ net::TestURLFetcherFactory factory; |
ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
- content::WebContents* web_contents = |
- browser()->tab_strip_model()->GetActiveWebContents(); |
- ASSERT_TRUE(web_contents); |
- |
- net::TestURLFetcherFactory factory; |
+ // Check if there is no Translate infobar. |
+ TranslateInfoBarDelegate* translate = GetExistingTranslateInfoBarDelegate(); |
+ EXPECT_FALSE(translate); |
// Setup infobar observer. |
- InfoBarService* infobar_service = |
- InfoBarService::FromWebContents(web_contents); |
- ASSERT_TRUE(infobar_service); |
- EXPECT_EQ(0U, infobar_service->infobar_count()); |
content::WindowedNotificationObserver infobar( |
chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED, |
content::NotificationService::AllSources()); |
// Setup page title observer. |
+ content::WebContents* web_contents = |
+ browser()->tab_strip_model()->GetActiveWebContents(); |
+ ASSERT_TRUE(web_contents); |
content::TitleWatcher watcher(web_contents, ASCIIToUTF16("PASS")); |
watcher.AlsoWaitForTitle(ASCIIToUTF16("FAIL")); |
@@ -110,9 +150,7 @@ IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, DISABLED_Translate) { |
infobar.Wait(); |
// Perform Chrome Translate. |
- ASSERT_EQ(1U, infobar_service->infobar_count()); |
- TranslateInfoBarDelegate* translate = |
- infobar_service->infobar_at(0)->AsTranslateInfoBarDelegate(); |
+ translate = GetExistingTranslateInfoBarDelegate(); |
ASSERT_TRUE(translate); |
translate->Translate(); |
@@ -159,17 +197,14 @@ IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, IgnoreRefreshMetaTag) { |
ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
+ // Check if there is no Translate infobar. |
+ TranslateInfoBarDelegate* translate = GetExistingTranslateInfoBarDelegate(); |
+ EXPECT_FALSE(translate); |
+ |
+ // Setup page title observer. |
content::WebContents* web_contents = |
browser()->tab_strip_model()->GetActiveWebContents(); |
ASSERT_TRUE(web_contents); |
- |
- // Check infobar count. |
- InfoBarService* infobar_service = |
- InfoBarService::FromWebContents(web_contents); |
- ASSERT_TRUE(infobar_service); |
- EXPECT_EQ(0U, infobar_service->infobar_count()); |
- |
- // Setup page title observer. |
content::TitleWatcher watcher(web_contents, ASCIIToUTF16("PASS")); |
watcher.AlsoWaitForTitle(ASCIIToUTF16("FAIL")); |
@@ -182,8 +217,9 @@ IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, IgnoreRefreshMetaTag) { |
const string16 result = watcher.WaitAndGetTitle(); |
EXPECT_EQ("PASS", UTF16ToASCII(result)); |
- // Check there is not infobar. |
- EXPECT_EQ(0U, infobar_service->infobar_count()); |
+ // Check if there is no Translate infobar. |
+ translate = GetExistingTranslateInfoBarDelegate(); |
+ EXPECT_FALSE(translate); |
} |
IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, |
@@ -196,17 +232,14 @@ IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, |
ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
+ // Check if there is no Translate infobar. |
+ TranslateInfoBarDelegate* translate = GetExistingTranslateInfoBarDelegate(); |
+ EXPECT_FALSE(translate); |
+ |
+ // Setup page title observer. |
content::WebContents* web_contents = |
browser()->tab_strip_model()->GetActiveWebContents(); |
ASSERT_TRUE(web_contents); |
- |
- // Check infobar count. |
- InfoBarService* infobar_service = |
- InfoBarService::FromWebContents(web_contents); |
- ASSERT_TRUE(infobar_service); |
- EXPECT_EQ(0U, infobar_service->infobar_count()); |
- |
- // Setup page title observer. |
content::TitleWatcher watcher(web_contents, ASCIIToUTF16("PASS")); |
watcher.AlsoWaitForTitle(ASCIIToUTF16("FAIL")); |
@@ -219,8 +252,9 @@ IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, |
const string16 result = watcher.WaitAndGetTitle(); |
EXPECT_EQ("PASS", UTF16ToASCII(result)); |
- // Check there is not infobar. |
- EXPECT_EQ(0U, infobar_service->infobar_count()); |
+ // Check if there is no Translate infobar. |
+ translate = GetExistingTranslateInfoBarDelegate(); |
+ EXPECT_FALSE(translate); |
} |
IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, IgnoreRefreshMetaTagAtOnload) { |
@@ -232,17 +266,14 @@ IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, IgnoreRefreshMetaTagAtOnload) { |
ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
+ // Check if there is no Translate infobar. |
+ TranslateInfoBarDelegate* translate = GetExistingTranslateInfoBarDelegate(); |
+ EXPECT_FALSE(translate); |
+ |
+ // Setup page title observer. |
content::WebContents* web_contents = |
browser()->tab_strip_model()->GetActiveWebContents(); |
ASSERT_TRUE(web_contents); |
- |
- // Check infobar count. |
- InfoBarService* infobar_service = |
- InfoBarService::FromWebContents(web_contents); |
- ASSERT_TRUE(infobar_service); |
- EXPECT_EQ(0U, infobar_service->infobar_count()); |
- |
- // Setup page title observer. |
content::TitleWatcher watcher(web_contents, ASCIIToUTF16("PASS")); |
watcher.AlsoWaitForTitle(ASCIIToUTF16("FAIL")); |
@@ -255,8 +286,9 @@ IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, IgnoreRefreshMetaTagAtOnload) { |
const string16 result = watcher.WaitAndGetTitle(); |
EXPECT_EQ("PASS", UTF16ToASCII(result)); |
- // Check there is not infobar. |
- EXPECT_EQ(0U, infobar_service->infobar_count()); |
+ // Check if there is no Translate infobar. |
+ translate = GetExistingTranslateInfoBarDelegate(); |
+ EXPECT_FALSE(translate); |
} |
IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, UpdateLocation) { |
@@ -268,17 +300,14 @@ IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, UpdateLocation) { |
ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
+ // Check if there is no Translate infobar. |
+ TranslateInfoBarDelegate* translate = GetExistingTranslateInfoBarDelegate(); |
+ EXPECT_FALSE(translate); |
+ |
+ // Setup page title observer. |
content::WebContents* web_contents = |
browser()->tab_strip_model()->GetActiveWebContents(); |
ASSERT_TRUE(web_contents); |
- |
- // Check infobar count. |
- InfoBarService* infobar_service = |
- InfoBarService::FromWebContents(web_contents); |
- ASSERT_TRUE(infobar_service); |
- EXPECT_EQ(0U, infobar_service->infobar_count()); |
- |
- // Setup page title observer. |
content::TitleWatcher watcher(web_contents, ASCIIToUTF16("PASS")); |
watcher.AlsoWaitForTitle(ASCIIToUTF16("FAIL")); |
@@ -291,8 +320,9 @@ IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, UpdateLocation) { |
const string16 result = watcher.WaitAndGetTitle(); |
EXPECT_EQ("PASS", UTF16ToASCII(result)); |
- // Check there is not infobar. |
- EXPECT_EQ(0U, infobar_service->infobar_count()); |
+ // Check if there is no Translate infobar. |
+ translate = GetExistingTranslateInfoBarDelegate(); |
+ EXPECT_FALSE(translate); |
} |
IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, UpdateLocationAtOnload) { |
@@ -304,17 +334,14 @@ IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, UpdateLocationAtOnload) { |
ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
+ // Check if there is no Translate infobar. |
+ TranslateInfoBarDelegate* translate = GetExistingTranslateInfoBarDelegate(); |
+ EXPECT_FALSE(translate); |
+ |
+ // Setup page title observer. |
content::WebContents* web_contents = |
browser()->tab_strip_model()->GetActiveWebContents(); |
ASSERT_TRUE(web_contents); |
- |
- // Check infobar count. |
- InfoBarService* infobar_service = |
- InfoBarService::FromWebContents(web_contents); |
- ASSERT_TRUE(infobar_service); |
- EXPECT_EQ(0U, infobar_service->infobar_count()); |
- |
- // Setup page title observer. |
content::TitleWatcher watcher(web_contents, ASCIIToUTF16("PASS")); |
watcher.AlsoWaitForTitle(ASCIIToUTF16("FAIL")); |
@@ -327,6 +354,7 @@ IN_PROC_BROWSER_TEST_F(TranslateBrowserTest, UpdateLocationAtOnload) { |
const string16 result = watcher.WaitAndGetTitle(); |
EXPECT_EQ("PASS", UTF16ToASCII(result)); |
- // Check there is not infobar. |
- EXPECT_EQ(0U, infobar_service->infobar_count()); |
+ // Check if there is no Translate infobar. |
+ translate = GetExistingTranslateInfoBarDelegate(); |
+ EXPECT_FALSE(translate); |
} |