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