| 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 <vector> | 5 #include <vector> |
| 6 | 6 |
| 7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
| 10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 | 71 |
| 72 PickleIterator iter(messages[0]); | 72 PickleIterator iter(messages[0]); |
| 73 int request_id; | 73 int request_id; |
| 74 ASSERT_TRUE(IPC::ReadParam(&messages[0], &iter, &request_id)); | 74 ASSERT_TRUE(IPC::ReadParam(&messages[0], &iter, &request_id)); |
| 75 ASSERT_TRUE(IPC::ReadParam(&messages[0], &iter, response_head)); | 75 ASSERT_TRUE(IPC::ReadParam(&messages[0], &iter, response_head)); |
| 76 } | 76 } |
| 77 | 77 |
| 78 void GenerateIPCMessage( | 78 void GenerateIPCMessage( |
| 79 scoped_refptr<ResourceMessageFilter> filter, | 79 scoped_refptr<ResourceMessageFilter> filter, |
| 80 scoped_ptr<IPC::Message> message) { | 80 scoped_ptr<IPC::Message> message) { |
| 81 bool msg_is_ok; | |
| 82 ResourceDispatcherHostImpl::Get()->OnMessageReceived( | 81 ResourceDispatcherHostImpl::Get()->OnMessageReceived( |
| 83 *message, filter.get(), &msg_is_ok); | 82 *message, filter.get()); |
| 84 } | 83 } |
| 85 | 84 |
| 86 // On Windows, ResourceMsg_SetDataBuffer supplies a HANDLE which is not | 85 // On Windows, ResourceMsg_SetDataBuffer supplies a HANDLE which is not |
| 87 // automatically released. | 86 // automatically released. |
| 88 // | 87 // |
| 89 // See ResourceDispatcher::ReleaseResourcesInDataMessage. | 88 // See ResourceDispatcher::ReleaseResourcesInDataMessage. |
| 90 // | 89 // |
| 91 // TODO(davidben): It would be nice if the behavior for base::SharedMemoryHandle | 90 // TODO(davidben): It would be nice if the behavior for base::SharedMemoryHandle |
| 92 // were more like it is in POSIX where the received fds are tracked in a | 91 // were more like it is in POSIX where the received fds are tracked in a |
| 93 // ref-counted core that closes them if not extracted. | 92 // ref-counted core that closes them if not extracted. |
| (...skipping 826 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 920 | 919 |
| 921 void ResourceDispatcherHostTest::MakeTestRequestWithResourceType( | 920 void ResourceDispatcherHostTest::MakeTestRequestWithResourceType( |
| 922 ResourceMessageFilter* filter, | 921 ResourceMessageFilter* filter, |
| 923 int render_view_id, | 922 int render_view_id, |
| 924 int request_id, | 923 int request_id, |
| 925 const GURL& url, | 924 const GURL& url, |
| 926 ResourceType::Type type) { | 925 ResourceType::Type type) { |
| 927 ResourceHostMsg_Request request = | 926 ResourceHostMsg_Request request = |
| 928 CreateResourceRequest("GET", type, url); | 927 CreateResourceRequest("GET", type, url); |
| 929 ResourceHostMsg_RequestResource msg(render_view_id, request_id, request); | 928 ResourceHostMsg_RequestResource msg(render_view_id, request_id, request); |
| 930 bool msg_was_ok; | 929 host_.OnMessageReceived(msg, filter); |
| 931 host_.OnMessageReceived(msg, filter, &msg_was_ok); | |
| 932 KickOffRequest(); | 930 KickOffRequest(); |
| 933 } | 931 } |
| 934 | 932 |
| 935 void ResourceDispatcherHostTest::CancelRequest(int request_id) { | 933 void ResourceDispatcherHostTest::CancelRequest(int request_id) { |
| 936 host_.CancelRequest(filter_->child_id(), request_id); | 934 host_.CancelRequest(filter_->child_id(), request_id); |
| 937 } | 935 } |
| 938 | 936 |
| 939 void ResourceDispatcherHostTest::CompleteStartRequest(int request_id) { | 937 void ResourceDispatcherHostTest::CompleteStartRequest(int request_id) { |
| 940 CompleteStartRequest(filter_.get(), request_id); | 938 CompleteStartRequest(filter_.get(), request_id); |
| 941 } | 939 } |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1061 MakeTestRequest(0, 1, net::URLRequestTestJob::test_url_1()); | 1059 MakeTestRequest(0, 1, net::URLRequestTestJob::test_url_1()); |
| 1062 MakeTestRequest(0, 2, net::URLRequestTestJob::test_url_2()); | 1060 MakeTestRequest(0, 2, net::URLRequestTestJob::test_url_2()); |
| 1063 MakeTestRequest(0, 3, net::URLRequestTestJob::test_url_3()); | 1061 MakeTestRequest(0, 3, net::URLRequestTestJob::test_url_3()); |
| 1064 MakeTestRequestWithResourceType(filter_.get(), 0, 4, | 1062 MakeTestRequestWithResourceType(filter_.get(), 0, 4, |
| 1065 net::URLRequestTestJob::test_url_4(), | 1063 net::URLRequestTestJob::test_url_4(), |
| 1066 ResourceType::PREFETCH); // detachable type | 1064 ResourceType::PREFETCH); // detachable type |
| 1067 MakeTestRequest(0, 5, net::URLRequestTestJob::test_url_redirect_to_url_2()); | 1065 MakeTestRequest(0, 5, net::URLRequestTestJob::test_url_redirect_to_url_2()); |
| 1068 | 1066 |
| 1069 // Finish the redirection | 1067 // Finish the redirection |
| 1070 ResourceHostMsg_FollowRedirect redirect_msg(5); | 1068 ResourceHostMsg_FollowRedirect redirect_msg(5); |
| 1071 bool msg_was_ok; | 1069 host_.OnMessageReceived(redirect_msg, filter_.get()); |
| 1072 host_.OnMessageReceived(redirect_msg, filter_.get(), &msg_was_ok); | |
| 1073 base::MessageLoop::current()->RunUntilIdle(); | 1070 base::MessageLoop::current()->RunUntilIdle(); |
| 1074 | 1071 |
| 1075 // flush all the pending requests | 1072 // flush all the pending requests |
| 1076 while (net::URLRequestTestJob::ProcessOnePendingMessage()) {} | 1073 while (net::URLRequestTestJob::ProcessOnePendingMessage()) {} |
| 1077 | 1074 |
| 1078 // sorts out all the messages we saw by request | 1075 // sorts out all the messages we saw by request |
| 1079 ResourceIPCAccumulator::ClassifiedMessages msgs; | 1076 ResourceIPCAccumulator::ClassifiedMessages msgs; |
| 1080 accum_.GetClassifiedMessages(&msgs); | 1077 accum_.GetClassifiedMessages(&msgs); |
| 1081 | 1078 |
| 1082 // there are five requests, so we should have gotten them classified as such | 1079 // there are five requests, so we should have gotten them classified as such |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1188 | 1185 |
| 1189 // If the filter has disappeared then detachable resources should continue to | 1186 // If the filter has disappeared then detachable resources should continue to |
| 1190 // load. | 1187 // load. |
| 1191 TEST_F(ResourceDispatcherHostTest, DeletedFilterDetached) { | 1188 TEST_F(ResourceDispatcherHostTest, DeletedFilterDetached) { |
| 1192 // test_url_1's data is available synchronously, so use 2 and 3. | 1189 // test_url_1's data is available synchronously, so use 2 and 3. |
| 1193 ResourceHostMsg_Request request_prefetch = CreateResourceRequest( | 1190 ResourceHostMsg_Request request_prefetch = CreateResourceRequest( |
| 1194 "GET", ResourceType::PREFETCH, net::URLRequestTestJob::test_url_2()); | 1191 "GET", ResourceType::PREFETCH, net::URLRequestTestJob::test_url_2()); |
| 1195 ResourceHostMsg_Request request_ping = CreateResourceRequest( | 1192 ResourceHostMsg_Request request_ping = CreateResourceRequest( |
| 1196 "GET", ResourceType::PING, net::URLRequestTestJob::test_url_3()); | 1193 "GET", ResourceType::PING, net::URLRequestTestJob::test_url_3()); |
| 1197 | 1194 |
| 1198 bool msg_was_ok; | |
| 1199 ResourceHostMsg_RequestResource msg_prefetch(0, 1, request_prefetch); | 1195 ResourceHostMsg_RequestResource msg_prefetch(0, 1, request_prefetch); |
| 1200 host_.OnMessageReceived(msg_prefetch, filter_, &msg_was_ok); | 1196 host_.OnMessageReceived(msg_prefetch, filter_); |
| 1201 ResourceHostMsg_RequestResource msg_ping(0, 2, request_ping); | 1197 ResourceHostMsg_RequestResource msg_ping(0, 2, request_ping); |
| 1202 host_.OnMessageReceived(msg_ping, filter_, &msg_was_ok); | 1198 host_.OnMessageReceived(msg_ping, filter_); |
| 1203 | 1199 |
| 1204 // Remove the filter before processing the requests by simulating channel | 1200 // Remove the filter before processing the requests by simulating channel |
| 1205 // closure. | 1201 // closure. |
| 1206 ResourceRequestInfoImpl* info_prefetch = ResourceRequestInfoImpl::ForRequest( | 1202 ResourceRequestInfoImpl* info_prefetch = ResourceRequestInfoImpl::ForRequest( |
| 1207 host_.GetURLRequest(GlobalRequestID(filter_->child_id(), 1))); | 1203 host_.GetURLRequest(GlobalRequestID(filter_->child_id(), 1))); |
| 1208 ResourceRequestInfoImpl* info_ping = ResourceRequestInfoImpl::ForRequest( | 1204 ResourceRequestInfoImpl* info_ping = ResourceRequestInfoImpl::ForRequest( |
| 1209 host_.GetURLRequest(GlobalRequestID(filter_->child_id(), 2))); | 1205 host_.GetURLRequest(GlobalRequestID(filter_->child_id(), 2))); |
| 1210 DCHECK_EQ(filter_.get(), info_prefetch->filter()); | 1206 DCHECK_EQ(filter_.get(), info_prefetch->filter()); |
| 1211 DCHECK_EQ(filter_.get(), info_ping->filter()); | 1207 DCHECK_EQ(filter_.get(), info_ping->filter()); |
| 1212 filter_->OnChannelClosing(); | 1208 filter_->OnChannelClosing(); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1240 } | 1236 } |
| 1241 | 1237 |
| 1242 // If the filter has disappeared (original process dies) then detachable | 1238 // If the filter has disappeared (original process dies) then detachable |
| 1243 // resources should continue to load, even when redirected. | 1239 // resources should continue to load, even when redirected. |
| 1244 TEST_F(ResourceDispatcherHostTest, DeletedFilterDetachedRedirect) { | 1240 TEST_F(ResourceDispatcherHostTest, DeletedFilterDetachedRedirect) { |
| 1245 ResourceHostMsg_Request request = CreateResourceRequest( | 1241 ResourceHostMsg_Request request = CreateResourceRequest( |
| 1246 "GET", ResourceType::PREFETCH, | 1242 "GET", ResourceType::PREFETCH, |
| 1247 net::URLRequestTestJob::test_url_redirect_to_url_2()); | 1243 net::URLRequestTestJob::test_url_redirect_to_url_2()); |
| 1248 | 1244 |
| 1249 ResourceHostMsg_RequestResource msg(0, 1, request); | 1245 ResourceHostMsg_RequestResource msg(0, 1, request); |
| 1250 bool msg_was_ok; | 1246 host_.OnMessageReceived(msg, filter_); |
| 1251 host_.OnMessageReceived(msg, filter_, &msg_was_ok); | |
| 1252 | 1247 |
| 1253 // Remove the filter before processing the request by simulating channel | 1248 // Remove the filter before processing the request by simulating channel |
| 1254 // closure. | 1249 // closure. |
| 1255 GlobalRequestID global_request_id(filter_->child_id(), 1); | 1250 GlobalRequestID global_request_id(filter_->child_id(), 1); |
| 1256 ResourceRequestInfoImpl* info = ResourceRequestInfoImpl::ForRequest( | 1251 ResourceRequestInfoImpl* info = ResourceRequestInfoImpl::ForRequest( |
| 1257 host_.GetURLRequest(global_request_id)); | 1252 host_.GetURLRequest(global_request_id)); |
| 1258 info->filter_->OnChannelClosing(); | 1253 info->filter_->OnChannelClosing(); |
| 1259 info->filter_.reset(); | 1254 info->filter_.reset(); |
| 1260 | 1255 |
| 1261 // From the renderer's perspective, the request was cancelled. | 1256 // From the renderer's perspective, the request was cancelled. |
| (...skipping 854 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2116 | 2111 |
| 2117 MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id, | 2112 MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id, |
| 2118 GURL("http://example.com/blah"), | 2113 GURL("http://example.com/blah"), |
| 2119 ResourceType::MAIN_FRAME); | 2114 ResourceType::MAIN_FRAME); |
| 2120 // Return some data so that the request is identified as a download | 2115 // Return some data so that the request is identified as a download |
| 2121 // and the proper resource handlers are created. | 2116 // and the proper resource handlers are created. |
| 2122 EXPECT_TRUE(net::URLRequestTestJob::ProcessOnePendingMessage()); | 2117 EXPECT_TRUE(net::URLRequestTestJob::ProcessOnePendingMessage()); |
| 2123 | 2118 |
| 2124 // And now simulate a cancellation coming from the renderer. | 2119 // And now simulate a cancellation coming from the renderer. |
| 2125 ResourceHostMsg_CancelRequest msg(request_id); | 2120 ResourceHostMsg_CancelRequest msg(request_id); |
| 2126 bool msg_was_ok; | 2121 host_.OnMessageReceived(msg, filter_.get()); |
| 2127 host_.OnMessageReceived(msg, filter_.get(), &msg_was_ok); | |
| 2128 | 2122 |
| 2129 // Since the request had already started processing as a download, | 2123 // Since the request had already started processing as a download, |
| 2130 // the cancellation above should have been ignored and the request | 2124 // the cancellation above should have been ignored and the request |
| 2131 // should still be alive. | 2125 // should still be alive. |
| 2132 EXPECT_EQ(1, host_.pending_requests()); | 2126 EXPECT_EQ(1, host_.pending_requests()); |
| 2133 | 2127 |
| 2134 while (net::URLRequestTestJob::ProcessOnePendingMessage()) {} | 2128 while (net::URLRequestTestJob::ProcessOnePendingMessage()) {} |
| 2135 } | 2129 } |
| 2136 | 2130 |
| 2137 TEST_F(ResourceDispatcherHostTest, CancelRequestsForContext) { | 2131 TEST_F(ResourceDispatcherHostTest, CancelRequestsForContext) { |
| (...skipping 14 matching lines...) Expand all Loading... |
| 2152 | 2146 |
| 2153 MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id, | 2147 MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id, |
| 2154 GURL("http://example.com/blah"), | 2148 GURL("http://example.com/blah"), |
| 2155 ResourceType::MAIN_FRAME); | 2149 ResourceType::MAIN_FRAME); |
| 2156 // Return some data so that the request is identified as a download | 2150 // Return some data so that the request is identified as a download |
| 2157 // and the proper resource handlers are created. | 2151 // and the proper resource handlers are created. |
| 2158 EXPECT_TRUE(net::URLRequestTestJob::ProcessOnePendingMessage()); | 2152 EXPECT_TRUE(net::URLRequestTestJob::ProcessOnePendingMessage()); |
| 2159 | 2153 |
| 2160 // And now simulate a cancellation coming from the renderer. | 2154 // And now simulate a cancellation coming from the renderer. |
| 2161 ResourceHostMsg_CancelRequest msg(request_id); | 2155 ResourceHostMsg_CancelRequest msg(request_id); |
| 2162 bool msg_was_ok; | 2156 host_.OnMessageReceived(msg, filter_.get()); |
| 2163 host_.OnMessageReceived(msg, filter_.get(), &msg_was_ok); | |
| 2164 | 2157 |
| 2165 // Since the request had already started processing as a download, | 2158 // Since the request had already started processing as a download, |
| 2166 // the cancellation above should have been ignored and the request | 2159 // the cancellation above should have been ignored and the request |
| 2167 // should still be alive. | 2160 // should still be alive. |
| 2168 EXPECT_EQ(1, host_.pending_requests()); | 2161 EXPECT_EQ(1, host_.pending_requests()); |
| 2169 | 2162 |
| 2170 // Cancelling by other methods shouldn't work either. | 2163 // Cancelling by other methods shouldn't work either. |
| 2171 host_.CancelRequestsForProcess(render_view_id); | 2164 host_.CancelRequestsForProcess(render_view_id); |
| 2172 EXPECT_EQ(1, host_.pending_requests()); | 2165 EXPECT_EQ(1, host_.pending_requests()); |
| 2173 | 2166 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2221 MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id, | 2214 MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id, |
| 2222 GURL("http://example.com/blah"), | 2215 GURL("http://example.com/blah"), |
| 2223 ResourceType::MAIN_FRAME); | 2216 ResourceType::MAIN_FRAME); |
| 2224 | 2217 |
| 2225 | 2218 |
| 2226 GlobalRequestID global_request_id(filter_->child_id(), request_id); | 2219 GlobalRequestID global_request_id(filter_->child_id(), request_id); |
| 2227 host_.MarkAsTransferredNavigation(global_request_id); | 2220 host_.MarkAsTransferredNavigation(global_request_id); |
| 2228 | 2221 |
| 2229 // And now simulate a cancellation coming from the renderer. | 2222 // And now simulate a cancellation coming from the renderer. |
| 2230 ResourceHostMsg_CancelRequest msg(request_id); | 2223 ResourceHostMsg_CancelRequest msg(request_id); |
| 2231 bool msg_was_ok; | 2224 host_.OnMessageReceived(msg, filter_.get()); |
| 2232 host_.OnMessageReceived(msg, filter_.get(), &msg_was_ok); | |
| 2233 | 2225 |
| 2234 // Since the request is marked as being transferred, | 2226 // Since the request is marked as being transferred, |
| 2235 // the cancellation above should have been ignored and the request | 2227 // the cancellation above should have been ignored and the request |
| 2236 // should still be alive. | 2228 // should still be alive. |
| 2237 EXPECT_EQ(1, host_.pending_requests()); | 2229 EXPECT_EQ(1, host_.pending_requests()); |
| 2238 | 2230 |
| 2239 // Cancelling by other methods shouldn't work either. | 2231 // Cancelling by other methods shouldn't work either. |
| 2240 host_.CancelRequestsForProcess(render_view_id); | 2232 host_.CancelRequestsForProcess(render_view_id); |
| 2241 EXPECT_EQ(1, host_.pending_requests()); | 2233 EXPECT_EQ(1, host_.pending_requests()); |
| 2242 | 2234 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 2272 GURL("http://example.com/blah"), | 2264 GURL("http://example.com/blah"), |
| 2273 ResourceType::MAIN_FRAME); | 2265 ResourceType::MAIN_FRAME); |
| 2274 | 2266 |
| 2275 // Now that we're blocked on the redirect, update the response and unblock by | 2267 // Now that we're blocked on the redirect, update the response and unblock by |
| 2276 // telling the AsyncResourceHandler to follow the redirect. | 2268 // telling the AsyncResourceHandler to follow the redirect. |
| 2277 const std::string kResponseBody = "hello world"; | 2269 const std::string kResponseBody = "hello world"; |
| 2278 SetResponse("HTTP/1.1 200 OK\n" | 2270 SetResponse("HTTP/1.1 200 OK\n" |
| 2279 "Content-Type: text/html\n\n", | 2271 "Content-Type: text/html\n\n", |
| 2280 kResponseBody); | 2272 kResponseBody); |
| 2281 ResourceHostMsg_FollowRedirect redirect_msg(request_id); | 2273 ResourceHostMsg_FollowRedirect redirect_msg(request_id); |
| 2282 bool msg_was_ok; | 2274 host_.OnMessageReceived(redirect_msg, filter_.get()); |
| 2283 host_.OnMessageReceived(redirect_msg, filter_.get(), &msg_was_ok); | |
| 2284 base::MessageLoop::current()->RunUntilIdle(); | 2275 base::MessageLoop::current()->RunUntilIdle(); |
| 2285 | 2276 |
| 2286 // Flush all the pending requests to get the response through the | 2277 // Flush all the pending requests to get the response through the |
| 2287 // BufferedResourceHandler. | 2278 // BufferedResourceHandler. |
| 2288 while (net::URLRequestTestJob::ProcessOnePendingMessage()) {} | 2279 while (net::URLRequestTestJob::ProcessOnePendingMessage()) {} |
| 2289 | 2280 |
| 2290 // Restore, now that we've set up a transfer. | 2281 // Restore, now that we've set up a transfer. |
| 2291 SetBrowserClientForTesting(old_client); | 2282 SetBrowserClientForTesting(old_client); |
| 2292 | 2283 |
| 2293 // This second filter is used to emulate a second process. | 2284 // This second filter is used to emulate a second process. |
| 2294 scoped_refptr<ForwardingFilter> second_filter = MakeForwardingFilter(); | 2285 scoped_refptr<ForwardingFilter> second_filter = MakeForwardingFilter(); |
| 2295 | 2286 |
| 2296 int new_render_view_id = 1; | 2287 int new_render_view_id = 1; |
| 2297 int new_request_id = 2; | 2288 int new_request_id = 2; |
| 2298 | 2289 |
| 2299 ResourceHostMsg_Request request = | 2290 ResourceHostMsg_Request request = |
| 2300 CreateResourceRequest("GET", ResourceType::MAIN_FRAME, | 2291 CreateResourceRequest("GET", ResourceType::MAIN_FRAME, |
| 2301 GURL("http://other.com/blech")); | 2292 GURL("http://other.com/blech")); |
| 2302 request.transferred_request_child_id = filter_->child_id(); | 2293 request.transferred_request_child_id = filter_->child_id(); |
| 2303 request.transferred_request_request_id = request_id; | 2294 request.transferred_request_request_id = request_id; |
| 2304 | 2295 |
| 2305 ResourceHostMsg_RequestResource transfer_request_msg( | 2296 ResourceHostMsg_RequestResource transfer_request_msg( |
| 2306 new_render_view_id, new_request_id, request); | 2297 new_render_view_id, new_request_id, request); |
| 2307 host_.OnMessageReceived( | 2298 host_.OnMessageReceived(transfer_request_msg, second_filter.get()); |
| 2308 transfer_request_msg, second_filter.get(), &msg_was_ok); | |
| 2309 base::MessageLoop::current()->RunUntilIdle(); | 2299 base::MessageLoop::current()->RunUntilIdle(); |
| 2310 | 2300 |
| 2311 // Check generated messages. | 2301 // Check generated messages. |
| 2312 ResourceIPCAccumulator::ClassifiedMessages msgs; | 2302 ResourceIPCAccumulator::ClassifiedMessages msgs; |
| 2313 accum_.GetClassifiedMessages(&msgs); | 2303 accum_.GetClassifiedMessages(&msgs); |
| 2314 | 2304 |
| 2315 ASSERT_EQ(2U, msgs.size()); | 2305 ASSERT_EQ(2U, msgs.size()); |
| 2316 EXPECT_EQ(ResourceMsg_ReceivedRedirect::ID, msgs[0][0].type()); | 2306 EXPECT_EQ(ResourceMsg_ReceivedRedirect::ID, msgs[0][0].type()); |
| 2317 CheckSuccessfulRequest(msgs[1], kResponseBody); | 2307 CheckSuccessfulRequest(msgs[1], kResponseBody); |
| 2318 } | 2308 } |
| (...skipping 28 matching lines...) Expand all Loading... |
| 2347 | 2337 |
| 2348 // Now that we're blocked on the redirect, update the response and unblock by | 2338 // Now that we're blocked on the redirect, update the response and unblock by |
| 2349 // telling the AsyncResourceHandler to follow the redirect. Use a text/plain | 2339 // telling the AsyncResourceHandler to follow the redirect. Use a text/plain |
| 2350 // MIME type, which causes BufferedResourceHandler to buffer it before the | 2340 // MIME type, which causes BufferedResourceHandler to buffer it before the |
| 2351 // transfer occurs. | 2341 // transfer occurs. |
| 2352 const std::string kResponseBody = "hello world"; | 2342 const std::string kResponseBody = "hello world"; |
| 2353 SetResponse("HTTP/1.1 200 OK\n" | 2343 SetResponse("HTTP/1.1 200 OK\n" |
| 2354 "Content-Type: text/plain\n\n", | 2344 "Content-Type: text/plain\n\n", |
| 2355 kResponseBody); | 2345 kResponseBody); |
| 2356 ResourceHostMsg_FollowRedirect redirect_msg(request_id); | 2346 ResourceHostMsg_FollowRedirect redirect_msg(request_id); |
| 2357 bool msg_was_ok; | 2347 host_.OnMessageReceived(redirect_msg, filter_.get()); |
| 2358 host_.OnMessageReceived(redirect_msg, filter_.get(), &msg_was_ok); | |
| 2359 base::MessageLoop::current()->RunUntilIdle(); | 2348 base::MessageLoop::current()->RunUntilIdle(); |
| 2360 | 2349 |
| 2361 // Flush all the pending requests to get the response through the | 2350 // Flush all the pending requests to get the response through the |
| 2362 // BufferedResourceHandler. | 2351 // BufferedResourceHandler. |
| 2363 while (net::URLRequestTestJob::ProcessOnePendingMessage()) {} | 2352 while (net::URLRequestTestJob::ProcessOnePendingMessage()) {} |
| 2364 | 2353 |
| 2365 // Restore, now that we've set up a transfer. | 2354 // Restore, now that we've set up a transfer. |
| 2366 SetBrowserClientForTesting(old_client); | 2355 SetBrowserClientForTesting(old_client); |
| 2367 | 2356 |
| 2368 // This second filter is used to emulate a second process. | 2357 // This second filter is used to emulate a second process. |
| 2369 scoped_refptr<ForwardingFilter> second_filter = MakeForwardingFilter(); | 2358 scoped_refptr<ForwardingFilter> second_filter = MakeForwardingFilter(); |
| 2370 | 2359 |
| 2371 int new_render_view_id = 1; | 2360 int new_render_view_id = 1; |
| 2372 int new_request_id = 2; | 2361 int new_request_id = 2; |
| 2373 | 2362 |
| 2374 ResourceHostMsg_Request request = | 2363 ResourceHostMsg_Request request = |
| 2375 CreateResourceRequest("GET", ResourceType::MAIN_FRAME, | 2364 CreateResourceRequest("GET", ResourceType::MAIN_FRAME, |
| 2376 GURL("http://other.com/blech")); | 2365 GURL("http://other.com/blech")); |
| 2377 request.transferred_request_child_id = filter_->child_id(); | 2366 request.transferred_request_child_id = filter_->child_id(); |
| 2378 request.transferred_request_request_id = request_id; | 2367 request.transferred_request_request_id = request_id; |
| 2379 | 2368 |
| 2380 ResourceHostMsg_RequestResource transfer_request_msg( | 2369 ResourceHostMsg_RequestResource transfer_request_msg( |
| 2381 new_render_view_id, new_request_id, request); | 2370 new_render_view_id, new_request_id, request); |
| 2382 host_.OnMessageReceived( | 2371 host_.OnMessageReceived(transfer_request_msg, second_filter.get()); |
| 2383 transfer_request_msg, second_filter.get(), &msg_was_ok); | |
| 2384 base::MessageLoop::current()->RunUntilIdle(); | 2372 base::MessageLoop::current()->RunUntilIdle(); |
| 2385 | 2373 |
| 2386 // Check generated messages. | 2374 // Check generated messages. |
| 2387 ResourceIPCAccumulator::ClassifiedMessages msgs; | 2375 ResourceIPCAccumulator::ClassifiedMessages msgs; |
| 2388 accum_.GetClassifiedMessages(&msgs); | 2376 accum_.GetClassifiedMessages(&msgs); |
| 2389 | 2377 |
| 2390 ASSERT_EQ(2U, msgs.size()); | 2378 ASSERT_EQ(2U, msgs.size()); |
| 2391 EXPECT_EQ(ResourceMsg_ReceivedRedirect::ID, msgs[0][0].type()); | 2379 EXPECT_EQ(ResourceMsg_ReceivedRedirect::ID, msgs[0][0].type()); |
| 2392 CheckSuccessfulRequest(msgs[1], kResponseBody); | 2380 CheckSuccessfulRequest(msgs[1], kResponseBody); |
| 2393 } | 2381 } |
| (...skipping 25 matching lines...) Expand all Loading... |
| 2419 { | 2407 { |
| 2420 scoped_refptr<ForwardingFilter> first_filter = MakeForwardingFilter(); | 2408 scoped_refptr<ForwardingFilter> first_filter = MakeForwardingFilter(); |
| 2421 first_child_id = first_filter->child_id(); | 2409 first_child_id = first_filter->child_id(); |
| 2422 | 2410 |
| 2423 ResourceHostMsg_Request first_request = | 2411 ResourceHostMsg_Request first_request = |
| 2424 CreateResourceRequest("GET", ResourceType::MAIN_FRAME, | 2412 CreateResourceRequest("GET", ResourceType::MAIN_FRAME, |
| 2425 GURL("http://example.com/blah")); | 2413 GURL("http://example.com/blah")); |
| 2426 | 2414 |
| 2427 ResourceHostMsg_RequestResource first_request_msg( | 2415 ResourceHostMsg_RequestResource first_request_msg( |
| 2428 render_view_id, request_id, first_request); | 2416 render_view_id, request_id, first_request); |
| 2429 bool msg_was_ok; | 2417 host_.OnMessageReceived(first_request_msg, first_filter.get()); |
| 2430 host_.OnMessageReceived( | |
| 2431 first_request_msg, first_filter.get(), &msg_was_ok); | |
| 2432 base::MessageLoop::current()->RunUntilIdle(); | 2418 base::MessageLoop::current()->RunUntilIdle(); |
| 2433 | 2419 |
| 2434 // Now that we're blocked on the redirect, update the response and unblock | 2420 // Now that we're blocked on the redirect, update the response and unblock |
| 2435 // by telling the AsyncResourceHandler to follow the redirect. | 2421 // by telling the AsyncResourceHandler to follow the redirect. |
| 2436 SetResponse("HTTP/1.1 200 OK\n" | 2422 SetResponse("HTTP/1.1 200 OK\n" |
| 2437 "Content-Type: text/html\n\n", | 2423 "Content-Type: text/html\n\n", |
| 2438 kResponseBody); | 2424 kResponseBody); |
| 2439 ResourceHostMsg_FollowRedirect redirect_msg(request_id); | 2425 ResourceHostMsg_FollowRedirect redirect_msg(request_id); |
| 2440 host_.OnMessageReceived(redirect_msg, first_filter.get(), &msg_was_ok); | 2426 host_.OnMessageReceived(redirect_msg, first_filter.get()); |
| 2441 base::MessageLoop::current()->RunUntilIdle(); | 2427 base::MessageLoop::current()->RunUntilIdle(); |
| 2442 | 2428 |
| 2443 // Flush all the pending requests to get the response through the | 2429 // Flush all the pending requests to get the response through the |
| 2444 // BufferedResourceHandler. | 2430 // BufferedResourceHandler. |
| 2445 while (net::URLRequestTestJob::ProcessOnePendingMessage()) {} | 2431 while (net::URLRequestTestJob::ProcessOnePendingMessage()) {} |
| 2446 } | 2432 } |
| 2447 // The first filter is now deleted, as if the child process died. | 2433 // The first filter is now deleted, as if the child process died. |
| 2448 | 2434 |
| 2449 // Restore. | 2435 // Restore. |
| 2450 SetBrowserClientForTesting(old_client); | 2436 SetBrowserClientForTesting(old_client); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 2461 ResourceHostMsg_Request request = | 2447 ResourceHostMsg_Request request = |
| 2462 CreateResourceRequest("GET", ResourceType::MAIN_FRAME, | 2448 CreateResourceRequest("GET", ResourceType::MAIN_FRAME, |
| 2463 GURL("http://other.com/blech")); | 2449 GURL("http://other.com/blech")); |
| 2464 request.transferred_request_child_id = first_child_id; | 2450 request.transferred_request_child_id = first_child_id; |
| 2465 request.transferred_request_request_id = request_id; | 2451 request.transferred_request_request_id = request_id; |
| 2466 | 2452 |
| 2467 // For cleanup. | 2453 // For cleanup. |
| 2468 child_ids_.insert(second_filter->child_id()); | 2454 child_ids_.insert(second_filter->child_id()); |
| 2469 ResourceHostMsg_RequestResource transfer_request_msg( | 2455 ResourceHostMsg_RequestResource transfer_request_msg( |
| 2470 new_render_view_id, new_request_id, request); | 2456 new_render_view_id, new_request_id, request); |
| 2471 bool msg_was_ok; | 2457 host_.OnMessageReceived(transfer_request_msg, second_filter.get()); |
| 2472 host_.OnMessageReceived( | |
| 2473 transfer_request_msg, second_filter.get(), &msg_was_ok); | |
| 2474 base::MessageLoop::current()->RunUntilIdle(); | 2458 base::MessageLoop::current()->RunUntilIdle(); |
| 2475 | 2459 |
| 2476 // Check generated messages. | 2460 // Check generated messages. |
| 2477 ResourceIPCAccumulator::ClassifiedMessages msgs; | 2461 ResourceIPCAccumulator::ClassifiedMessages msgs; |
| 2478 accum_.GetClassifiedMessages(&msgs); | 2462 accum_.GetClassifiedMessages(&msgs); |
| 2479 | 2463 |
| 2480 ASSERT_EQ(2U, msgs.size()); | 2464 ASSERT_EQ(2U, msgs.size()); |
| 2481 EXPECT_EQ(ResourceMsg_ReceivedRedirect::ID, msgs[0][0].type()); | 2465 EXPECT_EQ(ResourceMsg_ReceivedRedirect::ID, msgs[0][0].type()); |
| 2482 CheckSuccessfulRequest(msgs[1], kResponseBody); | 2466 CheckSuccessfulRequest(msgs[1], kResponseBody); |
| 2483 } | 2467 } |
| (...skipping 20 matching lines...) Expand all Loading... |
| 2504 ContentBrowserClient* old_client = SetBrowserClientForTesting(&new_client); | 2488 ContentBrowserClient* old_client = SetBrowserClientForTesting(&new_client); |
| 2505 | 2489 |
| 2506 MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id, | 2490 MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id, |
| 2507 GURL("http://example.com/blah"), | 2491 GURL("http://example.com/blah"), |
| 2508 ResourceType::MAIN_FRAME); | 2492 ResourceType::MAIN_FRAME); |
| 2509 | 2493 |
| 2510 // Now that we're blocked on the redirect, simulate hitting another redirect. | 2494 // Now that we're blocked on the redirect, simulate hitting another redirect. |
| 2511 SetResponse("HTTP/1.1 302 Found\n" | 2495 SetResponse("HTTP/1.1 302 Found\n" |
| 2512 "Location: http://other.com/blerg\n\n"); | 2496 "Location: http://other.com/blerg\n\n"); |
| 2513 ResourceHostMsg_FollowRedirect redirect_msg(request_id); | 2497 ResourceHostMsg_FollowRedirect redirect_msg(request_id); |
| 2514 bool msg_was_ok; | 2498 host_.OnMessageReceived(redirect_msg, filter_.get()); |
| 2515 host_.OnMessageReceived(redirect_msg, filter_.get(), &msg_was_ok); | |
| 2516 base::MessageLoop::current()->RunUntilIdle(); | 2499 base::MessageLoop::current()->RunUntilIdle(); |
| 2517 | 2500 |
| 2518 // Now that we're blocked on the second redirect, update the response and | 2501 // Now that we're blocked on the second redirect, update the response and |
| 2519 // unblock by telling the AsyncResourceHandler to follow the redirect. | 2502 // unblock by telling the AsyncResourceHandler to follow the redirect. |
| 2520 // Again, use text/plain to force BufferedResourceHandler to buffer before | 2503 // Again, use text/plain to force BufferedResourceHandler to buffer before |
| 2521 // the transfer. | 2504 // the transfer. |
| 2522 const std::string kResponseBody = "hello world"; | 2505 const std::string kResponseBody = "hello world"; |
| 2523 SetResponse("HTTP/1.1 200 OK\n" | 2506 SetResponse("HTTP/1.1 200 OK\n" |
| 2524 "Content-Type: text/plain\n\n", | 2507 "Content-Type: text/plain\n\n", |
| 2525 kResponseBody); | 2508 kResponseBody); |
| 2526 ResourceHostMsg_FollowRedirect redirect_msg2(request_id); | 2509 ResourceHostMsg_FollowRedirect redirect_msg2(request_id); |
| 2527 host_.OnMessageReceived(redirect_msg2, filter_.get(), &msg_was_ok); | 2510 host_.OnMessageReceived(redirect_msg2, filter_.get()); |
| 2528 base::MessageLoop::current()->RunUntilIdle(); | 2511 base::MessageLoop::current()->RunUntilIdle(); |
| 2529 | 2512 |
| 2530 // Flush all the pending requests to get the response through the | 2513 // Flush all the pending requests to get the response through the |
| 2531 // BufferedResourceHandler. | 2514 // BufferedResourceHandler. |
| 2532 while (net::URLRequestTestJob::ProcessOnePendingMessage()) {} | 2515 while (net::URLRequestTestJob::ProcessOnePendingMessage()) {} |
| 2533 | 2516 |
| 2534 // Restore. | 2517 // Restore. |
| 2535 SetBrowserClientForTesting(old_client); | 2518 SetBrowserClientForTesting(old_client); |
| 2536 | 2519 |
| 2537 // This second filter is used to emulate a second process. | 2520 // This second filter is used to emulate a second process. |
| 2538 scoped_refptr<ForwardingFilter> second_filter = MakeForwardingFilter(); | 2521 scoped_refptr<ForwardingFilter> second_filter = MakeForwardingFilter(); |
| 2539 | 2522 |
| 2540 int new_render_view_id = 1; | 2523 int new_render_view_id = 1; |
| 2541 int new_request_id = 2; | 2524 int new_request_id = 2; |
| 2542 | 2525 |
| 2543 ResourceHostMsg_Request request = | 2526 ResourceHostMsg_Request request = |
| 2544 CreateResourceRequest("GET", ResourceType::MAIN_FRAME, | 2527 CreateResourceRequest("GET", ResourceType::MAIN_FRAME, |
| 2545 GURL("http://other.com/blech")); | 2528 GURL("http://other.com/blech")); |
| 2546 request.transferred_request_child_id = filter_->child_id(); | 2529 request.transferred_request_child_id = filter_->child_id(); |
| 2547 request.transferred_request_request_id = request_id; | 2530 request.transferred_request_request_id = request_id; |
| 2548 | 2531 |
| 2549 // For cleanup. | 2532 // For cleanup. |
| 2550 child_ids_.insert(second_filter->child_id()); | 2533 child_ids_.insert(second_filter->child_id()); |
| 2551 ResourceHostMsg_RequestResource transfer_request_msg( | 2534 ResourceHostMsg_RequestResource transfer_request_msg( |
| 2552 new_render_view_id, new_request_id, request); | 2535 new_render_view_id, new_request_id, request); |
| 2553 host_.OnMessageReceived( | 2536 host_.OnMessageReceived(transfer_request_msg, second_filter.get()); |
| 2554 transfer_request_msg, second_filter.get(), &msg_was_ok); | |
| 2555 | 2537 |
| 2556 // Verify that we update the ResourceRequestInfo. | 2538 // Verify that we update the ResourceRequestInfo. |
| 2557 GlobalRequestID global_request_id(second_filter->child_id(), new_request_id); | 2539 GlobalRequestID global_request_id(second_filter->child_id(), new_request_id); |
| 2558 const ResourceRequestInfoImpl* info = ResourceRequestInfoImpl::ForRequest( | 2540 const ResourceRequestInfoImpl* info = ResourceRequestInfoImpl::ForRequest( |
| 2559 host_.GetURLRequest(global_request_id)); | 2541 host_.GetURLRequest(global_request_id)); |
| 2560 EXPECT_EQ(second_filter->child_id(), info->GetChildID()); | 2542 EXPECT_EQ(second_filter->child_id(), info->GetChildID()); |
| 2561 EXPECT_EQ(new_render_view_id, info->GetRouteID()); | 2543 EXPECT_EQ(new_render_view_id, info->GetRouteID()); |
| 2562 EXPECT_EQ(new_request_id, info->GetRequestID()); | 2544 EXPECT_EQ(new_request_id, info->GetRequestID()); |
| 2563 EXPECT_EQ(second_filter, info->filter()); | 2545 EXPECT_EQ(second_filter, info->filter()); |
| 2564 | 2546 |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2642 | 2624 |
| 2643 MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id, | 2625 MakeTestRequestWithResourceType(filter_.get(), render_view_id, request_id, |
| 2644 GURL("http://example.com/blah"), | 2626 GURL("http://example.com/blah"), |
| 2645 ResourceType::PREFETCH); | 2627 ResourceType::PREFETCH); |
| 2646 | 2628 |
| 2647 // Get a bit of data before cancelling. | 2629 // Get a bit of data before cancelling. |
| 2648 EXPECT_TRUE(net::URLRequestTestJob::ProcessOnePendingMessage()); | 2630 EXPECT_TRUE(net::URLRequestTestJob::ProcessOnePendingMessage()); |
| 2649 | 2631 |
| 2650 // Simulate a cancellation coming from the renderer. | 2632 // Simulate a cancellation coming from the renderer. |
| 2651 ResourceHostMsg_CancelRequest msg(request_id); | 2633 ResourceHostMsg_CancelRequest msg(request_id); |
| 2652 bool msg_was_ok; | 2634 host_.OnMessageReceived(msg, filter_.get()); |
| 2653 host_.OnMessageReceived(msg, filter_.get(), &msg_was_ok); | |
| 2654 | 2635 |
| 2655 EXPECT_EQ(1, host_.pending_requests()); | 2636 EXPECT_EQ(1, host_.pending_requests()); |
| 2656 | 2637 |
| 2657 while (net::URLRequestTestJob::ProcessOnePendingMessage()) {} | 2638 while (net::URLRequestTestJob::ProcessOnePendingMessage()) {} |
| 2658 | 2639 |
| 2659 // Sort all the messages we saw by request. | 2640 // Sort all the messages we saw by request. |
| 2660 ResourceIPCAccumulator::ClassifiedMessages msgs; | 2641 ResourceIPCAccumulator::ClassifiedMessages msgs; |
| 2661 accum_.GetClassifiedMessages(&msgs); | 2642 accum_.GetClassifiedMessages(&msgs); |
| 2662 | 2643 |
| 2663 EXPECT_EQ(4U, msgs[0].size()); | 2644 EXPECT_EQ(4U, msgs[0].size()); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2706 while (!complete) { | 2687 while (!complete) { |
| 2707 for (size_t i = 0; i < msgs[0].size(); ++i) { | 2688 for (size_t i = 0; i < msgs[0].size(); ++i) { |
| 2708 if (msgs[0][i].type() == ResourceMsg_RequestComplete::ID) { | 2689 if (msgs[0][i].type() == ResourceMsg_RequestComplete::ID) { |
| 2709 complete = true; | 2690 complete = true; |
| 2710 break; | 2691 break; |
| 2711 } | 2692 } |
| 2712 | 2693 |
| 2713 EXPECT_EQ(ResourceMsg_DataReceived::ID, msgs[0][i].type()); | 2694 EXPECT_EQ(ResourceMsg_DataReceived::ID, msgs[0][i].type()); |
| 2714 | 2695 |
| 2715 ResourceHostMsg_DataReceived_ACK msg(1); | 2696 ResourceHostMsg_DataReceived_ACK msg(1); |
| 2716 bool msg_was_ok; | 2697 host_.OnMessageReceived(msg, filter_.get()); |
| 2717 host_.OnMessageReceived(msg, filter_.get(), &msg_was_ok); | |
| 2718 } | 2698 } |
| 2719 | 2699 |
| 2720 base::MessageLoop::current()->RunUntilIdle(); | 2700 base::MessageLoop::current()->RunUntilIdle(); |
| 2721 | 2701 |
| 2722 msgs.clear(); | 2702 msgs.clear(); |
| 2723 accum_.GetClassifiedMessages(&msgs); | 2703 accum_.GetClassifiedMessages(&msgs); |
| 2724 } | 2704 } |
| 2725 } | 2705 } |
| 2726 | 2706 |
| 2727 // Flakyness of this test might indicate memory corruption issues with | 2707 // Flakyness of this test might indicate memory corruption issues with |
| (...skipping 13 matching lines...) Expand all Loading... |
| 2741 EXPECT_EQ(ResourceMsg_SetDataBuffer::ID, msgs[0][1].type()); | 2721 EXPECT_EQ(ResourceMsg_SetDataBuffer::ID, msgs[0][1].type()); |
| 2742 for (size_t i = 2; i < msgs[0].size(); ++i) | 2722 for (size_t i = 2; i < msgs[0].size(); ++i) |
| 2743 EXPECT_EQ(ResourceMsg_DataReceived::ID, msgs[0][i].type()); | 2723 EXPECT_EQ(ResourceMsg_DataReceived::ID, msgs[0][i].type()); |
| 2744 | 2724 |
| 2745 // NOTE: If we fail the above checks then it means that we probably didn't | 2725 // NOTE: If we fail the above checks then it means that we probably didn't |
| 2746 // load a big enough response to trigger the delay mechanism. | 2726 // load a big enough response to trigger the delay mechanism. |
| 2747 | 2727 |
| 2748 // Send some unexpected ACKs. | 2728 // Send some unexpected ACKs. |
| 2749 for (size_t i = 0; i < 128; ++i) { | 2729 for (size_t i = 0; i < 128; ++i) { |
| 2750 ResourceHostMsg_DataReceived_ACK msg(1); | 2730 ResourceHostMsg_DataReceived_ACK msg(1); |
| 2751 bool msg_was_ok; | 2731 host_.OnMessageReceived(msg, filter_.get()); |
| 2752 host_.OnMessageReceived(msg, filter_.get(), &msg_was_ok); | |
| 2753 } | 2732 } |
| 2754 | 2733 |
| 2755 msgs[0].erase(msgs[0].begin()); | 2734 msgs[0].erase(msgs[0].begin()); |
| 2756 msgs[0].erase(msgs[0].begin()); | 2735 msgs[0].erase(msgs[0].begin()); |
| 2757 | 2736 |
| 2758 // ACK all DataReceived messages until we find a RequestComplete message. | 2737 // ACK all DataReceived messages until we find a RequestComplete message. |
| 2759 bool complete = false; | 2738 bool complete = false; |
| 2760 while (!complete) { | 2739 while (!complete) { |
| 2761 for (size_t i = 0; i < msgs[0].size(); ++i) { | 2740 for (size_t i = 0; i < msgs[0].size(); ++i) { |
| 2762 if (msgs[0][i].type() == ResourceMsg_RequestComplete::ID) { | 2741 if (msgs[0][i].type() == ResourceMsg_RequestComplete::ID) { |
| 2763 complete = true; | 2742 complete = true; |
| 2764 break; | 2743 break; |
| 2765 } | 2744 } |
| 2766 | 2745 |
| 2767 EXPECT_EQ(ResourceMsg_DataReceived::ID, msgs[0][i].type()); | 2746 EXPECT_EQ(ResourceMsg_DataReceived::ID, msgs[0][i].type()); |
| 2768 | 2747 |
| 2769 ResourceHostMsg_DataReceived_ACK msg(1); | 2748 ResourceHostMsg_DataReceived_ACK msg(1); |
| 2770 bool msg_was_ok; | 2749 host_.OnMessageReceived(msg, filter_.get()); |
| 2771 host_.OnMessageReceived(msg, filter_.get(), &msg_was_ok); | |
| 2772 } | 2750 } |
| 2773 | 2751 |
| 2774 base::MessageLoop::current()->RunUntilIdle(); | 2752 base::MessageLoop::current()->RunUntilIdle(); |
| 2775 | 2753 |
| 2776 msgs.clear(); | 2754 msgs.clear(); |
| 2777 accum_.GetClassifiedMessages(&msgs); | 2755 accum_.GetClassifiedMessages(&msgs); |
| 2778 } | 2756 } |
| 2779 } | 2757 } |
| 2780 | 2758 |
| 2781 // Tests the dispatcher host's temporary file management. | 2759 // Tests the dispatcher host's temporary file management. |
| (...skipping 15 matching lines...) Expand all Loading... |
| 2797 filter_->child_id(), file_path)); | 2775 filter_->child_id(), file_path)); |
| 2798 | 2776 |
| 2799 // Register it for a resource request. | 2777 // Register it for a resource request. |
| 2800 host_.RegisterDownloadedTempFile(filter_->child_id(), kRequestID, file_path); | 2778 host_.RegisterDownloadedTempFile(filter_->child_id(), kRequestID, file_path); |
| 2801 | 2779 |
| 2802 // Should be readable now. | 2780 // Should be readable now. |
| 2803 EXPECT_TRUE(ChildProcessSecurityPolicyImpl::GetInstance()->CanReadFile( | 2781 EXPECT_TRUE(ChildProcessSecurityPolicyImpl::GetInstance()->CanReadFile( |
| 2804 filter_->child_id(), file_path)); | 2782 filter_->child_id(), file_path)); |
| 2805 | 2783 |
| 2806 // The child releases from the request. | 2784 // The child releases from the request. |
| 2807 bool msg_was_ok = true; | |
| 2808 ResourceHostMsg_ReleaseDownloadedFile release_msg(kRequestID); | 2785 ResourceHostMsg_ReleaseDownloadedFile release_msg(kRequestID); |
| 2809 host_.OnMessageReceived(release_msg, filter_, &msg_was_ok); | 2786 host_.OnMessageReceived(release_msg, filter_); |
| 2810 ASSERT_TRUE(msg_was_ok); | |
| 2811 | 2787 |
| 2812 // Still readable because there is another reference to the file. (The child | 2788 // Still readable because there is another reference to the file. (The child |
| 2813 // may take additional blob references.) | 2789 // may take additional blob references.) |
| 2814 EXPECT_TRUE(ChildProcessSecurityPolicyImpl::GetInstance()->CanReadFile( | 2790 EXPECT_TRUE(ChildProcessSecurityPolicyImpl::GetInstance()->CanReadFile( |
| 2815 filter_->child_id(), file_path)); | 2791 filter_->child_id(), file_path)); |
| 2816 | 2792 |
| 2817 // Release extra references and wait for the file to be deleted. (This relies | 2793 // Release extra references and wait for the file to be deleted. (This relies |
| 2818 // on the delete happening on the FILE thread which is mapped to main thread | 2794 // on the delete happening on the FILE thread which is mapped to main thread |
| 2819 // in this test.) | 2795 // in this test.) |
| 2820 deletable_file = NULL; | 2796 deletable_file = NULL; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2858 filter_->child_id(), file_path)); | 2834 filter_->child_id(), file_path)); |
| 2859 EXPECT_FALSE(base::PathExists(file_path)); | 2835 EXPECT_FALSE(base::PathExists(file_path)); |
| 2860 } | 2836 } |
| 2861 | 2837 |
| 2862 TEST_F(ResourceDispatcherHostTest, DownloadToFile) { | 2838 TEST_F(ResourceDispatcherHostTest, DownloadToFile) { |
| 2863 // Make a request which downloads to file. | 2839 // Make a request which downloads to file. |
| 2864 ResourceHostMsg_Request request = CreateResourceRequest( | 2840 ResourceHostMsg_Request request = CreateResourceRequest( |
| 2865 "GET", ResourceType::SUB_RESOURCE, net::URLRequestTestJob::test_url_1()); | 2841 "GET", ResourceType::SUB_RESOURCE, net::URLRequestTestJob::test_url_1()); |
| 2866 request.download_to_file = true; | 2842 request.download_to_file = true; |
| 2867 ResourceHostMsg_RequestResource request_msg(0, 1, request); | 2843 ResourceHostMsg_RequestResource request_msg(0, 1, request); |
| 2868 bool msg_was_ok; | 2844 host_.OnMessageReceived(request_msg, filter_); |
| 2869 host_.OnMessageReceived(request_msg, filter_, &msg_was_ok); | |
| 2870 ASSERT_TRUE(msg_was_ok); | |
| 2871 | 2845 |
| 2872 // Running the message loop until idle does not work because | 2846 // Running the message loop until idle does not work because |
| 2873 // RedirectToFileResourceHandler posts things to base::WorkerPool. Instead, | 2847 // RedirectToFileResourceHandler posts things to base::WorkerPool. Instead, |
| 2874 // wait for the ResourceMsg_RequestComplete to go out. Then run the event loop | 2848 // wait for the ResourceMsg_RequestComplete to go out. Then run the event loop |
| 2875 // until idle so the loader is gone. | 2849 // until idle so the loader is gone. |
| 2876 WaitForRequestComplete(); | 2850 WaitForRequestComplete(); |
| 2877 base::RunLoop().RunUntilIdle(); | 2851 base::RunLoop().RunUntilIdle(); |
| 2878 EXPECT_EQ(0, host_.pending_requests()); | 2852 EXPECT_EQ(0, host_.pending_requests()); |
| 2879 | 2853 |
| 2880 ResourceIPCAccumulator::ClassifiedMessages msgs; | 2854 ResourceIPCAccumulator::ClassifiedMessages msgs; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2915 EXPECT_EQ(net::URLRequestTestJob::test_data_1(), contents); | 2889 EXPECT_EQ(net::URLRequestTestJob::test_data_1(), contents); |
| 2916 | 2890 |
| 2917 // The file should be readable by the child. | 2891 // The file should be readable by the child. |
| 2918 EXPECT_TRUE(ChildProcessSecurityPolicyImpl::GetInstance()->CanReadFile( | 2892 EXPECT_TRUE(ChildProcessSecurityPolicyImpl::GetInstance()->CanReadFile( |
| 2919 filter_->child_id(), response_head.download_file_path)); | 2893 filter_->child_id(), response_head.download_file_path)); |
| 2920 | 2894 |
| 2921 // When the renderer releases the file, it should be deleted. Again, | 2895 // When the renderer releases the file, it should be deleted. Again, |
| 2922 // RunUntilIdle doesn't work because base::WorkerPool is involved. | 2896 // RunUntilIdle doesn't work because base::WorkerPool is involved. |
| 2923 ShareableFileReleaseWaiter waiter(response_head.download_file_path); | 2897 ShareableFileReleaseWaiter waiter(response_head.download_file_path); |
| 2924 ResourceHostMsg_ReleaseDownloadedFile release_msg(1); | 2898 ResourceHostMsg_ReleaseDownloadedFile release_msg(1); |
| 2925 host_.OnMessageReceived(release_msg, filter_, &msg_was_ok); | 2899 host_.OnMessageReceived(release_msg, filter_); |
| 2926 ASSERT_TRUE(msg_was_ok); | |
| 2927 waiter.Wait(); | 2900 waiter.Wait(); |
| 2928 // The release callback runs before the delete is scheduled, so pump the | 2901 // The release callback runs before the delete is scheduled, so pump the |
| 2929 // message loop for the delete itself. (This relies on the delete happening on | 2902 // message loop for the delete itself. (This relies on the delete happening on |
| 2930 // the FILE thread which is mapped to main thread in this test.) | 2903 // the FILE thread which is mapped to main thread in this test.) |
| 2931 base::RunLoop().RunUntilIdle(); | 2904 base::RunLoop().RunUntilIdle(); |
| 2932 | 2905 |
| 2933 EXPECT_FALSE(base::PathExists(response_head.download_file_path)); | 2906 EXPECT_FALSE(base::PathExists(response_head.download_file_path)); |
| 2934 EXPECT_FALSE(ChildProcessSecurityPolicyImpl::GetInstance()->CanReadFile( | 2907 EXPECT_FALSE(ChildProcessSecurityPolicyImpl::GetInstance()->CanReadFile( |
| 2935 filter_->child_id(), response_head.download_file_path)); | 2908 filter_->child_id(), response_head.download_file_path)); |
| 2936 } | 2909 } |
| 2937 | 2910 |
| 2938 } // namespace content | 2911 } // namespace content |
| OLD | NEW |