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

Side by Side Diff: content/child/shared_memory_data_consumer_handle_unittest.cc

Issue 1164493008: Implement WebDataConsumerHandle::Reader. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "content/child/shared_memory_data_consumer_handle.h" 5 #include "content/child/shared_memory_data_consumer_handle.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 const base::Closure& on_done) 112 const base::Closure& on_done)
113 : handle_(handle.Pass()), 113 : handle_(handle.Pass()),
114 main_message_loop_(main_message_loop), 114 main_message_loop_(main_message_loop),
115 on_done_(on_done) {} 115 on_done_(on_done) {}
116 116
117 const std::string& result() const { return result_; } 117 const std::string& result() const { return result_; }
118 118
119 void ReadData() { 119 void ReadData() {
120 if (!client_) { 120 if (!client_) {
121 client_.reset(new ClientImpl(this)); 121 client_.reset(new ClientImpl(this));
122 handle_->registerClient(client_.get()); 122 reader_ = handle_->obtainReader(client_.get());
123 } 123 }
124 124
125 Result rv = kOk; 125 Result rv = kOk;
126 size_t read_size = 0; 126 size_t read_size = 0;
127 127
128 while (true) { 128 while (true) {
129 char buffer[16]; 129 char buffer[16];
130 rv = handle_->read(&buffer, sizeof(buffer), kNone, &read_size); 130 rv = reader_->read(&buffer, sizeof(buffer), kNone, &read_size);
131 if (rv != kOk) 131 if (rv != kOk)
132 break; 132 break;
133 result_.insert(result_.size(), &buffer[0], read_size); 133 result_.insert(result_.size(), &buffer[0], read_size);
134 } 134 }
135 135
136 if (rv == kShouldWait) { 136 if (rv == kShouldWait) {
137 // Wait a while... 137 // Wait a while...
138 return; 138 return;
139 } 139 }
140 140
141 if (rv != kDone) { 141 if (rv != kDone) {
142 // Something is wrong. 142 // Something is wrong.
143 result_ = "error"; 143 result_ = "error";
144 } 144 }
145 145
146 // The operation is done. 146 // The operation is done.
147 reader_.reset();
147 main_message_loop_->PostTask(FROM_HERE, on_done_); 148 main_message_loop_->PostTask(FROM_HERE, on_done_);
148 } 149 }
149 150
150 private: 151 private:
151 scoped_ptr<WebDataConsumerHandle> handle_; 152 scoped_ptr<WebDataConsumerHandle> handle_;
153 scoped_ptr<WebDataConsumerHandle::Reader> reader_;
152 scoped_ptr<WebDataConsumerHandle::Client> client_; 154 scoped_ptr<WebDataConsumerHandle::Client> client_;
153 base::MessageLoop* main_message_loop_; 155 base::MessageLoop* main_message_loop_;
154 base::Closure on_done_; 156 base::Closure on_done_;
155 std::string result_; 157 std::string result_;
156 }; 158 };
157 159
158 void SetUp() override { 160 void SetUp() override {
159 handle_.reset( 161 handle_.reset(
160 new SharedMemoryDataConsumerHandle(kApplyBackpressure, &writer_)); 162 new SharedMemoryDataConsumerHandle(kApplyBackpressure, &writer_));
161 } 163 }
162 164
163 StrictMock<MockClient> client_; 165 StrictMock<MockClient> client_;
164 scoped_ptr<WebDataConsumerHandle> handle_; 166 scoped_ptr<SharedMemoryDataConsumerHandle> handle_;
165 scoped_ptr<Writer> writer_; 167 scoped_ptr<Writer> writer_;
166 base::MessageLoop loop_; 168 base::MessageLoop loop_;
167 }; 169 };
168 170
169 class SharedMemoryDataConsumerHandleTest 171 class SharedMemoryDataConsumerHandleTest
170 : public ::testing::TestWithParam<BackpressureMode> { 172 : public ::testing::TestWithParam<BackpressureMode> {
171 protected: 173 protected:
172 void SetUp() override { 174 void SetUp() override {
173 handle_.reset(new SharedMemoryDataConsumerHandle(GetParam(), &writer_)); 175 handle_.reset(new SharedMemoryDataConsumerHandle(GetParam(), &writer_));
174 } 176 }
175 scoped_ptr<FixedReceivedData> NewFixedData(const char* s) { 177 scoped_ptr<FixedReceivedData> NewFixedData(const char* s) {
176 return make_scoped_ptr(new FixedReceivedData(s, strlen(s), strlen(s))); 178 return make_scoped_ptr(new FixedReceivedData(s, strlen(s), strlen(s)));
177 } 179 }
178 180
179 StrictMock<MockClient> client_; 181 StrictMock<MockClient> client_;
180 scoped_ptr<SharedMemoryDataConsumerHandle> handle_; 182 scoped_ptr<SharedMemoryDataConsumerHandle> handle_;
181 scoped_ptr<Writer> writer_; 183 scoped_ptr<Writer> writer_;
182 base::MessageLoop loop_; 184 base::MessageLoop loop_;
183 }; 185 };
184 186
185 TEST_P(SharedMemoryDataConsumerHandleTest, ReadFromEmpty) { 187 TEST_P(SharedMemoryDataConsumerHandleTest, ReadFromEmpty) {
186 char buffer[4]; 188 char buffer[4];
187 size_t read = 88; 189 size_t read = 88;
188 Result result = handle_->read(buffer, 4, kNone, &read); 190 auto reader = handle_->obtainReader(nullptr);
191 Result result = reader->read(buffer, 4, kNone, &read);
189 192
190 EXPECT_EQ(kShouldWait, result); 193 EXPECT_EQ(kShouldWait, result);
191 EXPECT_EQ(0u, read); 194 EXPECT_EQ(0u, read);
192 } 195 }
193 196
194 TEST_P(SharedMemoryDataConsumerHandleTest, AutoClose) { 197 TEST_P(SharedMemoryDataConsumerHandleTest, AutoClose) {
195 char buffer[4]; 198 char buffer[4];
196 size_t read = 88; 199 size_t read = 88;
197 200
198 writer_.reset(); 201 writer_.reset();
199 Result result = handle_->read(buffer, 4, kNone, &read); 202 auto reader = handle_->obtainReader(nullptr);
203 Result result = reader->read(buffer, 4, kNone, &read);
200 204
201 EXPECT_EQ(kDone, result); 205 EXPECT_EQ(kDone, result);
202 EXPECT_EQ(0u, read); 206 EXPECT_EQ(0u, read);
203 } 207 }
204 208
205 TEST_P(SharedMemoryDataConsumerHandleTest, ReadSimple) { 209 TEST_P(SharedMemoryDataConsumerHandleTest, ReadSimple) {
206 writer_->AddData(NewFixedData("hello")); 210 writer_->AddData(NewFixedData("hello"));
207 211
208 char buffer[4] = {}; 212 char buffer[4] = {};
209 size_t read = 88; 213 size_t read = 88;
210 Result result = handle_->read(buffer, 3, kNone, &read); 214 auto reader = handle_->obtainReader(nullptr);
215 Result result = reader->read(buffer, 3, kNone, &read);
211 216
212 EXPECT_EQ(kOk, result); 217 EXPECT_EQ(kOk, result);
213 EXPECT_EQ(3u, read); 218 EXPECT_EQ(3u, read);
214 EXPECT_STREQ("hel", buffer); 219 EXPECT_STREQ("hel", buffer);
215 220
216 result = handle_->read(buffer, 3, kNone, &read); 221 result = reader->read(buffer, 3, kNone, &read);
217 EXPECT_EQ(kOk, result); 222 EXPECT_EQ(kOk, result);
218 EXPECT_EQ(2u, read); 223 EXPECT_EQ(2u, read);
219 EXPECT_STREQ("lol", buffer); 224 EXPECT_STREQ("lol", buffer);
220 225
221 result = handle_->read(buffer, 3, kNone, &read); 226 result = reader->read(buffer, 3, kNone, &read);
222 EXPECT_EQ(kShouldWait, result); 227 EXPECT_EQ(kShouldWait, result);
223 EXPECT_EQ(0u, read); 228 EXPECT_EQ(0u, read);
224 229
225 writer_->Close(); 230 writer_->Close();
226 231
227 result = handle_->read(buffer, 3, kNone, &read); 232 result = reader->read(buffer, 3, kNone, &read);
228 EXPECT_EQ(kDone, result); 233 EXPECT_EQ(kDone, result);
229 EXPECT_EQ(0u, read); 234 EXPECT_EQ(0u, read);
230 } 235 }
231 236
232 TEST_P(SharedMemoryDataConsumerHandleTest, CloseBeforeReading) { 237 TEST_P(SharedMemoryDataConsumerHandleTest, CloseBeforeReading) {
233 writer_->AddData(NewFixedData("hello")); 238 writer_->AddData(NewFixedData("hello"));
234 writer_->Close(); 239 writer_->Close();
235 240
236 char buffer[20] = {}; 241 char buffer[20] = {};
237 size_t read = 88; 242 size_t read = 88;
238 Result result = handle_->read(buffer, sizeof(buffer), kNone, &read); 243 auto reader = handle_->obtainReader(nullptr);
244 Result result = reader->read(buffer, sizeof(buffer), kNone, &read);
239 245
240 EXPECT_EQ(kOk, result); 246 EXPECT_EQ(kOk, result);
241 EXPECT_EQ(5u, read); 247 EXPECT_EQ(5u, read);
242 EXPECT_STREQ("hello", buffer); 248 EXPECT_STREQ("hello", buffer);
243 249
244 result = handle_->read(buffer, sizeof(buffer), kNone, &read); 250 result = reader->read(buffer, sizeof(buffer), kNone, &read);
245 EXPECT_EQ(kDone, result); 251 EXPECT_EQ(kDone, result);
246 EXPECT_EQ(0u, read); 252 EXPECT_EQ(0u, read);
247 } 253 }
248 254
249 TEST_P(SharedMemoryDataConsumerHandleTest, AddMultipleData) { 255 TEST_P(SharedMemoryDataConsumerHandleTest, AddMultipleData) {
250 writer_->AddData(NewFixedData("Once ")); 256 writer_->AddData(NewFixedData("Once "));
251 writer_->AddData(NewFixedData("upon ")); 257 writer_->AddData(NewFixedData("upon "));
252 writer_->AddData(NewFixedData("a ")); 258 writer_->AddData(NewFixedData("a "));
253 writer_->AddData(NewFixedData("time ")); 259 writer_->AddData(NewFixedData("time "));
254 writer_->AddData(NewFixedData("there ")); 260 writer_->AddData(NewFixedData("there "));
255 writer_->AddData(NewFixedData("was ")); 261 writer_->AddData(NewFixedData("was "));
256 writer_->AddData(NewFixedData("a ")); 262 writer_->AddData(NewFixedData("a "));
257 writer_->Close(); 263 writer_->Close();
258 264
259 char buffer[20]; 265 char buffer[20];
260 size_t read; 266 size_t read;
261 Result result; 267 Result result;
262 268
269 auto reader = handle_->obtainReader(nullptr);
263 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); 270 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0);
264 result = handle_->read(buffer, 6, kNone, &read); 271 result = reader->read(buffer, 6, kNone, &read);
265 EXPECT_EQ(kOk, result); 272 EXPECT_EQ(kOk, result);
266 EXPECT_EQ(6u, read); 273 EXPECT_EQ(6u, read);
267 EXPECT_STREQ("Once u", buffer); 274 EXPECT_STREQ("Once u", buffer);
268 275
269 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); 276 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0);
270 result = handle_->read(buffer, 2, kNone, &read); 277 result = reader->read(buffer, 2, kNone, &read);
271 EXPECT_EQ(kOk, result); 278 EXPECT_EQ(kOk, result);
272 EXPECT_EQ(2u, read); 279 EXPECT_EQ(2u, read);
273 EXPECT_STREQ("po", buffer); 280 EXPECT_STREQ("po", buffer);
274 281
275 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); 282 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0);
276 result = handle_->read(buffer, 9, kNone, &read); 283 result = reader->read(buffer, 9, kNone, &read);
277 EXPECT_EQ(kOk, result); 284 EXPECT_EQ(kOk, result);
278 EXPECT_EQ(9u, read); 285 EXPECT_EQ(9u, read);
279 EXPECT_STREQ("n a time ", buffer); 286 EXPECT_STREQ("n a time ", buffer);
280 287
281 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); 288 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0);
282 result = handle_->read(buffer, 3, kNone, &read); 289 result = reader->read(buffer, 3, kNone, &read);
283 EXPECT_EQ(kOk, result); 290 EXPECT_EQ(kOk, result);
284 EXPECT_EQ(3u, read); 291 EXPECT_EQ(3u, read);
285 EXPECT_STREQ("the", buffer); 292 EXPECT_STREQ("the", buffer);
286 293
287 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); 294 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0);
288 result = handle_->read(buffer, 20, kNone, &read); 295 result = reader->read(buffer, 20, kNone, &read);
289 EXPECT_EQ(kOk, result); 296 EXPECT_EQ(kOk, result);
290 EXPECT_EQ(9u, read); 297 EXPECT_EQ(9u, read);
291 EXPECT_STREQ("re was a ", buffer); 298 EXPECT_STREQ("re was a ", buffer);
292 299
293 result = handle_->read(buffer, sizeof(buffer), kNone, &read); 300 result = reader->read(buffer, sizeof(buffer), kNone, &read);
294 EXPECT_EQ(kDone, result); 301 EXPECT_EQ(kDone, result);
295 EXPECT_EQ(0u, read); 302 EXPECT_EQ(0u, read);
296 } 303 }
297 304
298 TEST_P(SharedMemoryDataConsumerHandleTest, AddMultipleDataInteractively) { 305 TEST_P(SharedMemoryDataConsumerHandleTest, AddMultipleDataInteractively) {
299 writer_->AddData(NewFixedData("Once ")); 306 writer_->AddData(NewFixedData("Once "));
300 writer_->AddData(NewFixedData("upon ")); 307 writer_->AddData(NewFixedData("upon "));
301 308
302 char buffer[20]; 309 char buffer[20];
303 size_t read; 310 size_t read;
304 Result result; 311 Result result;
305 312
313 auto reader = handle_->obtainReader(nullptr);
306 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); 314 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0);
307 result = handle_->read(buffer, 6, kNone, &read); 315 result = reader->read(buffer, 6, kNone, &read);
308 EXPECT_EQ(kOk, result); 316 EXPECT_EQ(kOk, result);
309 EXPECT_EQ(6u, read); 317 EXPECT_EQ(6u, read);
310 EXPECT_STREQ("Once u", buffer); 318 EXPECT_STREQ("Once u", buffer);
311 319
312 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); 320 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0);
313 result = handle_->read(buffer, 2, kNone, &read); 321 result = reader->read(buffer, 2, kNone, &read);
314 EXPECT_EQ(kOk, result); 322 EXPECT_EQ(kOk, result);
315 EXPECT_EQ(2u, read); 323 EXPECT_EQ(2u, read);
316 EXPECT_STREQ("po", buffer); 324 EXPECT_STREQ("po", buffer);
317 325
318 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); 326 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0);
319 result = handle_->read(buffer, 9, kNone, &read); 327 result = reader->read(buffer, 9, kNone, &read);
320 EXPECT_EQ(kOk, result); 328 EXPECT_EQ(kOk, result);
321 EXPECT_EQ(2u, read); 329 EXPECT_EQ(2u, read);
322 EXPECT_STREQ("n ", buffer); 330 EXPECT_STREQ("n ", buffer);
323 331
324 writer_->AddData(NewFixedData("a ")); 332 writer_->AddData(NewFixedData("a "));
325 333
326 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); 334 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0);
327 result = handle_->read(buffer, 1, kNone, &read); 335 result = reader->read(buffer, 1, kNone, &read);
328 EXPECT_EQ(kOk, result); 336 EXPECT_EQ(kOk, result);
329 EXPECT_EQ(1u, read); 337 EXPECT_EQ(1u, read);
330 EXPECT_STREQ("a", buffer); 338 EXPECT_STREQ("a", buffer);
331 339
332 writer_->AddData(NewFixedData("time ")); 340 writer_->AddData(NewFixedData("time "));
333 writer_->AddData(NewFixedData("there ")); 341 writer_->AddData(NewFixedData("there "));
334 writer_->AddData(NewFixedData("was ")); 342 writer_->AddData(NewFixedData("was "));
335 writer_->AddData(NewFixedData("a ")); 343 writer_->AddData(NewFixedData("a "));
336 writer_->Close(); 344 writer_->Close();
337 345
338 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); 346 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0);
339 result = handle_->read(buffer, 9, kNone, &read); 347 result = reader->read(buffer, 9, kNone, &read);
340 EXPECT_EQ(kOk, result); 348 EXPECT_EQ(kOk, result);
341 EXPECT_EQ(9u, read); 349 EXPECT_EQ(9u, read);
342 EXPECT_STREQ(" time the", buffer); 350 EXPECT_STREQ(" time the", buffer);
343 351
344 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); 352 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0);
345 result = handle_->read(buffer, 20, kNone, &read); 353 result = reader->read(buffer, 20, kNone, &read);
346 EXPECT_EQ(kOk, result); 354 EXPECT_EQ(kOk, result);
347 EXPECT_EQ(9u, read); 355 EXPECT_EQ(9u, read);
348 EXPECT_STREQ("re was a ", buffer); 356 EXPECT_STREQ("re was a ", buffer);
349 357
350 result = handle_->read(buffer, sizeof(buffer), kNone, &read); 358 result = reader->read(buffer, sizeof(buffer), kNone, &read);
351 EXPECT_EQ(kDone, result); 359 EXPECT_EQ(kDone, result);
352 EXPECT_EQ(0u, read); 360 EXPECT_EQ(0u, read);
353 } 361 }
354 362
355 TEST_P(SharedMemoryDataConsumerHandleTest, RegisterClient) { 363 TEST_P(SharedMemoryDataConsumerHandleTest, RegisterClient) {
356 Checkpoint checkpoint; 364 Checkpoint checkpoint;
357 365
358 InSequence s; 366 InSequence s;
359 EXPECT_CALL(checkpoint, Call(0)); 367 EXPECT_CALL(checkpoint, Call(0));
360 EXPECT_CALL(checkpoint, Call(1)); 368 EXPECT_CALL(checkpoint, Call(1));
361 EXPECT_CALL(client_, didGetReadable()); 369 EXPECT_CALL(client_, didGetReadable());
362 EXPECT_CALL(checkpoint, Call(2)); 370 EXPECT_CALL(checkpoint, Call(2));
363 371
364 checkpoint.Call(0); 372 checkpoint.Call(0);
365 handle_->registerClient(&client_); 373 auto reader = handle_->obtainReader(&client_);
366 checkpoint.Call(1); 374 checkpoint.Call(1);
367 writer_->Close(); 375 writer_->Close();
368 checkpoint.Call(2); 376 checkpoint.Call(2);
369 } 377 }
370 378
371 TEST_P(SharedMemoryDataConsumerHandleTest, RegisterClientWhenDataExists) { 379 TEST_P(SharedMemoryDataConsumerHandleTest, RegisterClientWhenDataExists) {
372 Checkpoint checkpoint; 380 Checkpoint checkpoint;
373 381
374 InSequence s; 382 InSequence s;
375 EXPECT_CALL(checkpoint, Call(0)); 383 EXPECT_CALL(checkpoint, Call(0));
376 EXPECT_CALL(checkpoint, Call(1)); 384 EXPECT_CALL(checkpoint, Call(1));
377 EXPECT_CALL(client_, didGetReadable());
378 EXPECT_CALL(checkpoint, Call(2)); 385 EXPECT_CALL(checkpoint, Call(2));
379 386
380 checkpoint.Call(0); 387 checkpoint.Call(0);
381 writer_->AddData(NewFixedData("Once ")); 388 writer_->AddData(NewFixedData("Once "));
382 checkpoint.Call(1); 389 checkpoint.Call(1);
383 handle_->registerClient(&client_); 390 auto reader = handle_->obtainReader(&client_);
384 checkpoint.Call(2); 391 checkpoint.Call(2);
385 } 392 }
386 393
387 TEST_P(SharedMemoryDataConsumerHandleTest, AddDataWhenClientIsRegistered) { 394 TEST_P(SharedMemoryDataConsumerHandleTest, AddDataWhenClientIsRegistered) {
388 Checkpoint checkpoint; 395 Checkpoint checkpoint;
389 char buffer[20]; 396 char buffer[20];
390 Result result; 397 Result result;
391 size_t size; 398 size_t size;
392 399
393 InSequence s; 400 InSequence s;
394 EXPECT_CALL(checkpoint, Call(0)); 401 EXPECT_CALL(checkpoint, Call(0));
395 EXPECT_CALL(checkpoint, Call(1)); 402 EXPECT_CALL(checkpoint, Call(1));
396 EXPECT_CALL(client_, didGetReadable()); 403 EXPECT_CALL(client_, didGetReadable());
397 EXPECT_CALL(checkpoint, Call(2)); 404 EXPECT_CALL(checkpoint, Call(2));
398 EXPECT_CALL(checkpoint, Call(3)); 405 EXPECT_CALL(checkpoint, Call(3));
399 EXPECT_CALL(checkpoint, Call(4)); 406 EXPECT_CALL(checkpoint, Call(4));
400 EXPECT_CALL(client_, didGetReadable()); 407 EXPECT_CALL(client_, didGetReadable());
401 EXPECT_CALL(checkpoint, Call(5)); 408 EXPECT_CALL(checkpoint, Call(5));
402 409
403 checkpoint.Call(0); 410 checkpoint.Call(0);
404 handle_->registerClient(&client_); 411 auto reader = handle_->obtainReader(&client_);
405 checkpoint.Call(1); 412 checkpoint.Call(1);
406 writer_->AddData(NewFixedData("Once ")); 413 writer_->AddData(NewFixedData("Once "));
407 checkpoint.Call(2); 414 checkpoint.Call(2);
408 writer_->AddData(NewFixedData("upon ")); 415 writer_->AddData(NewFixedData("upon "));
409 checkpoint.Call(3); 416 checkpoint.Call(3);
410 result = handle_->read(buffer, sizeof(buffer), kNone, &size); 417 result = reader->read(buffer, sizeof(buffer), kNone, &size);
411 EXPECT_EQ(kOk, result); 418 EXPECT_EQ(kOk, result);
412 EXPECT_EQ(10u, size); 419 EXPECT_EQ(10u, size);
413 checkpoint.Call(4); 420 checkpoint.Call(4);
414 writer_->AddData(NewFixedData("a ")); 421 writer_->AddData(NewFixedData("a "));
415 checkpoint.Call(5); 422 checkpoint.Call(5);
416 } 423 }
417 424
418 TEST_P(SharedMemoryDataConsumerHandleTest, CloseWithClientAndData) { 425 TEST_P(SharedMemoryDataConsumerHandleTest, CloseWithClientAndData) {
419 Checkpoint checkpoint; 426 Checkpoint checkpoint;
420 427
421 InSequence s; 428 InSequence s;
422 EXPECT_CALL(checkpoint, Call(0)); 429 EXPECT_CALL(checkpoint, Call(0));
423 EXPECT_CALL(checkpoint, Call(1)); 430 EXPECT_CALL(checkpoint, Call(1));
424 EXPECT_CALL(client_, didGetReadable()); 431 EXPECT_CALL(client_, didGetReadable());
425 EXPECT_CALL(checkpoint, Call(2)); 432 EXPECT_CALL(checkpoint, Call(2));
426 EXPECT_CALL(checkpoint, Call(3)); 433 EXPECT_CALL(checkpoint, Call(3));
427 434
428 checkpoint.Call(0); 435 checkpoint.Call(0);
429 handle_->registerClient(&client_); 436 auto reader = handle_->obtainReader(&client_);
430 checkpoint.Call(1); 437 checkpoint.Call(1);
431 writer_->AddData(NewFixedData("Once ")); 438 writer_->AddData(NewFixedData("Once "));
432 checkpoint.Call(2); 439 checkpoint.Call(2);
433 writer_->Close(); 440 writer_->Close();
434 checkpoint.Call(3); 441 checkpoint.Call(3);
435 } 442 }
436 443
437 TEST_P(SharedMemoryDataConsumerHandleTest, UnregisterClient) { 444 TEST_P(SharedMemoryDataConsumerHandleTest, ReleaseReader) {
438 Checkpoint checkpoint; 445 Checkpoint checkpoint;
439 446
440 InSequence s; 447 InSequence s;
441 EXPECT_CALL(checkpoint, Call(0)); 448 EXPECT_CALL(checkpoint, Call(0));
442 EXPECT_CALL(checkpoint, Call(1)); 449 EXPECT_CALL(checkpoint, Call(1));
443 EXPECT_CALL(checkpoint, Call(2)); 450 EXPECT_CALL(checkpoint, Call(2));
444 451
445 checkpoint.Call(0); 452 checkpoint.Call(0);
446 handle_->registerClient(&client_); 453 auto reader = handle_->obtainReader(&client_);
447 checkpoint.Call(1); 454 checkpoint.Call(1);
448 handle_->unregisterClient(); 455 reader.reset();
449 writer_->AddData(NewFixedData("Once ")); 456 writer_->AddData(NewFixedData("Once "));
450 checkpoint.Call(2); 457 checkpoint.Call(2);
451 } 458 }
452 459
453 TEST_P(SharedMemoryDataConsumerHandleTest, TwoPhaseReadShouldWait) { 460 TEST_P(SharedMemoryDataConsumerHandleTest, TwoPhaseReadShouldWait) {
454 Result result; 461 Result result;
455 const void* buffer = &result; 462 const void* buffer = &result;
456 size_t size = 99; 463 size_t size = 99;
457 464
458 result = handle_->beginRead(&buffer, kNone, &size); 465 auto reader = handle_->obtainReader(nullptr);
466 result = reader->beginRead(&buffer, kNone, &size);
459 EXPECT_EQ(kShouldWait, result); 467 EXPECT_EQ(kShouldWait, result);
460 EXPECT_EQ(nullptr, buffer); 468 EXPECT_EQ(nullptr, buffer);
461 EXPECT_EQ(0u, size); 469 EXPECT_EQ(0u, size);
462 } 470 }
463 471
464 TEST_P(SharedMemoryDataConsumerHandleTest, TwoPhaseReadSimple) { 472 TEST_P(SharedMemoryDataConsumerHandleTest, TwoPhaseReadSimple) {
465 writer_->AddData(NewFixedData("Once ")); 473 writer_->AddData(NewFixedData("Once "));
466 474
467 Result result; 475 Result result;
468 const void* buffer = &result; 476 const void* buffer = &result;
469 size_t size = 99; 477 size_t size = 99;
470 478
471 result = handle_->beginRead(&buffer, kNone, &size); 479 auto reader = handle_->obtainReader(nullptr);
480 result = reader->beginRead(&buffer, kNone, &size);
472 EXPECT_EQ(kOk, result); 481 EXPECT_EQ(kOk, result);
473 EXPECT_EQ(5u, size); 482 EXPECT_EQ(5u, size);
474 EXPECT_EQ("Once ", ToString(buffer, 5)); 483 EXPECT_EQ("Once ", ToString(buffer, 5));
475 484
476 handle_->endRead(1); 485 reader->endRead(1);
477 486
478 result = handle_->beginRead(&buffer, kNone, &size); 487 result = reader->beginRead(&buffer, kNone, &size);
479 EXPECT_EQ(kOk, result); 488 EXPECT_EQ(kOk, result);
480 EXPECT_EQ(4u, size); 489 EXPECT_EQ(4u, size);
481 EXPECT_EQ("nce ", ToString(buffer, 4)); 490 EXPECT_EQ("nce ", ToString(buffer, 4));
482 491
483 handle_->endRead(4); 492 reader->endRead(4);
484 493
485 result = handle_->beginRead(&buffer, kNone, &size); 494 result = reader->beginRead(&buffer, kNone, &size);
486 EXPECT_EQ(kShouldWait, result); 495 EXPECT_EQ(kShouldWait, result);
487 EXPECT_EQ(0u, size); 496 EXPECT_EQ(0u, size);
488 EXPECT_EQ(nullptr, buffer); 497 EXPECT_EQ(nullptr, buffer);
489 498
490 writer_->Close(); 499 writer_->Close();
491 500
492 result = handle_->beginRead(&buffer, kNone, &size); 501 result = reader->beginRead(&buffer, kNone, &size);
493 EXPECT_EQ(kDone, result); 502 EXPECT_EQ(kDone, result);
494 EXPECT_EQ(0u, size); 503 EXPECT_EQ(0u, size);
495 EXPECT_EQ(nullptr, buffer); 504 EXPECT_EQ(nullptr, buffer);
496 } 505 }
497 506
498 TEST_P(SharedMemoryDataConsumerHandleTest, TwoPhaseReadWithMultipleData) { 507 TEST_P(SharedMemoryDataConsumerHandleTest, TwoPhaseReadWithMultipleData) {
499 writer_->AddData(NewFixedData("Once ")); 508 writer_->AddData(NewFixedData("Once "));
500 writer_->AddData(NewFixedData("upon ")); 509 writer_->AddData(NewFixedData("upon "));
501 510
502 Result result; 511 Result result;
503 const void* buffer = &result; 512 const void* buffer = &result;
504 size_t size = 99; 513 size_t size = 99;
505 514
506 result = handle_->beginRead(&buffer, kNone, &size); 515 auto reader = handle_->obtainReader(nullptr);
516 result = reader->beginRead(&buffer, kNone, &size);
507 EXPECT_EQ(kOk, result); 517 EXPECT_EQ(kOk, result);
508 EXPECT_EQ(5u, size); 518 EXPECT_EQ(5u, size);
509 EXPECT_EQ("Once ", ToString(buffer, 5)); 519 EXPECT_EQ("Once ", ToString(buffer, 5));
510 520
511 handle_->endRead(1); 521 reader->endRead(1);
512 522
513 result = handle_->beginRead(&buffer, kNone, &size); 523 result = reader->beginRead(&buffer, kNone, &size);
514 EXPECT_EQ(kOk, result); 524 EXPECT_EQ(kOk, result);
515 EXPECT_EQ(4u, size); 525 EXPECT_EQ(4u, size);
516 EXPECT_EQ("nce ", ToString(buffer, 4)); 526 EXPECT_EQ("nce ", ToString(buffer, 4));
517 527
518 handle_->endRead(4); 528 reader->endRead(4);
519 529
520 result = handle_->beginRead(&buffer, kNone, &size); 530 result = reader->beginRead(&buffer, kNone, &size);
521 EXPECT_EQ(kOk, result); 531 EXPECT_EQ(kOk, result);
522 EXPECT_EQ(5u, size); 532 EXPECT_EQ(5u, size);
523 EXPECT_EQ("upon ", ToString(buffer, 5)); 533 EXPECT_EQ("upon ", ToString(buffer, 5));
524 534
525 handle_->endRead(5); 535 reader->endRead(5);
526 536
527 result = handle_->beginRead(&buffer, kNone, &size); 537 result = reader->beginRead(&buffer, kNone, &size);
528 EXPECT_EQ(kShouldWait, result); 538 EXPECT_EQ(kShouldWait, result);
529 EXPECT_EQ(0u, size); 539 EXPECT_EQ(0u, size);
530 EXPECT_EQ(nullptr, buffer); 540 EXPECT_EQ(nullptr, buffer);
531 541
532 writer_->Close(); 542 writer_->Close();
533 543
534 result = handle_->beginRead(&buffer, kNone, &size); 544 result = reader->beginRead(&buffer, kNone, &size);
535 EXPECT_EQ(kDone, result); 545 EXPECT_EQ(kDone, result);
536 EXPECT_EQ(0u, size); 546 EXPECT_EQ(0u, size);
537 EXPECT_EQ(nullptr, buffer); 547 EXPECT_EQ(nullptr, buffer);
538 } 548 }
539 549
540 TEST(SharedMemoryDataConsumerHandleBackpressureTest, Read) { 550 TEST(SharedMemoryDataConsumerHandleBackpressureTest, Read) {
541 base::MessageLoop loop; 551 base::MessageLoop loop;
542 char buffer[20]; 552 char buffer[20];
543 Result result; 553 Result result;
544 size_t size; 554 size_t size;
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
685 logger->log()); 695 logger->log());
686 } 696 }
687 697
688 INSTANTIATE_TEST_CASE_P(SharedMemoryDataConsumerHandleTest, 698 INSTANTIATE_TEST_CASE_P(SharedMemoryDataConsumerHandleTest,
689 SharedMemoryDataConsumerHandleTest, 699 SharedMemoryDataConsumerHandleTest,
690 ::testing::Values(kApplyBackpressure, 700 ::testing::Values(kApplyBackpressure,
691 kDoNotApplyBackpressure)); 701 kDoNotApplyBackpressure));
692 } // namespace 702 } // namespace
693 703
694 } // namespace content 704 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698