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

Side by Side Diff: content/browser/renderer_host/resource_dispatcher_host_unittest.cc

Issue 6628035: Move resource related IPCs to their own file in content. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/file_path.h" 7 #include "base/file_path.h"
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "base/process_util.h" 9 #include "base/process_util.h"
10 #include "chrome/common/chrome_plugin_lib.h" 10 #include "chrome/common/chrome_plugin_lib.h"
11 #include "chrome/common/render_messages.h" 11 #include "chrome/common/render_messages.h"
12 #include "chrome/common/render_messages_params.h" 12 #include "chrome/common/render_messages_params.h"
13 #include "chrome/common/resource_response.h"
14 #include "content/browser/browser_thread.h" 13 #include "content/browser/browser_thread.h"
15 #include "content/browser/child_process_security_policy.h" 14 #include "content/browser/child_process_security_policy.h"
16 #include "content/browser/renderer_host/resource_dispatcher_host.h" 15 #include "content/browser/renderer_host/resource_dispatcher_host.h"
17 #include "content/browser/renderer_host/resource_dispatcher_host_request_info.h" 16 #include "content/browser/renderer_host/resource_dispatcher_host_request_info.h"
18 #include "content/browser/renderer_host/resource_handler.h" 17 #include "content/browser/renderer_host/resource_handler.h"
19 #include "content/browser/renderer_host/resource_message_filter.h" 18 #include "content/browser/renderer_host/resource_message_filter.h"
19 #include "content/common/resource_messages.h"
20 #include "content/common/resource_response.h"
20 #include "net/base/net_errors.h" 21 #include "net/base/net_errors.h"
21 #include "net/base/upload_data.h" 22 #include "net/base/upload_data.h"
22 #include "net/http/http_util.h" 23 #include "net/http/http_util.h"
23 #include "net/url_request/url_request.h" 24 #include "net/url_request/url_request.h"
24 #include "net/url_request/url_request_job.h" 25 #include "net/url_request/url_request_job.h"
25 #include "net/url_request/url_request_test_job.h" 26 #include "net/url_request/url_request_test_job.h"
26 #include "testing/gtest/include/gtest/gtest.h" 27 #include "testing/gtest/include/gtest/gtest.h"
27 #include "webkit/appcache/appcache_interfaces.h" 28 #include "webkit/appcache/appcache_interfaces.h"
28 29
29 // TODO(eroman): Write unit tests for SafeBrowsing that exercise 30 // TODO(eroman): Write unit tests for SafeBrowsing that exercise
30 // SafeBrowsingResourceHandler. 31 // SafeBrowsingResourceHandler.
31 32
32 namespace { 33 namespace {
33 34
34 // Returns the resource response header structure for this request. 35 // Returns the resource response header structure for this request.
35 void GetResponseHead(const std::vector<IPC::Message>& messages, 36 void GetResponseHead(const std::vector<IPC::Message>& messages,
36 ResourceResponseHead* response_head) { 37 ResourceResponseHead* response_head) {
37 ASSERT_GE(messages.size(), 2U); 38 ASSERT_GE(messages.size(), 2U);
38 39
39 // The first messages should be received response. 40 // The first messages should be received response.
40 ASSERT_EQ(ViewMsg_Resource_ReceivedResponse::ID, messages[0].type()); 41 ASSERT_EQ(ResourceMsg_ReceivedResponse::ID, messages[0].type());
41 42
42 void* iter = NULL; 43 void* iter = NULL;
43 int request_id; 44 int request_id;
44 ASSERT_TRUE(IPC::ReadParam(&messages[0], &iter, &request_id)); 45 ASSERT_TRUE(IPC::ReadParam(&messages[0], &iter, &request_id));
45 ASSERT_TRUE(IPC::ReadParam(&messages[0], &iter, response_head)); 46 ASSERT_TRUE(IPC::ReadParam(&messages[0], &iter, response_head));
46 } 47 }
47 48
48 } // namespace 49 } // namespace
49 50
50 static int RequestIDForMessage(const IPC::Message& msg) { 51 static int RequestIDForMessage(const IPC::Message& msg) {
51 int request_id = -1; 52 int request_id = -1;
52 switch (msg.type()) { 53 switch (msg.type()) {
53 case ViewMsg_Resource_UploadProgress::ID: 54 case ResourceMsg_UploadProgress::ID:
54 case ViewMsg_Resource_ReceivedResponse::ID: 55 case ResourceMsg_ReceivedResponse::ID:
55 case ViewMsg_Resource_ReceivedRedirect::ID: 56 case ResourceMsg_ReceivedRedirect::ID:
56 case ViewMsg_Resource_DataReceived::ID: 57 case ResourceMsg_DataReceived::ID:
57 case ViewMsg_Resource_RequestComplete::ID: 58 case ResourceMsg_RequestComplete::ID:
58 request_id = IPC::MessageIterator(msg).NextInt(); 59 request_id = IPC::MessageIterator(msg).NextInt();
59 break; 60 break;
60 } 61 }
61 return request_id; 62 return request_id;
62 } 63 }
63 64
64 static ViewHostMsg_Resource_Request CreateResourceRequest( 65 static ResourceHostMsg_Request CreateResourceRequest(
65 const char* method, 66 const char* method,
66 ResourceType::Type type, 67 ResourceType::Type type,
67 const GURL& url) { 68 const GURL& url) {
68 ViewHostMsg_Resource_Request request; 69 ResourceHostMsg_Request request;
69 request.method = std::string(method); 70 request.method = std::string(method);
70 request.url = url; 71 request.url = url;
71 request.first_party_for_cookies = url; // bypass third-party cookie blocking 72 request.first_party_for_cookies = url; // bypass third-party cookie blocking
72 request.load_flags = 0; 73 request.load_flags = 0;
73 request.origin_pid = 0; 74 request.origin_pid = 0;
74 request.resource_type = type; 75 request.resource_type = type;
75 request.request_context = 0; 76 request.request_context = 0;
76 request.appcache_host_id = appcache::kNoHostId; 77 request.appcache_host_id = appcache::kNoHostId;
77 request.download_to_file = false; 78 request.download_to_file = false;
78 request.host_renderer_id = -1; 79 request.host_renderer_id = -1;
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 int request_id, 279 int request_id,
279 const GURL& url) { 280 const GURL& url) {
280 MakeTestRequest(filter_.get(), render_view_id, request_id, url); 281 MakeTestRequest(filter_.get(), render_view_id, request_id, url);
281 } 282 }
282 283
283 void ResourceDispatcherHostTest::MakeTestRequest( 284 void ResourceDispatcherHostTest::MakeTestRequest(
284 ResourceMessageFilter* filter, 285 ResourceMessageFilter* filter,
285 int render_view_id, 286 int render_view_id,
286 int request_id, 287 int request_id,
287 const GURL& url) { 288 const GURL& url) {
288 ViewHostMsg_Resource_Request request = 289 ResourceHostMsg_Request request =
289 CreateResourceRequest("GET", resource_type_, url); 290 CreateResourceRequest("GET", resource_type_, url);
290 ViewHostMsg_RequestResource msg(render_view_id, request_id, request); 291 ResourceHostMsg_RequestResource msg(render_view_id, request_id, request);
291 bool msg_was_ok; 292 bool msg_was_ok;
292 host_.OnMessageReceived(msg, filter, &msg_was_ok); 293 host_.OnMessageReceived(msg, filter, &msg_was_ok);
293 KickOffRequest(); 294 KickOffRequest();
294 } 295 }
295 296
296 void ResourceDispatcherHostTest::MakeCancelRequest(int request_id) { 297 void ResourceDispatcherHostTest::MakeCancelRequest(int request_id) {
297 host_.CancelRequest(filter_->child_id(), request_id, false); 298 host_.CancelRequest(filter_->child_id(), request_id, false);
298 } 299 }
299 300
300 void CheckSuccessfulRequest(const std::vector<IPC::Message>& messages, 301 void CheckSuccessfulRequest(const std::vector<IPC::Message>& messages,
301 const std::string& reference_data) { 302 const std::string& reference_data) {
302 // A successful request will have received 4 messages: 303 // A successful request will have received 4 messages:
303 // ReceivedResponse (indicates headers received) 304 // ReceivedResponse (indicates headers received)
304 // DataReceived (data) 305 // DataReceived (data)
305 // XXX DataReceived (0 bytes remaining from a read) 306 // XXX DataReceived (0 bytes remaining from a read)
306 // RequestComplete (request is done) 307 // RequestComplete (request is done)
307 // 308 //
308 // This function verifies that we received 4 messages and that they 309 // This function verifies that we received 4 messages and that they
309 // are appropriate. 310 // are appropriate.
310 ASSERT_EQ(3U, messages.size()); 311 ASSERT_EQ(3U, messages.size());
311 312
312 // The first messages should be received response 313 // The first messages should be received response
313 ASSERT_EQ(ViewMsg_Resource_ReceivedResponse::ID, messages[0].type()); 314 ASSERT_EQ(ResourceMsg_ReceivedResponse::ID, messages[0].type());
314 315
315 // followed by the data, currently we only do the data in one chunk, but 316 // followed by the data, currently we only do the data in one chunk, but
316 // should probably test multiple chunks later 317 // should probably test multiple chunks later
317 ASSERT_EQ(ViewMsg_Resource_DataReceived::ID, messages[1].type()); 318 ASSERT_EQ(ResourceMsg_DataReceived::ID, messages[1].type());
318 319
319 void* iter = NULL; 320 void* iter = NULL;
320 int request_id; 321 int request_id;
321 ASSERT_TRUE(IPC::ReadParam(&messages[1], &iter, &request_id)); 322 ASSERT_TRUE(IPC::ReadParam(&messages[1], &iter, &request_id));
322 base::SharedMemoryHandle shm_handle; 323 base::SharedMemoryHandle shm_handle;
323 ASSERT_TRUE(IPC::ReadParam(&messages[1], &iter, &shm_handle)); 324 ASSERT_TRUE(IPC::ReadParam(&messages[1], &iter, &shm_handle));
324 uint32 data_len; 325 uint32 data_len;
325 ASSERT_TRUE(IPC::ReadParam(&messages[1], &iter, &data_len)); 326 ASSERT_TRUE(IPC::ReadParam(&messages[1], &iter, &data_len));
326 327
327 ASSERT_EQ(reference_data.size(), data_len); 328 ASSERT_EQ(reference_data.size(), data_len);
328 base::SharedMemory shared_mem(shm_handle, true); // read only 329 base::SharedMemory shared_mem(shm_handle, true); // read only
329 shared_mem.Map(data_len); 330 shared_mem.Map(data_len);
330 const char* data = static_cast<char*>(shared_mem.memory()); 331 const char* data = static_cast<char*>(shared_mem.memory());
331 ASSERT_EQ(0, memcmp(reference_data.c_str(), data, data_len)); 332 ASSERT_EQ(0, memcmp(reference_data.c_str(), data, data_len));
332 333
333 // followed by a 0-byte read 334 // followed by a 0-byte read
334 //ASSERT_EQ(ViewMsg_Resource_DataReceived::ID, messages[2].type()); 335 //ASSERT_EQ(ResourceMsg_DataReceived::ID, messages[2].type());
335 336
336 // the last message should be all data received 337 // the last message should be all data received
337 ASSERT_EQ(ViewMsg_Resource_RequestComplete::ID, messages[2].type()); 338 ASSERT_EQ(ResourceMsg_RequestComplete::ID, messages[2].type());
338 } 339 }
339 340
340 // Tests whether many messages get dispatched properly. 341 // Tests whether many messages get dispatched properly.
341 TEST_F(ResourceDispatcherHostTest, TestMany) { 342 TEST_F(ResourceDispatcherHostTest, TestMany) {
342 EXPECT_EQ(0, host_.GetOutstandingRequestsMemoryCost(0)); 343 EXPECT_EQ(0, host_.GetOutstandingRequestsMemoryCost(0));
343 344
344 MakeTestRequest(0, 1, net::URLRequestTestJob::test_url_1()); 345 MakeTestRequest(0, 1, net::URLRequestTestJob::test_url_1());
345 MakeTestRequest(0, 2, net::URLRequestTestJob::test_url_2()); 346 MakeTestRequest(0, 2, net::URLRequestTestJob::test_url_2());
346 MakeTestRequest(0, 3, net::URLRequestTestJob::test_url_3()); 347 MakeTestRequest(0, 3, net::URLRequestTestJob::test_url_3());
347 348
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 accum_.GetClassifiedMessages(&msgs); 383 accum_.GetClassifiedMessages(&msgs);
383 384
384 // there are three requests, so we should have gotten them classified as such 385 // there are three requests, so we should have gotten them classified as such
385 ASSERT_EQ(3U, msgs.size()); 386 ASSERT_EQ(3U, msgs.size());
386 387
387 CheckSuccessfulRequest(msgs[0], net::URLRequestTestJob::test_data_1()); 388 CheckSuccessfulRequest(msgs[0], net::URLRequestTestJob::test_data_1());
388 CheckSuccessfulRequest(msgs[2], net::URLRequestTestJob::test_data_3()); 389 CheckSuccessfulRequest(msgs[2], net::URLRequestTestJob::test_data_3());
389 390
390 // Check that request 2 got canceled. 391 // Check that request 2 got canceled.
391 ASSERT_EQ(2U, msgs[1].size()); 392 ASSERT_EQ(2U, msgs[1].size());
392 ASSERT_EQ(ViewMsg_Resource_ReceivedResponse::ID, msgs[1][0].type()); 393 ASSERT_EQ(ResourceMsg_ReceivedResponse::ID, msgs[1][0].type());
393 ASSERT_EQ(ViewMsg_Resource_RequestComplete::ID, msgs[1][1].type()); 394 ASSERT_EQ(ResourceMsg_RequestComplete::ID, msgs[1][1].type());
394 395
395 int request_id; 396 int request_id;
396 net::URLRequestStatus status; 397 net::URLRequestStatus status;
397 398
398 void* iter = NULL; 399 void* iter = NULL;
399 ASSERT_TRUE(IPC::ReadParam(&msgs[1][1], &iter, &request_id)); 400 ASSERT_TRUE(IPC::ReadParam(&msgs[1][1], &iter, &request_id));
400 ASSERT_TRUE(IPC::ReadParam(&msgs[1][1], &iter, &status)); 401 ASSERT_TRUE(IPC::ReadParam(&msgs[1][1], &iter, &status));
401 402
402 EXPECT_EQ(net::URLRequestStatus::CANCELED, status.status()); 403 EXPECT_EQ(net::URLRequestStatus::CANCELED, status.status());
403 } 404 }
(...skipping 18 matching lines...) Expand all
422 } 423 }
423 bool has_canceled_; 424 bool has_canceled_;
424 int received_after_canceled_; 425 int received_after_canceled_;
425 }; 426 };
426 427
427 // Tests CancelRequestsForProcess 428 // Tests CancelRequestsForProcess
428 TEST_F(ResourceDispatcherHostTest, TestProcessCancel) { 429 TEST_F(ResourceDispatcherHostTest, TestProcessCancel) {
429 scoped_refptr<TestFilter> test_filter = new TestFilter(); 430 scoped_refptr<TestFilter> test_filter = new TestFilter();
430 431
431 // request 1 goes to the test delegate 432 // request 1 goes to the test delegate
432 ViewHostMsg_Resource_Request request = CreateResourceRequest( 433 ResourceHostMsg_Request request = CreateResourceRequest(
433 "GET", ResourceType::SUB_RESOURCE, net::URLRequestTestJob::test_url_1()); 434 "GET", ResourceType::SUB_RESOURCE, net::URLRequestTestJob::test_url_1());
434 435
435 EXPECT_EQ(0, host_.GetOutstandingRequestsMemoryCost(0)); 436 EXPECT_EQ(0, host_.GetOutstandingRequestsMemoryCost(0));
436 437
437 MakeTestRequest(test_filter.get(), 0, 1, 438 MakeTestRequest(test_filter.get(), 0, 1,
438 net::URLRequestTestJob::test_url_1()); 439 net::URLRequestTestJob::test_url_1());
439 440
440 // request 2 goes to us 441 // request 2 goes to us
441 MakeTestRequest(0, 2, net::URLRequestTestJob::test_url_2()); 442 MakeTestRequest(0, 2, net::URLRequestTestJob::test_url_2());
442 443
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after
751 // Check that the first kMaxRequests succeeded. 752 // Check that the first kMaxRequests succeeded.
752 for (size_t i = 0; i < kMaxRequests; ++i) 753 for (size_t i = 0; i < kMaxRequests; ++i)
753 CheckSuccessfulRequest(msgs[i], net::URLRequestTestJob::test_data_2()); 754 CheckSuccessfulRequest(msgs[i], net::URLRequestTestJob::test_data_2());
754 755
755 // Check that the subsequent two requests (kMaxRequests + 1) and 756 // Check that the subsequent two requests (kMaxRequests + 1) and
756 // (kMaxRequests + 2) were failed, since the per-process bound was reached. 757 // (kMaxRequests + 2) were failed, since the per-process bound was reached.
757 for (int i = 0; i < 2; ++i) { 758 for (int i = 0; i < 2; ++i) {
758 // Should have sent a single RequestComplete message. 759 // Should have sent a single RequestComplete message.
759 int index = kMaxRequests + i; 760 int index = kMaxRequests + i;
760 EXPECT_EQ(1U, msgs[index].size()); 761 EXPECT_EQ(1U, msgs[index].size());
761 EXPECT_EQ(ViewMsg_Resource_RequestComplete::ID, msgs[index][0].type()); 762 EXPECT_EQ(ResourceMsg_RequestComplete::ID, msgs[index][0].type());
762 763
763 // The RequestComplete message should have had status 764 // The RequestComplete message should have had status
764 // (CANCELLED, ERR_INSUFFICIENT_RESOURCES). 765 // (CANCELLED, ERR_INSUFFICIENT_RESOURCES).
765 int request_id; 766 int request_id;
766 net::URLRequestStatus status; 767 net::URLRequestStatus status;
767 768
768 void* iter = NULL; 769 void* iter = NULL;
769 EXPECT_TRUE(IPC::ReadParam(&msgs[index][0], &iter, &request_id)); 770 EXPECT_TRUE(IPC::ReadParam(&msgs[index][0], &iter, &request_id));
770 EXPECT_TRUE(IPC::ReadParam(&msgs[index][0], &iter, &status)); 771 EXPECT_TRUE(IPC::ReadParam(&msgs[index][0], &iter, &status));
771 772
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
915 while (net::URLRequestTestJob::ProcessOnePendingMessage()) {} 916 while (net::URLRequestTestJob::ProcessOnePendingMessage()) {}
916 917
917 EXPECT_EQ(0, host_.GetOutstandingRequestsMemoryCost(0)); 918 EXPECT_EQ(0, host_.GetOutstandingRequestsMemoryCost(0));
918 919
919 // Sorts out all the messages we saw by request. 920 // Sorts out all the messages we saw by request.
920 ResourceIPCAccumulator::ClassifiedMessages msgs; 921 ResourceIPCAccumulator::ClassifiedMessages msgs;
921 accum_.GetClassifiedMessages(&msgs); 922 accum_.GetClassifiedMessages(&msgs);
922 923
923 // We should have gotten one RequestComplete message. 924 // We should have gotten one RequestComplete message.
924 ASSERT_EQ(1U, msgs[0].size()); 925 ASSERT_EQ(1U, msgs[0].size());
925 EXPECT_EQ(ViewMsg_Resource_RequestComplete::ID, msgs[0][0].type()); 926 EXPECT_EQ(ResourceMsg_RequestComplete::ID, msgs[0][0].type());
926 927
927 // The RequestComplete message should have had status 928 // The RequestComplete message should have had status
928 // (CANCELED, ERR_FILE_NOT_FOUND). 929 // (CANCELED, ERR_FILE_NOT_FOUND).
929 int request_id; 930 int request_id;
930 net::URLRequestStatus status; 931 net::URLRequestStatus status;
931 932
932 void* iter = NULL; 933 void* iter = NULL;
933 EXPECT_TRUE(IPC::ReadParam(&msgs[0][0], &iter, &request_id)); 934 EXPECT_TRUE(IPC::ReadParam(&msgs[0][0], &iter, &request_id));
934 EXPECT_TRUE(IPC::ReadParam(&msgs[0][0], &iter, &status)); 935 EXPECT_TRUE(IPC::ReadParam(&msgs[0][0], &iter, &status));
935 936
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
994 return new ResourceDispatcherHostRequestInfo( 995 return new ResourceDispatcherHostRequestInfo(
995 resource_handler_.get(), ChildProcessInfo::RENDER_PROCESS, 0, 0, 0, 996 resource_handler_.get(), ChildProcessInfo::RENDER_PROCESS, 0, 0, 0,
996 ResourceType::STYLESHEET, 0U, false, false, false, -1, -1); 997 ResourceType::STYLESHEET, 0U, false, false, false, -1, -1);
997 } 998 }
998 999
999 scoped_ptr<GURL> url_; 1000 scoped_ptr<GURL> url_;
1000 ResourceType::Type resource_type_; 1001 ResourceType::Type resource_type_;
1001 scoped_ptr<DummyResourceHandler> resource_handler_; 1002 scoped_ptr<DummyResourceHandler> resource_handler_;
1002 scoped_ptr<ResourceDispatcherHostRequestInfo> request_info_; 1003 scoped_ptr<ResourceDispatcherHostRequestInfo> request_info_;
1003 }; 1004 };
OLDNEW
« no previous file with comments | « content/browser/renderer_host/resource_dispatcher_host.cc ('k') | content/browser/renderer_host/resource_message_filter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698