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