Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(54)

Side by Side Diff: chrome/browser/ui/login/login_prompt_browsertest.cc

Issue 8305004: Fix HTTP auth multi-profile handling. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comment fix Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/ui/login/login_prompt.cc ('k') | chrome/browser/ui/login/login_prompt_uitest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <algorithm> 5 #include <algorithm>
6 #include <list> 6 #include <list>
7 #include <map> 7 #include <map>
8 8
9 #include "base/utf_string_conversions.h" 9 #include "base/utf_string_conversions.h"
10 #include "chrome/browser/prerender/prerender_manager.h" 10 #include "chrome/browser/prerender/prerender_manager.h"
(...skipping 13 matching lines...) Expand all
24 namespace { 24 namespace {
25 25
26 class LoginPromptBrowserTest : public InProcessBrowserTest { 26 class LoginPromptBrowserTest : public InProcessBrowserTest {
27 public: 27 public:
28 LoginPromptBrowserTest() 28 LoginPromptBrowserTest()
29 : bad_password_("incorrect"), bad_username_("nouser") { 29 : bad_password_("incorrect"), bad_username_("nouser") {
30 set_show_window(true); 30 set_show_window(true);
31 31
32 auth_map_["foo"] = AuthInfo("testuser", "foopassword"); 32 auth_map_["foo"] = AuthInfo("testuser", "foopassword");
33 auth_map_["bar"] = AuthInfo("testuser", "barpassword"); 33 auth_map_["bar"] = AuthInfo("testuser", "barpassword");
34 auth_map_["testrealm"] = AuthInfo("basicuser", "secret");
34 } 35 }
35 36
36 protected: 37 protected:
37 struct AuthInfo { 38 struct AuthInfo {
38 std::string username_; 39 std::string username_;
39 std::string password_; 40 std::string password_;
40 41
41 AuthInfo() {} 42 AuthInfo() {}
42 43
43 AuthInfo(const std::string username, 44 AuthInfo(const std::string username,
(...skipping 597 matching lines...) Expand 10 before | Expand all | Expand 10 after
641 ASSERT_TRUE(handler); 642 ASSERT_TRUE(handler);
642 handler->CancelAuth(); 643 handler->CancelAuth();
643 auth_cancelled_waiter.Wait(); 644 auth_cancelled_waiter.Wait();
644 } 645 }
645 } 646 }
646 647
647 EXPECT_EQ(1, observer.auth_needed_count_); 648 EXPECT_EQ(1, observer.auth_needed_count_);
648 EXPECT_TRUE(test_server()->Stop()); 649 EXPECT_TRUE(test_server()->Stop());
649 } 650 }
650 651
652 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, SupplyRedundantAuths) {
653 ASSERT_TRUE(test_server()->Start());
654
655 // Get NavigationController for tab 1.
656 TabContentsWrapper* contents_1 =
657 browser()->GetSelectedTabContentsWrapper();
658 ASSERT_TRUE(contents_1);
659 NavigationController* controller_1 = &contents_1->controller();
660
661 // Open a new tab.
662 ui_test_utils::NavigateToURLWithDisposition(
663 browser(),
664 GURL("about:blank"),
665 NEW_FOREGROUND_TAB,
666 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB);
667
668 // Get NavigationController for tab 2.
669 TabContentsWrapper* contents_2 =
670 browser()->GetSelectedTabContentsWrapper();
671 ASSERT_TRUE(contents_2);
672 ASSERT_NE(contents_1, contents_2);
673 NavigationController* controller_2 = &contents_2->controller();
674
675 LoginPromptBrowserTestObserver observer;
676 observer.Register(content::Source<NavigationController>(controller_1));
677 observer.Register(content::Source<NavigationController>(controller_2));
678
679 {
680 // Open different auth urls in each tab.
681 WindowedAuthNeededObserver auth_needed_waiter_1(controller_1);
682 WindowedAuthNeededObserver auth_needed_waiter_2(controller_2);
683 contents_1->tab_contents()->OpenURL(OpenURLParams(
684 test_server()->GetURL("auth-basic/1"),
685 GURL(),
686 CURRENT_TAB,
687 content::PAGE_TRANSITION_TYPED,
688 false));
689 contents_2->tab_contents()->OpenURL(OpenURLParams(
690 test_server()->GetURL("auth-basic/2"),
691 GURL(),
692 CURRENT_TAB,
693 content::PAGE_TRANSITION_TYPED,
694 false));
695 auth_needed_waiter_1.Wait();
696 auth_needed_waiter_2.Wait();
697
698 ASSERT_EQ(2U, observer.handlers_.size());
699
700 // Supply auth in one of the tabs.
701 WindowedAuthSuppliedObserver auth_supplied_waiter_1(controller_1);
702 WindowedAuthSuppliedObserver auth_supplied_waiter_2(controller_2);
703 LoginHandler* handler_1 = *observer.handlers_.begin();
704 ASSERT_TRUE(handler_1);
705 SetAuthFor(handler_1);
706
707 // Both tabs should be authenticated.
708 auth_supplied_waiter_1.Wait();
709 auth_supplied_waiter_2.Wait();
710 }
711
712 EXPECT_EQ(2, observer.auth_needed_count_);
713 EXPECT_EQ(2, observer.auth_supplied_count_);
714 EXPECT_EQ(0, observer.auth_cancelled_count_);
715 EXPECT_TRUE(test_server()->Stop());
716 }
717
718 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest, CancelRedundantAuths) {
719 ASSERT_TRUE(test_server()->Start());
720
721 // Get NavigationController for tab 1.
722 TabContentsWrapper* contents_1 =
723 browser()->GetSelectedTabContentsWrapper();
724 ASSERT_TRUE(contents_1);
725 NavigationController* controller_1 = &contents_1->controller();
726
727 // Open a new tab.
728 ui_test_utils::NavigateToURLWithDisposition(
729 browser(),
730 GURL("about:blank"),
731 NEW_FOREGROUND_TAB,
732 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB);
733
734 // Get NavigationController for tab 2.
735 TabContentsWrapper* contents_2 =
736 browser()->GetSelectedTabContentsWrapper();
737 ASSERT_TRUE(contents_2);
738 ASSERT_NE(contents_1, contents_2);
739 NavigationController* controller_2 = &contents_2->controller();
740
741 LoginPromptBrowserTestObserver observer;
742 observer.Register(content::Source<NavigationController>(controller_1));
743 observer.Register(content::Source<NavigationController>(controller_2));
744
745 {
746 // Open different auth urls in each tab.
747 WindowedAuthNeededObserver auth_needed_waiter_1(controller_1);
748 WindowedAuthNeededObserver auth_needed_waiter_2(controller_2);
749 contents_1->tab_contents()->OpenURL(OpenURLParams(
750 test_server()->GetURL("auth-basic/1"),
751 GURL(),
752 CURRENT_TAB,
753 content::PAGE_TRANSITION_TYPED,
754 false));
755 contents_2->tab_contents()->OpenURL(OpenURLParams(
756 test_server()->GetURL("auth-basic/2"),
757 GURL(),
758 CURRENT_TAB,
759 content::PAGE_TRANSITION_TYPED,
760 false));
761 auth_needed_waiter_1.Wait();
762 auth_needed_waiter_2.Wait();
763
764 ASSERT_EQ(2U, observer.handlers_.size());
765
766 // Cancel auth in one of the tabs.
767 WindowedAuthCancelledObserver auth_cancelled_waiter_1(controller_1);
768 WindowedAuthCancelledObserver auth_cancelled_waiter_2(controller_2);
769 LoginHandler* handler_1 = *observer.handlers_.begin();
770 ASSERT_TRUE(handler_1);
771 handler_1->CancelAuth();
772
773 // Both tabs should cancel auth.
774 auth_cancelled_waiter_1.Wait();
775 auth_cancelled_waiter_2.Wait();
776 }
777
778 EXPECT_EQ(2, observer.auth_needed_count_);
779 EXPECT_EQ(0, observer.auth_supplied_count_);
780 EXPECT_EQ(2, observer.auth_cancelled_count_);
781 EXPECT_TRUE(test_server()->Stop());
782 }
783
784 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest,
785 SupplyRedundantAuthsMultiProfile) {
786 ASSERT_TRUE(test_server()->Start());
787
788 // Get NavigationController for regular tab.
789 TabContentsWrapper* contents =
790 browser()->GetSelectedTabContentsWrapper();
791 ASSERT_TRUE(contents);
792 NavigationController* controller = &contents->controller();
793
794 // Open an incognito window.
795 Browser* browser_incognito = CreateIncognitoBrowser();
796
797 // Get NavigationController for incognito tab.
798 TabContentsWrapper* contents_incognito =
799 browser_incognito->GetSelectedTabContentsWrapper();
800 ASSERT_TRUE(contents_incognito);
801 ASSERT_NE(contents, contents_incognito);
802 NavigationController* controller_incognito =
803 &contents_incognito->controller();
804
805 LoginPromptBrowserTestObserver observer;
806 observer.Register(content::Source<NavigationController>(controller));
807 LoginPromptBrowserTestObserver observer_incognito;
808 observer_incognito.Register(
809 content::Source<NavigationController>(controller_incognito));
810
811 {
812 // Open an auth url in each window.
813 WindowedAuthNeededObserver auth_needed_waiter(controller);
814 WindowedAuthNeededObserver auth_needed_waiter_incognito(
815 controller_incognito);
816 contents->tab_contents()->OpenURL(OpenURLParams(
817 test_server()->GetURL("auth-basic/1"),
818 GURL(),
819 CURRENT_TAB,
820 content::PAGE_TRANSITION_TYPED,
821 false));
822 contents_incognito->tab_contents()->OpenURL(OpenURLParams(
823 test_server()->GetURL("auth-basic/2"),
824 GURL(),
825 CURRENT_TAB,
826 content::PAGE_TRANSITION_TYPED,
827 false));
828 auth_needed_waiter.Wait();
829 auth_needed_waiter_incognito.Wait();
830
831 ASSERT_EQ(1U, observer.handlers_.size());
832 ASSERT_EQ(1U, observer_incognito.handlers_.size());
833
834 // Supply auth in regular tab.
835 WindowedAuthSuppliedObserver auth_supplied_waiter(controller);
836 LoginHandler* handler = *observer.handlers_.begin();
837 ASSERT_TRUE(handler);
838 SetAuthFor(handler);
839
840 // Regular tab should be authenticated.
841 auth_supplied_waiter.Wait();
842
843 // There's not really a way to wait for the incognito window to "do
844 // nothing". Run anything pending in the message loop just to be sure.
845 // (This shouldn't be necessary since notifications are synchronous, but
846 // maybe it will help avoid flake someday in the future..)
847 ui_test_utils::RunAllPendingInMessageLoop();
848 }
849
850 EXPECT_EQ(1, observer.auth_needed_count_);
851 EXPECT_EQ(1, observer.auth_supplied_count_);
852 EXPECT_EQ(0, observer.auth_cancelled_count_);
853 EXPECT_EQ(1, observer_incognito.auth_needed_count_);
854 EXPECT_EQ(0, observer_incognito.auth_supplied_count_);
855 EXPECT_EQ(0, observer_incognito.auth_cancelled_count_);
856 EXPECT_TRUE(test_server()->Stop());
857 }
858
651 } // namespace 859 } // namespace
OLDNEW
« no previous file with comments | « chrome/browser/ui/login/login_prompt.cc ('k') | chrome/browser/ui/login/login_prompt_uitest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698