Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(37)

Side by Side Diff: content/browser/frame_host/navigation_handle_impl_browsertest.cc

Issue 2632633006: Implement NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE. (Closed)
Patch Set: Rebase. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/memory/weak_ptr.h" 5 #include "base/memory/weak_ptr.h"
6 #include "content/browser/frame_host/navigation_handle_impl.h" 6 #include "content/browser/frame_host/navigation_handle_impl.h"
7 #include "content/browser/web_contents/web_contents_impl.h" 7 #include "content/browser/web_contents/web_contents_impl.h"
8 #include "content/public/browser/web_contents.h" 8 #include "content/public/browser/web_contents.h"
9 #include "content/public/browser/web_contents_observer.h" 9 #include "content/public/browser/web_contents_observer.h"
10 #include "content/public/common/request_context_type.h" 10 #include "content/public/common/request_context_type.h"
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 : NavigationThrottle(handle), 140 : NavigationThrottle(handle),
141 will_start_result_(will_start_result), 141 will_start_result_(will_start_result),
142 will_redirect_result_(will_redirect_result), 142 will_redirect_result_(will_redirect_result),
143 will_process_result_(will_process_result), 143 will_process_result_(will_process_result),
144 did_call_will_start_(did_call_will_start), 144 did_call_will_start_(did_call_will_start),
145 did_call_will_redirect_(did_call_will_redirect), 145 did_call_will_redirect_(did_call_will_redirect),
146 did_call_will_process_(did_call_will_process) {} 146 did_call_will_process_(did_call_will_process) {}
147 ~TestNavigationThrottle() override {} 147 ~TestNavigationThrottle() override {}
148 148
149 void Resume() { navigation_handle()->Resume(); } 149 void Resume() { navigation_handle()->Resume(); }
150 void Cancel(NavigationThrottle::ThrottleCheckResult result) {
151 navigation_handle()->CancelDeferredNavigation(result);
152 }
150 153
151 RequestContextType request_context_type() { return request_context_type_; } 154 RequestContextType request_context_type() { return request_context_type_; }
152 155
153 private: 156 private:
154 // NavigationThrottle implementation. 157 // NavigationThrottle implementation.
155 NavigationThrottle::ThrottleCheckResult WillStartRequest() override { 158 NavigationThrottle::ThrottleCheckResult WillStartRequest() override {
156 NavigationHandleImpl* navigation_handle_impl = 159 NavigationHandleImpl* navigation_handle_impl =
157 static_cast<NavigationHandleImpl*>(navigation_handle()); 160 static_cast<NavigationHandleImpl*>(navigation_handle());
158 CHECK_NE(REQUEST_CONTEXT_TYPE_UNSPECIFIED, 161 CHECK_NE(REQUEST_CONTEXT_TYPE_UNSPECIFIED,
159 navigation_handle_impl->request_context_type()); 162 navigation_handle_impl->request_context_type());
(...skipping 27 matching lines...) Expand all
187 190
188 NavigationThrottle::ThrottleCheckResult will_start_result_; 191 NavigationThrottle::ThrottleCheckResult will_start_result_;
189 NavigationThrottle::ThrottleCheckResult will_redirect_result_; 192 NavigationThrottle::ThrottleCheckResult will_redirect_result_;
190 NavigationThrottle::ThrottleCheckResult will_process_result_; 193 NavigationThrottle::ThrottleCheckResult will_process_result_;
191 base::Closure did_call_will_start_; 194 base::Closure did_call_will_start_;
192 base::Closure did_call_will_redirect_; 195 base::Closure did_call_will_redirect_;
193 base::Closure did_call_will_process_; 196 base::Closure did_call_will_process_;
194 RequestContextType request_context_type_; 197 RequestContextType request_context_type_;
195 }; 198 };
196 199
197 // Install a TestNavigationThrottle on all following requests and allows waiting 200 // Installs a TestNavigationThrottle either on all following requests or on
198 // for various NavigationThrottle related events. Waiting works only for the 201 // requests with an expected starting URL, and allows waiting for various
199 // immediately next navigation. New instances are needed to wait for further 202 // NavigationThrottle related events. Waiting works only for the immediately
200 // navigations. 203 // next navigation. New instances are needed to wait for further navigations.
201 class TestNavigationThrottleInstaller : public WebContentsObserver { 204 class TestNavigationThrottleInstaller : public WebContentsObserver {
202 public: 205 public:
203 TestNavigationThrottleInstaller( 206 TestNavigationThrottleInstaller(
204 WebContents* web_contents, 207 WebContents* web_contents,
205 NavigationThrottle::ThrottleCheckResult will_start_result, 208 NavigationThrottle::ThrottleCheckResult will_start_result,
206 NavigationThrottle::ThrottleCheckResult will_redirect_result, 209 NavigationThrottle::ThrottleCheckResult will_redirect_result,
207 NavigationThrottle::ThrottleCheckResult will_process_result) 210 NavigationThrottle::ThrottleCheckResult will_process_result,
211 GURL expected_start_url = GURL())
208 : WebContentsObserver(web_contents), 212 : WebContentsObserver(web_contents),
209 will_start_result_(will_start_result), 213 will_start_result_(will_start_result),
210 will_redirect_result_(will_redirect_result), 214 will_redirect_result_(will_redirect_result),
211 will_process_result_(will_process_result), 215 will_process_result_(will_process_result),
212 will_start_called_(0), 216 will_start_called_(0),
213 will_redirect_called_(0), 217 will_redirect_called_(0),
214 will_process_called_(0), 218 will_process_called_(0),
215 navigation_throttle_(nullptr), 219 navigation_throttle_(nullptr),
220 expected_start_url_(expected_start_url),
216 weak_factory_(this) {} 221 weak_factory_(this) {}
217 ~TestNavigationThrottleInstaller() override {} 222 ~TestNavigationThrottleInstaller() override {}
218 223
219 TestNavigationThrottle* navigation_throttle() { return navigation_throttle_; } 224 TestNavigationThrottle* navigation_throttle() { return navigation_throttle_; }
220 225
221 void WaitForThrottleWillStart() { 226 void WaitForThrottleWillStart() {
222 if (will_start_called_) 227 if (will_start_called_)
223 return; 228 return;
224 will_start_loop_runner_ = new MessageLoopRunner(); 229 will_start_loop_runner_ = new MessageLoopRunner();
225 will_start_loop_runner_->Run(); 230 will_start_loop_runner_->Run();
226 will_start_loop_runner_ = nullptr; 231 will_start_loop_runner_ = nullptr;
227 } 232 }
228 233
229 void WaitForThrottleWillRedirect() { 234 void WaitForThrottleWillRedirect() {
230 if (will_redirect_called_) 235 if (will_redirect_called_)
231 return; 236 return;
232 will_redirect_loop_runner_ = new MessageLoopRunner(); 237 will_redirect_loop_runner_ = new MessageLoopRunner();
233 will_redirect_loop_runner_->Run(); 238 will_redirect_loop_runner_->Run();
234 will_redirect_loop_runner_ = nullptr; 239 will_redirect_loop_runner_ = nullptr;
235 } 240 }
236 241
237 void WaitForThrottleWillProcess() { 242 void WaitForThrottleWillProcess() {
238 if (will_process_called_) 243 if (will_process_called_)
239 return; 244 return;
240 will_process_loop_runner_ = new MessageLoopRunner(); 245 will_process_loop_runner_ = new MessageLoopRunner();
241 will_process_loop_runner_->Run(); 246 will_process_loop_runner_->Run();
242 will_process_loop_runner_ = nullptr; 247 will_process_loop_runner_ = nullptr;
243 } 248 }
244 249
250 void Continue(NavigationThrottle::ThrottleCheckResult result) {
251 ASSERT_NE(NavigationThrottle::DEFER, result);
252 if (result == NavigationThrottle::PROCEED)
253 navigation_throttle()->Resume();
254 else
255 navigation_throttle()->Cancel(result);
256 }
257
245 int will_start_called() { return will_start_called_; } 258 int will_start_called() { return will_start_called_; }
246 int will_redirect_called() { return will_redirect_called_; } 259 int will_redirect_called() { return will_redirect_called_; }
247 int will_process_called() { return will_process_called_; } 260 int will_process_called() { return will_process_called_; }
248 261
262 protected:
263 virtual void DidCallWillStartRequest() {
264 will_start_called_++;
265 if (will_start_loop_runner_)
266 will_start_loop_runner_->Quit();
267 }
268
269 virtual void DidCallWillRedirectRequest() {
270 will_redirect_called_++;
271 if (will_redirect_loop_runner_)
272 will_redirect_loop_runner_->Quit();
273 }
274
275 virtual void DidCallWillProcessResponse() {
276 will_process_called_++;
277 if (will_process_loop_runner_)
278 will_process_loop_runner_->Quit();
279 }
280
249 private: 281 private:
250 void DidStartNavigation(NavigationHandle* handle) override { 282 void DidStartNavigation(NavigationHandle* handle) override {
283 if (!expected_start_url_.is_empty() &&
284 handle->GetURL() != expected_start_url_)
285 return;
286
251 std::unique_ptr<NavigationThrottle> throttle(new TestNavigationThrottle( 287 std::unique_ptr<NavigationThrottle> throttle(new TestNavigationThrottle(
252 handle, will_start_result_, will_redirect_result_, will_process_result_, 288 handle, will_start_result_, will_redirect_result_, will_process_result_,
253 base::Bind(&TestNavigationThrottleInstaller::DidCallWillStartRequest, 289 base::Bind(&TestNavigationThrottleInstaller::DidCallWillStartRequest,
254 weak_factory_.GetWeakPtr()), 290 weak_factory_.GetWeakPtr()),
255 base::Bind(&TestNavigationThrottleInstaller::DidCallWillRedirectRequest, 291 base::Bind(&TestNavigationThrottleInstaller::DidCallWillRedirectRequest,
256 weak_factory_.GetWeakPtr()), 292 weak_factory_.GetWeakPtr()),
257 base::Bind(&TestNavigationThrottleInstaller::DidCallWillProcessResponse, 293 base::Bind(&TestNavigationThrottleInstaller::DidCallWillProcessResponse,
258 weak_factory_.GetWeakPtr()))); 294 weak_factory_.GetWeakPtr())));
259 navigation_throttle_ = static_cast<TestNavigationThrottle*>(throttle.get()); 295 navigation_throttle_ = static_cast<TestNavigationThrottle*>(throttle.get());
260 handle->RegisterThrottleForTesting(std::move(throttle)); 296 handle->RegisterThrottleForTesting(std::move(throttle));
261 } 297 }
262 298
263 void DidFinishNavigation(NavigationHandle* handle) override { 299 void DidFinishNavigation(NavigationHandle* handle) override {
264 if (!navigation_throttle_) 300 if (!navigation_throttle_)
265 return; 301 return;
266 302
267 if (handle == navigation_throttle_->navigation_handle()) 303 if (handle == navigation_throttle_->navigation_handle())
268 navigation_throttle_ = nullptr; 304 navigation_throttle_ = nullptr;
269 } 305 }
270 306
271 void DidCallWillStartRequest() {
272 will_start_called_++;
273 if (will_start_loop_runner_)
274 will_start_loop_runner_->Quit();
275 }
276
277 void DidCallWillRedirectRequest() {
278 will_redirect_called_++;
279 if (will_redirect_loop_runner_)
280 will_redirect_loop_runner_->Quit();
281 }
282
283 void DidCallWillProcessResponse() {
284 will_process_called_++;
285 if (will_process_loop_runner_)
286 will_process_loop_runner_->Quit();
287 }
288
289 NavigationThrottle::ThrottleCheckResult will_start_result_; 307 NavigationThrottle::ThrottleCheckResult will_start_result_;
290 NavigationThrottle::ThrottleCheckResult will_redirect_result_; 308 NavigationThrottle::ThrottleCheckResult will_redirect_result_;
291 NavigationThrottle::ThrottleCheckResult will_process_result_; 309 NavigationThrottle::ThrottleCheckResult will_process_result_;
292 int will_start_called_; 310 int will_start_called_;
293 int will_redirect_called_; 311 int will_redirect_called_;
294 int will_process_called_; 312 int will_process_called_;
295 TestNavigationThrottle* navigation_throttle_; 313 TestNavigationThrottle* navigation_throttle_;
296 scoped_refptr<MessageLoopRunner> will_start_loop_runner_; 314 scoped_refptr<MessageLoopRunner> will_start_loop_runner_;
297 scoped_refptr<MessageLoopRunner> will_redirect_loop_runner_; 315 scoped_refptr<MessageLoopRunner> will_redirect_loop_runner_;
298 scoped_refptr<MessageLoopRunner> will_process_loop_runner_; 316 scoped_refptr<MessageLoopRunner> will_process_loop_runner_;
317 GURL expected_start_url_;
299 318
300 // The throttle installer can be deleted before all tasks posted by its 319 // The throttle installer can be deleted before all tasks posted by its
301 // throttles are run, so it must be referenced via weak pointers. 320 // throttles are run, so it must be referenced via weak pointers.
302 base::WeakPtrFactory<TestNavigationThrottleInstaller> weak_factory_; 321 base::WeakPtrFactory<TestNavigationThrottleInstaller> weak_factory_;
303 }; 322 };
304 323
324 // Same as above, but installs NavigationThrottles that do not directly return
325 // the pre-programmed check results, but first DEFER the navigation at each
326 // stage and then resume/cancel asynchronously.
327 class TestDeferringNavigationThrottleInstaller
328 : public TestNavigationThrottleInstaller {
329 public:
330 TestDeferringNavigationThrottleInstaller(
331 WebContents* web_contents,
332 NavigationThrottle::ThrottleCheckResult will_start_result,
333 NavigationThrottle::ThrottleCheckResult will_redirect_result,
334 NavigationThrottle::ThrottleCheckResult will_process_result,
335 GURL expected_start_url = GURL())
336 : TestNavigationThrottleInstaller(web_contents,
337 NavigationThrottle::DEFER,
338 NavigationThrottle::DEFER,
339 NavigationThrottle::DEFER,
340 expected_start_url),
341 will_start_deferred_result_(will_start_result),
342 will_redirect_deferred_result_(will_redirect_result),
343 will_process_deferred_result_(will_process_result) {}
344
345 protected:
346 void DidCallWillStartRequest() override {
347 TestNavigationThrottleInstaller::DidCallWillStartRequest();
348 Continue(will_start_deferred_result_);
349 }
350
351 void DidCallWillRedirectRequest() override {
352 TestNavigationThrottleInstaller::DidCallWillStartRequest();
353 Continue(will_redirect_deferred_result_);
354 }
355
356 void DidCallWillProcessResponse() override {
357 TestNavigationThrottleInstaller::DidCallWillStartRequest();
358 Continue(will_process_deferred_result_);
359 }
360
361 private:
362 NavigationThrottle::ThrottleCheckResult will_start_deferred_result_;
363 NavigationThrottle::ThrottleCheckResult will_redirect_deferred_result_;
364 NavigationThrottle::ThrottleCheckResult will_process_deferred_result_;
365 };
366
305 // Records all navigation start URLs from the WebContents. 367 // Records all navigation start URLs from the WebContents.
306 class NavigationStartUrlRecorder : public WebContentsObserver { 368 class NavigationStartUrlRecorder : public WebContentsObserver {
307 public: 369 public:
308 NavigationStartUrlRecorder(WebContents* web_contents) 370 NavigationStartUrlRecorder(WebContents* web_contents)
309 : WebContentsObserver(web_contents) {} 371 : WebContentsObserver(web_contents) {}
310 372
311 void DidStartNavigation(NavigationHandle* navigation_handle) override { 373 void DidStartNavigation(NavigationHandle* navigation_handle) override {
312 urls_.push_back(navigation_handle->GetURL()); 374 urls_.push_back(navigation_handle->GetURL());
313 } 375 }
314 376
315 const std::vector<GURL>& urls() const { return urls_; } 377 const std::vector<GURL>& urls() const { return urls_; }
316 378
317 private: 379 private:
318 std::vector<GURL> urls_; 380 std::vector<GURL> urls_;
319 }; 381 };
320 382
383 bool IsChildFrameCollapsed(Shell* shell, const char* element_id) {
384 const char kScript[] =
385 "window.domAutomationController.send("
386 " document.getElementById(\"%s\").clientWidth"
387 ");";
388 int client_width = 0;
389 EXPECT_TRUE(ExecuteScriptAndExtractInt(
390 shell, base::StringPrintf(kScript, element_id), &client_width));
391 return !client_width;
392 }
393
321 } // namespace 394 } // namespace
322 395
323 class NavigationHandleImplBrowserTest : public ContentBrowserTest { 396 class NavigationHandleImplBrowserTest : public ContentBrowserTest {
324 protected: 397 protected:
325 void SetUpOnMainThread() override { 398 void SetUpOnMainThread() override {
326 host_resolver()->AddRule("*", "127.0.0.1"); 399 host_resolver()->AddRule("*", "127.0.0.1");
327 SetupCrossSiteRedirector(embedded_test_server()); 400 SetupCrossSiteRedirector(embedded_test_server());
328 ASSERT_TRUE(embedded_test_server()->Start()); 401 ASSERT_TRUE(embedded_test_server()->Start());
329 } 402 }
330 }; 403 };
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after
718 // Wait for the end of the navigation. 791 // Wait for the end of the navigation.
719 navigation_observer.Wait(); 792 navigation_observer.Wait();
720 793
721 EXPECT_TRUE(observer.has_committed()); 794 EXPECT_TRUE(observer.has_committed());
722 EXPECT_TRUE(observer.was_redirected()); 795 EXPECT_TRUE(observer.was_redirected());
723 EXPECT_FALSE(observer.is_error()); 796 EXPECT_FALSE(observer.is_error());
724 EXPECT_EQ(shell()->web_contents()->GetLastCommittedURL(), 797 EXPECT_EQ(shell()->web_contents()->GetLastCommittedURL(),
725 GURL(embedded_test_server()->GetURL("bar.com", "/title2.html"))); 798 GURL(embedded_test_server()->GetURL("bar.com", "/title2.html")));
726 } 799 }
727 800
801 // Ensure that a NavigationThrottle can block the navigation and collapse the
802 // frame owner both on request start as well as after a redirect. Plus, ensure
803 // that the frame is restored on the subsequent non-error-page navigation.
804 IN_PROC_BROWSER_TEST_F(NavigationHandleImplBrowserTest,
805 ThrottleBlockAndCollapse) {
806 const char kChildFrameId[] = "child0";
807 GURL main_url(embedded_test_server()->GetURL(
808 "a.com", "/frame_tree/page_with_one_frame.html"));
809 GURL blocked_subframe_url(embedded_test_server()->GetURL(
810 "a.com", "/cross-site/baz.com/title1.html"));
811 GURL allowed_subframe_url(embedded_test_server()->GetURL(
812 "a.com", "/cross-site/baz.com/title2.html"));
clamy 2017/02/21 15:12:49 It's not clear from these urls that they will redi
engedy 2017/02/22 13:14:58 Yes, the testing throttle would only return BLOCK_
clamy 2017/02/22 13:18:29 Acknowledged.
813 GURL allowed_subframe_final_url(
814 embedded_test_server()->GetURL("baz.com", "/title2.html"));
815
816 // Exercise both synchronous and deferred throttle check results, and both on
817 // WillStartRequest and on WillRedirectRequest.
818 for (const bool deferred_block : {false, true}) {
819 for (const bool block_on_redirect : {false, true}) {
820 SCOPED_TRACE(deferred_block ? "Direct block" : "Deferred block");
821 SCOPED_TRACE(block_on_redirect ? "Block on WillStartRequest"
822 : "Block on WillRedirectRequest");
823
824 NavigationThrottle::ThrottleCheckResult will_start_result =
825 block_on_redirect ? NavigationThrottle::PROCEED
826 : NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE;
827 NavigationThrottle::ThrottleCheckResult will_redirect_result =
828 block_on_redirect ? NavigationThrottle::BLOCK_REQUEST_AND_COLLAPSE
829 : NavigationThrottle::PROCEED;
830
831 std::unique_ptr<TestNavigationThrottleInstaller>
832 subframe_throttle_installer;
833 if (deferred_block) {
834 subframe_throttle_installer.reset(
835 new TestDeferringNavigationThrottleInstaller(
836 shell()->web_contents(), will_start_result,
837 will_redirect_result, NavigationThrottle::PROCEED,
838 blocked_subframe_url));
839 } else {
840 subframe_throttle_installer.reset(new TestNavigationThrottleInstaller(
841 shell()->web_contents(), will_start_result, will_redirect_result,
842 NavigationThrottle::PROCEED, blocked_subframe_url));
843 }
844
845 {
846 SCOPED_TRACE("Initial navigation blocked on main frame load.");
847 NavigationHandleObserver subframe_observer(shell()->web_contents(),
848 blocked_subframe_url);
849
850 ASSERT_TRUE(NavigateToURL(shell(), main_url));
851 EXPECT_TRUE(subframe_observer.is_error());
852 EXPECT_TRUE(IsChildFrameCollapsed(shell(), kChildFrameId));
853 }
854
855 {
856 SCOPED_TRACE("Subsequent subframe navigation is allowed.");
857 NavigationHandleObserver subframe_observer(shell()->web_contents(),
858 allowed_subframe_url);
859
860 ASSERT_TRUE(NavigateIframeToURL(shell()->web_contents(), kChildFrameId,
861 allowed_subframe_url));
862 EXPECT_TRUE(subframe_observer.has_committed());
863 EXPECT_FALSE(subframe_observer.is_error());
864 EXPECT_EQ(allowed_subframe_final_url,
865 subframe_observer.last_committed_url());
866 EXPECT_FALSE(IsChildFrameCollapsed(shell(), kChildFrameId));
867 }
868
869 {
870 SCOPED_TRACE("Subsequent subframe navigation is blocked.");
871 NavigationHandleObserver subframe_observer(shell()->web_contents(),
872 blocked_subframe_url);
873
874 ASSERT_TRUE(NavigateIframeToURL(shell()->web_contents(), kChildFrameId,
875 blocked_subframe_url));
876
877 EXPECT_TRUE(subframe_observer.is_error());
878 EXPECT_TRUE(IsChildFrameCollapsed(shell(), kChildFrameId));
879 }
880 }
881 }
882 }
883
728 // Checks that the RequestContextType value is properly set. 884 // Checks that the RequestContextType value is properly set.
729 IN_PROC_BROWSER_TEST_F(NavigationHandleImplBrowserTest, 885 IN_PROC_BROWSER_TEST_F(NavigationHandleImplBrowserTest,
730 VerifyRequestContextTypeForFrameTree) { 886 VerifyRequestContextTypeForFrameTree) {
731 GURL main_url(embedded_test_server()->GetURL( 887 GURL main_url(embedded_test_server()->GetURL(
732 "a.com", "/cross_site_iframe_factory.html?a(b(c))")); 888 "a.com", "/cross_site_iframe_factory.html?a(b(c))"));
733 GURL b_url(embedded_test_server()->GetURL( 889 GURL b_url(embedded_test_server()->GetURL(
734 "b.com", "/cross_site_iframe_factory.html?b(c())")); 890 "b.com", "/cross_site_iframe_factory.html?b(c())"));
735 GURL c_url(embedded_test_server()->GetURL( 891 GURL c_url(embedded_test_server()->GetURL(
736 "c.com", "/cross_site_iframe_factory.html?c()")); 892 "c.com", "/cross_site_iframe_factory.html?c()"));
737 893
738 TestNavigationThrottleInstaller installer( 894 TestNavigationThrottleInstaller installer(
739 shell()->web_contents(), NavigationThrottle::PROCEED, 895 shell()->web_contents(), NavigationThrottle::PROCEED,
740 NavigationThrottle::PROCEED, NavigationThrottle::PROCEED); 896 NavigationThrottle::PROCEED, NavigationThrottle::PROCEED);
741 TestNavigationManager main_manager(shell()->web_contents(), main_url); 897 TestNavigationManager main_manager(shell()->web_contents(), main_url);
742 TestNavigationManager b_manager(shell()->web_contents(), b_url); 898 TestNavigationManager b_manager(shell()->web_contents(), b_url);
743 TestNavigationManager c_manager(shell()->web_contents(), c_url); 899 TestNavigationManager c_manager(shell()->web_contents(), c_url);
744 NavigationStartUrlRecorder url_recorder(shell()->web_contents()); 900 NavigationStartUrlRecorder url_recorder(shell()->web_contents());
745 TestNavigationThrottle* previous_throttle = nullptr; 901 TestNavigationThrottle* previous_throttle = nullptr;
746 902
747 // Starts and verifies the main frame navigation. 903 // Starts and verifies the main frame navigation.
748 shell()->LoadURL(main_url); 904 shell()->LoadURL(main_url);
749 EXPECT_TRUE(main_manager.WaitForRequestStart()); 905 EXPECT_TRUE(main_manager.WaitForRequestStart());
750 // The throttle should not be null. 906 // The throttle should not be null.
751 EXPECT_NE(previous_throttle, installer.navigation_throttle()); 907 EXPECT_NE(previous_throttle, installer.navigation_throttle());
752 // Checks the only URL recorded so far is the one expected for the main frame. 908 // Checks the only URL recorded so far is the one expected for the main
909 // frame.
753 EXPECT_EQ(main_url, url_recorder.urls().back()); 910 EXPECT_EQ(main_url, url_recorder.urls().back());
754 EXPECT_EQ(1ul, url_recorder.urls().size()); 911 EXPECT_EQ(1ul, url_recorder.urls().size());
755 // Checks the main frame RequestContextType. 912 // Checks the main frame RequestContextType.
756 EXPECT_EQ(REQUEST_CONTEXT_TYPE_LOCATION, 913 EXPECT_EQ(REQUEST_CONTEXT_TYPE_LOCATION,
757 installer.navigation_throttle()->request_context_type()); 914 installer.navigation_throttle()->request_context_type());
758 // For each navigations the throttle should be a different instance. 915 // For each navigations the throttle should be a different instance.
759 previous_throttle = installer.navigation_throttle(); 916 previous_throttle = installer.navigation_throttle();
760 917
761 // Ditto for frame b navigation. 918 // Ditto for frame b navigation.
762 main_manager.WaitForNavigationFinished(); 919 main_manager.WaitForNavigationFinished();
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
814 EXPECT_EQ(REQUEST_CONTEXT_TYPE_HYPERLINK, 971 EXPECT_EQ(REQUEST_CONTEXT_TYPE_HYPERLINK,
815 installer.navigation_throttle()->request_context_type()); 972 installer.navigation_throttle()->request_context_type());
816 973
817 // Finishes the last navigation. 974 // Finishes the last navigation.
818 link_manager.WaitForNavigationFinished(); 975 link_manager.WaitForNavigationFinished();
819 EXPECT_FALSE(installer.navigation_throttle()); 976 EXPECT_FALSE(installer.navigation_throttle());
820 } 977 }
821 978
822 // Checks that the RequestContextType value is properly set for an form (POST). 979 // Checks that the RequestContextType value is properly set for an form (POST).
823 IN_PROC_BROWSER_TEST_F(NavigationHandleImplBrowserTest, 980 IN_PROC_BROWSER_TEST_F(NavigationHandleImplBrowserTest,
824 VerifyFormRequestContextType) { 981 VerifyFormRequestContextType) {
clamy 2017/02/21 15:12:49 Could you also update this test to check that we g
engedy 2017/02/22 13:14:58 I'm somewhat puzzled by this comment, could you pl
clamy 2017/02/22 13:18:29 Sorry I posted this comment on the wrong test. I m
engedy 2017/02/22 14:34:06 Done, thanks for requesting this, this uncovered a
825 GURL document_url( 982 GURL document_url(
826 embedded_test_server()->GetURL("/session_history/form.html")); 983 embedded_test_server()->GetURL("/session_history/form.html"));
827 GURL post_url(embedded_test_server()->GetURL("/echotitle")); 984 GURL post_url(embedded_test_server()->GetURL("/echotitle"));
828 985
829 TestNavigationThrottleInstaller installer( 986 TestNavigationThrottleInstaller installer(
830 shell()->web_contents(), NavigationThrottle::PROCEED, 987 shell()->web_contents(), NavigationThrottle::PROCEED,
831 NavigationThrottle::PROCEED, NavigationThrottle::PROCEED); 988 NavigationThrottle::PROCEED, NavigationThrottle::PROCEED);
832 TestNavigationManager post_manager(shell()->web_contents(), post_url); 989 TestNavigationManager post_manager(shell()->web_contents(), post_url);
833 NavigationStartUrlRecorder url_recorder(shell()->web_contents()); 990 NavigationStartUrlRecorder url_recorder(shell()->web_contents());
834 991
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
1043 NavigationThrottle::PROCEED, NavigationThrottle::PROCEED); 1200 NavigationThrottle::PROCEED, NavigationThrottle::PROCEED);
1044 NavigationHandleObserver observer(shell()->web_contents(), url); 1201 NavigationHandleObserver observer(shell()->web_contents(), url);
1045 EXPECT_TRUE(NavigateToURL(shell(), url)); 1202 EXPECT_TRUE(NavigateToURL(shell(), url));
1046 EXPECT_EQ(1, installer.will_start_called()); 1203 EXPECT_EQ(1, installer.will_start_called());
1047 EXPECT_EQ(1, installer.will_process_called()); 1204 EXPECT_EQ(1, installer.will_process_called());
1048 EXPECT_FALSE(observer.is_same_page()); 1205 EXPECT_FALSE(observer.is_same_page());
1049 } 1206 }
1050 } 1207 }
1051 1208
1052 } // namespace content 1209 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/frame_host/navigation_handle_impl.cc ('k') | content/browser/frame_host/navigation_request.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698