| 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 |