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

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: convert redundant auth tests to browser tests Created 9 years, 1 month 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 tab 1.
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 tab 1.
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 SetAuthFor(handler_1);
asanka 2011/11/23 18:03:34 Why call SetAuthFor() after calling CancelAuth()?
mattm 2011/11/23 19:33:31 oops, fixed.
773
774 // Both tabs should cancel auth.
775 auth_cancelled_waiter_1.Wait();
776 auth_cancelled_waiter_2.Wait();
777 }
778
779 EXPECT_EQ(2, observer.auth_needed_count_);
780 EXPECT_EQ(0, observer.auth_supplied_count_);
781 EXPECT_EQ(2, observer.auth_cancelled_count_);
782 EXPECT_TRUE(test_server()->Stop());
783 }
784
785 IN_PROC_BROWSER_TEST_F(LoginPromptBrowserTest,
786 SupplyRedundantAuthsMultiProfile) {
787 ASSERT_TRUE(test_server()->Start());
788
789 // Get NavigationController for regular tab.
790 TabContentsWrapper* contents =
791 browser()->GetSelectedTabContentsWrapper();
792 ASSERT_TRUE(contents);
793 NavigationController* controller = &contents->controller();
794
795 // Open an incognito window.
796 Browser* browser_incognito = CreateIncognitoBrowser();
797
798 // Get NavigationController for incognito tab.
799 TabContentsWrapper* contents_incognito =
800 browser_incognito->GetSelectedTabContentsWrapper();
801 ASSERT_TRUE(contents_incognito);
802 ASSERT_NE(contents, contents_incognito);
803 NavigationController* controller_incognito =
804 &contents_incognito->controller();
805
806 LoginPromptBrowserTestObserver observer;
807 observer.Register(content::Source<NavigationController>(controller));
808 LoginPromptBrowserTestObserver observer_incognito;
809 observer_incognito.Register(
810 content::Source<NavigationController>(controller_incognito));
811
812 {
813 // Open an auth url in each window.
814 WindowedAuthNeededObserver auth_needed_waiter(controller);
815 WindowedAuthNeededObserver auth_needed_waiter_incognito(
816 controller_incognito);
817 contents->tab_contents()->OpenURL(OpenURLParams(
818 test_server()->GetURL("auth-basic/1"),
819 GURL(),
820 CURRENT_TAB,
821 content::PAGE_TRANSITION_TYPED,
822 false));
823 contents_incognito->tab_contents()->OpenURL(OpenURLParams(
824 test_server()->GetURL("auth-basic/2"),
825 GURL(),
826 CURRENT_TAB,
827 content::PAGE_TRANSITION_TYPED,
828 false));
829 auth_needed_waiter.Wait();
830 auth_needed_waiter_incognito.Wait();
831
832 ASSERT_EQ(1U, observer.handlers_.size());
833 ASSERT_EQ(1U, observer_incognito.handlers_.size());
834
835 // Supply auth in tab 1.
836 WindowedAuthSuppliedObserver auth_supplied_waiter(controller);
837 LoginHandler* handler = *observer.handlers_.begin();
838 ASSERT_TRUE(handler);
839 SetAuthFor(handler);
840
841 // Regular tab should be authenticated.
842 auth_supplied_waiter.Wait();
843
844 // There's not really a way to wait for the incognito window to "do
845 // nothing". Wait for it to open a new tab to ensure it has processed
846 // anything in its message loop. (This shouldn't be necessary since
847 // notifications are synchronous, but maybe it will help avoid flake someday
848 // in the future..)
849 ui_test_utils::NavigateToURLWithDisposition(
850 browser_incognito,
851 GURL("about:blank"),
852 NEW_FOREGROUND_TAB,
853 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB);
asanka 2011/11/23 18:03:34 As you note, the notifications are delivered synch
mattm 2011/11/23 19:33:31 Yeah, I actually even tested that it did fail if I
854 }
855
856 EXPECT_EQ(1, observer.auth_needed_count_);
857 EXPECT_EQ(1, observer.auth_supplied_count_);
858 EXPECT_EQ(0, observer.auth_cancelled_count_);
859 EXPECT_EQ(1, observer_incognito.auth_needed_count_);
860 EXPECT_EQ(0, observer_incognito.auth_supplied_count_);
861 EXPECT_EQ(0, observer_incognito.auth_cancelled_count_);
862 EXPECT_TRUE(test_server()->Stop());
863 }
864
651 } // namespace 865 } // 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