OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "base/bind.h" | 5 #include "base/bind.h" |
6 #include "base/strings/stringprintf.h" | 6 #include "base/strings/stringprintf.h" |
7 #include "content/browser/frame_host/frame_tree.h" | 7 #include "content/browser/frame_host/frame_tree.h" |
8 #include "content/browser/frame_host/navigation_controller_impl.h" | 8 #include "content/browser/frame_host/navigation_controller_impl.h" |
9 #include "content/browser/frame_host/navigation_entry_impl.h" | 9 #include "content/browser/frame_host/navigation_entry_impl.h" |
10 #include "content/browser/web_contents/web_contents_impl.h" | 10 #include "content/browser/web_contents/web_contents_impl.h" |
11 #include "content/public/browser/web_contents.h" | 11 #include "content/public/browser/web_contents.h" |
12 #include "content/public/browser/web_contents_observer.h" | 12 #include "content/public/browser/web_contents_observer.h" |
13 #include "content/public/test/browser_test_utils.h" | 13 #include "content/public/test/browser_test_utils.h" |
14 #include "content/public/test/content_browser_test.h" | 14 #include "content/public/test/content_browser_test.h" |
15 #include "content/public/test/content_browser_test_utils.h" | 15 #include "content/public/test/content_browser_test_utils.h" |
16 #include "content/public/test/test_navigation_observer.h" | |
16 #include "content/public/test/test_utils.h" | 17 #include "content/public/test/test_utils.h" |
17 #include "content/shell/browser/shell.h" | 18 #include "content/shell/browser/shell.h" |
18 #include "content/test/content_browser_test_utils_internal.h" | 19 #include "content/test/content_browser_test_utils_internal.h" |
19 #include "net/dns/mock_host_resolver.h" | 20 #include "net/dns/mock_host_resolver.h" |
20 #include "net/test/embedded_test_server/embedded_test_server.h" | 21 #include "net/test/embedded_test_server/embedded_test_server.h" |
21 | 22 |
22 namespace content { | 23 namespace content { |
23 | 24 |
24 class NavigationControllerBrowserTest : public ContentBrowserTest { | 25 class NavigationControllerBrowserTest : public ContentBrowserTest { |
25 protected: | 26 protected: |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
81 // Now try to go back. This should not hang. | 82 // Now try to go back. This should not hang. |
82 ASSERT_TRUE(controller.CanGoBack()); | 83 ASSERT_TRUE(controller.CanGoBack()); |
83 controller.GoBack(); | 84 controller.GoBack(); |
84 EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); | 85 EXPECT_TRUE(WaitForLoadStop(shell()->web_contents())); |
85 | 86 |
86 // This should have successfully gone back. | 87 // This should have successfully gone back. |
87 EXPECT_EQ(GURL(base::StringPrintf("data:text/html,page%d", kMaxEntryCount)), | 88 EXPECT_EQ(GURL(base::StringPrintf("data:text/html,page%d", kMaxEntryCount)), |
88 controller.GetLastCommittedEntry()->GetURL()); | 89 controller.GetLastCommittedEntry()->GetURL()); |
89 } | 90 } |
90 | 91 |
92 namespace { | |
93 | |
94 int RendererHistoryLength(Shell* shell) { | |
95 int value = 0; | |
96 EXPECT_TRUE(ExecuteScriptAndExtractInt( | |
97 shell->web_contents(), | |
98 "domAutomationController.send(history.length)", | |
99 &value)); | |
100 return value; | |
101 } | |
102 | |
103 // Similar to the ones from content_browser_test_utils. | |
104 bool NavigateToURLAndReplace(Shell* shell, const GURL& url) { | |
105 WebContents* web_contents = shell->web_contents(); | |
106 WaitForLoadStop(web_contents); | |
107 TestNavigationObserver same_tab_observer(web_contents, 1); | |
108 NavigationController::LoadURLParams params(url); | |
109 params.should_replace_current_entry = true; | |
110 web_contents->GetController().LoadURLWithParams(params); | |
111 web_contents->Focus(); | |
Charlie Reis
2015/02/06 17:29:35
Is this line needed? I don't see why the focus wo
Avi (use Gerrit)
2015/02/06 17:43:14
In content_browser_test_utils, NavigateToURLBlockU
| |
112 same_tab_observer.Wait(); | |
113 if (!IsLastCommittedEntryOfPageType(web_contents, PAGE_TYPE_NORMAL)) | |
114 return false; | |
115 return web_contents->GetLastCommittedURL() == url; | |
116 } | |
117 | |
118 } // namespace | |
119 | |
120 // When loading a new page to replace an old page in the history list, make sure | |
121 // that the browser and renderer agree, and that both get it right. | |
122 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, | |
123 CorrectLengthWithCurrentItemReplacement) { | |
124 NavigationController& controller = | |
125 shell()->web_contents()->GetController(); | |
126 | |
127 EXPECT_TRUE(NavigateToURL(shell(), GURL("data:text/html,page1"))); | |
128 EXPECT_EQ(1, controller.GetEntryCount()); | |
129 EXPECT_EQ(1, RendererHistoryLength(shell())); | |
130 | |
131 EXPECT_TRUE(NavigateToURLAndReplace(shell(), GURL("data:text/html,page2"))); | |
132 EXPECT_EQ(1, controller.GetEntryCount()); | |
133 EXPECT_EQ(1, RendererHistoryLength(shell())); | |
134 | |
135 // Note that there's no way to access the renderer's notion of the history | |
136 // offset via JavaScript. Checking just the history length, though, is enough; | |
137 // if the replacement failed, there would be a new history entry and thus an | |
138 // incorrect length. | |
139 } | |
140 | |
141 namespace { | |
142 | |
91 struct FrameNavigateParamsCapturer : public WebContentsObserver { | 143 struct FrameNavigateParamsCapturer : public WebContentsObserver { |
92 public: | 144 public: |
93 explicit FrameNavigateParamsCapturer(FrameTreeNode* node) | 145 explicit FrameNavigateParamsCapturer(FrameTreeNode* node) |
94 : WebContentsObserver( | 146 : WebContentsObserver( |
95 node->current_frame_host()->delegate()->GetAsWebContents()), | 147 node->current_frame_host()->delegate()->GetAsWebContents()), |
96 frame_tree_node_id_(node->frame_tree_node_id()), | 148 frame_tree_node_id_(node->frame_tree_node_id()), |
97 message_loop_runner_(new MessageLoopRunner) {} | 149 message_loop_runner_(new MessageLoopRunner) {} |
98 | 150 |
99 void Wait() { | 151 void Wait() { |
100 message_loop_runner_->Run(); | 152 message_loop_runner_->Run(); |
(...skipping 27 matching lines...) Expand all Loading... | |
128 // The params of the last navigation. | 180 // The params of the last navigation. |
129 FrameNavigateParams params_; | 181 FrameNavigateParams params_; |
130 | 182 |
131 // The details of the last navigation. | 183 // The details of the last navigation. |
132 LoadCommittedDetails details_; | 184 LoadCommittedDetails details_; |
133 | 185 |
134 // The MessageLoopRunner used to spin the message loop. | 186 // The MessageLoopRunner used to spin the message loop. |
135 scoped_refptr<MessageLoopRunner> message_loop_runner_; | 187 scoped_refptr<MessageLoopRunner> message_loop_runner_; |
136 }; | 188 }; |
137 | 189 |
190 } // namespace | |
191 | |
138 // Verify that the distinction between manual and auto subframes is properly set | 192 // Verify that the distinction between manual and auto subframes is properly set |
139 // for subframe navigations. TODO(avi): It's rather bogus that the same info is | 193 // for subframe navigations. TODO(avi): It's rather bogus that the same info is |
140 // in two different enums; http://crbug.com/453555. | 194 // in two different enums; http://crbug.com/453555. |
141 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, | 195 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, |
142 ManualAndAutoSubframeNavigationClassification) { | 196 ManualAndAutoSubframeNavigationClassification) { |
143 GURL main_url( | 197 GURL main_url( |
144 embedded_test_server()->GetURL("/frame_tree/page_with_one_frame.html")); | 198 embedded_test_server()->GetURL("/frame_tree/page_with_one_frame.html")); |
145 NavigateToURL(shell(), main_url); | 199 NavigateToURL(shell(), main_url); |
146 | 200 |
147 // It is safe to obtain the root frame tree node here, as it doesn't change. | 201 // It is safe to obtain the root frame tree node here, as it doesn't change. |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
189 embedded_test_server()->GetURL("/frame_tree/2-3.html")); | 243 embedded_test_server()->GetURL("/frame_tree/2-3.html")); |
190 NavigateFrameToURL(root->child_at(0), frame_url); | 244 NavigateFrameToURL(root->child_at(0), frame_url); |
191 capturer.Wait(); | 245 capturer.Wait(); |
192 EXPECT_EQ(ui::PAGE_TRANSITION_MANUAL_SUBFRAME, | 246 EXPECT_EQ(ui::PAGE_TRANSITION_MANUAL_SUBFRAME, |
193 capturer.params().transition); | 247 capturer.params().transition); |
194 EXPECT_EQ(NAVIGATION_TYPE_NEW_SUBFRAME, capturer.details().type); | 248 EXPECT_EQ(NAVIGATION_TYPE_NEW_SUBFRAME, capturer.details().type); |
195 } | 249 } |
196 } | 250 } |
197 | 251 |
198 } // namespace content | 252 } // namespace content |
OLD | NEW |