session_history_browsertest.cc revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// Use of this source code is governed by a BSD-style license that can be 3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// found in the LICENSE file. 4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "base/strings/string_util.h" 6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "base/strings/stringprintf.h" 7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "base/strings/utf_string_conversions.h" 8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "content/public/browser/navigation_controller.h" 9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "content/public/browser/notification_service.h" 10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "content/public/browser/notification_types.h" 11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "content/public/browser/web_contents.h" 12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "content/public/common/url_constants.h" 13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "content/public/test/browser_test_utils.h" 14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "content/public/test/content_browser_test.h" 15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "content/public/test/content_browser_test_utils.h" 16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "content/public/test/test_utils.h" 17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "content/shell/browser/shell.h" 18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "net/test/embedded_test_server/embedded_test_server.h" 19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "net/test/embedded_test_server/http_request.h" 20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "net/test/embedded_test_server/http_response.h" 21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver#include "testing/gtest/include/gtest/gtest.h" 22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvernamespace content { 24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvernamespace { 26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// Handles |request| by serving a response with title set to request contents. 28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverscoped_ptr<net::test_server::HttpResponse> HandleEchoTitleRequest( 29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver const std::string& echotitle_path, 30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver const net::test_server::HttpRequest& request) { 31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver if (!StartsWithASCII(request.relative_url, echotitle_path, true)) 32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return scoped_ptr<net::test_server::HttpResponse>(); 33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver scoped_ptr<net::test_server::BasicHttpResponse> http_response( 35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver new net::test_server::BasicHttpResponse); 36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver http_response->set_code(net::HTTP_OK); 37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver http_response->set_content( 38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver base::StringPrintf( 39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "<html><head><title>%s</title></head></html>", 40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver request.content.c_str())); 41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return http_response.PassAs<net::test_server::HttpResponse>(); 42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} // namespace 45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass SessionHistoryTest : public ContentBrowserTest { 47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver protected: 48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver SessionHistoryTest() {} 49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver virtual void SetUpOnMainThread() OVERRIDE { 51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver embedded_test_server()->RegisterRequestHandler( 53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver base::Bind(&HandleEchoTitleRequest, "/echotitle")); 54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver NavigateToURL(shell(), GURL(url::kAboutBlankURL)); 56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // Simulate clicking a link. Only works on the frames.html testserver page. 59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void ClickLink(std::string node_id) { 60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GURL url("javascript:clickLink('" + node_id + "')"); 61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver NavigateToURL(shell(), url); 62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // Simulate filling in form data. Only works on the frames.html page with 65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // subframe = form.html, and on form.html itself. 66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void FillForm(std::string node_id, std::string value) { 67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GURL url("javascript:fillForm('" + node_id + "', '" + value + "')"); 68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // This will return immediately, but since the JS executes synchronously 69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // on the renderer, it will complete before the next navigate message is 70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // processed. 71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver NavigateToURL(shell(), url); 72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // Simulate submitting a form. Only works on the frames.html page with 75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // subframe = form.html, and on form.html itself. 76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void SubmitForm(std::string node_id) { 77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GURL url("javascript:submitForm('" + node_id + "')"); 78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver NavigateToURL(shell(), url); 79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // Navigate session history using history.go(distance). 82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void JavascriptGo(std::string distance) { 83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GURL url("javascript:history.go('" + distance + "')"); 84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver NavigateToURL(shell(), url); 85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver std::string GetTabTitle() { 88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return base::UTF16ToASCII(shell()->web_contents()->GetTitle()); 89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GURL GetTabURL() { 92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return shell()->web_contents()->GetLastCommittedURL(); 93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GURL GetURL(const std::string file) { 96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return embedded_test_server()->GetURL( 97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver std::string("/session_history/") + file); 98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void NavigateAndCheckTitle(const char* filename, 101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver const std::string& expected_title) { 102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver base::string16 expected_title16(base::ASCIIToUTF16(expected_title)); 103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver TitleWatcher title_watcher(shell()->web_contents(), expected_title16); 104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver NavigateToURL(shell(), GetURL(filename)); 105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_EQ(expected_title16, title_watcher.WaitAndGetTitle()); 106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver bool CanGoBack() { 109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return shell()->web_contents()->GetController().CanGoBack(); 110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver bool CanGoForward() { 113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver return shell()->web_contents()->GetController().CanGoForward(); 114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void GoBack() { 117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver WindowedNotificationObserver load_stop_observer( 118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver NOTIFICATION_LOAD_STOP, 119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver NotificationService::AllSources()); 120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver shell()->web_contents()->GetController().GoBack(); 121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver load_stop_observer.Wait(); 122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver void GoForward() { 125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver WindowedNotificationObserver load_stop_observer( 126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver NOTIFICATION_LOAD_STOP, 127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver NotificationService::AllSources()); 128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver shell()->web_contents()->GetController().GoForward(); 129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver load_stop_observer.Wait(); 130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver } 131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}; 132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// If this flakes, use http://crbug.com/61619 on windows and 134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// http://crbug.com/102094 on mac. 135324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverIN_PROC_BROWSER_TEST_F(SessionHistoryTest, BasicBackForward) { 136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_FALSE(CanGoBack()); 137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_NO_FATAL_FAILURE(NavigateAndCheckTitle("bot1.html", "bot1")); 139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_NO_FATAL_FAILURE(NavigateAndCheckTitle("bot2.html", "bot2")); 140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_NO_FATAL_FAILURE(NavigateAndCheckTitle("bot3.html", "bot3")); 141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // history is [blank, bot1, bot2, *bot3] 143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GoBack(); 145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot2", GetTabTitle()); 146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GoBack(); 148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot1", GetTabTitle()); 149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GoForward(); 151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot2", GetTabTitle()); 152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GoBack(); 154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot1", GetTabTitle()); 155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_NO_FATAL_FAILURE(NavigateAndCheckTitle("bot3.html", "bot3")); 157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // history is [blank, bot1, *bot3] 159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_FALSE(CanGoForward()); 161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot3", GetTabTitle()); 162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GoBack(); 164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot1", GetTabTitle()); 165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GoBack(); 167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(std::string(url::kAboutBlankURL), GetTabTitle()); 168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_FALSE(CanGoBack()); 170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(std::string(url::kAboutBlankURL), GetTabTitle()); 171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GoForward(); 173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot1", GetTabTitle()); 174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GoForward(); 176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot3", GetTabTitle()); 177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// Test that back/forward works when navigating in subframes. 180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// If this flakes, use http://crbug.com/48833 181324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverIN_PROC_BROWSER_TEST_F(SessionHistoryTest, FrameBackForward) { 182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_FALSE(CanGoBack()); 183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_NO_FATAL_FAILURE(NavigateAndCheckTitle("frames.html", "bot1")); 185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ClickLink("abot2"); 187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot2", GetTabTitle()); 188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GURL frames(GetURL("frames.html")); 189324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(frames, GetTabURL()); 190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ClickLink("abot3"); 192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot3", GetTabTitle()); 193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(frames, GetTabURL()); 194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // history is [blank, bot1, bot2, *bot3] 196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 197324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GoBack(); 198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot2", GetTabTitle()); 199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(frames, GetTabURL()); 200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GoBack(); 202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot1", GetTabTitle()); 203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(frames, GetTabURL()); 204324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 205324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GoBack(); 206324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(std::string(url::kAboutBlankURL), GetTabTitle()); 207324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(GURL(url::kAboutBlankURL), GetTabURL()); 208324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 209324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GoForward(); 210324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot1", GetTabTitle()); 211324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(frames, GetTabURL()); 212324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 213324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GoForward(); 214324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot2", GetTabTitle()); 215324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(frames, GetTabURL()); 216324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 217324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ClickLink("abot1"); 218324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot1", GetTabTitle()); 219324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(frames, GetTabURL()); 220324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 221324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // history is [blank, bot1, bot2, *bot1] 222324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 223324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_FALSE(CanGoForward()); 224324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot1", GetTabTitle()); 225324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(frames, GetTabURL()); 226324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 227324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GoBack(); 228324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot2", GetTabTitle()); 229324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(frames, GetTabURL()); 230324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 231324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GoBack(); 232324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot1", GetTabTitle()); 233324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(frames, GetTabURL()); 234324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 235324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 236324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// Test that back/forward preserves POST data and document state in subframes. 237324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// If this flakes use http://crbug.com/61619 238324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverIN_PROC_BROWSER_TEST_F(SessionHistoryTest, FrameFormBackForward) { 239324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_FALSE(CanGoBack()); 240324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 241324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_NO_FATAL_FAILURE(NavigateAndCheckTitle("frames.html", "bot1")); 242324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 243324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ClickLink("aform"); 244324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("form", GetTabTitle()); 245324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GURL frames(GetURL("frames.html")); 246324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(frames, GetTabURL()); 247324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 248324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver SubmitForm("isubmit"); 249324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("text=&select=a", GetTabTitle()); 250324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(frames, GetTabURL()); 251324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 252324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GoBack(); 253324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("form", GetTabTitle()); 254324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(frames, GetTabURL()); 255324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 256324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // history is [blank, bot1, *form, post] 257324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 258324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ClickLink("abot2"); 259324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot2", GetTabTitle()); 260324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(frames, GetTabURL()); 261324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 262324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // history is [blank, bot1, form, *bot2] 263324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 264324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GoBack(); 265324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("form", GetTabTitle()); 266324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(frames, GetTabURL()); 267324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 268324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver SubmitForm("isubmit"); 269324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("text=&select=a", GetTabTitle()); 270324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(frames, GetTabURL()); 271324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 272324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // history is [blank, bot1, form, *post] 273324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 274324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // TODO(mpcomplete): reenable this when WebKit bug 10199 is fixed: 275324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // "returning to a POST result within a frame does a GET instead of a POST" 276324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ClickLink("abot2"); 277324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot2", GetTabTitle()); 278324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(frames, GetTabURL()); 279324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 280324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GoBack(); 281324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("text=&select=a", GetTabTitle()); 282324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(frames, GetTabURL()); 283324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 284324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 285324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// TODO(mpcomplete): enable this when Bug 734372 is fixed: 286324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// "Doing a session history navigation does not restore newly-created subframe 287324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// document state" 288324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// Test that back/forward preserves POST data and document state when navigating 289324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// across frames (ie, from frame -> nonframe). 290324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// Hangs, see http://crbug.com/45058. 291324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverIN_PROC_BROWSER_TEST_F(SessionHistoryTest, CrossFrameFormBackForward) { 292324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_FALSE(CanGoBack()); 293324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 294324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GURL frames(GetURL("frames.html")); 295324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_NO_FATAL_FAILURE(NavigateAndCheckTitle("frames.html", "bot1")); 296324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 297324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ClickLink("aform"); 298324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("form", GetTabTitle()); 299324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(frames, GetTabURL()); 300324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 301324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver SubmitForm("isubmit"); 302324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("text=&select=a", GetTabTitle()); 303324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(frames, GetTabURL()); 304324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 305324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GoBack(); 306324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("form", GetTabTitle()); 307324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(frames, GetTabURL()); 308324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 309324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // history is [blank, bot1, *form, post] 310324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 311324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_NO_FATAL_FAILURE(NavigateAndCheckTitle("bot2.html", "bot2")); 312324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 313324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // history is [blank, bot1, form, *bot2] 314324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 315324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GoBack(); 316324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot1", GetTabTitle()); 317324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(frames, GetTabURL()); 318324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 319324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver SubmitForm("isubmit"); 320324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("text=&select=a", GetTabTitle()); 321324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(frames, GetTabURL()); 322324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 323324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 324324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// Test that back/forward entries are created for reference fragment 325324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// navigations. Bug 730379. 326324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// If this flakes use http://crbug.com/61619. 327324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverIN_PROC_BROWSER_TEST_F(SessionHistoryTest, FragmentBackForward) { 328324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver embedded_test_server()->RegisterRequestHandler( 329324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver base::Bind(&HandleEchoTitleRequest, "/echotitle")); 330324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 331324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_FALSE(CanGoBack()); 332324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 333324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GURL fragment(GetURL("fragment.html")); 334324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_NO_FATAL_FAILURE(NavigateAndCheckTitle("fragment.html", "fragment")); 335324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 336324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_NO_FATAL_FAILURE(NavigateAndCheckTitle("fragment.html#a", "fragment")); 337324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_NO_FATAL_FAILURE(NavigateAndCheckTitle("fragment.html#b", "fragment")); 338324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_NO_FATAL_FAILURE(NavigateAndCheckTitle("fragment.html#c", "fragment")); 339324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 340324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // history is [blank, fragment, fragment#a, fragment#b, *fragment#c] 341324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 342324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GoBack(); 343324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(GetURL("fragment.html#b"), GetTabURL()); 344324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 345324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GoBack(); 346324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(GetURL("fragment.html#a"), GetTabURL()); 347324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 348324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GoBack(); 349324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(GetURL("fragment.html"), GetTabURL()); 350324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 351324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GoForward(); 352324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(GetURL("fragment.html#a"), GetTabURL()); 353324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 354324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_NO_FATAL_FAILURE(NavigateAndCheckTitle("bot3.html", "bot3")); 355324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 356324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // history is [blank, fragment, fragment#a, bot3] 357324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 358324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_FALSE(CanGoForward()); 359324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(GetURL("bot3.html"), GetTabURL()); 360324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 361324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GoBack(); 362324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(GetURL("fragment.html#a"), GetTabURL()); 363324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 364324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GoBack(); 365324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(GetURL("fragment.html"), GetTabURL()); 366324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 367324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 368324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// Test that the javascript window.history object works. 369324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// NOTE: history.go(N) does not do anything if N is outside the bounds of the 370324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// back/forward list (such as trigger our start/stop loading events). This 371324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// means the test will hang if it attempts to navigate too far forward or back, 372324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// since we'll be waiting forever for a load stop event. 373324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// 374324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// TODO(brettw) bug 50648: fix flakyness. This test seems like it was failing 375324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// about 1/4 of the time on Vista by failing to execute JavascriptGo (see bug). 376324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverIN_PROC_BROWSER_TEST_F(SessionHistoryTest, JavascriptHistory) { 377324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_FALSE(CanGoBack()); 378324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 379324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_NO_FATAL_FAILURE(NavigateAndCheckTitle("bot1.html", "bot1")); 380324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_NO_FATAL_FAILURE(NavigateAndCheckTitle("bot2.html", "bot2")); 381324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_NO_FATAL_FAILURE(NavigateAndCheckTitle("bot3.html", "bot3")); 382324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 383324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // history is [blank, bot1, bot2, *bot3] 384324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 385324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver JavascriptGo("-1"); 386324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot2", GetTabTitle()); 387324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 388324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver JavascriptGo("-1"); 389324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot1", GetTabTitle()); 390324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 391324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver JavascriptGo("1"); 392324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot2", GetTabTitle()); 393324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 394324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver JavascriptGo("-1"); 395324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot1", GetTabTitle()); 396324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 397324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver JavascriptGo("2"); 398324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot3", GetTabTitle()); 399324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 400324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // history is [blank, bot1, bot2, *bot3] 401324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 402324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver JavascriptGo("-3"); 403324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(std::string(url::kAboutBlankURL), GetTabTitle()); 404324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 405324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_FALSE(CanGoBack()); 406324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(std::string(url::kAboutBlankURL), GetTabTitle()); 407324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 408324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver JavascriptGo("1"); 409324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot1", GetTabTitle()); 410324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 411324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_NO_FATAL_FAILURE(NavigateAndCheckTitle("bot3.html", "bot3")); 412324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 413324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // history is [blank, bot1, *bot3] 414324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 415324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_FALSE(CanGoForward()); 416324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot3", GetTabTitle()); 417324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 418324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver JavascriptGo("-1"); 419324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot1", GetTabTitle()); 420324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 421324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver JavascriptGo("-1"); 422324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(std::string(url::kAboutBlankURL), GetTabTitle()); 423324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 424324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_FALSE(CanGoBack()); 425324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(std::string(url::kAboutBlankURL), GetTabTitle()); 426324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 427324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver JavascriptGo("1"); 428324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot1", GetTabTitle()); 429324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 430324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver JavascriptGo("1"); 431324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("bot3", GetTabTitle()); 432324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 433324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // TODO(creis): Test that JavaScript history navigations work across tab 434324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // types. For example, load about:network in a tab, then a real page, then 435324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // try to go back and forward with JavaScript. Bug 1136715. 436324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // (Hard to test right now, because pages like about:network cause the 437324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // TabProxy to hang. This is because they do not appear to use the 438324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // NotificationService.) 439324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 440324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 441324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// This test is failing consistently. See http://crbug.com/22560 442324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverIN_PROC_BROWSER_TEST_F(SessionHistoryTest, LocationReplace) { 443324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // Test that using location.replace doesn't leave the title of the old page 444324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // visible. 445324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_NO_FATAL_FAILURE(NavigateAndCheckTitle( 446324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "replace.html?bot1.html", "bot1")); 447324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 448324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 449324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverIN_PROC_BROWSER_TEST_F(SessionHistoryTest, LocationChangeInSubframe) { 450324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_NO_FATAL_FAILURE(NavigateAndCheckTitle( 451324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "location_redirect.html", "Default Title")); 452324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 453324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver NavigateToURL(shell(), GURL("javascript:void(frames[0].navigate())")); 454324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("foo", GetTabTitle()); 455324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 456324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GoBack(); 457324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ("Default Title", GetTabTitle()); 458324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 459324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 460324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// http://code.google.com/p/chromium/issues/detail?id=56267 461324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverIN_PROC_BROWSER_TEST_F(SessionHistoryTest, HistoryLength) { 462324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver int length; 463324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_TRUE(ExecuteScriptAndExtractInt( 464324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver shell()->web_contents(), 465324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "domAutomationController.send(history.length)", 466324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver &length)); 467324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(1, length); 468324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 469324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver NavigateToURL(shell(), GetURL("title1.html")); 470324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 471324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_TRUE(ExecuteScriptAndExtractInt( 472324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver shell()->web_contents(), 473324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "domAutomationController.send(history.length)", 474324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver &length)); 475324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(2, length); 476324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 477324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // Now test that history.length is updated when the navigation is committed. 478324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver NavigateToURL(shell(), GetURL("record_length.html")); 479324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 480324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_TRUE(ExecuteScriptAndExtractInt( 481324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver shell()->web_contents(), 482324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "domAutomationController.send(history.length)", 483324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver &length)); 484324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(3, length); 485324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 486324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GoBack(); 487324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver GoBack(); 488324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 489324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver // Ensure history.length is properly truncated. 490324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver NavigateToURL(shell(), GetURL("title2.html")); 491324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 492324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver ASSERT_TRUE(ExecuteScriptAndExtractInt( 493324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver shell()->web_contents(), 494324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver "domAutomationController.send(history.length)", 495324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver &length)); 496324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver EXPECT_EQ(2, length); 497324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} 498324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver 499324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver} // namespace content 500324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver