172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string>
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/net/url_fixer_upper.h"
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/url_constants.h"
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/automation/tab_proxy.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/automation/browser_proxy.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/ui/ui_test.h"
123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "net/test/test_server.h"
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing std::wstring;
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace {
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst FilePath::CharType kDocRoot[] = FILE_PATH_LITERAL("chrome/test/data");
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass LoginPromptTest : public UITest {
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected:
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  LoginPromptTest()
253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      : username_basic_(L"basicuser"),
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        username_digest_(L"digestuser"),
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        password_(L"secret"),
283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        password_bad_(L"denyme"),
293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        test_server_(net::TestServer::TYPE_HTTP, FilePath(kDocRoot)) {
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void AppendTab(const GURL& url) {
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    scoped_refptr<BrowserProxy> window_proxy(automation()->GetBrowserWindow(0));
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_TRUE(window_proxy.get());
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ASSERT_TRUE(window_proxy->AppendTab(url));
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected:
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  wstring username_basic_;
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  wstring username_digest_;
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  wstring password_;
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  wstring password_bad_;
433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  net::TestServer test_server_;
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochwstring ExpectedTitleFromAuth(const wstring& username,
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                              const wstring& password) {
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The TestServer sets the title to username/password on successful login.
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return username + L"/" + password;
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
53513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#if defined(OS_WIN)
54513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Probably related to test server flakiness in http://crbug.com/60937
55513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#define MAYBE_TestBasicAuth FLAKY_TestBasicAuth
56513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#else
57513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#define MAYBE_TestBasicAuth TestBasicAuth
58513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#endif
59513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Test that "Basic" HTTP authentication works.
61513209b27ff55e2841eac0e4120199c23acce758Ben MurdochTEST_F(LoginPromptTest, MAYBE_TestBasicAuth) {
623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  ASSERT_TRUE(test_server_.Start());
633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_refptr<TabProxy> tab(GetActiveTab());
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(tab.get());
66731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_AUTH_NEEDED,
67731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick            tab->NavigateToURL(test_server_.GetURL("auth-basic")));
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(tab->NeedsAuth());
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(tab->SetAuth(username_basic_, password_bad_));
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(tab->NeedsAuth());
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(tab->CancelAuth());
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(L"Denied: wrong password", GetActiveTabTitle());
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
75731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_AUTH_NEEDED,
76731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick            tab->NavigateToURL(test_server_.GetURL("auth-basic")));
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(tab->NeedsAuth());
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(tab->SetAuth(username_basic_, password_));
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(ExpectedTitleFromAuth(username_basic_, password_),
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch            GetActiveTabTitle());
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
84513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#if defined(OS_WIN)
85513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Probably related to test server flakiness in http://crbug.com/60937
86513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#define MAYBE_TestDigestAuth FLAKY_TestDigestAuth
87513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#else
88513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#define MAYBE_TestDigestAuth TestDigestAuth
89513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#endif
90513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Test that "Digest" HTTP authentication works.
92513209b27ff55e2841eac0e4120199c23acce758Ben MurdochTEST_F(LoginPromptTest, MAYBE_TestDigestAuth) {
933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  ASSERT_TRUE(test_server_.Start());
943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_refptr<TabProxy> tab(GetActiveTab());
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(tab.get());
97731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_AUTH_NEEDED,
98731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick            tab->NavigateToURL(test_server_.GetURL("auth-digest")));
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(tab->NeedsAuth());
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(tab->SetAuth(username_digest_, password_bad_));
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(tab->CancelAuth());
103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(L"Denied: wrong password", GetActiveTabTitle());
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
105731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_AUTH_NEEDED,
106731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick            tab->NavigateToURL(test_server_.GetURL("auth-digest")));
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(tab->NeedsAuth());
109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(tab->SetAuth(username_digest_, password_));
110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(ExpectedTitleFromAuth(username_digest_, password_),
111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch            GetActiveTabTitle());
112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
114513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#if defined(OS_WIN)
115513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Probably related to test server flakiness in http://crbug.com/60937
116513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#define MAYBE_TestTwoAuths FLAKY_TestTwoAuths
117513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#else
118513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#define MAYBE_TestTwoAuths TestTwoAuths
119513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#endif
120513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Test that logging in on 2 tabs at once works.
122513209b27ff55e2841eac0e4120199c23acce758Ben MurdochTEST_F(LoginPromptTest, MAYBE_TestTwoAuths) {
1233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  ASSERT_TRUE(test_server_.Start());
124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_refptr<TabProxy> basic_tab(GetActiveTab());
126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(basic_tab.get());
127731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_AUTH_NEEDED,
128731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick            basic_tab->NavigateToURL(test_server_.GetURL("auth-basic")));
129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  AppendTab(GURL(chrome::kAboutBlankURL));
131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_refptr<TabProxy> digest_tab(GetActiveTab());
132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(digest_tab.get());
133731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_AUTH_NEEDED,
134731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick            digest_tab->NavigateToURL(test_server_.GetURL("auth-digest")));
135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(basic_tab->NeedsAuth());
137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(basic_tab->SetAuth(username_basic_, password_));
138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(digest_tab->NeedsAuth());
139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(digest_tab->SetAuth(username_digest_, password_));
140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  wstring title;
142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(basic_tab->GetTabTitle(&title));
143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(ExpectedTitleFromAuth(username_basic_, password_), title);
144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(digest_tab->GetTabTitle(&title));
146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(ExpectedTitleFromAuth(username_digest_, password_), title);
147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
149513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#if defined(OS_WIN)
150513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Probably related to test server flakiness in http://crbug.com/60937
151513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#define MAYBE_TestCancelAuth FLAKY_TestCancelAuth
152513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#else
153513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#define MAYBE_TestCancelAuth TestCancelAuth
154513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#endif
155513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Test that cancelling authentication works.
157513209b27ff55e2841eac0e4120199c23acce758Ben MurdochTEST_F(LoginPromptTest, MAYBE_TestCancelAuth) {
1583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  ASSERT_TRUE(test_server_.Start());
1593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_refptr<TabProxy> tab(GetActiveTab());
161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(tab.get());
162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // First navigate to a test server page so we have something to go back to.
164731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS,
165731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick            tab->NavigateToURL(test_server_.GetURL("a")));
166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Navigating while auth is requested is the same as cancelling.
168731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_AUTH_NEEDED,
169731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick            tab->NavigateToURL(test_server_.GetURL("auth-basic")));
170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(tab->NeedsAuth());
171731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS,
172731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick            tab->NavigateToURL(test_server_.GetURL("b")));
173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(tab->NeedsAuth());
174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
175731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_AUTH_NEEDED,
176731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick            tab->NavigateToURL(test_server_.GetURL("auth-basic")));
177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(tab->NeedsAuth());
178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(tab->GoBack());  // should bring us back to 'a'
179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(tab->NeedsAuth());
180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Now add a page and go back, so we have something to go forward to.
182731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS,
183731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick            tab->NavigateToURL(test_server_.GetURL("c")));
184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(tab->GoBack());  // should bring us back to 'a'
185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
186731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_AUTH_NEEDED,
187731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick            tab->NavigateToURL(test_server_.GetURL("auth-basic")));
188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(tab->NeedsAuth());
189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(tab->GoForward());  // should bring us to 'c'
190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(tab->NeedsAuth());
191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Now test that cancelling works as expected.
193731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_AUTH_NEEDED,
194731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick            tab->NavigateToURL(test_server_.GetURL("auth-basic")));
195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(tab->NeedsAuth());
196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(tab->CancelAuth());
197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_FALSE(tab->NeedsAuth());
198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(L"Denied: no auth", GetActiveTabTitle());
199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
201513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#if defined(OS_WIN)
202513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Probably related to test server flakiness in http://crbug.com/60937
203513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#define MAYBE_SupplyRedundantAuths FLAKY_SupplyRedundantAuths
204513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#else
205513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#define MAYBE_SupplyRedundantAuths SupplyRedundantAuths
206513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#endif
207513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// If multiple tabs are looking for the same auth, the user should only have to
2093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// enter it once.
210513209b27ff55e2841eac0e4120199c23acce758Ben MurdochTEST_F(LoginPromptTest, MAYBE_SupplyRedundantAuths) {
2113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  ASSERT_TRUE(test_server_.Start());
212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_refptr<TabProxy> basic_tab1(GetActiveTab());
214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(basic_tab1.get());
215731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_AUTH_NEEDED,
216731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick            basic_tab1->NavigateToURL(test_server_.GetURL("auth-basic/1")));
217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(basic_tab1->NeedsAuth());
218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  AppendTab(GURL(chrome::kAboutBlankURL));
220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_refptr<TabProxy> basic_tab2(GetActiveTab());
221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(basic_tab2.get());
222731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_AUTH_NEEDED,
223731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick            basic_tab2->NavigateToURL(test_server_.GetURL("auth-basic/2")));
224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(basic_tab2->NeedsAuth());
225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Set the auth in only one of the tabs (but wait for the other to load).
227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int64 last_navigation_time;
228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(basic_tab2->GetLastNavigationTime(&last_navigation_time));
229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(basic_tab1->SetAuth(username_basic_, password_));
230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(basic_tab2->WaitForNavigation(last_navigation_time));
231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Now both tabs have loaded.
233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  wstring title1;
234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(basic_tab1->GetTabTitle(&title1));
235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(ExpectedTitleFromAuth(username_basic_, password_), title1);
236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  wstring title2;
237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(basic_tab2->GetTabTitle(&title2));
238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(ExpectedTitleFromAuth(username_basic_, password_), title2);
239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
241513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#if defined(OS_WIN)
242513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Probably related to test server flakiness in http://crbug.com/60937
243513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#define MAYBE_CancelRedundantAuths FLAKY_CancelRedundantAuths
244513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#else
245513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#define MAYBE_CancelRedundantAuths CancelRedundantAuths
246513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#endif
247513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// If multiple tabs are looking for the same auth, and one is cancelled, the
249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// other should be cancelled as well.
250513209b27ff55e2841eac0e4120199c23acce758Ben MurdochTEST_F(LoginPromptTest, MAYBE_CancelRedundantAuths) {
2513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  ASSERT_TRUE(test_server_.Start());
252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_refptr<TabProxy> basic_tab1(GetActiveTab());
254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(basic_tab1.get());
255731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_AUTH_NEEDED,
256731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick            basic_tab1->NavigateToURL(test_server_.GetURL("auth-basic/1")));
257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(basic_tab1->NeedsAuth());
258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  AppendTab(GURL(chrome::kAboutBlankURL));
260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_refptr<TabProxy> basic_tab2(GetActiveTab());
261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(basic_tab2.get());
262731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_AUTH_NEEDED,
263731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick            basic_tab2->NavigateToURL(test_server_.GetURL("auth-basic/2")));
264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(basic_tab2->NeedsAuth());
265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Cancel the auth in only one of the tabs (but wait for the other to load).
267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  int64 last_navigation_time;
268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(basic_tab2->GetLastNavigationTime(&last_navigation_time));
269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(basic_tab1->CancelAuth());
270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(basic_tab2->WaitForNavigation(last_navigation_time));
271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Now both tabs have been denied.
273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  wstring title1;
274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(basic_tab1->GetTabTitle(&title1));
275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(L"Denied: no auth", title1);
276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  wstring title2;
277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(basic_tab2->GetTabTitle(&title2));
278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(L"Denied: no auth", title2);
279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
280