Index: chrome/browser/captive_portal/captive_portal_browsertest.cc |
diff --git a/chrome/browser/captive_portal/captive_portal_browsertest.cc b/chrome/browser/captive_portal/captive_portal_browsertest.cc |
index 092962675f82a6dfe5ed84656d93fbe031386ee8..bad3517a4203c717ece6071bf70a5081dd8146a7 100644 |
--- a/chrome/browser/captive_portal/captive_portal_browsertest.cc |
+++ b/chrome/browser/captive_portal/captive_portal_browsertest.cc |
@@ -17,6 +17,7 @@ |
#include "base/macros.h" |
#include "base/message_loop/message_loop.h" |
#include "base/path_service.h" |
+#include "base/scoped_observer.h" |
#include "base/sequence_checker.h" |
#include "base/strings/utf_string_conversions.h" |
#include "base/values.h" |
@@ -37,6 +38,7 @@ |
#include "chrome/browser/ui/browser_navigator_params.h" |
#include "chrome/browser/ui/tab_contents/tab_contents_iterator.h" |
#include "chrome/browser/ui/tabs/tab_strip_model.h" |
+#include "chrome/browser/ui/tabs/tab_strip_model_observer.h" |
#include "chrome/common/chrome_paths.h" |
#include "chrome/common/pref_names.h" |
#include "chrome/test/base/in_process_browser_test.h" |
@@ -893,6 +895,43 @@ void AddHstsHost(net::URLRequestContextGetter* context_getter, |
transport_security_state->AddHSTS(host, expiry, include_subdomains); |
} |
+class TabActivationWaiter : public TabStripModelObserver { |
+ public: |
+ explicit TabActivationWaiter(TabStripModel* tab_strip_model) |
+ : number_of_unconsumed_active_tab_changes_(0), scoped_observer_(this) { |
+ scoped_observer_.Add(tab_strip_model); |
+ } |
+ |
+ void WaitUntilActiveTabChanges() { |
+ if (number_of_unconsumed_active_tab_changes_ == 0) { |
+ // Wait until TabStripModelObserver::ActiveTabChanged will get called. |
+ message_loop_runner_ = new content::MessageLoopRunner; |
+ message_loop_runner_->Run(); |
+ } |
+ |
+ // "consume" one tab activation event. |
+ DCHECK_LT(0, number_of_unconsumed_active_tab_changes_); |
+ number_of_unconsumed_active_tab_changes_--; |
+ } |
+ |
+ // TabStripModelObserver overrides. |
+ void ActiveTabChanged(content::WebContents* old_contents, |
+ content::WebContents* new_contents, |
+ int index, |
+ int reason) override { |
+ number_of_unconsumed_active_tab_changes_++; |
+ if (message_loop_runner_) |
+ message_loop_runner_->Quit(); |
+ } |
+ |
+ private: |
+ scoped_refptr<content::MessageLoopRunner> message_loop_runner_; |
+ int number_of_unconsumed_active_tab_changes_; |
+ ScopedObserver<TabStripModel, TabActivationWaiter> scoped_observer_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TabActivationWaiter); |
+}; |
+ |
} // namespace |
class CaptivePortalBrowserTest : public InProcessBrowserTest { |
@@ -1536,8 +1575,8 @@ void CaptivePortalBrowserTest::NavigateLoginTab(Browser* browser, |
ASSERT_TRUE(IsLoginTab(browser->tab_strip_model()->GetActiveWebContents())); |
// Do the navigation. |
- EXPECT_TRUE(content::ExecuteScript(tab_strip_model->GetActiveWebContents(), |
- "submitForm()")); |
+ content::ExecuteUnmodifiedScript(tab_strip_model->GetActiveWebContents(), |
+ "submitForm()"); |
portal_observer.WaitForResults(1); |
navigation_observer.WaitForNavigations(1); |
@@ -1582,8 +1621,8 @@ void CaptivePortalBrowserTest::Login(Browser* browser, |
ASSERT_TRUE(IsLoginTab(tab_strip_model->GetWebContentsAt(login_tab_index))); |
// Trigger a navigation. |
- EXPECT_TRUE(content::ExecuteScript(tab_strip_model->GetActiveWebContents(), |
- "submitForm()")); |
+ content::ExecuteUnmodifiedScript(tab_strip_model->GetActiveWebContents(), |
+ "submitForm()"); |
portal_observer.WaitForResults(1); |
@@ -1624,8 +1663,8 @@ void CaptivePortalBrowserTest::LoginCertError(Browser* browser) { |
ASSERT_TRUE(IsLoginTab(tab_strip_model->GetWebContentsAt(login_tab_index))); |
// Trigger a navigation. |
- EXPECT_TRUE(content::ExecuteScript(tab_strip_model->GetActiveWebContents(), |
- "submitForm()")); |
+ content::ExecuteUnmodifiedScript(tab_strip_model->GetActiveWebContents(), |
+ "submitForm()"); |
// The captive portal tab navigation will trigger a captive portal check, |
// and reloading the original tab will bring up the interstitial page again, |
@@ -1977,8 +2016,11 @@ IN_PROC_BROWSER_TEST_F(CaptivePortalBrowserTest, |
EXPECT_TRUE(WaitForRenderFrameReady(rfh)); |
const char kClickConnectButtonJS[] = |
"document.getElementById('primary-button').click();"; |
- EXPECT_TRUE( |
- content::ExecuteScript(rfh, kClickConnectButtonJS)); |
+ { |
+ TabActivationWaiter tab_activation_waiter(tab_strip_model); |
+ content::ExecuteUnmodifiedScript(rfh, kClickConnectButtonJS); |
+ tab_activation_waiter.WaitUntilActiveTabChanges(); |
+ } |
EXPECT_EQ(login_tab_index, tab_strip_model->active_index()); |
// For completeness, close the login tab and try clicking |Connect| again. |
@@ -1990,8 +2032,7 @@ IN_PROC_BROWSER_TEST_F(CaptivePortalBrowserTest, |
tab_strip_model->CloseWebContentsAt(tab_strip_model->active_index(), 0)); |
destroyed_watcher.Wait(); |
MultiNavigationObserver navigation_observer; |
- EXPECT_TRUE( |
- content::ExecuteScript(rfh, kClickConnectButtonJS)); |
+ content::ExecuteUnmodifiedScript(rfh, kClickConnectButtonJS); |
navigation_observer.WaitForNavigations(1); |
EXPECT_EQ(login_tab_index, tab_strip_model->active_index()); |