Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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. | |
|
asanka
2011/11/23 19:59:46
Minor nit: The handler we get below is for whichev
mattm
2011/11/23 20:12:15
Done.
| |
| 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. | |
|
asanka
2011/11/23 19:59:46
Ditto.
mattm
2011/11/23 20:12:15
Done.
| |
| 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 tab 1. | |
| 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 |
| OLD | NEW |