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 #ifndef IPC_IPC_CHANNEL_READER_H_ | 5 #ifndef IPC_IPC_CHANNEL_READER_H_ |
6 #define IPC_IPC_CHANNEL_READER_H_ | 6 #define IPC_IPC_CHANNEL_READER_H_ |
7 | 7 |
8 #include <set> | 8 #include <set> |
9 | 9 |
10 #include "base/gtest_prod_util.h" | 10 #include "base/gtest_prod_util.h" |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 virtual base::ProcessId GetSenderPID() = 0; | 122 virtual base::ProcessId GetSenderPID() = 0; |
123 | 123 |
124 // Whether the channel is an endpoint of attachment brokering. | 124 // Whether the channel is an endpoint of attachment brokering. |
125 virtual bool IsAttachmentBrokerEndpoint() = 0; | 125 virtual bool IsAttachmentBrokerEndpoint() = 0; |
126 | 126 |
127 private: | 127 private: |
128 FRIEND_TEST_ALL_PREFIXES(ChannelReaderTest, AttachmentAlreadyBrokered); | 128 FRIEND_TEST_ALL_PREFIXES(ChannelReaderTest, AttachmentAlreadyBrokered); |
129 FRIEND_TEST_ALL_PREFIXES(ChannelReaderTest, AttachmentNotYetBrokered); | 129 FRIEND_TEST_ALL_PREFIXES(ChannelReaderTest, AttachmentNotYetBrokered); |
130 FRIEND_TEST_ALL_PREFIXES(ChannelReaderTest, ResizeOverflowBuffer); | 130 FRIEND_TEST_ALL_PREFIXES(ChannelReaderTest, ResizeOverflowBuffer); |
131 FRIEND_TEST_ALL_PREFIXES(ChannelReaderTest, InvalidMessageSize); | 131 FRIEND_TEST_ALL_PREFIXES(ChannelReaderTest, InvalidMessageSize); |
| 132 FRIEND_TEST_ALL_PREFIXES(ChannelReaderTest, TrimBuffer); |
132 | 133 |
133 using AttachmentIdSet = std::set<BrokerableAttachment::AttachmentId>; | 134 using AttachmentIdSet = std::set<BrokerableAttachment::AttachmentId>; |
134 using AttachmentIdVector = std::vector<BrokerableAttachment::AttachmentId>; | 135 using AttachmentIdVector = std::vector<BrokerableAttachment::AttachmentId>; |
135 | 136 |
136 // Takes the data received from the IPC channel and translates it into | 137 // Takes the data received from the IPC channel and translates it into |
137 // Messages. Complete messages are passed to HandleTranslatedMessage(). | 138 // Messages. Complete messages are passed to HandleTranslatedMessage(). |
138 // Returns |false| on unrecoverable error. | 139 // Returns |false| on unrecoverable error. |
139 bool TranslateInputData(const char* input_data, int input_data_len); | 140 bool TranslateInputData(const char* input_data, int input_data_len); |
140 | 141 |
141 // Internal messages and messages bound for the attachment broker are | 142 // Internal messages and messages bound for the attachment broker are |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 Listener* listener_; | 189 Listener* listener_; |
189 | 190 |
190 // We read from the pipe into this buffer. Managed by DispatchInputData, do | 191 // We read from the pipe into this buffer. Managed by DispatchInputData, do |
191 // not access directly outside that function. | 192 // not access directly outside that function. |
192 char input_buf_[Channel::kReadBufferSize]; | 193 char input_buf_[Channel::kReadBufferSize]; |
193 | 194 |
194 // Large messages that span multiple pipe buffers, get built-up using | 195 // Large messages that span multiple pipe buffers, get built-up using |
195 // this buffer. | 196 // this buffer. |
196 std::string input_overflow_buf_; | 197 std::string input_overflow_buf_; |
197 | 198 |
| 199 // Maximum overflow buffer size, see Channel::kMaximumReadBufferSize. |
| 200 // This is not a constant because we update it to reflect the reality |
| 201 // of std::string::reserve() implementation. |
| 202 size_t max_input_buffer_size_; |
| 203 |
198 // These messages are waiting to be dispatched. If this vector is non-empty, | 204 // These messages are waiting to be dispatched. If this vector is non-empty, |
199 // then the front Message must be blocked on receiving an attachment from the | 205 // then the front Message must be blocked on receiving an attachment from the |
200 // AttachmentBroker. | 206 // AttachmentBroker. |
201 ScopedVector<Message> queued_messages_; | 207 ScopedVector<Message> queued_messages_; |
202 | 208 |
203 // If the next message to be processed is blocked by the broker, then this | 209 // If the next message to be processed is blocked by the broker, then this |
204 // set contains the AttachmentIds that are needed to unblock the message. | 210 // set contains the AttachmentIds that are needed to unblock the message. |
205 AttachmentIdSet blocked_ids_; | 211 AttachmentIdSet blocked_ids_; |
206 | 212 |
207 DISALLOW_COPY_AND_ASSIGN(ChannelReader); | 213 DISALLOW_COPY_AND_ASSIGN(ChannelReader); |
208 }; | 214 }; |
209 | 215 |
210 } // namespace internal | 216 } // namespace internal |
211 } // namespace IPC | 217 } // namespace IPC |
212 | 218 |
213 #endif // IPC_IPC_CHANNEL_READER_H_ | 219 #endif // IPC_IPC_CHANNEL_READER_H_ |
OLD | NEW |