| 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/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/macros.h" | 6 #include "base/macros.h" |
| 7 #include "base/time/time.h" | 7 #include "base/time/time.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/frame_host/navigation_request.h" | 10 #include "content/browser/frame_host/navigation_request.h" |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 const Referrer& referrer, | 61 const Referrer& referrer, |
| 62 ui::PageTransition transition_type) { | 62 ui::PageTransition transition_type) { |
| 63 NavigationController::LoadURLParams load_params(url); | 63 NavigationController::LoadURLParams load_params(url); |
| 64 load_params.frame_tree_node_id = node->frame_tree_node_id(); | 64 load_params.frame_tree_node_id = node->frame_tree_node_id(); |
| 65 load_params.referrer = referrer; | 65 load_params.referrer = referrer; |
| 66 load_params.transition_type = transition_type; | 66 load_params.transition_type = transition_type; |
| 67 | 67 |
| 68 controller().LoadURLWithParams(load_params); | 68 controller().LoadURLWithParams(load_params); |
| 69 } | 69 } |
| 70 | 70 |
| 71 NavigationRequest* GetNavigationRequestForFrameTreeNode( | |
| 72 FrameTreeNode* frame_tree_node) { | |
| 73 return static_cast<NavigatorImpl*>(frame_tree_node->navigator()) | |
| 74 ->GetNavigationRequestForNodeForTesting(frame_tree_node); | |
| 75 } | |
| 76 | |
| 77 TestRenderFrameHost* GetSpeculativeRenderFrameHost(FrameTreeNode* node) { | 71 TestRenderFrameHost* GetSpeculativeRenderFrameHost(FrameTreeNode* node) { |
| 78 return static_cast<TestRenderFrameHost*>( | 72 return static_cast<TestRenderFrameHost*>( |
| 79 node->render_manager()->speculative_render_frame_host_.get()); | 73 node->render_manager()->speculative_render_frame_host_.get()); |
| 80 } | 74 } |
| 81 | 75 |
| 82 // Checks if this RenderFrameHost sent a single FrameMsg_CommitNavigation | 76 // Checks if this RenderFrameHost sent a single FrameMsg_CommitNavigation |
| 83 // since the last clearing of the sink. | 77 // since the last clearing of the sink. |
| 84 // Note: caller must invoke ClearMessages on the sink at some point before | 78 // Note: caller must invoke ClearMessages on the sink at some point before |
| 85 // the tracked commit happens to clear up commit messages from previous | 79 // the tracked commit happens to clear up commit messages from previous |
| 86 // navigations. | 80 // navigations. |
| (...skipping 20 matching lines...) Expand all Loading... |
| 107 TEST_F(NavigatorTestWithBrowserSideNavigation, | 101 TEST_F(NavigatorTestWithBrowserSideNavigation, |
| 108 SimpleBrowserInitiatedNavigationFromNonLiveRenderer) { | 102 SimpleBrowserInitiatedNavigationFromNonLiveRenderer) { |
| 109 const GURL kUrl("http://chromium.org/"); | 103 const GURL kUrl("http://chromium.org/"); |
| 110 | 104 |
| 111 EXPECT_FALSE(main_test_rfh()->IsRenderFrameLive()); | 105 EXPECT_FALSE(main_test_rfh()->IsRenderFrameLive()); |
| 112 | 106 |
| 113 // Start a browser-initiated navigation. | 107 // Start a browser-initiated navigation. |
| 114 int32 site_instance_id = main_test_rfh()->GetSiteInstance()->GetId(); | 108 int32 site_instance_id = main_test_rfh()->GetSiteInstance()->GetId(); |
| 115 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 109 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 116 RequestNavigation(node, kUrl); | 110 RequestNavigation(node, kUrl); |
| 117 NavigationRequest* request = GetNavigationRequestForFrameTreeNode(node); | 111 NavigationRequest* request = node->navigation_request(); |
| 118 ASSERT_TRUE(request); | 112 ASSERT_TRUE(request); |
| 119 EXPECT_EQ(kUrl, request->common_params().url); | 113 EXPECT_EQ(kUrl, request->common_params().url); |
| 120 EXPECT_TRUE(request->browser_initiated()); | 114 EXPECT_TRUE(request->browser_initiated()); |
| 121 | 115 |
| 122 // As there's no live renderer the navigation should not wait for a | 116 // As there's no live renderer the navigation should not wait for a |
| 123 // beforeUnload ACK from the renderer and start right away. | 117 // beforeUnload ACK from the renderer and start right away. |
| 124 EXPECT_EQ(NavigationRequest::STARTED, request->state()); | 118 EXPECT_EQ(NavigationRequest::STARTED, request->state()); |
| 125 ASSERT_TRUE(GetLoaderForNavigationRequest(request)); | 119 ASSERT_TRUE(GetLoaderForNavigationRequest(request)); |
| 126 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 120 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 127 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 121 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 128 | 122 |
| 129 // Have the current RenderFrameHost commit the navigation. | 123 // Have the current RenderFrameHost commit the navigation. |
| 130 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 124 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 131 GetLoaderForNavigationRequest(request) | 125 GetLoaderForNavigationRequest(request) |
| 132 ->CallOnResponseStarted(response, MakeEmptyStream()); | 126 ->CallOnResponseStarted(response, MakeEmptyStream()); |
| 133 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 127 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 134 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state()); | 128 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state()); |
| 135 | 129 |
| 136 // Commit the navigation. | 130 // Commit the navigation. |
| 137 main_test_rfh()->SendNavigate(0, kUrl); | 131 main_test_rfh()->SendNavigate(0, kUrl); |
| 138 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); | 132 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); |
| 139 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), | 133 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), |
| 140 main_test_rfh()->GetSiteInstance()->GetSiteURL()); | 134 main_test_rfh()->GetSiteInstance()->GetSiteURL()); |
| 141 EXPECT_EQ(kUrl, contents()->GetLastCommittedURL()); | 135 EXPECT_EQ(kUrl, contents()->GetLastCommittedURL()); |
| 142 EXPECT_FALSE(GetNavigationRequestForFrameTreeNode(node)); | 136 EXPECT_FALSE(node->navigation_request()); |
| 143 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 137 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 144 | 138 |
| 145 // The main RenderFrameHost should not have been changed, and the renderer | 139 // The main RenderFrameHost should not have been changed, and the renderer |
| 146 // should have been initialized. | 140 // should have been initialized. |
| 147 EXPECT_EQ(site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); | 141 EXPECT_EQ(site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); |
| 148 EXPECT_TRUE(main_test_rfh()->IsRenderFrameLive()); | 142 EXPECT_TRUE(main_test_rfh()->IsRenderFrameLive()); |
| 149 | 143 |
| 150 // After a navigation is finished no speculative RenderFrameHost should | 144 // After a navigation is finished no speculative RenderFrameHost should |
| 151 // exist. | 145 // exist. |
| 152 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 146 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 153 | 147 |
| 154 // With PlzNavigate enabled a pending RenderFrameHost should never exist. | 148 // With PlzNavigate enabled a pending RenderFrameHost should never exist. |
| 155 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 149 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 156 } | 150 } |
| 157 | 151 |
| 158 // PlzNavigate: Test a complete renderer-initiated same-site navigation. | 152 // PlzNavigate: Test a complete renderer-initiated same-site navigation. |
| 159 TEST_F(NavigatorTestWithBrowserSideNavigation, | 153 TEST_F(NavigatorTestWithBrowserSideNavigation, |
| 160 SimpleRendererInitiatedSameSiteNavigation) { | 154 SimpleRendererInitiatedSameSiteNavigation) { |
| 161 const GURL kUrl1("http://www.chromium.org/"); | 155 const GURL kUrl1("http://www.chromium.org/"); |
| 162 const GURL kUrl2("http://www.chromium.org/Home"); | 156 const GURL kUrl2("http://www.chromium.org/Home"); |
| 163 | 157 |
| 164 contents()->NavigateAndCommit(kUrl1); | 158 contents()->NavigateAndCommit(kUrl1); |
| 165 EXPECT_TRUE(main_test_rfh()->IsRenderFrameLive()); | 159 EXPECT_TRUE(main_test_rfh()->IsRenderFrameLive()); |
| 166 | 160 |
| 167 // Start a renderer-initiated non-user-initiated navigation. | 161 // Start a renderer-initiated non-user-initiated navigation. |
| 168 process()->sink().ClearMessages(); | 162 process()->sink().ClearMessages(); |
| 169 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); | 163 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); |
| 170 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 164 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 171 NavigationRequest* request = GetNavigationRequestForFrameTreeNode(node); | 165 NavigationRequest* request = node->navigation_request(); |
| 172 ASSERT_TRUE(request); | 166 ASSERT_TRUE(request); |
| 173 | 167 |
| 174 // The navigation is immediately started as there's no need to wait for | 168 // The navigation is immediately started as there's no need to wait for |
| 175 // beforeUnload to be executed. | 169 // beforeUnload to be executed. |
| 176 EXPECT_EQ(NavigationRequest::STARTED, request->state()); | 170 EXPECT_EQ(NavigationRequest::STARTED, request->state()); |
| 177 EXPECT_FALSE(request->begin_params().has_user_gesture); | 171 EXPECT_FALSE(request->begin_params().has_user_gesture); |
| 178 EXPECT_EQ(kUrl2, request->common_params().url); | 172 EXPECT_EQ(kUrl2, request->common_params().url); |
| 179 EXPECT_FALSE(request->browser_initiated()); | 173 EXPECT_FALSE(request->browser_initiated()); |
| 180 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 174 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 181 | 175 |
| 182 // Have the current RenderFrameHost commit the navigation. | 176 // Have the current RenderFrameHost commit the navigation. |
| 183 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 177 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 184 GetLoaderForNavigationRequest(request) | 178 GetLoaderForNavigationRequest(request) |
| 185 ->CallOnResponseStarted(response, MakeEmptyStream()); | 179 ->CallOnResponseStarted(response, MakeEmptyStream()); |
| 186 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 180 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 187 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state()); | 181 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state()); |
| 188 | 182 |
| 189 // Commit the navigation. | 183 // Commit the navigation. |
| 190 main_test_rfh()->SendNavigate(0, kUrl2); | 184 main_test_rfh()->SendNavigate(0, kUrl2); |
| 191 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); | 185 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); |
| 192 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl2), | 186 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl2), |
| 193 main_test_rfh()->GetSiteInstance()->GetSiteURL()); | 187 main_test_rfh()->GetSiteInstance()->GetSiteURL()); |
| 194 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); | 188 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); |
| 195 EXPECT_FALSE(GetNavigationRequestForFrameTreeNode(node)); | 189 EXPECT_FALSE(node->navigation_request()); |
| 196 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 190 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 197 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 191 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 198 } | 192 } |
| 199 | 193 |
| 200 // PlzNavigate: Test a complete renderer-initiated navigation that should be | 194 // PlzNavigate: Test a complete renderer-initiated navigation that should be |
| 201 // cross-site but does not result in a SiteInstance swap because its | 195 // cross-site but does not result in a SiteInstance swap because its |
| 202 // renderer-initiated. | 196 // renderer-initiated. |
| 203 TEST_F(NavigatorTestWithBrowserSideNavigation, | 197 TEST_F(NavigatorTestWithBrowserSideNavigation, |
| 204 SimpleRendererInitiatedCrossSiteNavigation) { | 198 SimpleRendererInitiatedCrossSiteNavigation) { |
| 205 const GURL kUrl1("http://www.chromium.org/"); | 199 const GURL kUrl1("http://www.chromium.org/"); |
| 206 const GURL kUrl2("http://www.google.com"); | 200 const GURL kUrl2("http://www.google.com"); |
| 207 | 201 |
| 208 contents()->NavigateAndCommit(kUrl1); | 202 contents()->NavigateAndCommit(kUrl1); |
| 209 EXPECT_TRUE(main_test_rfh()->IsRenderFrameLive()); | 203 EXPECT_TRUE(main_test_rfh()->IsRenderFrameLive()); |
| 210 int32 site_instance_id_1 = main_test_rfh()->GetSiteInstance()->GetId(); | 204 int32 site_instance_id_1 = main_test_rfh()->GetSiteInstance()->GetId(); |
| 211 | 205 |
| 212 // Start a renderer-initiated non-user-initiated navigation. | 206 // Start a renderer-initiated non-user-initiated navigation. |
| 213 process()->sink().ClearMessages(); | 207 process()->sink().ClearMessages(); |
| 214 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); | 208 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); |
| 215 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 209 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 216 NavigationRequest* request = GetNavigationRequestForFrameTreeNode(node); | 210 NavigationRequest* request = node->navigation_request(); |
| 217 ASSERT_TRUE(request); | 211 ASSERT_TRUE(request); |
| 218 | 212 |
| 219 // The navigation is immediately started as there's no need to wait for | 213 // The navigation is immediately started as there's no need to wait for |
| 220 // beforeUnload to be executed. | 214 // beforeUnload to be executed. |
| 221 EXPECT_EQ(NavigationRequest::STARTED, request->state()); | 215 EXPECT_EQ(NavigationRequest::STARTED, request->state()); |
| 222 EXPECT_FALSE(request->begin_params().has_user_gesture); | 216 EXPECT_FALSE(request->begin_params().has_user_gesture); |
| 223 EXPECT_EQ(kUrl2, request->common_params().url); | 217 EXPECT_EQ(kUrl2, request->common_params().url); |
| 224 EXPECT_FALSE(request->browser_initiated()); | 218 EXPECT_FALSE(request->browser_initiated()); |
| 225 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 219 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 226 | 220 |
| 227 // Have the current RenderFrameHost commit the navigation. | 221 // Have the current RenderFrameHost commit the navigation. |
| 228 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 222 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 229 GetLoaderForNavigationRequest(request) | 223 GetLoaderForNavigationRequest(request) |
| 230 ->CallOnResponseStarted(response, MakeEmptyStream()); | 224 ->CallOnResponseStarted(response, MakeEmptyStream()); |
| 231 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 225 EXPECT_TRUE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 232 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state()); | 226 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, request->state()); |
| 233 | 227 |
| 234 // Commit the navigation. | 228 // Commit the navigation. |
| 235 main_test_rfh()->SendNavigate(0, kUrl2); | 229 main_test_rfh()->SendNavigate(0, kUrl2); |
| 236 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); | 230 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, main_test_rfh()->rfh_state()); |
| 237 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); | 231 EXPECT_EQ(kUrl2, contents()->GetLastCommittedURL()); |
| 238 EXPECT_FALSE(GetNavigationRequestForFrameTreeNode(node)); | 232 EXPECT_FALSE(node->navigation_request()); |
| 239 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 233 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 240 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 234 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 241 | 235 |
| 242 // The SiteInstance did not change. | 236 // The SiteInstance did not change. |
| 243 EXPECT_EQ(site_instance_id_1, main_test_rfh()->GetSiteInstance()->GetId()); | 237 EXPECT_EQ(site_instance_id_1, main_test_rfh()->GetSiteInstance()->GetId()); |
| 244 } | 238 } |
| 245 | 239 |
| 246 // PlzNavigate: Test that a beforeUnload denial cancels the navigation. | 240 // PlzNavigate: Test that a beforeUnload denial cancels the navigation. |
| 247 TEST_F(NavigatorTestWithBrowserSideNavigation, | 241 TEST_F(NavigatorTestWithBrowserSideNavigation, |
| 248 BeforeUnloadDenialCancelNavigation) { | 242 BeforeUnloadDenialCancelNavigation) { |
| 249 const GURL kUrl1("http://www.google.com/"); | 243 const GURL kUrl1("http://www.google.com/"); |
| 250 const GURL kUrl2("http://www.chromium.org/"); | 244 const GURL kUrl2("http://www.chromium.org/"); |
| 251 | 245 |
| 252 contents()->NavigateAndCommit(kUrl1); | 246 contents()->NavigateAndCommit(kUrl1); |
| 253 | 247 |
| 254 // Start a new navigation. | 248 // Start a new navigation. |
| 255 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 249 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 256 RequestNavigation(node, kUrl2); | 250 RequestNavigation(node, kUrl2); |
| 257 NavigationRequest* request = GetNavigationRequestForFrameTreeNode(node); | 251 NavigationRequest* request = node->navigation_request(); |
| 258 ASSERT_TRUE(request); | 252 ASSERT_TRUE(request); |
| 259 EXPECT_TRUE(request->browser_initiated()); | 253 EXPECT_TRUE(request->browser_initiated()); |
| 260 EXPECT_EQ(NavigationRequest::WAITING_FOR_RENDERER_RESPONSE, request->state()); | 254 EXPECT_EQ(NavigationRequest::WAITING_FOR_RENDERER_RESPONSE, request->state()); |
| 261 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 255 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 262 | 256 |
| 263 // Simulate a beforeUnload denial. | 257 // Simulate a beforeUnload denial. |
| 264 main_test_rfh()->SendBeforeUnloadACK(false); | 258 main_test_rfh()->SendBeforeUnloadACK(false); |
| 265 EXPECT_FALSE(GetNavigationRequestForFrameTreeNode(node)); | 259 EXPECT_FALSE(node->navigation_request()); |
| 266 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 260 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 267 } | 261 } |
| 268 | 262 |
| 269 // PlzNavigate: Test that a proper NavigationRequest is created by | 263 // PlzNavigate: Test that a proper NavigationRequest is created by |
| 270 // RequestNavigation. | 264 // RequestNavigation. |
| 271 TEST_F(NavigatorTestWithBrowserSideNavigation, BeginNavigation) { | 265 TEST_F(NavigatorTestWithBrowserSideNavigation, BeginNavigation) { |
| 272 const GURL kUrl1("http://www.google.com/"); | 266 const GURL kUrl1("http://www.google.com/"); |
| 273 const GURL kUrl2("http://www.chromium.org/"); | 267 const GURL kUrl2("http://www.chromium.org/"); |
| 274 const GURL kUrl3("http://www.gmail.com/"); | 268 const GURL kUrl3("http://www.gmail.com/"); |
| 275 | 269 |
| 276 contents()->NavigateAndCommit(kUrl1); | 270 contents()->NavigateAndCommit(kUrl1); |
| 277 | 271 |
| 278 // Add a subframe. | 272 // Add a subframe. |
| 279 FrameTreeNode* root_node = contents()->GetFrameTree()->root(); | 273 FrameTreeNode* root_node = contents()->GetFrameTree()->root(); |
| 280 TestRenderFrameHost* subframe_rfh = main_test_rfh()->AppendChild("Child"); | 274 TestRenderFrameHost* subframe_rfh = main_test_rfh()->AppendChild("Child"); |
| 281 ASSERT_TRUE(subframe_rfh); | 275 ASSERT_TRUE(subframe_rfh); |
| 282 | 276 |
| 283 // Start a navigation at the subframe. | 277 // Start a navigation at the subframe. |
| 284 FrameTreeNode* subframe_node = subframe_rfh->frame_tree_node(); | 278 FrameTreeNode* subframe_node = subframe_rfh->frame_tree_node(); |
| 285 RequestNavigation(subframe_node, kUrl2); | 279 RequestNavigation(subframe_node, kUrl2); |
| 286 NavigationRequest* subframe_request = | 280 NavigationRequest* subframe_request = subframe_node->navigation_request(); |
| 287 GetNavigationRequestForFrameTreeNode(subframe_node); | |
| 288 TestNavigationURLLoader* subframe_loader = | 281 TestNavigationURLLoader* subframe_loader = |
| 289 GetLoaderForNavigationRequest(subframe_request); | 282 GetLoaderForNavigationRequest(subframe_request); |
| 290 | 283 |
| 291 // Subframe navigations should start right away as they don't have to request | 284 // Subframe navigations should start right away as they don't have to request |
| 292 // beforeUnload to run at the renderer. | 285 // beforeUnload to run at the renderer. |
| 293 ASSERT_TRUE(subframe_request); | 286 ASSERT_TRUE(subframe_request); |
| 294 ASSERT_TRUE(subframe_loader); | 287 ASSERT_TRUE(subframe_loader); |
| 295 EXPECT_EQ(NavigationRequest::STARTED, subframe_request->state()); | 288 EXPECT_EQ(NavigationRequest::STARTED, subframe_request->state()); |
| 296 EXPECT_EQ(kUrl2, subframe_request->common_params().url); | 289 EXPECT_EQ(kUrl2, subframe_request->common_params().url); |
| 297 EXPECT_EQ(kUrl2, subframe_loader->request_info()->common_params.url); | 290 EXPECT_EQ(kUrl2, subframe_loader->request_info()->common_params.url); |
| 298 // First party for cookies url should be that of the main frame. | 291 // First party for cookies url should be that of the main frame. |
| 299 EXPECT_EQ(kUrl1, subframe_loader->request_info()->first_party_for_cookies); | 292 EXPECT_EQ(kUrl1, subframe_loader->request_info()->first_party_for_cookies); |
| 300 EXPECT_FALSE(subframe_loader->request_info()->is_main_frame); | 293 EXPECT_FALSE(subframe_loader->request_info()->is_main_frame); |
| 301 EXPECT_TRUE(subframe_loader->request_info()->parent_is_main_frame); | 294 EXPECT_TRUE(subframe_loader->request_info()->parent_is_main_frame); |
| 302 EXPECT_TRUE(subframe_request->browser_initiated()); | 295 EXPECT_TRUE(subframe_request->browser_initiated()); |
| 303 EXPECT_FALSE(GetSpeculativeRenderFrameHost(root_node)); | 296 EXPECT_FALSE(GetSpeculativeRenderFrameHost(root_node)); |
| 304 | 297 |
| 305 // Subframe navigations should never create a speculative RenderFrameHost, | 298 // Subframe navigations should never create a speculative RenderFrameHost, |
| 306 // unless site-per-process is enabled. In that case, as the subframe | 299 // unless site-per-process is enabled. In that case, as the subframe |
| 307 // navigation is to a different site and is still ongoing, it should have one. | 300 // navigation is to a different site and is still ongoing, it should have one. |
| 308 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 301 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 309 switches::kSitePerProcess)) { | 302 switches::kSitePerProcess)) { |
| 310 EXPECT_TRUE(GetSpeculativeRenderFrameHost(subframe_node)); | 303 EXPECT_TRUE(GetSpeculativeRenderFrameHost(subframe_node)); |
| 311 } else { | 304 } else { |
| 312 EXPECT_FALSE(GetSpeculativeRenderFrameHost(subframe_node)); | 305 EXPECT_FALSE(GetSpeculativeRenderFrameHost(subframe_node)); |
| 313 } | 306 } |
| 314 | 307 |
| 315 // Now start a navigation at the root node. | 308 // Now start a navigation at the root node. |
| 316 RequestNavigation(root_node, kUrl3); | 309 RequestNavigation(root_node, kUrl3); |
| 317 NavigationRequest* main_request = | 310 NavigationRequest* main_request = root_node->navigation_request(); |
| 318 GetNavigationRequestForFrameTreeNode(root_node); | |
| 319 ASSERT_TRUE(main_request); | 311 ASSERT_TRUE(main_request); |
| 320 EXPECT_EQ(NavigationRequest::WAITING_FOR_RENDERER_RESPONSE, | 312 EXPECT_EQ(NavigationRequest::WAITING_FOR_RENDERER_RESPONSE, |
| 321 main_request->state()); | 313 main_request->state()); |
| 322 EXPECT_FALSE(GetSpeculativeRenderFrameHost(root_node)); | 314 EXPECT_FALSE(GetSpeculativeRenderFrameHost(root_node)); |
| 323 | 315 |
| 324 // Simulate a BeforeUnloadACK IPC on the main frame. | 316 // Simulate a BeforeUnloadACK IPC on the main frame. |
| 325 main_test_rfh()->SendBeforeUnloadACK(true); | 317 main_test_rfh()->SendBeforeUnloadACK(true); |
| 326 TestNavigationURLLoader* main_loader = | 318 TestNavigationURLLoader* main_loader = |
| 327 GetLoaderForNavigationRequest(main_request); | 319 GetLoaderForNavigationRequest(main_request); |
| 328 EXPECT_EQ(kUrl3, main_request->common_params().url); | 320 EXPECT_EQ(kUrl3, main_request->common_params().url); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 357 | 349 |
| 358 // Load a URL. | 350 // Load a URL. |
| 359 contents()->NavigateAndCommit(kUrl1); | 351 contents()->NavigateAndCommit(kUrl1); |
| 360 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 352 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 361 | 353 |
| 362 // Navigate to a different site. | 354 // Navigate to a different site. |
| 363 process()->sink().ClearMessages(); | 355 process()->sink().ClearMessages(); |
| 364 RequestNavigation(node, kUrl2); | 356 RequestNavigation(node, kUrl2); |
| 365 main_test_rfh()->SendBeforeUnloadACK(true); | 357 main_test_rfh()->SendBeforeUnloadACK(true); |
| 366 | 358 |
| 367 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); | 359 NavigationRequest* main_request = node->navigation_request(); |
| 368 ASSERT_TRUE(main_request); | 360 ASSERT_TRUE(main_request); |
| 369 | 361 |
| 370 // Navigations to a different site do create a speculative RenderFrameHost. | 362 // Navigations to a different site do create a speculative RenderFrameHost. |
| 371 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); | 363 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 372 | 364 |
| 373 // Commit an HTTP 204 response. | 365 // Commit an HTTP 204 response. |
| 374 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 366 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 375 const char kNoContentHeaders[] = "HTTP/1.1 204 No Content\0\0"; | 367 const char kNoContentHeaders[] = "HTTP/1.1 204 No Content\0\0"; |
| 376 response->head.headers = new net::HttpResponseHeaders( | 368 response->head.headers = new net::HttpResponseHeaders( |
| 377 std::string(kNoContentHeaders, arraysize(kNoContentHeaders))); | 369 std::string(kNoContentHeaders, arraysize(kNoContentHeaders))); |
| 378 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( | 370 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( |
| 379 response, MakeEmptyStream()); | 371 response, MakeEmptyStream()); |
| 380 | 372 |
| 381 // There should be no pending nor speculative RenderFrameHost; the navigation | 373 // There should be no pending nor speculative RenderFrameHost; the navigation |
| 382 // was aborted. | 374 // was aborted. |
| 383 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 375 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 384 EXPECT_FALSE(GetNavigationRequestForFrameTreeNode(node)); | 376 EXPECT_FALSE(node->navigation_request()); |
| 385 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 377 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 386 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 378 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 387 | 379 |
| 388 // Now, repeat the test with 205 Reset Content. | 380 // Now, repeat the test with 205 Reset Content. |
| 389 | 381 |
| 390 // Navigate to a different site again. | 382 // Navigate to a different site again. |
| 391 process()->sink().ClearMessages(); | 383 process()->sink().ClearMessages(); |
| 392 RequestNavigation(node, kUrl2); | 384 RequestNavigation(node, kUrl2); |
| 393 main_test_rfh()->SendBeforeUnloadACK(true); | 385 main_test_rfh()->SendBeforeUnloadACK(true); |
| 394 | 386 |
| 395 main_request = GetNavigationRequestForFrameTreeNode(node); | 387 main_request = node->navigation_request(); |
| 396 ASSERT_TRUE(main_request); | 388 ASSERT_TRUE(main_request); |
| 397 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); | 389 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 398 | 390 |
| 399 // Commit an HTTP 205 response. | 391 // Commit an HTTP 205 response. |
| 400 response = new ResourceResponse; | 392 response = new ResourceResponse; |
| 401 const char kResetContentHeaders[] = "HTTP/1.1 205 Reset Content\0\0"; | 393 const char kResetContentHeaders[] = "HTTP/1.1 205 Reset Content\0\0"; |
| 402 response->head.headers = new net::HttpResponseHeaders( | 394 response->head.headers = new net::HttpResponseHeaders( |
| 403 std::string(kResetContentHeaders, arraysize(kResetContentHeaders))); | 395 std::string(kResetContentHeaders, arraysize(kResetContentHeaders))); |
| 404 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( | 396 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( |
| 405 response, MakeEmptyStream()); | 397 response, MakeEmptyStream()); |
| 406 | 398 |
| 407 // There should be no pending nor speculative RenderFrameHost; the navigation | 399 // There should be no pending nor speculative RenderFrameHost; the navigation |
| 408 // was aborted. | 400 // was aborted. |
| 409 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 401 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 410 EXPECT_FALSE(GetNavigationRequestForFrameTreeNode(node)); | 402 EXPECT_FALSE(node->navigation_request()); |
| 411 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 403 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 412 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 404 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 413 } | 405 } |
| 414 | 406 |
| 415 // PlzNavigate: Test that a new RenderFrameHost is created when doing a cross | 407 // PlzNavigate: Test that a new RenderFrameHost is created when doing a cross |
| 416 // site navigation. | 408 // site navigation. |
| 417 TEST_F(NavigatorTestWithBrowserSideNavigation, CrossSiteNavigation) { | 409 TEST_F(NavigatorTestWithBrowserSideNavigation, CrossSiteNavigation) { |
| 418 const GURL kUrl1("http://www.chromium.org/"); | 410 const GURL kUrl1("http://www.chromium.org/"); |
| 419 const GURL kUrl2("http://www.google.com/"); | 411 const GURL kUrl2("http://www.google.com/"); |
| 420 | 412 |
| 421 contents()->NavigateAndCommit(kUrl1); | 413 contents()->NavigateAndCommit(kUrl1); |
| 422 RenderFrameHostImpl* initial_rfh = main_test_rfh(); | 414 RenderFrameHostImpl* initial_rfh = main_test_rfh(); |
| 423 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 415 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 424 | 416 |
| 425 // Navigate to a different site. | 417 // Navigate to a different site. |
| 426 process()->sink().ClearMessages(); | 418 process()->sink().ClearMessages(); |
| 427 RequestNavigation(node, kUrl2); | 419 RequestNavigation(node, kUrl2); |
| 428 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); | 420 NavigationRequest* main_request = node->navigation_request(); |
| 429 ASSERT_TRUE(main_request); | 421 ASSERT_TRUE(main_request); |
| 430 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 422 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 431 | 423 |
| 432 // Receive the beforeUnload ACK. | 424 // Receive the beforeUnload ACK. |
| 433 main_test_rfh()->SendBeforeUnloadACK(true); | 425 main_test_rfh()->SendBeforeUnloadACK(true); |
| 434 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); | 426 EXPECT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 435 | 427 |
| 436 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 428 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 437 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( | 429 GetLoaderForNavigationRequest(main_request)->CallOnResponseStarted( |
| 438 response, MakeEmptyStream()); | 430 response, MakeEmptyStream()); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 458 const GURL kUrl2("http://www.google.com/"); | 450 const GURL kUrl2("http://www.google.com/"); |
| 459 | 451 |
| 460 contents()->NavigateAndCommit(kUrl1); | 452 contents()->NavigateAndCommit(kUrl1); |
| 461 RenderFrameHostImpl* rfh = main_test_rfh(); | 453 RenderFrameHostImpl* rfh = main_test_rfh(); |
| 462 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 454 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 463 | 455 |
| 464 // Navigate to a URL on the same site. | 456 // Navigate to a URL on the same site. |
| 465 process()->sink().ClearMessages(); | 457 process()->sink().ClearMessages(); |
| 466 RequestNavigation(node, kUrl1); | 458 RequestNavigation(node, kUrl1); |
| 467 main_test_rfh()->SendBeforeUnloadACK(true); | 459 main_test_rfh()->SendBeforeUnloadACK(true); |
| 468 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); | 460 NavigationRequest* main_request = node->navigation_request(); |
| 469 ASSERT_TRUE(main_request); | 461 ASSERT_TRUE(main_request); |
| 470 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 462 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 471 | 463 |
| 472 // It then redirects to another site. | 464 // It then redirects to another site. |
| 473 GetLoaderForNavigationRequest(main_request)->SimulateServerRedirect(kUrl2); | 465 GetLoaderForNavigationRequest(main_request)->SimulateServerRedirect(kUrl2); |
| 474 | 466 |
| 475 // The redirect should have been followed. | 467 // The redirect should have been followed. |
| 476 EXPECT_EQ(1, GetLoaderForNavigationRequest(main_request)->redirect_count()); | 468 EXPECT_EQ(1, GetLoaderForNavigationRequest(main_request)->redirect_count()); |
| 477 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 469 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 478 | 470 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 508 const GURL kUrl2_site = SiteInstance::GetSiteForURL(browser_context(), kUrl2); | 500 const GURL kUrl2_site = SiteInstance::GetSiteForURL(browser_context(), kUrl2); |
| 509 | 501 |
| 510 // Initialization. | 502 // Initialization. |
| 511 contents()->NavigateAndCommit(kUrl0); | 503 contents()->NavigateAndCommit(kUrl0); |
| 512 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 504 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 513 | 505 |
| 514 // Request navigation to the 1st URL. | 506 // Request navigation to the 1st URL. |
| 515 process()->sink().ClearMessages(); | 507 process()->sink().ClearMessages(); |
| 516 RequestNavigation(node, kUrl1); | 508 RequestNavigation(node, kUrl1); |
| 517 main_test_rfh()->SendBeforeUnloadACK(true); | 509 main_test_rfh()->SendBeforeUnloadACK(true); |
| 518 NavigationRequest* request1 = GetNavigationRequestForFrameTreeNode(node); | 510 NavigationRequest* request1 = node->navigation_request(); |
| 519 ASSERT_TRUE(request1); | 511 ASSERT_TRUE(request1); |
| 520 EXPECT_EQ(kUrl1, request1->common_params().url); | 512 EXPECT_EQ(kUrl1, request1->common_params().url); |
| 521 EXPECT_TRUE(request1->browser_initiated()); | 513 EXPECT_TRUE(request1->browser_initiated()); |
| 522 base::WeakPtr<TestNavigationURLLoader> loader1 = | 514 base::WeakPtr<TestNavigationURLLoader> loader1 = |
| 523 GetLoaderForNavigationRequest(request1)->AsWeakPtr(); | 515 GetLoaderForNavigationRequest(request1)->AsWeakPtr(); |
| 524 EXPECT_TRUE(loader1); | 516 EXPECT_TRUE(loader1); |
| 525 | 517 |
| 526 // Confirm a speculative RenderFrameHost was created. | 518 // Confirm a speculative RenderFrameHost was created. |
| 527 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); | 519 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 528 ASSERT_TRUE(speculative_rfh); | 520 ASSERT_TRUE(speculative_rfh); |
| 529 int32 site_instance_id_1 = speculative_rfh->GetSiteInstance()->GetId(); | 521 int32 site_instance_id_1 = speculative_rfh->GetSiteInstance()->GetId(); |
| 530 EXPECT_EQ(kUrl1_site, speculative_rfh->GetSiteInstance()->GetSiteURL()); | 522 EXPECT_EQ(kUrl1_site, speculative_rfh->GetSiteInstance()->GetSiteURL()); |
| 531 | 523 |
| 532 // Request navigation to the 2nd URL; the NavigationRequest must have been | 524 // Request navigation to the 2nd URL; the NavigationRequest must have been |
| 533 // replaced by a new one with a different URL. | 525 // replaced by a new one with a different URL. |
| 534 RequestNavigation(node, kUrl2); | 526 RequestNavigation(node, kUrl2); |
| 535 main_test_rfh()->SendBeforeUnloadACK(true); | 527 main_test_rfh()->SendBeforeUnloadACK(true); |
| 536 NavigationRequest* request2 = GetNavigationRequestForFrameTreeNode(node); | 528 NavigationRequest* request2 = node->navigation_request(); |
| 537 ASSERT_TRUE(request2); | 529 ASSERT_TRUE(request2); |
| 538 EXPECT_EQ(kUrl2, request2->common_params().url); | 530 EXPECT_EQ(kUrl2, request2->common_params().url); |
| 539 EXPECT_TRUE(request2->browser_initiated()); | 531 EXPECT_TRUE(request2->browser_initiated()); |
| 540 | 532 |
| 541 // Confirm that the first loader got destroyed. | 533 // Confirm that the first loader got destroyed. |
| 542 EXPECT_FALSE(loader1); | 534 EXPECT_FALSE(loader1); |
| 543 | 535 |
| 544 // Confirm that a new speculative RenderFrameHost was created. | 536 // Confirm that a new speculative RenderFrameHost was created. |
| 545 speculative_rfh = GetSpeculativeRenderFrameHost(node); | 537 speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 546 ASSERT_TRUE(speculative_rfh); | 538 ASSERT_TRUE(speculative_rfh); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 576 | 568 |
| 577 // Initialization. | 569 // Initialization. |
| 578 contents()->NavigateAndCommit(kUrl0); | 570 contents()->NavigateAndCommit(kUrl0); |
| 579 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 571 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 580 | 572 |
| 581 // Start a browser-initiated navigation to the 1st URL and receive its | 573 // Start a browser-initiated navigation to the 1st URL and receive its |
| 582 // beforeUnload ACK. | 574 // beforeUnload ACK. |
| 583 process()->sink().ClearMessages(); | 575 process()->sink().ClearMessages(); |
| 584 RequestNavigation(node, kUrl1); | 576 RequestNavigation(node, kUrl1); |
| 585 main_test_rfh()->SendBeforeUnloadACK(true); | 577 main_test_rfh()->SendBeforeUnloadACK(true); |
| 586 NavigationRequest* request1 = GetNavigationRequestForFrameTreeNode(node); | 578 NavigationRequest* request1 = node->navigation_request(); |
| 587 ASSERT_TRUE(request1); | 579 ASSERT_TRUE(request1); |
| 588 EXPECT_EQ(kUrl1, request1->common_params().url); | 580 EXPECT_EQ(kUrl1, request1->common_params().url); |
| 589 EXPECT_TRUE(request1->browser_initiated()); | 581 EXPECT_TRUE(request1->browser_initiated()); |
| 590 base::WeakPtr<TestNavigationURLLoader> loader1 = | 582 base::WeakPtr<TestNavigationURLLoader> loader1 = |
| 591 GetLoaderForNavigationRequest(request1)->AsWeakPtr(); | 583 GetLoaderForNavigationRequest(request1)->AsWeakPtr(); |
| 592 EXPECT_TRUE(loader1); | 584 EXPECT_TRUE(loader1); |
| 593 | 585 |
| 594 // Confirm that a speculative RenderFrameHost was created. | 586 // Confirm that a speculative RenderFrameHost was created. |
| 595 ASSERT_TRUE(GetSpeculativeRenderFrameHost(node)); | 587 ASSERT_TRUE(GetSpeculativeRenderFrameHost(node)); |
| 596 | 588 |
| 597 // Now receive a renderer-initiated user-initiated request. It should replace | 589 // Now receive a renderer-initiated user-initiated request. It should replace |
| 598 // the current NavigationRequest. | 590 // the current NavigationRequest. |
| 599 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, true); | 591 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, true); |
| 600 NavigationRequest* request2 = GetNavigationRequestForFrameTreeNode(node); | 592 NavigationRequest* request2 = node->navigation_request(); |
| 601 ASSERT_TRUE(request2); | 593 ASSERT_TRUE(request2); |
| 602 EXPECT_EQ(kUrl2, request2->common_params().url); | 594 EXPECT_EQ(kUrl2, request2->common_params().url); |
| 603 EXPECT_FALSE(request2->browser_initiated()); | 595 EXPECT_FALSE(request2->browser_initiated()); |
| 604 EXPECT_TRUE(request2->begin_params().has_user_gesture); | 596 EXPECT_TRUE(request2->begin_params().has_user_gesture); |
| 605 | 597 |
| 606 // Confirm that the first loader got destroyed. | 598 // Confirm that the first loader got destroyed. |
| 607 EXPECT_FALSE(loader1); | 599 EXPECT_FALSE(loader1); |
| 608 | 600 |
| 609 // Confirm that the speculative RenderFrameHost was destroyed. | 601 // Confirm that the speculative RenderFrameHost was destroyed. |
| 610 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 602 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 632 const GURL kUrl1("http://www.chromium.org/"); | 624 const GURL kUrl1("http://www.chromium.org/"); |
| 633 const GURL kUrl2("http://www.google.com/"); | 625 const GURL kUrl2("http://www.google.com/"); |
| 634 | 626 |
| 635 // Initialization. | 627 // Initialization. |
| 636 contents()->NavigateAndCommit(kUrl0); | 628 contents()->NavigateAndCommit(kUrl0); |
| 637 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 629 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 638 | 630 |
| 639 // Start a renderer-initiated user-initiated navigation to the 1st URL. | 631 // Start a renderer-initiated user-initiated navigation to the 1st URL. |
| 640 process()->sink().ClearMessages(); | 632 process()->sink().ClearMessages(); |
| 641 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl1, true); | 633 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl1, true); |
| 642 NavigationRequest* request1 = GetNavigationRequestForFrameTreeNode(node); | 634 NavigationRequest* request1 = node->navigation_request(); |
| 643 ASSERT_TRUE(request1); | 635 ASSERT_TRUE(request1); |
| 644 EXPECT_EQ(kUrl1, request1->common_params().url); | 636 EXPECT_EQ(kUrl1, request1->common_params().url); |
| 645 EXPECT_FALSE(request1->browser_initiated()); | 637 EXPECT_FALSE(request1->browser_initiated()); |
| 646 EXPECT_TRUE(request1->begin_params().has_user_gesture); | 638 EXPECT_TRUE(request1->begin_params().has_user_gesture); |
| 647 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 639 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 648 | 640 |
| 649 // Now receive a renderer-initiated non-user-initiated request. Nothing should | 641 // Now receive a renderer-initiated non-user-initiated request. Nothing should |
| 650 // change. | 642 // change. |
| 651 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); | 643 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); |
| 652 NavigationRequest* request2 = GetNavigationRequestForFrameTreeNode(node); | 644 NavigationRequest* request2 = node->navigation_request(); |
| 653 ASSERT_TRUE(request2); | 645 ASSERT_TRUE(request2); |
| 654 EXPECT_EQ(request1, request2); | 646 EXPECT_EQ(request1, request2); |
| 655 EXPECT_EQ(kUrl1, request2->common_params().url); | 647 EXPECT_EQ(kUrl1, request2->common_params().url); |
| 656 EXPECT_FALSE(request2->browser_initiated()); | 648 EXPECT_FALSE(request2->browser_initiated()); |
| 657 EXPECT_TRUE(request2->begin_params().has_user_gesture); | 649 EXPECT_TRUE(request2->begin_params().has_user_gesture); |
| 658 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 650 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 659 | 651 |
| 660 // Have the RenderFrameHost commit the navigation. | 652 // Have the RenderFrameHost commit the navigation. |
| 661 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 653 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 662 GetLoaderForNavigationRequest(request2) | 654 GetLoaderForNavigationRequest(request2) |
| (...skipping 13 matching lines...) Expand all Loading... |
| 676 const GURL kUrl1("http://www.chromium.org/"); | 668 const GURL kUrl1("http://www.chromium.org/"); |
| 677 const GURL kUrl2("http://www.google.com/"); | 669 const GURL kUrl2("http://www.google.com/"); |
| 678 | 670 |
| 679 // Initialization. | 671 // Initialization. |
| 680 contents()->NavigateAndCommit(kUrl0); | 672 contents()->NavigateAndCommit(kUrl0); |
| 681 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 673 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 682 | 674 |
| 683 // Start a browser-initiated navigation to the 1st URL. | 675 // Start a browser-initiated navigation to the 1st URL. |
| 684 process()->sink().ClearMessages(); | 676 process()->sink().ClearMessages(); |
| 685 RequestNavigation(node, kUrl1); | 677 RequestNavigation(node, kUrl1); |
| 686 NavigationRequest* request1 = GetNavigationRequestForFrameTreeNode(node); | 678 NavigationRequest* request1 = node->navigation_request(); |
| 687 ASSERT_TRUE(request1); | 679 ASSERT_TRUE(request1); |
| 688 EXPECT_EQ(kUrl1, request1->common_params().url); | 680 EXPECT_EQ(kUrl1, request1->common_params().url); |
| 689 EXPECT_TRUE(request1->browser_initiated()); | 681 EXPECT_TRUE(request1->browser_initiated()); |
| 690 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 682 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 691 | 683 |
| 692 // Now receive a renderer-initiated non-user-initiated request. Nothing should | 684 // Now receive a renderer-initiated non-user-initiated request. Nothing should |
| 693 // change. | 685 // change. |
| 694 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); | 686 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); |
| 695 NavigationRequest* request2 = GetNavigationRequestForFrameTreeNode(node); | 687 NavigationRequest* request2 = node->navigation_request(); |
| 696 ASSERT_TRUE(request2); | 688 ASSERT_TRUE(request2); |
| 697 EXPECT_EQ(request1, request2); | 689 EXPECT_EQ(request1, request2); |
| 698 EXPECT_EQ(kUrl1, request2->common_params().url); | 690 EXPECT_EQ(kUrl1, request2->common_params().url); |
| 699 EXPECT_TRUE(request2->browser_initiated()); | 691 EXPECT_TRUE(request2->browser_initiated()); |
| 700 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 692 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 701 | 693 |
| 702 // Now receive the beforeUnload ACK from the still ongoing navigation. | 694 // Now receive the beforeUnload ACK from the still ongoing navigation. |
| 703 main_test_rfh()->SendBeforeUnloadACK(true); | 695 main_test_rfh()->SendBeforeUnloadACK(true); |
| 704 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); | 696 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 705 ASSERT_TRUE(speculative_rfh); | 697 ASSERT_TRUE(speculative_rfh); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 725 const GURL kUrl2("http://www.google.com/"); | 717 const GURL kUrl2("http://www.google.com/"); |
| 726 | 718 |
| 727 // Initialization. | 719 // Initialization. |
| 728 contents()->NavigateAndCommit(kUrl0); | 720 contents()->NavigateAndCommit(kUrl0); |
| 729 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 721 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 730 int32 site_instance_id_0 = main_test_rfh()->GetSiteInstance()->GetId(); | 722 int32 site_instance_id_0 = main_test_rfh()->GetSiteInstance()->GetId(); |
| 731 | 723 |
| 732 // Start a renderer-initiated non-user-initiated navigation to the 1st URL. | 724 // Start a renderer-initiated non-user-initiated navigation to the 1st URL. |
| 733 process()->sink().ClearMessages(); | 725 process()->sink().ClearMessages(); |
| 734 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl1, false); | 726 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl1, false); |
| 735 NavigationRequest* request1 = GetNavigationRequestForFrameTreeNode(node); | 727 NavigationRequest* request1 = node->navigation_request(); |
| 736 ASSERT_TRUE(request1); | 728 ASSERT_TRUE(request1); |
| 737 EXPECT_EQ(kUrl1, request1->common_params().url); | 729 EXPECT_EQ(kUrl1, request1->common_params().url); |
| 738 EXPECT_FALSE(request1->browser_initiated()); | 730 EXPECT_FALSE(request1->browser_initiated()); |
| 739 EXPECT_FALSE(request1->begin_params().has_user_gesture); | 731 EXPECT_FALSE(request1->begin_params().has_user_gesture); |
| 740 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 732 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 741 base::WeakPtr<TestNavigationURLLoader> loader1 = | 733 base::WeakPtr<TestNavigationURLLoader> loader1 = |
| 742 GetLoaderForNavigationRequest(request1)->AsWeakPtr(); | 734 GetLoaderForNavigationRequest(request1)->AsWeakPtr(); |
| 743 EXPECT_TRUE(loader1); | 735 EXPECT_TRUE(loader1); |
| 744 | 736 |
| 745 // Now receive a 2nd similar request that should replace the current one. | 737 // Now receive a 2nd similar request that should replace the current one. |
| 746 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); | 738 main_test_rfh()->SendRendererInitiatedNavigationRequest(kUrl2, false); |
| 747 NavigationRequest* request2 = GetNavigationRequestForFrameTreeNode(node); | 739 NavigationRequest* request2 = node->navigation_request(); |
| 748 EXPECT_EQ(kUrl2, request2->common_params().url); | 740 EXPECT_EQ(kUrl2, request2->common_params().url); |
| 749 EXPECT_FALSE(request2->browser_initiated()); | 741 EXPECT_FALSE(request2->browser_initiated()); |
| 750 EXPECT_FALSE(request2->begin_params().has_user_gesture); | 742 EXPECT_FALSE(request2->begin_params().has_user_gesture); |
| 751 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 743 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 752 | 744 |
| 753 // Confirm that the first loader got destroyed. | 745 // Confirm that the first loader got destroyed. |
| 754 EXPECT_FALSE(loader1); | 746 EXPECT_FALSE(loader1); |
| 755 | 747 |
| 756 // Have the RenderFrameHost commit the navigation. | 748 // Have the RenderFrameHost commit the navigation. |
| 757 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 749 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 770 // PlzNavigate: Test that a reload navigation is properly signaled to the | 762 // PlzNavigate: Test that a reload navigation is properly signaled to the |
| 771 // RenderFrame when the navigation can commit. A speculative RenderFrameHost | 763 // RenderFrame when the navigation can commit. A speculative RenderFrameHost |
| 772 // should not be created at any step. | 764 // should not be created at any step. |
| 773 TEST_F(NavigatorTestWithBrowserSideNavigation, Reload) { | 765 TEST_F(NavigatorTestWithBrowserSideNavigation, Reload) { |
| 774 const GURL kUrl("http://www.google.com/"); | 766 const GURL kUrl("http://www.google.com/"); |
| 775 contents()->NavigateAndCommit(kUrl); | 767 contents()->NavigateAndCommit(kUrl); |
| 776 | 768 |
| 777 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 769 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 778 controller().Reload(false); | 770 controller().Reload(false); |
| 779 // A NavigationRequest should have been generated. | 771 // A NavigationRequest should have been generated. |
| 780 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); | 772 NavigationRequest* main_request = node->navigation_request(); |
| 781 ASSERT_TRUE(main_request != NULL); | 773 ASSERT_TRUE(main_request != NULL); |
| 782 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD, | 774 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD, |
| 783 main_request->common_params().navigation_type); | 775 main_request->common_params().navigation_type); |
| 784 main_test_rfh()->PrepareForCommit(); | 776 main_test_rfh()->PrepareForCommit(); |
| 785 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 777 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 786 | 778 |
| 787 main_test_rfh()->SendNavigate(0, kUrl); | 779 main_test_rfh()->SendNavigate(0, kUrl); |
| 788 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 780 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 789 | 781 |
| 790 // Now do a shift+reload. | 782 // Now do a shift+reload. |
| 791 controller().ReloadIgnoringCache(false); | 783 controller().ReloadIgnoringCache(false); |
| 792 // A NavigationRequest should have been generated. | 784 // A NavigationRequest should have been generated. |
| 793 main_request = GetNavigationRequestForFrameTreeNode(node); | 785 main_request = node->navigation_request(); |
| 794 ASSERT_TRUE(main_request != NULL); | 786 ASSERT_TRUE(main_request != NULL); |
| 795 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD_IGNORING_CACHE, | 787 EXPECT_EQ(FrameMsg_Navigate_Type::RELOAD_IGNORING_CACHE, |
| 796 main_request->common_params().navigation_type); | 788 main_request->common_params().navigation_type); |
| 797 main_test_rfh()->PrepareForCommit(); | 789 main_test_rfh()->PrepareForCommit(); |
| 798 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 790 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 799 } | 791 } |
| 800 | 792 |
| 801 // PlzNavigate: Confirm that a speculative RenderFrameHost is used when | 793 // PlzNavigate: Confirm that a speculative RenderFrameHost is used when |
| 802 // navigating from one site to another. | 794 // navigating from one site to another. |
| 803 TEST_F(NavigatorTestWithBrowserSideNavigation, | 795 TEST_F(NavigatorTestWithBrowserSideNavigation, |
| (...skipping 15 matching lines...) Expand all Loading... |
| 819 ASSERT_TRUE(speculative_rfh); | 811 ASSERT_TRUE(speculative_rfh); |
| 820 EXPECT_NE(speculative_rfh, main_test_rfh()); | 812 EXPECT_NE(speculative_rfh, main_test_rfh()); |
| 821 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), | 813 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), |
| 822 speculative_rfh->GetSiteInstance()->GetSiteURL()); | 814 speculative_rfh->GetSiteInstance()->GetSiteURL()); |
| 823 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 815 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 824 int32 site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); | 816 int32 site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); |
| 825 | 817 |
| 826 // Ask Navigator to commit the navigation by simulating a call to | 818 // Ask Navigator to commit the navigation by simulating a call to |
| 827 // OnResponseStarted. | 819 // OnResponseStarted. |
| 828 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 820 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 829 GetLoaderForNavigationRequest(GetNavigationRequestForFrameTreeNode(node)) | 821 GetLoaderForNavigationRequest(node->navigation_request()) |
| 830 ->CallOnResponseStarted(response, MakeEmptyStream()); | 822 ->CallOnResponseStarted(response, MakeEmptyStream()); |
| 831 speculative_rfh = GetSpeculativeRenderFrameHost(node); | 823 speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 832 ASSERT_TRUE(speculative_rfh); | 824 ASSERT_TRUE(speculative_rfh); |
| 833 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); | 825 EXPECT_TRUE(DidRenderFrameHostRequestCommit(speculative_rfh)); |
| 834 EXPECT_EQ(site_instance_id, speculative_rfh->GetSiteInstance()->GetId()); | 826 EXPECT_EQ(site_instance_id, speculative_rfh->GetSiteInstance()->GetId()); |
| 835 EXPECT_FALSE(node->render_manager()->pending_frame_host()); | 827 EXPECT_FALSE(node->render_manager()->pending_frame_host()); |
| 836 | 828 |
| 837 // Invoke OnDidCommitProvisionalLoad. | 829 // Invoke OnDidCommitProvisionalLoad. |
| 838 speculative_rfh->SendNavigate(0, kUrl); | 830 speculative_rfh->SendNavigate(0, kUrl); |
| 839 EXPECT_EQ(site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); | 831 EXPECT_EQ(site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 862 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); | 854 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 863 int32 site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); | 855 int32 site_instance_id = speculative_rfh->GetSiteInstance()->GetId(); |
| 864 EXPECT_NE(init_site_instance_id, site_instance_id); | 856 EXPECT_NE(init_site_instance_id, site_instance_id); |
| 865 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); | 857 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); |
| 866 ASSERT_TRUE(speculative_rfh); | 858 ASSERT_TRUE(speculative_rfh); |
| 867 EXPECT_NE(speculative_rfh, main_test_rfh()); | 859 EXPECT_NE(speculative_rfh, main_test_rfh()); |
| 868 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), | 860 EXPECT_EQ(SiteInstanceImpl::GetSiteForURL(browser_context(), kUrl), |
| 869 speculative_rfh->GetSiteInstance()->GetSiteURL()); | 861 speculative_rfh->GetSiteInstance()->GetSiteURL()); |
| 870 | 862 |
| 871 // It then redirects to yet another site. | 863 // It then redirects to yet another site. |
| 872 NavigationRequest* main_request = GetNavigationRequestForFrameTreeNode(node); | 864 NavigationRequest* main_request = node->navigation_request(); |
| 873 ASSERT_TRUE(main_request); | 865 ASSERT_TRUE(main_request); |
| 874 const GURL kUrlRedirect("https://www.google.com/"); | 866 const GURL kUrlRedirect("https://www.google.com/"); |
| 875 GetLoaderForNavigationRequest(main_request) | 867 GetLoaderForNavigationRequest(main_request) |
| 876 ->SimulateServerRedirect(kUrlRedirect); | 868 ->SimulateServerRedirect(kUrlRedirect); |
| 877 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); | 869 EXPECT_EQ(init_site_instance_id, main_test_rfh()->GetSiteInstance()->GetId()); |
| 878 speculative_rfh = GetSpeculativeRenderFrameHost(node); | 870 speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 879 ASSERT_TRUE(speculative_rfh); | 871 ASSERT_TRUE(speculative_rfh); |
| 880 | 872 |
| 881 // For now, ensure that the speculative RenderFrameHost does not change after | 873 // For now, ensure that the speculative RenderFrameHost does not change after |
| 882 // the redirect. | 874 // the redirect. |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 943 .ClearMessages(); | 935 .ClearMessages(); |
| 944 RequestNavigation(node, kUrl1); | 936 RequestNavigation(node, kUrl1); |
| 945 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 937 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 946 | 938 |
| 947 main_test_rfh()->SendBeforeUnloadACK(true); | 939 main_test_rfh()->SendBeforeUnloadACK(true); |
| 948 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node)); | 940 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node)); |
| 949 EXPECT_NE(RenderFrameHostImpl::STATE_DEFAULT, | 941 EXPECT_NE(RenderFrameHostImpl::STATE_DEFAULT, |
| 950 GetSpeculativeRenderFrameHost(node)->rfh_state()); | 942 GetSpeculativeRenderFrameHost(node)->rfh_state()); |
| 951 | 943 |
| 952 scoped_refptr<ResourceResponse> response(new ResourceResponse); | 944 scoped_refptr<ResourceResponse> response(new ResourceResponse); |
| 953 GetLoaderForNavigationRequest(GetNavigationRequestForFrameTreeNode(node)) | 945 GetLoaderForNavigationRequest(node->navigation_request()) |
| 954 ->CallOnResponseStarted(response, MakeEmptyStream()); | 946 ->CallOnResponseStarted(response, MakeEmptyStream()); |
| 955 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node)); | 947 EXPECT_EQ(rfh1, GetSpeculativeRenderFrameHost(node)); |
| 956 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, | 948 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, |
| 957 GetSpeculativeRenderFrameHost(node)->rfh_state()); | 949 GetSpeculativeRenderFrameHost(node)->rfh_state()); |
| 958 EXPECT_TRUE(DidRenderFrameHostRequestCommit(rfh1)); | 950 EXPECT_TRUE(DidRenderFrameHostRequestCommit(rfh1)); |
| 959 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); | 951 EXPECT_FALSE(DidRenderFrameHostRequestCommit(main_test_rfh())); |
| 960 | 952 |
| 961 rfh1->SendNavigate(1, kUrl1); | 953 rfh1->SendNavigate(1, kUrl1); |
| 962 EXPECT_EQ(rfh1, main_test_rfh()); | 954 EXPECT_EQ(rfh1, main_test_rfh()); |
| 963 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, rfh1->rfh_state()); | 955 EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, rfh1->rfh_state()); |
| 964 EXPECT_FALSE(rfhm->IsOnSwappedOutList(rfh1)); | 956 EXPECT_FALSE(rfhm->IsOnSwappedOutList(rfh1)); |
| 965 } | 957 } |
| 966 | 958 |
| 967 // PlzNavigate: Verify that data urls are properly handled. | 959 // PlzNavigate: Verify that data urls are properly handled. |
| 968 TEST_F(NavigatorTestWithBrowserSideNavigation, DataUrls) { | 960 TEST_F(NavigatorTestWithBrowserSideNavigation, DataUrls) { |
| 969 const GURL kUrl1("http://wikipedia.org/"); | 961 const GURL kUrl1("http://wikipedia.org/"); |
| 970 const GURL kUrl2("data:text/html,test"); | 962 const GURL kUrl2("data:text/html,test"); |
| 971 | 963 |
| 972 // Navigate to an initial site. | 964 // Navigate to an initial site. |
| 973 contents()->NavigateAndCommit(kUrl1); | 965 contents()->NavigateAndCommit(kUrl1); |
| 974 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); | 966 FrameTreeNode* node = main_test_rfh()->frame_tree_node(); |
| 975 | 967 |
| 976 // Navigate to a data url. | 968 // Navigate to a data url. |
| 977 RequestNavigation(node, kUrl2); | 969 RequestNavigation(node, kUrl2); |
| 978 NavigationRequest* navigation_request = | 970 NavigationRequest* navigation_request = node->navigation_request(); |
| 979 GetNavigationRequestForFrameTreeNode(node); | |
| 980 ASSERT_TRUE(navigation_request); | 971 ASSERT_TRUE(navigation_request); |
| 981 EXPECT_EQ(NavigationRequest::WAITING_FOR_RENDERER_RESPONSE, | 972 EXPECT_EQ(NavigationRequest::WAITING_FOR_RENDERER_RESPONSE, |
| 982 navigation_request->state()); | 973 navigation_request->state()); |
| 983 main_test_rfh()->SendBeforeUnloadACK(true); | 974 main_test_rfh()->SendBeforeUnloadACK(true); |
| 984 | 975 |
| 985 // The request should not have been sent to the IO thread but committed | 976 // The request should not have been sent to the IO thread but committed |
| 986 // immediately. | 977 // immediately. |
| 987 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, | 978 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, |
| 988 navigation_request->state()); | 979 navigation_request->state()); |
| 989 EXPECT_FALSE(navigation_request->loader_for_testing()); | 980 EXPECT_FALSE(navigation_request->loader_for_testing()); |
| 990 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); | 981 TestRenderFrameHost* speculative_rfh = GetSpeculativeRenderFrameHost(node); |
| 991 ASSERT_TRUE(speculative_rfh); | 982 ASSERT_TRUE(speculative_rfh); |
| 992 speculative_rfh->SendNavigate(0, kUrl2); | 983 speculative_rfh->SendNavigate(0, kUrl2); |
| 993 EXPECT_EQ(main_test_rfh(), speculative_rfh); | 984 EXPECT_EQ(main_test_rfh(), speculative_rfh); |
| 994 | 985 |
| 995 // Go back to the initial site. | 986 // Go back to the initial site. |
| 996 contents()->NavigateAndCommit(kUrl1); | 987 contents()->NavigateAndCommit(kUrl1); |
| 997 | 988 |
| 998 // Do a renderer-initiated navigation to a data url. The request should not be | 989 // Do a renderer-initiated navigation to a data url. The request should not be |
| 999 // sent to the IO thread, nor committed. | 990 // sent to the IO thread, nor committed. |
| 1000 TestRenderFrameHost* main_rfh = main_test_rfh(); | 991 TestRenderFrameHost* main_rfh = main_test_rfh(); |
| 1001 main_rfh->SendRendererInitiatedNavigationRequest(kUrl2, true); | 992 main_rfh->SendRendererInitiatedNavigationRequest(kUrl2, true); |
| 1002 navigation_request = GetNavigationRequestForFrameTreeNode(node); | 993 navigation_request = node->navigation_request(); |
| 1003 ASSERT_TRUE(navigation_request); | 994 ASSERT_TRUE(navigation_request); |
| 1004 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, | 995 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, |
| 1005 navigation_request->state()); | 996 navigation_request->state()); |
| 1006 EXPECT_FALSE(navigation_request->loader_for_testing()); | 997 EXPECT_FALSE(navigation_request->loader_for_testing()); |
| 1007 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 998 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 1008 } | 999 } |
| 1009 | 1000 |
| 1010 // Tests several cases for converting SiteInstanceDescriptors into | 1001 // Tests several cases for converting SiteInstanceDescriptors into |
| 1011 // SiteInstances: | 1002 // SiteInstances: |
| 1012 // 1) Pointer to the current SiteInstance. | 1003 // 1) Pointer to the current SiteInstance. |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1130 | 1121 |
| 1131 SiteInstance* converted_instance_2 = | 1122 SiteInstance* converted_instance_2 = |
| 1132 ConvertToSiteInstance(rfhm, descriptor, unrelated_instance.get()); | 1123 ConvertToSiteInstance(rfhm, descriptor, unrelated_instance.get()); |
| 1133 // Should return |unrelated_instance| because its site matches and it is | 1124 // Should return |unrelated_instance| because its site matches and it is |
| 1134 // unrelated to the current SiteInstance. | 1125 // unrelated to the current SiteInstance. |
| 1135 EXPECT_EQ(unrelated_instance.get(), converted_instance_2); | 1126 EXPECT_EQ(unrelated_instance.get(), converted_instance_2); |
| 1136 } | 1127 } |
| 1137 } | 1128 } |
| 1138 | 1129 |
| 1139 } // namespace content | 1130 } // namespace content |
| OLD | NEW |