OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <stddef.h> | 5 #include <stddef.h> |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <utility> | 8 #include <utility> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 2541 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2552 // Since the request had already started processing as a download, | 2552 // Since the request had already started processing as a download, |
2553 // the cancellation above should have been ignored and the request | 2553 // the cancellation above should have been ignored and the request |
2554 // should still be alive. | 2554 // should still be alive. |
2555 EXPECT_EQ(1, host_.pending_requests()); | 2555 EXPECT_EQ(1, host_.pending_requests()); |
2556 | 2556 |
2557 while (net::URLRequestTestJob::ProcessOnePendingMessage()) {} | 2557 while (net::URLRequestTestJob::ProcessOnePendingMessage()) {} |
2558 content::RunAllBlockingPoolTasksUntilIdle(); | 2558 content::RunAllBlockingPoolTasksUntilIdle(); |
2559 } | 2559 } |
2560 | 2560 |
2561 TEST_F(ResourceDispatcherHostTest, CancelRequestsForContext) { | 2561 TEST_F(ResourceDispatcherHostTest, CancelRequestsForContext) { |
| 2562 if (IsBrowserSideNavigationEnabled()) |
| 2563 return; |
| 2564 |
2562 EXPECT_EQ(0, host_.pending_requests()); | 2565 EXPECT_EQ(0, host_.pending_requests()); |
2563 NavigationResourceThrottle::set_ui_checks_always_succeed_for_testing(true); | 2566 NavigationResourceThrottle::set_ui_checks_always_succeed_for_testing(true); |
2564 | 2567 |
2565 int render_view_id = 0; | 2568 int render_view_id = 0; |
2566 int request_id = 1; | 2569 int request_id = 1; |
2567 | 2570 |
2568 std::string raw_headers("HTTP\n" | 2571 std::string raw_headers("HTTP\n" |
2569 "Content-disposition: attachment; filename=foo\n\n"); | 2572 "Content-disposition: attachment; filename=foo\n\n"); |
2570 std::string response_data("01234567890123456789\x01foobar"); | 2573 std::string response_data("01234567890123456789\x01foobar"); |
2571 // Get past sniffing metrics. | 2574 // Get past sniffing metrics. |
2572 response_data.resize(1025, ' '); | 2575 response_data.resize(1025, ' '); |
2573 | 2576 |
2574 SetResponse(raw_headers, response_data); | 2577 SetResponse(raw_headers, response_data); |
2575 job_factory_->SetDelayedCompleteJobGeneration(true); | 2578 job_factory_->SetDelayedCompleteJobGeneration(true); |
2576 HandleScheme("http"); | 2579 HandleScheme("http"); |
2577 | 2580 |
2578 const GURL download_url = GURL("http://example.com/blah"); | 2581 const GURL download_url = GURL("http://example.com/blah"); |
2579 | 2582 |
2580 if (IsBrowserSideNavigationEnabled()) { | 2583 MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id, |
2581 // Create a NavigationRequest. | 2584 download_url, RESOURCE_TYPE_MAIN_FRAME); |
2582 TestNavigationURLLoaderDelegate delegate; | |
2583 BeginNavigationParams begin_params( | |
2584 std::string(), net::LOAD_NORMAL, false, false, | |
2585 REQUEST_CONTEXT_TYPE_LOCATION, | |
2586 blink::WebMixedContentContextType::kBlockable, | |
2587 false, // is_form_submission | |
2588 url::Origin(download_url)); | |
2589 CommonNavigationParams common_params; | |
2590 common_params.url = download_url; | |
2591 std::unique_ptr<NavigationRequestInfo> request_info( | |
2592 new NavigationRequestInfo(common_params, begin_params, download_url, | |
2593 true, false, false, -1, false, false, | |
2594 blink::kWebPageVisibilityStateVisible)); | |
2595 std::unique_ptr<NavigationURLLoader> loader = NavigationURLLoader::Create( | |
2596 browser_context_->GetResourceContext(), | |
2597 BrowserContext::GetDefaultStoragePartition(browser_context_.get()), | |
2598 std::move(request_info), nullptr, nullptr, nullptr, &delegate); | |
2599 | 2585 |
2600 // Wait until a response has been received and proceed with the response. | 2586 // Return some data so that the request is identified as a download |
2601 KickOffRequest(); | 2587 // and the proper resource handlers are created. |
| 2588 EXPECT_TRUE(net::URLRequestTestJob::ProcessOnePendingMessage()); |
| 2589 content::RunAllBlockingPoolTasksUntilIdle(); |
2602 | 2590 |
2603 // Return some data so that the request is identified as a download | 2591 // And now simulate a cancellation coming from the renderer. |
2604 // and the proper resource handlers are created. | 2592 ResourceHostMsg_CancelRequest msg(request_id); |
2605 EXPECT_TRUE(net::URLRequestTestJob::ProcessOnePendingMessage()); | 2593 OnMessageReceived(msg, filter_.get()); |
2606 content::RunAllBlockingPoolTasksUntilIdle(); | |
2607 | 2594 |
2608 // The UI thread will be informed that the navigation failed with an error | 2595 // Since the request had already started processing as a download, |
2609 // code of ERR_ABORTED because the navigation turns out to be a download. | 2596 // the cancellation above should have been ignored and the request |
2610 // The navigation is aborted, but the request goes on as a download. | 2597 // should still be alive. |
2611 EXPECT_EQ(delegate.net_error(), net::ERR_ABORTED); | 2598 EXPECT_EQ(1, host_.pending_requests()); |
2612 EXPECT_EQ(1, host_.pending_requests()); | |
2613 | 2599 |
2614 // In PlzNavigate, the renderer cannot cancel the request directly. | 2600 // Cancelling by other methods shouldn't work either. |
2615 // However, cancelling by context should work. | 2601 host_.CancelRequestsForProcess(render_view_id); |
2616 host_.CancelRequestsForContext(browser_context_->GetResourceContext()); | 2602 EXPECT_EQ(1, host_.pending_requests()); |
2617 EXPECT_EQ(0, host_.pending_requests()); | |
2618 | 2603 |
2619 content::RunAllBlockingPoolTasksUntilIdle(); | 2604 // Cancelling by context should work. |
2620 } else { | 2605 host_.CancelRequestsForContext(filter_->resource_context()); |
2621 MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id, | 2606 EXPECT_EQ(0, host_.pending_requests()); |
2622 download_url, RESOURCE_TYPE_MAIN_FRAME); | |
2623 | 2607 |
2624 // Return some data so that the request is identified as a download | 2608 while (net::URLRequestTestJob::ProcessOnePendingMessage()) { |
2625 // and the proper resource handlers are created. | |
2626 EXPECT_TRUE(net::URLRequestTestJob::ProcessOnePendingMessage()); | |
2627 content::RunAllBlockingPoolTasksUntilIdle(); | |
2628 | |
2629 // And now simulate a cancellation coming from the renderer. | |
2630 ResourceHostMsg_CancelRequest msg(request_id); | |
2631 OnMessageReceived(msg, filter_.get()); | |
2632 | |
2633 // Since the request had already started processing as a download, | |
2634 // the cancellation above should have been ignored and the request | |
2635 // should still be alive. | |
2636 EXPECT_EQ(1, host_.pending_requests()); | |
2637 | |
2638 // Cancelling by other methods shouldn't work either. | |
2639 host_.CancelRequestsForProcess(render_view_id); | |
2640 EXPECT_EQ(1, host_.pending_requests()); | |
2641 | |
2642 // Cancelling by context should work. | |
2643 host_.CancelRequestsForContext(filter_->resource_context()); | |
2644 EXPECT_EQ(0, host_.pending_requests()); | |
2645 | |
2646 while (net::URLRequestTestJob::ProcessOnePendingMessage()) { | |
2647 } | |
2648 content::RunAllBlockingPoolTasksUntilIdle(); | |
2649 } | 2609 } |
| 2610 content::RunAllBlockingPoolTasksUntilIdle(); |
2650 } | 2611 } |
2651 | 2612 |
2652 TEST_F(ResourceDispatcherHostTest, CancelRequestsForContextDetached) { | 2613 TEST_F(ResourceDispatcherHostTest, CancelRequestsForContextDetached) { |
2653 EXPECT_EQ(0, host_.pending_requests()); | 2614 EXPECT_EQ(0, host_.pending_requests()); |
2654 | 2615 |
2655 int render_view_id = 0; | 2616 int render_view_id = 0; |
2656 int request_id = 1; | 2617 int request_id = 1; |
2657 | 2618 |
2658 MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id, | 2619 MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id, |
2659 net::URLRequestTestJob::test_url_4(), | 2620 net::URLRequestTestJob::test_url_4(), |
(...skipping 1268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3928 return nullptr; | 3889 return nullptr; |
3929 } | 3890 } |
3930 | 3891 |
3931 net::URLRequestJob* TestURLRequestJobFactory::MaybeInterceptResponse( | 3892 net::URLRequestJob* TestURLRequestJobFactory::MaybeInterceptResponse( |
3932 net::URLRequest* request, | 3893 net::URLRequest* request, |
3933 net::NetworkDelegate* network_delegate) const { | 3894 net::NetworkDelegate* network_delegate) const { |
3934 return nullptr; | 3895 return nullptr; |
3935 } | 3896 } |
3936 | 3897 |
3937 } // namespace content | 3898 } // namespace content |
OLD | NEW |