| 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 19 matching lines...) Expand all Loading... |
| 30 #include "content/browser/loader/detachable_resource_handler.h" | 30 #include "content/browser/loader/detachable_resource_handler.h" |
| 31 #include "content/browser/loader/navigation_url_loader.h" | 31 #include "content/browser/loader/navigation_url_loader.h" |
| 32 #include "content/browser/loader/resource_dispatcher_host_impl.h" | 32 #include "content/browser/loader/resource_dispatcher_host_impl.h" |
| 33 #include "content/browser/loader/resource_loader.h" | 33 #include "content/browser/loader/resource_loader.h" |
| 34 #include "content/browser/loader/resource_message_filter.h" | 34 #include "content/browser/loader/resource_message_filter.h" |
| 35 #include "content/browser/loader/resource_request_info_impl.h" | 35 #include "content/browser/loader/resource_request_info_impl.h" |
| 36 #include "content/common/appcache_interfaces.h" | 36 #include "content/common/appcache_interfaces.h" |
| 37 #include "content/common/child_process_host_impl.h" | 37 #include "content/common/child_process_host_impl.h" |
| 38 #include "content/common/navigation_params.h" | 38 #include "content/common/navigation_params.h" |
| 39 #include "content/common/resource_messages.h" | 39 #include "content/common/resource_messages.h" |
| 40 #include "content/common/resource_request.h" |
| 40 #include "content/common/ssl_status_serialization.h" | 41 #include "content/common/ssl_status_serialization.h" |
| 41 #include "content/common/view_messages.h" | 42 #include "content/common/view_messages.h" |
| 42 #include "content/public/browser/global_request_id.h" | 43 #include "content/public/browser/global_request_id.h" |
| 43 #include "content/public/browser/render_process_host.h" | 44 #include "content/public/browser/render_process_host.h" |
| 44 #include "content/public/browser/resource_context.h" | 45 #include "content/public/browser/resource_context.h" |
| 45 #include "content/public/browser/resource_dispatcher_host_delegate.h" | 46 #include "content/public/browser/resource_dispatcher_host_delegate.h" |
| 46 #include "content/public/browser/resource_request_info.h" | 47 #include "content/public/browser/resource_request_info.h" |
| 47 #include "content/public/browser/resource_throttle.h" | 48 #include "content/public/browser/resource_throttle.h" |
| 48 #include "content/public/browser/web_contents.h" | 49 #include "content/public/browser/web_contents.h" |
| 49 #include "content/public/browser/web_contents_observer.h" | 50 #include "content/public/browser/web_contents_observer.h" |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 142 case ResourceMsg_DataDownloaded::ID: | 143 case ResourceMsg_DataDownloaded::ID: |
| 143 case ResourceMsg_RequestComplete::ID: { | 144 case ResourceMsg_RequestComplete::ID: { |
| 144 bool result = base::PickleIterator(msg).ReadInt(&request_id); | 145 bool result = base::PickleIterator(msg).ReadInt(&request_id); |
| 145 DCHECK(result); | 146 DCHECK(result); |
| 146 break; | 147 break; |
| 147 } | 148 } |
| 148 } | 149 } |
| 149 return request_id; | 150 return request_id; |
| 150 } | 151 } |
| 151 | 152 |
| 152 static ResourceHostMsg_Request CreateResourceRequest(const char* method, | 153 static ResourceRequest CreateResourceRequest(const char* method, |
| 153 ResourceType type, | 154 ResourceType type, |
| 154 const GURL& url) { | 155 const GURL& url) { |
| 155 ResourceHostMsg_Request request; | 156 ResourceRequest request; |
| 156 request.method = std::string(method); | 157 request.method = std::string(method); |
| 157 request.url = url; | 158 request.url = url; |
| 158 request.first_party_for_cookies = url; // bypass third-party cookie blocking | 159 request.first_party_for_cookies = url; // bypass third-party cookie blocking |
| 159 request.referrer_policy = blink::WebReferrerPolicyDefault; | 160 request.referrer_policy = blink::WebReferrerPolicyDefault; |
| 160 request.load_flags = 0; | 161 request.load_flags = 0; |
| 161 request.origin_pid = 0; | 162 request.origin_pid = 0; |
| 162 request.resource_type = type; | 163 request.resource_type = type; |
| 163 request.request_context = 0; | 164 request.request_context = 0; |
| 164 request.appcache_host_id = kAppCacheNoHostId; | 165 request.appcache_host_id = kAppCacheNoHostId; |
| 165 request.download_to_file = false; | 166 request.download_to_file = false; |
| (...skipping 1041 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1207 MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id, | 1208 MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id, |
| 1208 url, RESOURCE_TYPE_SUB_RESOURCE); | 1209 url, RESOURCE_TYPE_SUB_RESOURCE); |
| 1209 } | 1210 } |
| 1210 | 1211 |
| 1211 void ResourceDispatcherHostTest::MakeTestRequestWithRenderFrame( | 1212 void ResourceDispatcherHostTest::MakeTestRequestWithRenderFrame( |
| 1212 int render_view_id, | 1213 int render_view_id, |
| 1213 int render_frame_id, | 1214 int render_frame_id, |
| 1214 int request_id, | 1215 int request_id, |
| 1215 const GURL& url, | 1216 const GURL& url, |
| 1216 ResourceType type) { | 1217 ResourceType type) { |
| 1217 ResourceHostMsg_Request request = CreateResourceRequest("GET", type, url); | 1218 ResourceRequest request = CreateResourceRequest("GET", type, url); |
| 1218 request.render_frame_id = render_frame_id; | 1219 request.render_frame_id = render_frame_id; |
| 1219 ResourceHostMsg_RequestResource msg(render_view_id, request_id, request); | 1220 ResourceHostMsg_RequestResource msg(render_view_id, request_id, request); |
| 1220 host_.OnMessageReceived(msg, filter_.get()); | 1221 host_.OnMessageReceived(msg, filter_.get()); |
| 1221 KickOffRequest(); | 1222 KickOffRequest(); |
| 1222 } | 1223 } |
| 1223 | 1224 |
| 1224 void ResourceDispatcherHostTest::MakeTestRequestWithResourceType( | 1225 void ResourceDispatcherHostTest::MakeTestRequestWithResourceType( |
| 1225 ResourceMessageFilter* filter, | 1226 ResourceMessageFilter* filter, |
| 1226 int render_view_id, | 1227 int render_view_id, |
| 1227 int request_id, | 1228 int request_id, |
| 1228 const GURL& url, | 1229 const GURL& url, |
| 1229 ResourceType type) { | 1230 ResourceType type) { |
| 1230 ResourceHostMsg_Request request = | 1231 ResourceRequest request = CreateResourceRequest("GET", type, url); |
| 1231 CreateResourceRequest("GET", type, url); | |
| 1232 ResourceHostMsg_RequestResource msg(render_view_id, request_id, request); | 1232 ResourceHostMsg_RequestResource msg(render_view_id, request_id, request); |
| 1233 host_.OnMessageReceived(msg, filter); | 1233 host_.OnMessageReceived(msg, filter); |
| 1234 KickOffRequest(); | 1234 KickOffRequest(); |
| 1235 } | 1235 } |
| 1236 | 1236 |
| 1237 void ResourceDispatcherHostTest::MakeWebContentsAssociatedTestRequest( | 1237 void ResourceDispatcherHostTest::MakeWebContentsAssociatedTestRequest( |
| 1238 int request_id, | 1238 int request_id, |
| 1239 const GURL& url) { | 1239 const GURL& url) { |
| 1240 MakeWebContentsAssociatedTestRequestWithResourceType( | 1240 MakeWebContentsAssociatedTestRequestWithResourceType( |
| 1241 request_id, url, RESOURCE_TYPE_SUB_RESOURCE); | 1241 request_id, url, RESOURCE_TYPE_SUB_RESOURCE); |
| 1242 } | 1242 } |
| 1243 | 1243 |
| 1244 void ResourceDispatcherHostTest:: | 1244 void ResourceDispatcherHostTest:: |
| 1245 MakeWebContentsAssociatedTestRequestWithResourceType(int request_id, | 1245 MakeWebContentsAssociatedTestRequestWithResourceType(int request_id, |
| 1246 const GURL& url, | 1246 const GURL& url, |
| 1247 ResourceType type) { | 1247 ResourceType type) { |
| 1248 ResourceHostMsg_Request request = CreateResourceRequest("GET", type, url); | 1248 ResourceRequest request = CreateResourceRequest("GET", type, url); |
| 1249 request.origin_pid = web_contents_->GetRenderProcessHost()->GetID(); | 1249 request.origin_pid = web_contents_->GetRenderProcessHost()->GetID(); |
| 1250 request.render_frame_id = web_contents_->GetMainFrame()->GetRoutingID(); | 1250 request.render_frame_id = web_contents_->GetMainFrame()->GetRoutingID(); |
| 1251 ResourceHostMsg_RequestResource msg(web_contents_->GetRoutingID(), request_id, | 1251 ResourceHostMsg_RequestResource msg(web_contents_->GetRoutingID(), request_id, |
| 1252 request); | 1252 request); |
| 1253 host_.OnMessageReceived(msg, web_contents_filter_.get()); | 1253 host_.OnMessageReceived(msg, web_contents_filter_.get()); |
| 1254 KickOffRequest(); | 1254 KickOffRequest(); |
| 1255 } | 1255 } |
| 1256 | 1256 |
| 1257 void ResourceDispatcherHostTest::MakeTestRequestWithPriority( | 1257 void ResourceDispatcherHostTest::MakeTestRequestWithPriority( |
| 1258 int render_view_id, | 1258 int render_view_id, |
| 1259 int request_id, | 1259 int request_id, |
| 1260 net::RequestPriority priority) { | 1260 net::RequestPriority priority) { |
| 1261 MakeTestRequestWithPriorityAndRenderFrame(render_view_id, -1, request_id, | 1261 MakeTestRequestWithPriorityAndRenderFrame(render_view_id, -1, request_id, |
| 1262 priority); | 1262 priority); |
| 1263 } | 1263 } |
| 1264 | 1264 |
| 1265 void ResourceDispatcherHostTest::MakeTestRequestWithPriorityAndRenderFrame( | 1265 void ResourceDispatcherHostTest::MakeTestRequestWithPriorityAndRenderFrame( |
| 1266 int render_view_id, | 1266 int render_view_id, |
| 1267 int render_frame_id, | 1267 int render_frame_id, |
| 1268 int request_id, | 1268 int request_id, |
| 1269 net::RequestPriority priority) { | 1269 net::RequestPriority priority) { |
| 1270 ResourceHostMsg_Request request = CreateResourceRequest( | 1270 ResourceRequest request = CreateResourceRequest( |
| 1271 "GET", RESOURCE_TYPE_SUB_RESOURCE, GURL("http://example.com/priority")); | 1271 "GET", RESOURCE_TYPE_SUB_RESOURCE, GURL("http://example.com/priority")); |
| 1272 request.render_frame_id = render_frame_id; | 1272 request.render_frame_id = render_frame_id; |
| 1273 request.priority = priority; | 1273 request.priority = priority; |
| 1274 ResourceHostMsg_RequestResource msg(render_view_id, request_id, request); | 1274 ResourceHostMsg_RequestResource msg(render_view_id, request_id, request); |
| 1275 host_.OnMessageReceived(msg, filter_.get()); | 1275 host_.OnMessageReceived(msg, filter_.get()); |
| 1276 } | 1276 } |
| 1277 | 1277 |
| 1278 void ResourceDispatcherHostTest::MakeWebContentsAssociatedDownloadRequest( | 1278 void ResourceDispatcherHostTest::MakeWebContentsAssociatedDownloadRequest( |
| 1279 int request_id, | 1279 int request_id, |
| 1280 const GURL& url) { | 1280 const GURL& url) { |
| (...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1571 EXPECT_EQ(0, host_.pending_requests()); | 1571 EXPECT_EQ(0, host_.pending_requests()); |
| 1572 EXPECT_EQ(1, network_delegate()->completed_requests()); | 1572 EXPECT_EQ(1, network_delegate()->completed_requests()); |
| 1573 EXPECT_EQ(1, network_delegate()->canceled_requests()); | 1573 EXPECT_EQ(1, network_delegate()->canceled_requests()); |
| 1574 EXPECT_EQ(0, network_delegate()->error_count()); | 1574 EXPECT_EQ(0, network_delegate()->error_count()); |
| 1575 } | 1575 } |
| 1576 | 1576 |
| 1577 // If the filter has disappeared then detachable resources should continue to | 1577 // If the filter has disappeared then detachable resources should continue to |
| 1578 // load. | 1578 // load. |
| 1579 TEST_P(ResourceDispatcherHostTest, DeletedFilterDetached) { | 1579 TEST_P(ResourceDispatcherHostTest, DeletedFilterDetached) { |
| 1580 // test_url_1's data is available synchronously, so use 2 and 3. | 1580 // test_url_1's data is available synchronously, so use 2 and 3. |
| 1581 ResourceHostMsg_Request request_prefetch = CreateResourceRequest( | 1581 ResourceRequest request_prefetch = CreateResourceRequest( |
| 1582 "GET", RESOURCE_TYPE_PREFETCH, net::URLRequestTestJob::test_url_2()); | 1582 "GET", RESOURCE_TYPE_PREFETCH, net::URLRequestTestJob::test_url_2()); |
| 1583 ResourceHostMsg_Request request_ping = CreateResourceRequest( | 1583 ResourceRequest request_ping = CreateResourceRequest( |
| 1584 "GET", RESOURCE_TYPE_PING, net::URLRequestTestJob::test_url_3()); | 1584 "GET", RESOURCE_TYPE_PING, net::URLRequestTestJob::test_url_3()); |
| 1585 | 1585 |
| 1586 ResourceHostMsg_RequestResource msg_prefetch(0, 1, request_prefetch); | 1586 ResourceHostMsg_RequestResource msg_prefetch(0, 1, request_prefetch); |
| 1587 host_.OnMessageReceived(msg_prefetch, filter_.get()); | 1587 host_.OnMessageReceived(msg_prefetch, filter_.get()); |
| 1588 ResourceHostMsg_RequestResource msg_ping(0, 2, request_ping); | 1588 ResourceHostMsg_RequestResource msg_ping(0, 2, request_ping); |
| 1589 host_.OnMessageReceived(msg_ping, filter_.get()); | 1589 host_.OnMessageReceived(msg_ping, filter_.get()); |
| 1590 | 1590 |
| 1591 // Remove the filter before processing the requests by simulating channel | 1591 // Remove the filter before processing the requests by simulating channel |
| 1592 // closure. | 1592 // closure. |
| 1593 ResourceRequestInfoImpl* info_prefetch = ResourceRequestInfoImpl::ForRequest( | 1593 ResourceRequestInfoImpl* info_prefetch = ResourceRequestInfoImpl::ForRequest( |
| (...skipping 28 matching lines...) Expand all Loading... |
| 1622 | 1622 |
| 1623 EXPECT_EQ(0, host_.pending_requests()); | 1623 EXPECT_EQ(0, host_.pending_requests()); |
| 1624 EXPECT_EQ(2, network_delegate()->completed_requests()); | 1624 EXPECT_EQ(2, network_delegate()->completed_requests()); |
| 1625 EXPECT_EQ(0, network_delegate()->canceled_requests()); | 1625 EXPECT_EQ(0, network_delegate()->canceled_requests()); |
| 1626 EXPECT_EQ(0, network_delegate()->error_count()); | 1626 EXPECT_EQ(0, network_delegate()->error_count()); |
| 1627 } | 1627 } |
| 1628 | 1628 |
| 1629 // If the filter has disappeared (original process dies) then detachable | 1629 // If the filter has disappeared (original process dies) then detachable |
| 1630 // resources should continue to load, even when redirected. | 1630 // resources should continue to load, even when redirected. |
| 1631 TEST_P(ResourceDispatcherHostTest, DeletedFilterDetachedRedirect) { | 1631 TEST_P(ResourceDispatcherHostTest, DeletedFilterDetachedRedirect) { |
| 1632 ResourceHostMsg_Request request = CreateResourceRequest( | 1632 ResourceRequest request = CreateResourceRequest( |
| 1633 "GET", RESOURCE_TYPE_PREFETCH, | 1633 "GET", RESOURCE_TYPE_PREFETCH, |
| 1634 net::URLRequestTestJob::test_url_redirect_to_url_2()); | 1634 net::URLRequestTestJob::test_url_redirect_to_url_2()); |
| 1635 | 1635 |
| 1636 ResourceHostMsg_RequestResource msg(0, 1, request); | 1636 ResourceHostMsg_RequestResource msg(0, 1, request); |
| 1637 host_.OnMessageReceived(msg, filter_.get()); | 1637 host_.OnMessageReceived(msg, filter_.get()); |
| 1638 | 1638 |
| 1639 // Remove the filter before processing the request by simulating channel | 1639 // Remove the filter before processing the request by simulating channel |
| 1640 // closure. | 1640 // closure. |
| 1641 GlobalRequestID global_request_id(filter_->child_id(), 1); | 1641 GlobalRequestID global_request_id(filter_->child_id(), 1); |
| 1642 ResourceRequestInfoImpl* info = ResourceRequestInfoImpl::ForRequest( | 1642 ResourceRequestInfoImpl* info = ResourceRequestInfoImpl::ForRequest( |
| (...skipping 1135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2778 | 2778 |
| 2779 // Restore, now that we've set up a transfer. | 2779 // Restore, now that we've set up a transfer. |
| 2780 SetBrowserClientForTesting(old_client); | 2780 SetBrowserClientForTesting(old_client); |
| 2781 | 2781 |
| 2782 // This second filter is used to emulate a second process. | 2782 // This second filter is used to emulate a second process. |
| 2783 scoped_refptr<ForwardingFilter> second_filter = MakeForwardingFilter(); | 2783 scoped_refptr<ForwardingFilter> second_filter = MakeForwardingFilter(); |
| 2784 | 2784 |
| 2785 int new_render_view_id = 1; | 2785 int new_render_view_id = 1; |
| 2786 int new_request_id = 2; | 2786 int new_request_id = 2; |
| 2787 | 2787 |
| 2788 ResourceHostMsg_Request request = | 2788 ResourceRequest request = CreateResourceRequest( |
| 2789 CreateResourceRequest("GET", RESOURCE_TYPE_MAIN_FRAME, | 2789 "GET", RESOURCE_TYPE_MAIN_FRAME, GURL("http://other.com/blech")); |
| 2790 GURL("http://other.com/blech")); | |
| 2791 request.transferred_request_child_id = filter_->child_id(); | 2790 request.transferred_request_child_id = filter_->child_id(); |
| 2792 request.transferred_request_request_id = request_id; | 2791 request.transferred_request_request_id = request_id; |
| 2793 | 2792 |
| 2794 ResourceHostMsg_RequestResource transfer_request_msg( | 2793 ResourceHostMsg_RequestResource transfer_request_msg( |
| 2795 new_render_view_id, new_request_id, request); | 2794 new_render_view_id, new_request_id, request); |
| 2796 host_.OnMessageReceived(transfer_request_msg, second_filter.get()); | 2795 host_.OnMessageReceived(transfer_request_msg, second_filter.get()); |
| 2797 base::MessageLoop::current()->RunUntilIdle(); | 2796 base::MessageLoop::current()->RunUntilIdle(); |
| 2798 | 2797 |
| 2799 // Check generated messages. | 2798 // Check generated messages. |
| 2800 ResourceIPCAccumulator::ClassifiedMessages msgs; | 2799 ResourceIPCAccumulator::ClassifiedMessages msgs; |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2858 | 2857 |
| 2859 // Restore, now that we've set up a transfer. | 2858 // Restore, now that we've set up a transfer. |
| 2860 SetBrowserClientForTesting(old_client); | 2859 SetBrowserClientForTesting(old_client); |
| 2861 | 2860 |
| 2862 // This second filter is used to emulate a second process. | 2861 // This second filter is used to emulate a second process. |
| 2863 scoped_refptr<ForwardingFilter> second_filter = MakeForwardingFilter(); | 2862 scoped_refptr<ForwardingFilter> second_filter = MakeForwardingFilter(); |
| 2864 | 2863 |
| 2865 int new_render_view_id = 1; | 2864 int new_render_view_id = 1; |
| 2866 int new_request_id = 2; | 2865 int new_request_id = 2; |
| 2867 | 2866 |
| 2868 ResourceHostMsg_Request request = CreateResourceRequest( | 2867 ResourceRequest request = CreateResourceRequest( |
| 2869 "GET", RESOURCE_TYPE_MAIN_FRAME, GURL("https://example.com/blech")); | 2868 "GET", RESOURCE_TYPE_MAIN_FRAME, GURL("https://example.com/blech")); |
| 2870 request.transferred_request_child_id = filter_->child_id(); | 2869 request.transferred_request_child_id = filter_->child_id(); |
| 2871 request.transferred_request_request_id = request_id; | 2870 request.transferred_request_request_id = request_id; |
| 2872 | 2871 |
| 2873 // Before sending the transfer request, set up the mock cert store so | 2872 // Before sending the transfer request, set up the mock cert store so |
| 2874 // that the test can assert that the cert id is set during transfer. | 2873 // that the test can assert that the cert id is set during transfer. |
| 2875 mock_cert_store_.set_default_cert_id(1); | 2874 mock_cert_store_.set_default_cert_id(1); |
| 2876 | 2875 |
| 2877 ResourceHostMsg_RequestResource transfer_request_msg(new_render_view_id, | 2876 ResourceHostMsg_RequestResource transfer_request_msg(new_render_view_id, |
| 2878 new_request_id, request); | 2877 new_request_id, request); |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2946 | 2945 |
| 2947 // Restore, now that we've set up a transfer. | 2946 // Restore, now that we've set up a transfer. |
| 2948 SetBrowserClientForTesting(old_client); | 2947 SetBrowserClientForTesting(old_client); |
| 2949 | 2948 |
| 2950 // This second filter is used to emulate a second process. | 2949 // This second filter is used to emulate a second process. |
| 2951 scoped_refptr<ForwardingFilter> second_filter = MakeForwardingFilter(); | 2950 scoped_refptr<ForwardingFilter> second_filter = MakeForwardingFilter(); |
| 2952 | 2951 |
| 2953 // Transfer the first request. | 2952 // Transfer the first request. |
| 2954 int new_render_view_id = 1; | 2953 int new_render_view_id = 1; |
| 2955 int new_request_id = 5; | 2954 int new_request_id = 5; |
| 2956 ResourceHostMsg_Request request = | 2955 ResourceRequest request = CreateResourceRequest( |
| 2957 CreateResourceRequest("GET", RESOURCE_TYPE_MAIN_FRAME, | 2956 "GET", RESOURCE_TYPE_MAIN_FRAME, GURL("http://example.com/blah")); |
| 2958 GURL("http://example.com/blah")); | |
| 2959 request.transferred_request_child_id = filter_->child_id(); | 2957 request.transferred_request_child_id = filter_->child_id(); |
| 2960 request.transferred_request_request_id = request_id; | 2958 request.transferred_request_request_id = request_id; |
| 2961 | 2959 |
| 2962 ResourceHostMsg_RequestResource transfer_request_msg( | 2960 ResourceHostMsg_RequestResource transfer_request_msg( |
| 2963 new_render_view_id, new_request_id, request); | 2961 new_render_view_id, new_request_id, request); |
| 2964 host_.OnMessageReceived(transfer_request_msg, second_filter.get()); | 2962 host_.OnMessageReceived(transfer_request_msg, second_filter.get()); |
| 2965 base::MessageLoop::current()->RunUntilIdle(); | 2963 base::MessageLoop::current()->RunUntilIdle(); |
| 2966 | 2964 |
| 2967 // Transfer the second request. | 2965 // Transfer the second request. |
| 2968 int new_second_request_id = 6; | 2966 int new_second_request_id = 6; |
| 2969 ResourceHostMsg_Request second_request = | 2967 ResourceRequest second_request = CreateResourceRequest( |
| 2970 CreateResourceRequest("GET", RESOURCE_TYPE_MAIN_FRAME, | 2968 "GET", RESOURCE_TYPE_MAIN_FRAME, GURL("http://example.com/foo")); |
| 2971 GURL("http://example.com/foo")); | |
| 2972 request.transferred_request_child_id = filter_->child_id(); | 2969 request.transferred_request_child_id = filter_->child_id(); |
| 2973 request.transferred_request_request_id = second_request_id; | 2970 request.transferred_request_request_id = second_request_id; |
| 2974 | 2971 |
| 2975 ResourceHostMsg_RequestResource second_transfer_request_msg( | 2972 ResourceHostMsg_RequestResource second_transfer_request_msg( |
| 2976 new_render_view_id, new_second_request_id, second_request); | 2973 new_render_view_id, new_second_request_id, second_request); |
| 2977 host_.OnMessageReceived(second_transfer_request_msg, second_filter.get()); | 2974 host_.OnMessageReceived(second_transfer_request_msg, second_filter.get()); |
| 2978 base::MessageLoop::current()->RunUntilIdle(); | 2975 base::MessageLoop::current()->RunUntilIdle(); |
| 2979 | 2976 |
| 2980 // Check generated messages. | 2977 // Check generated messages. |
| 2981 ResourceIPCAccumulator::ClassifiedMessages msgs; | 2978 ResourceIPCAccumulator::ClassifiedMessages msgs; |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3035 | 3032 |
| 3036 // Restore, now that we've set up a transfer. | 3033 // Restore, now that we've set up a transfer. |
| 3037 SetBrowserClientForTesting(old_client); | 3034 SetBrowserClientForTesting(old_client); |
| 3038 | 3035 |
| 3039 // This second filter is used to emulate a second process. | 3036 // This second filter is used to emulate a second process. |
| 3040 scoped_refptr<ForwardingFilter> second_filter = MakeForwardingFilter(); | 3037 scoped_refptr<ForwardingFilter> second_filter = MakeForwardingFilter(); |
| 3041 | 3038 |
| 3042 int new_render_view_id = 1; | 3039 int new_render_view_id = 1; |
| 3043 int new_request_id = 2; | 3040 int new_request_id = 2; |
| 3044 | 3041 |
| 3045 ResourceHostMsg_Request request = | 3042 ResourceRequest request = CreateResourceRequest( |
| 3046 CreateResourceRequest("GET", RESOURCE_TYPE_MAIN_FRAME, | 3043 "GET", RESOURCE_TYPE_MAIN_FRAME, GURL("http://other.com/blech")); |
| 3047 GURL("http://other.com/blech")); | |
| 3048 request.transferred_request_child_id = filter_->child_id(); | 3044 request.transferred_request_child_id = filter_->child_id(); |
| 3049 request.transferred_request_request_id = request_id; | 3045 request.transferred_request_request_id = request_id; |
| 3050 | 3046 |
| 3051 ResourceHostMsg_RequestResource transfer_request_msg( | 3047 ResourceHostMsg_RequestResource transfer_request_msg( |
| 3052 new_render_view_id, new_request_id, request); | 3048 new_render_view_id, new_request_id, request); |
| 3053 host_.OnMessageReceived(transfer_request_msg, second_filter.get()); | 3049 host_.OnMessageReceived(transfer_request_msg, second_filter.get()); |
| 3054 base::MessageLoop::current()->RunUntilIdle(); | 3050 base::MessageLoop::current()->RunUntilIdle(); |
| 3055 | 3051 |
| 3056 // Check generated messages. | 3052 // Check generated messages. |
| 3057 ResourceIPCAccumulator::ClassifiedMessages msgs; | 3053 ResourceIPCAccumulator::ClassifiedMessages msgs; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 3087 // Temporarily replace ContentBrowserClient with one that will trigger the | 3083 // Temporarily replace ContentBrowserClient with one that will trigger the |
| 3088 // transfer navigation code paths. | 3084 // transfer navigation code paths. |
| 3089 TransfersAllNavigationsContentBrowserClient new_client; | 3085 TransfersAllNavigationsContentBrowserClient new_client; |
| 3090 ContentBrowserClient* old_client = SetBrowserClientForTesting(&new_client); | 3086 ContentBrowserClient* old_client = SetBrowserClientForTesting(&new_client); |
| 3091 | 3087 |
| 3092 // Create a first filter that can be deleted before the second one starts. | 3088 // Create a first filter that can be deleted before the second one starts. |
| 3093 { | 3089 { |
| 3094 scoped_refptr<ForwardingFilter> first_filter = MakeForwardingFilter(); | 3090 scoped_refptr<ForwardingFilter> first_filter = MakeForwardingFilter(); |
| 3095 first_child_id = first_filter->child_id(); | 3091 first_child_id = first_filter->child_id(); |
| 3096 | 3092 |
| 3097 ResourceHostMsg_Request first_request = | 3093 ResourceRequest first_request = CreateResourceRequest( |
| 3098 CreateResourceRequest("GET", RESOURCE_TYPE_MAIN_FRAME, | 3094 "GET", RESOURCE_TYPE_MAIN_FRAME, GURL("http://example.com/blah")); |
| 3099 GURL("http://example.com/blah")); | |
| 3100 | 3095 |
| 3101 ResourceHostMsg_RequestResource first_request_msg( | 3096 ResourceHostMsg_RequestResource first_request_msg( |
| 3102 render_view_id, request_id, first_request); | 3097 render_view_id, request_id, first_request); |
| 3103 host_.OnMessageReceived(first_request_msg, first_filter.get()); | 3098 host_.OnMessageReceived(first_request_msg, first_filter.get()); |
| 3104 base::MessageLoop::current()->RunUntilIdle(); | 3099 base::MessageLoop::current()->RunUntilIdle(); |
| 3105 | 3100 |
| 3106 // Now that we're blocked on the redirect, update the response and unblock | 3101 // Now that we're blocked on the redirect, update the response and unblock |
| 3107 // by telling the AsyncResourceHandler to follow the redirect. | 3102 // by telling the AsyncResourceHandler to follow the redirect. |
| 3108 SetResponse("HTTP/1.1 200 OK\n" | 3103 SetResponse("HTTP/1.1 200 OK\n" |
| 3109 "Content-Type: text/html\n\n", | 3104 "Content-Type: text/html\n\n", |
| (...skipping 13 matching lines...) Expand all Loading... |
| 3123 | 3118 |
| 3124 // Make sure we don't hold onto the ResourceMessageFilter after it is deleted. | 3119 // Make sure we don't hold onto the ResourceMessageFilter after it is deleted. |
| 3125 GlobalRequestID first_global_request_id(first_child_id, request_id); | 3120 GlobalRequestID first_global_request_id(first_child_id, request_id); |
| 3126 | 3121 |
| 3127 // This second filter is used to emulate a second process. | 3122 // This second filter is used to emulate a second process. |
| 3128 scoped_refptr<ForwardingFilter> second_filter = MakeForwardingFilter(); | 3123 scoped_refptr<ForwardingFilter> second_filter = MakeForwardingFilter(); |
| 3129 | 3124 |
| 3130 int new_render_view_id = 1; | 3125 int new_render_view_id = 1; |
| 3131 int new_request_id = 2; | 3126 int new_request_id = 2; |
| 3132 | 3127 |
| 3133 ResourceHostMsg_Request request = | 3128 ResourceRequest request = CreateResourceRequest( |
| 3134 CreateResourceRequest("GET", RESOURCE_TYPE_MAIN_FRAME, | 3129 "GET", RESOURCE_TYPE_MAIN_FRAME, GURL("http://other.com/blech")); |
| 3135 GURL("http://other.com/blech")); | |
| 3136 request.transferred_request_child_id = first_child_id; | 3130 request.transferred_request_child_id = first_child_id; |
| 3137 request.transferred_request_request_id = request_id; | 3131 request.transferred_request_request_id = request_id; |
| 3138 | 3132 |
| 3139 // For cleanup. | 3133 // For cleanup. |
| 3140 child_ids_.insert(second_filter->child_id()); | 3134 child_ids_.insert(second_filter->child_id()); |
| 3141 ResourceHostMsg_RequestResource transfer_request_msg( | 3135 ResourceHostMsg_RequestResource transfer_request_msg( |
| 3142 new_render_view_id, new_request_id, request); | 3136 new_render_view_id, new_request_id, request); |
| 3143 host_.OnMessageReceived(transfer_request_msg, second_filter.get()); | 3137 host_.OnMessageReceived(transfer_request_msg, second_filter.get()); |
| 3144 base::MessageLoop::current()->RunUntilIdle(); | 3138 base::MessageLoop::current()->RunUntilIdle(); |
| 3145 | 3139 |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3206 | 3200 |
| 3207 // Restore. | 3201 // Restore. |
| 3208 SetBrowserClientForTesting(old_client); | 3202 SetBrowserClientForTesting(old_client); |
| 3209 | 3203 |
| 3210 // This second filter is used to emulate a second process. | 3204 // This second filter is used to emulate a second process. |
| 3211 scoped_refptr<ForwardingFilter> second_filter = MakeForwardingFilter(); | 3205 scoped_refptr<ForwardingFilter> second_filter = MakeForwardingFilter(); |
| 3212 | 3206 |
| 3213 int new_render_view_id = 1; | 3207 int new_render_view_id = 1; |
| 3214 int new_request_id = 2; | 3208 int new_request_id = 2; |
| 3215 | 3209 |
| 3216 ResourceHostMsg_Request request = | 3210 ResourceRequest request = CreateResourceRequest( |
| 3217 CreateResourceRequest("GET", RESOURCE_TYPE_MAIN_FRAME, | 3211 "GET", RESOURCE_TYPE_MAIN_FRAME, GURL("http://other.com/blech")); |
| 3218 GURL("http://other.com/blech")); | |
| 3219 request.transferred_request_child_id = filter_->child_id(); | 3212 request.transferred_request_child_id = filter_->child_id(); |
| 3220 request.transferred_request_request_id = request_id; | 3213 request.transferred_request_request_id = request_id; |
| 3221 | 3214 |
| 3222 // For cleanup. | 3215 // For cleanup. |
| 3223 child_ids_.insert(second_filter->child_id()); | 3216 child_ids_.insert(second_filter->child_id()); |
| 3224 ResourceHostMsg_RequestResource transfer_request_msg( | 3217 ResourceHostMsg_RequestResource transfer_request_msg( |
| 3225 new_render_view_id, new_request_id, request); | 3218 new_render_view_id, new_request_id, request); |
| 3226 host_.OnMessageReceived(transfer_request_msg, second_filter.get()); | 3219 host_.OnMessageReceived(transfer_request_msg, second_filter.get()); |
| 3227 | 3220 |
| 3228 // Verify that we update the ResourceRequestInfo. | 3221 // Verify that we update the ResourceRequestInfo. |
| (...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3513 base::RunLoop().RunUntilIdle(); | 3506 base::RunLoop().RunUntilIdle(); |
| 3514 | 3507 |
| 3515 // The file is no longer readable to the child and has been deleted. | 3508 // The file is no longer readable to the child and has been deleted. |
| 3516 EXPECT_FALSE(ChildProcessSecurityPolicyImpl::GetInstance()->CanReadFile( | 3509 EXPECT_FALSE(ChildProcessSecurityPolicyImpl::GetInstance()->CanReadFile( |
| 3517 filter_->child_id(), file_path)); | 3510 filter_->child_id(), file_path)); |
| 3518 EXPECT_FALSE(base::PathExists(file_path)); | 3511 EXPECT_FALSE(base::PathExists(file_path)); |
| 3519 } | 3512 } |
| 3520 | 3513 |
| 3521 TEST_P(ResourceDispatcherHostTest, DownloadToFile) { | 3514 TEST_P(ResourceDispatcherHostTest, DownloadToFile) { |
| 3522 // Make a request which downloads to file. | 3515 // Make a request which downloads to file. |
| 3523 ResourceHostMsg_Request request = CreateResourceRequest( | 3516 ResourceRequest request = CreateResourceRequest( |
| 3524 "GET", RESOURCE_TYPE_SUB_RESOURCE, net::URLRequestTestJob::test_url_1()); | 3517 "GET", RESOURCE_TYPE_SUB_RESOURCE, net::URLRequestTestJob::test_url_1()); |
| 3525 request.download_to_file = true; | 3518 request.download_to_file = true; |
| 3526 ResourceHostMsg_RequestResource request_msg(0, 1, request); | 3519 ResourceHostMsg_RequestResource request_msg(0, 1, request); |
| 3527 host_.OnMessageReceived(request_msg, filter_.get()); | 3520 host_.OnMessageReceived(request_msg, filter_.get()); |
| 3528 | 3521 |
| 3529 // Running the message loop until idle does not work because | 3522 // Running the message loop until idle does not work because |
| 3530 // RedirectToFileResourceHandler posts things to base::WorkerPool. Instead, | 3523 // RedirectToFileResourceHandler posts things to base::WorkerPool. Instead, |
| 3531 // wait for the ResourceMsg_RequestComplete to go out. Then run the event loop | 3524 // wait for the ResourceMsg_RequestComplete to go out. Then run the event loop |
| 3532 // until idle so the loader is gone. | 3525 // until idle so the loader is gone. |
| 3533 WaitForRequestComplete(); | 3526 WaitForRequestComplete(); |
| (...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3904 return nullptr; | 3897 return nullptr; |
| 3905 } | 3898 } |
| 3906 | 3899 |
| 3907 INSTANTIATE_TEST_CASE_P( | 3900 INSTANTIATE_TEST_CASE_P( |
| 3908 ResourceDispatcherHostTests, | 3901 ResourceDispatcherHostTests, |
| 3909 ResourceDispatcherHostTest, | 3902 ResourceDispatcherHostTest, |
| 3910 testing::Values(TestConfig::kDefault, | 3903 testing::Values(TestConfig::kDefault, |
| 3911 TestConfig::kOptimizeIPCForSmallResourceEnabled)); | 3904 TestConfig::kOptimizeIPCForSmallResourceEnabled)); |
| 3912 | 3905 |
| 3913 } // namespace content | 3906 } // namespace content |
| OLD | NEW |