1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 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
7513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/app/chrome_command_ids.h"
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/net/url_fixer_upper.h"
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/url_constants.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/automation/tab_proxy.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/automation/browser_proxy.h"
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/ui/ui_test.h"
133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "net/test/test_server.h"
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace {
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst FilePath::CharType kDocRoot[] = FILE_PATH_LITERAL("chrome/test/data");
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtypedef UITest RepostFormWarningTest;
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_WIN)
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// http://crbug.com/47228
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define MAYBE_TestDoubleReload FLAKY_TestDoubleReload
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#else
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define MAYBE_TestDoubleReload TestDoubleReload
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(RepostFormWarningTest, MAYBE_TestDoubleReload) {
313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  net::TestServer test_server(net::TestServer::TYPE_HTTP, FilePath(kDocRoot));
323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  ASSERT_TRUE(test_server.Start());
333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0));
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(browser.get());
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_refptr<TabProxy> tab(browser->GetTab(0));
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(tab.get());
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Load a form.
413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  ASSERT_TRUE(tab->NavigateToURL(test_server.GetURL("files/form.html")));
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Submit it.
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(tab->NavigateToURL(GURL(
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "javascript:document.getElementById('form').submit()")));
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Try to reload it twice, checking for repost.
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  tab->ReloadAsync();
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  tab->ReloadAsync();
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Navigate away from the page (this is when the test usually crashes).
513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  ASSERT_TRUE(tab->NavigateToURL(test_server.GetURL("bar")));
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
54731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#if defined(OS_WIN)
55731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// http://crbug.com/47228
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define MAYBE_TestLoginAfterRepost FLAKY_TestLoginAfterRepost
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#else
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define MAYBE_TestLoginAfterRepost TestLoginAfterRepost
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(RepostFormWarningTest, MAYBE_TestLoginAfterRepost) {
623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  net::TestServer test_server(net::TestServer::TYPE_HTTP, FilePath(kDocRoot));
633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  ASSERT_TRUE(test_server.Start());
643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0));
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(browser.get());
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_refptr<TabProxy> tab(browser->GetTab(0));
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(tab.get());
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Load a form.
723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  ASSERT_TRUE(tab->NavigateToURL(test_server.GetURL("files/form.html")));
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Submit it.
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ASSERT_TRUE(tab->NavigateToURL(GURL(
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      "javascript:document.getElementById('form').submit()")));
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Try to reload it, checking for repost.
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  tab->ReloadAsync();
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Navigate to a page that requires authentication, bringing up another
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // tab-modal sheet.
823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  ASSERT_TRUE(tab->NavigateToURL(test_server.GetURL("auth-basic")));
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Try to reload it again.
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  tab->ReloadAsync();
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Navigate away from the page.
883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  ASSERT_TRUE(tab->NavigateToURL(test_server.GetURL("bar")));
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
90