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. | |
| 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 |
| OLD | NEW |