| Index: chrome/browser/ui/login/login_handler_browsertest.cc
|
| diff --git a/chrome/browser/ui/login/login_handler_browsertest.cc b/chrome/browser/ui/login/login_handler_browsertest.cc
|
| index d3e1ca5cc07fd9f8607d69f32eae961158b99615..46524439a74b89f1f95715f69987464331cf2b4c 100644
|
| --- a/chrome/browser/ui/login/login_handler_browsertest.cc
|
| +++ b/chrome/browser/ui/login/login_handler_browsertest.cc
|
| @@ -98,6 +98,7 @@ const char kPrefetchAuthPage[] = "/login/prefetch.html";
|
|
|
| const char kMultiRealmTestPage[] = "/login/multi_realm.html";
|
| const int kMultiRealmTestRealmCount = 2;
|
| +const int kMultiRealmTestAuthRequestsCount = 4;
|
|
|
| const char kSingleRealmTestPage[] = "/login/single_realm.html";
|
|
|
| @@ -475,36 +476,34 @@ IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, MultipleRealmCancellation) {
|
|
|
| WindowedLoadStopObserver load_stop_waiter(controller, 1);
|
|
|
| - {
|
| - WindowedAuthNeededObserver auth_needed_waiter(controller);
|
| - browser()->OpenURL(OpenURLParams(test_page, Referrer(),
|
| - WindowOpenDisposition::CURRENT_TAB,
|
| - ui::PAGE_TRANSITION_TYPED, false));
|
| - auth_needed_waiter.Wait();
|
| - }
|
| -
|
| - int n_handlers = 0;
|
| -
|
| - while (n_handlers < kMultiRealmTestRealmCount) {
|
| - WindowedAuthNeededObserver auth_needed_waiter(controller);
|
| -
|
| - while (!observer.handlers().empty()) {
|
| - WindowedAuthCancelledObserver auth_cancelled_waiter(controller);
|
| - LoginHandler* handler = *observer.handlers().begin();
|
| -
|
| - ASSERT_TRUE(handler);
|
| - n_handlers++;
|
| - handler->CancelAuth();
|
| - auth_cancelled_waiter.Wait();
|
| - }
|
| + browser()->OpenURL(OpenURLParams(test_page, Referrer(),
|
| + WindowOpenDisposition::CURRENT_TAB,
|
| + ui::PAGE_TRANSITION_TYPED, false));
|
|
|
| - if (n_handlers < kMultiRealmTestRealmCount)
|
| - auth_needed_waiter.Wait();
|
| + // Need to have LoginHandlers created for all requests that need
|
| + // authentication.
|
| + while (observer.handlers().size() < kMultiRealmTestAuthRequestsCount)
|
| + WindowedAuthNeededObserver(controller).Wait();
|
| +
|
| + // Now cancel auth once per realm. This should be sufficient to cancel all
|
| + // auth requests.
|
| + std::set<std::string> seen_realms;
|
| + for (int i = 0; i < kMultiRealmTestRealmCount; ++i) {
|
| + auto it = std::find_if(
|
| + observer.handlers().begin(), observer.handlers().end(),
|
| + [&seen_realms](LoginHandler* handler) {
|
| + return seen_realms.count(handler->auth_info()->realm) == 0;
|
| + });
|
| + ASSERT_TRUE(it != observer.handlers().end());
|
| + seen_realms.insert((*it)->auth_info()->realm);
|
| +
|
| + WindowedAuthCancelledObserver auth_cancelled_waiter(controller);
|
| + (*it)->CancelAuth();
|
| + auth_cancelled_waiter.Wait();
|
| }
|
|
|
| load_stop_waiter.Wait();
|
|
|
| - EXPECT_EQ(kMultiRealmTestRealmCount, n_handlers);
|
| EXPECT_EQ(0, observer.auth_supplied_count());
|
| EXPECT_LT(0, observer.auth_needed_count());
|
| EXPECT_LT(0, observer.auth_cancelled_count());
|
| @@ -524,37 +523,35 @@ IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, MultipleRealmConfirmation) {
|
| observer.Register(content::Source<NavigationController>(controller));
|
|
|
| WindowedLoadStopObserver load_stop_waiter(controller, 1);
|
| - int n_handlers = 0;
|
|
|
| - {
|
| - WindowedAuthNeededObserver auth_needed_waiter(controller);
|
| -
|
| - browser()->OpenURL(OpenURLParams(test_page, Referrer(),
|
| - WindowOpenDisposition::CURRENT_TAB,
|
| - ui::PAGE_TRANSITION_TYPED, false));
|
| - auth_needed_waiter.Wait();
|
| - }
|
| -
|
| - while (n_handlers < kMultiRealmTestRealmCount) {
|
| - WindowedAuthNeededObserver auth_needed_waiter(controller);
|
| -
|
| - while (!observer.handlers().empty()) {
|
| - WindowedAuthSuppliedObserver auth_supplied_waiter(controller);
|
| - LoginHandler* handler = *observer.handlers().begin();
|
| + browser()->OpenURL(OpenURLParams(test_page, Referrer(),
|
| + WindowOpenDisposition::CURRENT_TAB,
|
| + ui::PAGE_TRANSITION_TYPED, false));
|
|
|
| - ASSERT_TRUE(handler);
|
| - n_handlers++;
|
| - SetAuthFor(handler);
|
| - auth_supplied_waiter.Wait();
|
| - }
|
| + // Need to have LoginHandlers created for all requests that need
|
| + // authentication.
|
| + while (observer.handlers().size() < kMultiRealmTestAuthRequestsCount)
|
| + WindowedAuthNeededObserver(controller).Wait();
|
| +
|
| + // Now supply auth once per realm. This should be sufficient to confirm all
|
| + // auth requests.
|
| + std::set<std::string> seen_realms;
|
| + for (int i = 0; i < kMultiRealmTestRealmCount; ++i) {
|
| + auto it = std::find_if(
|
| + observer.handlers().begin(), observer.handlers().end(),
|
| + [&seen_realms](LoginHandler* handler) {
|
| + return seen_realms.count(handler->auth_info()->realm) == 0;
|
| + });
|
| + ASSERT_TRUE(it != observer.handlers().end());
|
| + seen_realms.insert((*it)->auth_info()->realm);
|
|
|
| - if (n_handlers < kMultiRealmTestRealmCount)
|
| - auth_needed_waiter.Wait();
|
| + WindowedAuthSuppliedObserver auth_supplied_waiter(controller);
|
| + SetAuthFor(*it);
|
| + auth_supplied_waiter.Wait();
|
| }
|
|
|
| load_stop_waiter.Wait();
|
|
|
| - EXPECT_EQ(kMultiRealmTestRealmCount, n_handlers);
|
| EXPECT_LT(0, observer.auth_needed_count());
|
| EXPECT_LT(0, observer.auth_supplied_count());
|
| EXPECT_EQ(0, observer.auth_cancelled_count());
|
|
|