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/files/file_path.h" | 9 #include "base/files/file_path.h" |
10 #include "base/files/file_util.h" | 10 #include "base/files/file_util.h" |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 namespace { | 62 namespace { |
63 | 63 |
64 // Returns the resource response header structure for this request. | 64 // Returns the resource response header structure for this request. |
65 void GetResponseHead(const std::vector<IPC::Message>& messages, | 65 void GetResponseHead(const std::vector<IPC::Message>& messages, |
66 ResourceResponseHead* response_head) { | 66 ResourceResponseHead* response_head) { |
67 ASSERT_GE(messages.size(), 2U); | 67 ASSERT_GE(messages.size(), 2U); |
68 | 68 |
69 // The first messages should be received response. | 69 // The first messages should be received response. |
70 ASSERT_EQ(ResourceMsg_ReceivedResponse::ID, messages[0].type()); | 70 ASSERT_EQ(ResourceMsg_ReceivedResponse::ID, messages[0].type()); |
71 | 71 |
72 PickleIterator iter(messages[0]); | 72 base::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 ResourceDispatcherHostImpl::Get()->OnMessageReceived( | 81 ResourceDispatcherHostImpl::Get()->OnMessageReceived( |
82 *message, filter.get()); | 82 *message, filter.get()); |
83 } | 83 } |
84 | 84 |
85 // On Windows, ResourceMsg_SetDataBuffer supplies a HANDLE which is not | 85 // On Windows, ResourceMsg_SetDataBuffer supplies a HANDLE which is not |
86 // automatically released. | 86 // automatically released. |
87 // | 87 // |
88 // See ResourceDispatcher::ReleaseResourcesInDataMessage. | 88 // See ResourceDispatcher::ReleaseResourcesInDataMessage. |
89 // | 89 // |
90 // 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 |
91 // 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 |
92 // ref-counted core that closes them if not extracted. | 92 // ref-counted core that closes them if not extracted. |
93 void ReleaseHandlesInMessage(const IPC::Message& message) { | 93 void ReleaseHandlesInMessage(const IPC::Message& message) { |
94 if (message.type() == ResourceMsg_SetDataBuffer::ID) { | 94 if (message.type() == ResourceMsg_SetDataBuffer::ID) { |
95 PickleIterator iter(message); | 95 base::PickleIterator iter(message); |
96 int request_id; | 96 int request_id; |
97 CHECK(iter.ReadInt(&request_id)); | 97 CHECK(iter.ReadInt(&request_id)); |
98 base::SharedMemoryHandle shm_handle; | 98 base::SharedMemoryHandle shm_handle; |
99 if (IPC::ParamTraits<base::SharedMemoryHandle>::Read(&message, | 99 if (IPC::ParamTraits<base::SharedMemoryHandle>::Read(&message, |
100 &iter, | 100 &iter, |
101 &shm_handle)) { | 101 &shm_handle)) { |
102 if (base::SharedMemory::IsHandleValid(shm_handle)) | 102 if (base::SharedMemory::IsHandleValid(shm_handle)) |
103 base::SharedMemory::CloseHandle(shm_handle); | 103 base::SharedMemory::CloseHandle(shm_handle); |
104 } | 104 } |
105 } | 105 } |
106 } | 106 } |
107 | 107 |
108 } // namespace | 108 } // namespace |
109 | 109 |
110 static int RequestIDForMessage(const IPC::Message& msg) { | 110 static int RequestIDForMessage(const IPC::Message& msg) { |
111 int request_id = -1; | 111 int request_id = -1; |
112 switch (msg.type()) { | 112 switch (msg.type()) { |
113 case ResourceMsg_UploadProgress::ID: | 113 case ResourceMsg_UploadProgress::ID: |
114 case ResourceMsg_ReceivedResponse::ID: | 114 case ResourceMsg_ReceivedResponse::ID: |
115 case ResourceMsg_ReceivedRedirect::ID: | 115 case ResourceMsg_ReceivedRedirect::ID: |
116 case ResourceMsg_SetDataBuffer::ID: | 116 case ResourceMsg_SetDataBuffer::ID: |
117 case ResourceMsg_DataReceived::ID: | 117 case ResourceMsg_DataReceived::ID: |
118 case ResourceMsg_DataDownloaded::ID: | 118 case ResourceMsg_DataDownloaded::ID: |
119 case ResourceMsg_RequestComplete::ID: { | 119 case ResourceMsg_RequestComplete::ID: { |
120 bool result = PickleIterator(msg).ReadInt(&request_id); | 120 bool result = base::PickleIterator(msg).ReadInt(&request_id); |
121 DCHECK(result); | 121 DCHECK(result); |
122 break; | 122 break; |
123 } | 123 } |
124 } | 124 } |
125 return request_id; | 125 return request_id; |
126 } | 126 } |
127 | 127 |
128 static ResourceHostMsg_Request CreateResourceRequest(const char* method, | 128 static ResourceHostMsg_Request CreateResourceRequest(const char* method, |
129 ResourceType type, | 129 ResourceType type, |
130 const GURL& url) { | 130 const GURL& url) { |
(...skipping 779 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
910 // Intercepts requests for the given protocol. | 910 // Intercepts requests for the given protocol. |
911 void HandleScheme(const std::string& scheme) { | 911 void HandleScheme(const std::string& scheme) { |
912 job_factory_->HandleScheme(scheme); | 912 job_factory_->HandleScheme(scheme); |
913 EnsureSchemeIsAllowed(scheme); | 913 EnsureSchemeIsAllowed(scheme); |
914 } | 914 } |
915 | 915 |
916 void GenerateDataReceivedACK(const IPC::Message& msg) { | 916 void GenerateDataReceivedACK(const IPC::Message& msg) { |
917 EXPECT_EQ(ResourceMsg_DataReceived::ID, msg.type()); | 917 EXPECT_EQ(ResourceMsg_DataReceived::ID, msg.type()); |
918 | 918 |
919 int request_id = -1; | 919 int request_id = -1; |
920 bool result = PickleIterator(msg).ReadInt(&request_id); | 920 bool result = base::PickleIterator(msg).ReadInt(&request_id); |
921 DCHECK(result); | 921 DCHECK(result); |
922 scoped_ptr<IPC::Message> ack( | 922 scoped_ptr<IPC::Message> ack( |
923 new ResourceHostMsg_DataReceived_ACK(request_id)); | 923 new ResourceHostMsg_DataReceived_ACK(request_id)); |
924 | 924 |
925 base::MessageLoop::current()->PostTask( | 925 base::MessageLoop::current()->PostTask( |
926 FROM_HERE, | 926 FROM_HERE, |
927 base::Bind(&GenerateIPCMessage, filter_, base::Passed(&ack))); | 927 base::Bind(&GenerateIPCMessage, filter_, base::Passed(&ack))); |
928 } | 928 } |
929 | 929 |
930 // Setting filters for testing renderer messages. | 930 // Setting filters for testing renderer messages. |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1000 } | 1000 } |
1001 | 1001 |
1002 void CheckRequestCompleteErrorCode(const IPC::Message& message, | 1002 void CheckRequestCompleteErrorCode(const IPC::Message& message, |
1003 int expected_error_code) { | 1003 int expected_error_code) { |
1004 // Verify the expected error code was received. | 1004 // Verify the expected error code was received. |
1005 int request_id; | 1005 int request_id; |
1006 int error_code; | 1006 int error_code; |
1007 | 1007 |
1008 ASSERT_EQ(ResourceMsg_RequestComplete::ID, message.type()); | 1008 ASSERT_EQ(ResourceMsg_RequestComplete::ID, message.type()); |
1009 | 1009 |
1010 PickleIterator iter(message); | 1010 base::PickleIterator iter(message); |
1011 ASSERT_TRUE(IPC::ReadParam(&message, &iter, &request_id)); | 1011 ASSERT_TRUE(IPC::ReadParam(&message, &iter, &request_id)); |
1012 ASSERT_TRUE(IPC::ReadParam(&message, &iter, &error_code)); | 1012 ASSERT_TRUE(IPC::ReadParam(&message, &iter, &error_code)); |
1013 ASSERT_EQ(expected_error_code, error_code); | 1013 ASSERT_EQ(expected_error_code, error_code); |
1014 } | 1014 } |
1015 | 1015 |
1016 testing::AssertionResult ExtractDataOffsetAndLength(const IPC::Message& message, | 1016 testing::AssertionResult ExtractDataOffsetAndLength(const IPC::Message& message, |
1017 int* data_offset, | 1017 int* data_offset, |
1018 int* data_length) { | 1018 int* data_length) { |
1019 PickleIterator iter(message); | 1019 base::PickleIterator iter(message); |
1020 int request_id; | 1020 int request_id; |
1021 if (!IPC::ReadParam(&message, &iter, &request_id)) | 1021 if (!IPC::ReadParam(&message, &iter, &request_id)) |
1022 return testing::AssertionFailure() << "Could not read request_id"; | 1022 return testing::AssertionFailure() << "Could not read request_id"; |
1023 if (!IPC::ReadParam(&message, &iter, data_offset)) | 1023 if (!IPC::ReadParam(&message, &iter, data_offset)) |
1024 return testing::AssertionFailure() << "Could not read data_offset"; | 1024 return testing::AssertionFailure() << "Could not read data_offset"; |
1025 if (!IPC::ReadParam(&message, &iter, data_length)) | 1025 if (!IPC::ReadParam(&message, &iter, data_length)) |
1026 return testing::AssertionFailure() << "Could not read data_length"; | 1026 return testing::AssertionFailure() << "Could not read data_length"; |
1027 return testing::AssertionSuccess(); | 1027 return testing::AssertionSuccess(); |
1028 } | 1028 } |
1029 | 1029 |
(...skipping 10 matching lines...) Expand all Loading... |
1040 // This function verifies that we received 4 messages and that they are | 1040 // This function verifies that we received 4 messages and that they are |
1041 // appropriate. It allows for an error code other than net::OK if the request | 1041 // appropriate. It allows for an error code other than net::OK if the request |
1042 // should successfully receive data and then abort, e.g., on cancel. | 1042 // should successfully receive data and then abort, e.g., on cancel. |
1043 ASSERT_EQ(4U, messages.size()); | 1043 ASSERT_EQ(4U, messages.size()); |
1044 | 1044 |
1045 // The first messages should be received response | 1045 // The first messages should be received response |
1046 ASSERT_EQ(ResourceMsg_ReceivedResponse::ID, messages[0].type()); | 1046 ASSERT_EQ(ResourceMsg_ReceivedResponse::ID, messages[0].type()); |
1047 | 1047 |
1048 ASSERT_EQ(ResourceMsg_SetDataBuffer::ID, messages[1].type()); | 1048 ASSERT_EQ(ResourceMsg_SetDataBuffer::ID, messages[1].type()); |
1049 | 1049 |
1050 PickleIterator iter(messages[1]); | 1050 base::PickleIterator iter(messages[1]); |
1051 int request_id; | 1051 int request_id; |
1052 ASSERT_TRUE(IPC::ReadParam(&messages[1], &iter, &request_id)); | 1052 ASSERT_TRUE(IPC::ReadParam(&messages[1], &iter, &request_id)); |
1053 base::SharedMemoryHandle shm_handle; | 1053 base::SharedMemoryHandle shm_handle; |
1054 ASSERT_TRUE(IPC::ReadParam(&messages[1], &iter, &shm_handle)); | 1054 ASSERT_TRUE(IPC::ReadParam(&messages[1], &iter, &shm_handle)); |
1055 int shm_size; | 1055 int shm_size; |
1056 ASSERT_TRUE(IPC::ReadParam(&messages[1], &iter, &shm_size)); | 1056 ASSERT_TRUE(IPC::ReadParam(&messages[1], &iter, &shm_size)); |
1057 | 1057 |
1058 // Followed by the data, currently we only do the data in one chunk, but | 1058 // Followed by the data, currently we only do the data in one chunk, but |
1059 // should probably test multiple chunks later | 1059 // should probably test multiple chunks later |
1060 ASSERT_EQ(ResourceMsg_DataReceived::ID, messages[2].type()); | 1060 ASSERT_EQ(ResourceMsg_DataReceived::ID, messages[2].type()); |
(...skipping 1945 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3006 | 3006 |
3007 // ReceivedResponse | 3007 // ReceivedResponse |
3008 ResourceResponseHead response_head; | 3008 ResourceResponseHead response_head; |
3009 GetResponseHead(messages, &response_head); | 3009 GetResponseHead(messages, &response_head); |
3010 ASSERT_FALSE(response_head.download_file_path.empty()); | 3010 ASSERT_FALSE(response_head.download_file_path.empty()); |
3011 | 3011 |
3012 // DataDownloaded | 3012 // DataDownloaded |
3013 size_t total_len = 0; | 3013 size_t total_len = 0; |
3014 for (size_t i = 1; i < messages.size() - 1; i++) { | 3014 for (size_t i = 1; i < messages.size() - 1; i++) { |
3015 ASSERT_EQ(ResourceMsg_DataDownloaded::ID, messages[i].type()); | 3015 ASSERT_EQ(ResourceMsg_DataDownloaded::ID, messages[i].type()); |
3016 PickleIterator iter(messages[i]); | 3016 base::PickleIterator iter(messages[i]); |
3017 int request_id, data_len; | 3017 int request_id, data_len; |
3018 ASSERT_TRUE(IPC::ReadParam(&messages[i], &iter, &request_id)); | 3018 ASSERT_TRUE(IPC::ReadParam(&messages[i], &iter, &request_id)); |
3019 ASSERT_TRUE(IPC::ReadParam(&messages[i], &iter, &data_len)); | 3019 ASSERT_TRUE(IPC::ReadParam(&messages[i], &iter, &data_len)); |
3020 total_len += data_len; | 3020 total_len += data_len; |
3021 } | 3021 } |
3022 EXPECT_EQ(net::URLRequestTestJob::test_data_1().size(), total_len); | 3022 EXPECT_EQ(net::URLRequestTestJob::test_data_1().size(), total_len); |
3023 | 3023 |
3024 // RequestComplete | 3024 // RequestComplete |
3025 CheckRequestCompleteErrorCode(messages.back(), net::OK); | 3025 CheckRequestCompleteErrorCode(messages.back(), net::OK); |
3026 | 3026 |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3242 return nullptr; | 3242 return nullptr; |
3243 } | 3243 } |
3244 | 3244 |
3245 net::URLRequestJob* TestURLRequestJobFactory::MaybeInterceptResponse( | 3245 net::URLRequestJob* TestURLRequestJobFactory::MaybeInterceptResponse( |
3246 net::URLRequest* request, | 3246 net::URLRequest* request, |
3247 net::NetworkDelegate* network_delegate) const { | 3247 net::NetworkDelegate* network_delegate) const { |
3248 return nullptr; | 3248 return nullptr; |
3249 } | 3249 } |
3250 | 3250 |
3251 } // namespace content | 3251 } // namespace content |
OLD | NEW |