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

Side by Side Diff: Source/modules/fetch/CompositeDataConsumerHandleTest.cpp

Issue 1176243004: Add FetchDataConsumerHandle and utility functions/classes (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Build break fix. 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 "config.h" 5 #include "config.h"
6 #include "modules/fetch/CompositeDataConsumerHandle.h" 6 #include "modules/fetch/CompositeDataConsumerHandle.h"
7 7
8 #include "modules/fetch/DataConsumerHandleTestUtil.h"
8 #include "platform/Task.h" 9 #include "platform/Task.h"
9 #include "platform/ThreadSafeFunctional.h" 10 #include "platform/ThreadSafeFunctional.h"
10 #include "platform/heap/Handle.h" 11 #include "platform/heap/Handle.h"
11 #include "public/platform/Platform.h" 12 #include "public/platform/Platform.h"
12 #include "public/platform/WebThread.h" 13 #include "public/platform/WebThread.h"
13 #include "public/platform/WebTraceLocation.h" 14 #include "public/platform/WebTraceLocation.h"
14 #include "public/platform/WebWaitableEvent.h" 15 #include "public/platform/WebWaitableEvent.h"
15 #include "wtf/Locker.h" 16 #include "wtf/Locker.h"
16 17
17 #include <gmock/gmock.h> 18 #include <gmock/gmock.h>
18 #include <gtest/gtest.h> 19 #include <gtest/gtest.h>
19 20
20 namespace blink { 21 namespace blink {
21 22
22 namespace { 23 namespace {
23 24
24 using Result = WebDataConsumerHandle::Result;
25 using Flags = WebDataConsumerHandle::Flags;
26 using ::testing::InSequence; 25 using ::testing::InSequence;
27 using ::testing::Return; 26 using ::testing::Return;
28 using ::testing::StrictMock; 27 using ::testing::StrictMock;
29 using Checkpoint = StrictMock<::testing::MockFunction<void(int)>>; 28 using Checkpoint = StrictMock<::testing::MockFunction<void(int)>>;
30 29
31 const Result kShouldWait = WebDataConsumerHandle::ShouldWait; 30 const WebDataConsumerHandle::Result kShouldWait = WebDataConsumerHandle::ShouldW ait;
32 const Result kDone = WebDataConsumerHandle::Done; 31 const WebDataConsumerHandle::Result kOk = WebDataConsumerHandle::Ok;
33 const Result kOk = WebDataConsumerHandle::Ok; 32 const WebDataConsumerHandle::Flags kNone = WebDataConsumerHandle::FlagNone;
34 const Result kUnexpectedError = WebDataConsumerHandle::UnexpectedError;
35 const Flags kNone = WebDataConsumerHandle::FlagNone;
36
37 class NoopClient final : public WebDataConsumerHandle::Client {
38 public:
39 void didGetReadable() override { }
40 };
41 33
42 class MockReader : public WebDataConsumerHandle::Reader { 34 class MockReader : public WebDataConsumerHandle::Reader {
43 public: 35 public:
44 static PassOwnPtr<StrictMock<MockReader>> create() { return adoptPtr(new Str ictMock<MockReader>); } 36 static PassOwnPtr<StrictMock<MockReader>> create() { return adoptPtr(new Str ictMock<MockReader>); }
45 37
38 using Result = WebDataConsumerHandle::Result;
39 using Flags = WebDataConsumerHandle::Flags;
46 MOCK_METHOD4(read, Result(void*, size_t, Flags, size_t*)); 40 MOCK_METHOD4(read, Result(void*, size_t, Flags, size_t*));
47 MOCK_METHOD3(beginRead, Result(const void**, Flags, size_t*)); 41 MOCK_METHOD3(beginRead, Result(const void**, Flags, size_t*));
48 MOCK_METHOD1(endRead, Result(size_t)); 42 MOCK_METHOD1(endRead, Result(size_t));
49 }; 43 };
50 44
51 class MockHandle : public WebDataConsumerHandle { 45 class MockHandle : public WebDataConsumerHandle {
52 public: 46 public:
53 static PassOwnPtr<StrictMock<MockHandle>> create() { return adoptPtr(new Str ictMock<MockHandle>); } 47 static PassOwnPtr<StrictMock<MockHandle>> create() { return adoptPtr(new Str ictMock<MockHandle>); }
54 48
55 MOCK_METHOD1(obtainReaderInternal, Reader*(Client*)); 49 MOCK_METHOD1(obtainReaderInternal, Reader*(Client*));
56 }; 50 };
57 51
58 class ThreadingTestBase : public ThreadSafeRefCounted<ThreadingTestBase> { 52 class ThreadingRegistrationTest : public DataConsumerHandleTestUtil::ThreadingTe stBase {
59 public:
60 class Context : public ThreadSafeRefCounted<Context> {
61 public:
62 static PassRefPtr<Context> create() { return adoptRef(new Context); }
63 void recordAttach(const String& handle)
64 {
65 MutexLocker locker(m_loggingMutex);
66 m_result.append("A reader is attached to " + handle + " on " + curre ntThreadName() + ".\n");
67 }
68 void recordDetach(const String& handle)
69 {
70 MutexLocker locker(m_loggingMutex);
71 m_result.append("A reader is detached from " + handle + " on " + cur rentThreadName() + ".\n");
72 }
73
74 const String& result()
75 {
76 MutexLocker locker(m_loggingMutex);
77 return m_result;
78 }
79 WebThread* readingThread() { return m_readingThread.get(); }
80 WebThread* updatingThread() { return m_updatingThread.get(); }
81
82 private:
83 Context()
84 : m_readingThread(adoptPtr(Platform::current()->createThread("readin g thread")))
85 , m_updatingThread(adoptPtr(Platform::current()->createThread("updat ing thread")))
86 {
87 }
88 String currentThreadName()
89 {
90 if (m_readingThread->isCurrentThread())
91 return "the reading thread";
92 if (m_updatingThread->isCurrentThread())
93 return "the updating thread";
94 return "an unknown thread";
95 }
96
97 OwnPtr<WebThread> m_readingThread;
98 OwnPtr<WebThread> m_updatingThread;
99 Mutex m_loggingMutex;
100 String m_result;
101 };
102
103 class ReaderImpl final : public WebDataConsumerHandle::Reader {
104 public:
105 ReaderImpl(const String& name, PassRefPtr<Context> context) : m_name(nam e.isolatedCopy()), m_context(context)
106 {
107 m_context->recordAttach(m_name.isolatedCopy());
108 }
109 ~ReaderImpl() override { m_context->recordDetach(m_name.isolatedCopy()); }
110 Result read(void*, size_t, Flags, size_t*) override { return kShouldWait ; }
111 Result beginRead(const void**, Flags, size_t*) override { return kShould Wait; }
112 Result endRead(size_t) override { return kUnexpectedError; }
113
114 private:
115 const String m_name;
116 RefPtr<Context> m_context;
117 };
118 class DataConsumerHandle final : public WebDataConsumerHandle {
119 public:
120 DataConsumerHandle(const String& name, PassRefPtr<Context> context) : m_ name(name.isolatedCopy()), m_context(context) { }
121
122 private:
123 Reader* obtainReaderInternal(Client*) { return new ReaderImpl(m_name, m_ context); }
124 const String m_name;
125 RefPtr<Context> m_context;
126 };
127
128 void resetReader() { m_reader = nullptr; }
129 void signalDone() { m_waitableEvent->signal(); }
130 const String& result() { return m_context->result(); }
131 WebThread* readingThread() { return m_context->readingThread(); }
132 WebThread* updatingThread() { return m_context->updatingThread(); }
133
134 protected:
135 RefPtr<Context> m_context;
136 OwnPtr<CompositeDataConsumerHandle> m_handle;
137 OwnPtr<WebDataConsumerHandle::Reader> m_reader;
138 OwnPtr<WebWaitableEvent> m_waitableEvent;
139 NoopClient m_client;
140 };
141
142 class ThreadingRegistrationTest : public ThreadingTestBase {
143 public: 53 public:
144 using Self = ThreadingRegistrationTest; 54 using Self = ThreadingRegistrationTest;
145 void run() 55 void run()
146 { 56 {
147 m_context = Context::create(); 57 m_context = Context::create();
148 m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent()); 58 m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent());
149 m_handle = CompositeDataConsumerHandle::create(adoptPtr(new DataConsumer Handle("handle1", m_context))); 59 m_handle = CompositeDataConsumerHandle::create(adoptPtr(new DataConsumer Handle("handle1", m_context)));
150 60
151 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::obta inReader, this))); 61 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::obta inReader, this)));
152 62
153 m_waitableEvent->wait(); 63 m_waitableEvent->wait();
154 } 64 }
155 65
156 private: 66 private:
157 void obtainReader() 67 void obtainReader()
158 { 68 {
159 m_reader = m_handle->obtainReader(&m_client); 69 m_reader = m_handle->obtainReader(&m_client);
160 updatingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::upd ate, this))); 70 updatingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::upd ate, this)));
161 } 71 }
162 void update() 72 void update()
163 { 73 {
164 m_handle->update(adoptPtr(new DataConsumerHandle("handle2", m_context))) ; 74 m_handle->update(adoptPtr(new DataConsumerHandle("handle2", m_context))) ;
165 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::rese tReader, this))); 75 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::rese tReader, this)));
166 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::sign alDone, this))); 76 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::sign alDone, this)));
167 } 77 }
78
79 OwnPtr<CompositeDataConsumerHandle> m_handle;
168 }; 80 };
169 81
170 class ThreadingRegistrationDeleteHandleTest : public ThreadingTestBase { 82 class ThreadingRegistrationDeleteHandleTest : public DataConsumerHandleTestUtil: :ThreadingTestBase {
171 public: 83 public:
172 using Self = ThreadingRegistrationDeleteHandleTest; 84 using Self = ThreadingRegistrationDeleteHandleTest;
173 void run() 85 void run()
174 { 86 {
175 m_context = Context::create(); 87 m_context = Context::create();
176 m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent()); 88 m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent());
177 m_handle = CompositeDataConsumerHandle::create(adoptPtr(new DataConsumer Handle("handle1", m_context))); 89 m_handle = CompositeDataConsumerHandle::create(adoptPtr(new DataConsumer Handle("handle1", m_context)));
178 90
179 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::obta inReader, this))); 91 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::obta inReader, this)));
180 92
181 m_waitableEvent->wait(); 93 m_waitableEvent->wait();
182 } 94 }
183 95
184 private: 96 private:
185 void obtainReader() 97 void obtainReader()
186 { 98 {
187 m_reader = m_handle->obtainReader(&m_client); 99 m_reader = m_handle->obtainReader(&m_client);
188 updatingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::upd ate, this))); 100 updatingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::upd ate, this)));
189 } 101 }
190 void update() 102 void update()
191 { 103 {
192 m_handle->update(adoptPtr(new DataConsumerHandle("handle2", m_context))) ; 104 m_handle->update(adoptPtr(new DataConsumerHandle("handle2", m_context))) ;
193 m_handle = nullptr; 105 m_handle = nullptr;
194 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::rese tReader, this))); 106 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::rese tReader, this)));
195 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::sign alDone, this))); 107 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::sign alDone, this)));
196 } 108 }
109
110 OwnPtr<CompositeDataConsumerHandle> m_handle;
197 }; 111 };
198 112
199 class ThreadingRegistrationDeleteReaderTest : public ThreadingTestBase { 113 class ThreadingRegistrationDeleteReaderTest : public DataConsumerHandleTestUtil: :ThreadingTestBase {
200 public: 114 public:
201 using Self = ThreadingRegistrationDeleteReaderTest; 115 using Self = ThreadingRegistrationDeleteReaderTest;
202 void run() 116 void run()
203 { 117 {
204 m_context = Context::create(); 118 m_context = Context::create();
205 m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent()); 119 m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent());
206 m_handle = CompositeDataConsumerHandle::create(adoptPtr(new DataConsumer Handle("handle1", m_context))); 120 m_handle = CompositeDataConsumerHandle::create(adoptPtr(new DataConsumer Handle("handle1", m_context)));
207 121
208 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::obta inReader, this))); 122 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::obta inReader, this)));
209 123
210 m_waitableEvent->wait(); 124 m_waitableEvent->wait();
211 } 125 }
212 126
213 private: 127 private:
214 void obtainReader() 128 void obtainReader()
215 { 129 {
216 m_reader = m_handle->obtainReader(&m_client); 130 m_reader = m_handle->obtainReader(&m_client);
217 updatingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::upd ate, this))); 131 updatingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::upd ate, this)));
218 } 132 }
219 void update() 133 void update()
220 { 134 {
221 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::rese tReader, this))); 135 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::rese tReader, this)));
222 m_handle->update(adoptPtr(new DataConsumerHandle("handle2", m_context))) ; 136 m_handle->update(adoptPtr(new DataConsumerHandle("handle2", m_context))) ;
223 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::rese tReader, this))); 137 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::rese tReader, this)));
224 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::sign alDone, this))); 138 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::sign alDone, this)));
225 } 139 }
140
141 OwnPtr<CompositeDataConsumerHandle> m_handle;
226 }; 142 };
227 143
228 class ThreadingUpdatingReaderWhileUpdatingTest : public ThreadingTestBase { 144 class ThreadingUpdatingReaderWhileUpdatingTest : public DataConsumerHandleTestUt il::ThreadingTestBase {
229 public: 145 public:
230 using Self = ThreadingUpdatingReaderWhileUpdatingTest; 146 using Self = ThreadingUpdatingReaderWhileUpdatingTest;
231 void run() 147 void run()
232 { 148 {
233 m_context = Context::create(); 149 m_context = Context::create();
234 m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent()); 150 m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent());
235 m_updateEvent = adoptPtr(Platform::current()->createWaitableEvent()); 151 m_updateEvent = adoptPtr(Platform::current()->createWaitableEvent());
236 m_handle = CompositeDataConsumerHandle::create(adoptPtr(new DataConsumer Handle("handle1", m_context))); 152 m_handle = CompositeDataConsumerHandle::create(adoptPtr(new DataConsumer Handle("handle1", m_context)));
237 153
238 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::obta inReader, this))); 154 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::obta inReader, this)));
(...skipping 17 matching lines...) Expand all
256 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::sign alDone, this))); 172 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::sign alDone, this)));
257 m_updateEvent->signal(); 173 m_updateEvent->signal();
258 } 174 }
259 175
260 void reobtainReader() 176 void reobtainReader()
261 { 177 {
262 m_reader = nullptr; 178 m_reader = nullptr;
263 m_reader = m_handle->obtainReader(&m_client); 179 m_reader = m_handle->obtainReader(&m_client);
264 } 180 }
265 181
182 OwnPtr<CompositeDataConsumerHandle> m_handle;
266 OwnPtr<WebWaitableEvent> m_updateEvent; 183 OwnPtr<WebWaitableEvent> m_updateEvent;
267 }; 184 };
268 185
269 class ThreadingRegistrationUpdateTwiceAtOneTimeTest : public ThreadingTestBase { 186 class ThreadingRegistrationUpdateTwiceAtOneTimeTest : public DataConsumerHandleT estUtil::ThreadingTestBase {
270 public: 187 public:
271 using Self = ThreadingRegistrationUpdateTwiceAtOneTimeTest; 188 using Self = ThreadingRegistrationUpdateTwiceAtOneTimeTest;
272 void run() 189 void run()
273 { 190 {
274 m_context = Context::create(); 191 m_context = Context::create();
275 m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent()); 192 m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent());
276 m_handle = CompositeDataConsumerHandle::create(adoptPtr(new DataConsumer Handle("handle1", m_context))); 193 m_handle = CompositeDataConsumerHandle::create(adoptPtr(new DataConsumer Handle("handle1", m_context)));
277 194
278 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::obta inReader, this))); 195 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::obta inReader, this)));
279 196
280 m_waitableEvent->wait(); 197 m_waitableEvent->wait();
281 } 198 }
282 199
283 private: 200 private:
284 void obtainReader() 201 void obtainReader()
285 { 202 {
286 m_reader = m_handle->obtainReader(&m_client); 203 m_reader = m_handle->obtainReader(&m_client);
287 updatingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::upd ate, this))); 204 updatingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::upd ate, this)));
288 } 205 }
289 void update() 206 void update()
290 { 207 {
291 m_handle->update(adoptPtr(new DataConsumerHandle("handle2", m_context))) ; 208 m_handle->update(adoptPtr(new DataConsumerHandle("handle2", m_context))) ;
292 m_handle->update(adoptPtr(new DataConsumerHandle("handle3", m_context))) ; 209 m_handle->update(adoptPtr(new DataConsumerHandle("handle3", m_context))) ;
293 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::rese tReader, this))); 210 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::rese tReader, this)));
294 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::sign alDone, this))); 211 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::sign alDone, this)));
295 } 212 }
213
214 OwnPtr<CompositeDataConsumerHandle> m_handle;
296 }; 215 };
297 216
298 class ThreadingDoneHandleNotificationTest : public ThreadingTestBase, public Web DataConsumerHandle::Client {
299 public:
300 using Self = ThreadingDoneHandleNotificationTest;
301 void run()
302 {
303 m_context = Context::create();
304 m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent());
305 m_handle = CompositeDataConsumerHandle::create(CompositeDataConsumerHand le::createDoneHandle());
306
307 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::obta inReader, this)));
308
309 m_waitableEvent->wait();
310 }
311
312 private:
313 void obtainReader()
314 {
315 m_reader = m_handle->obtainReader(this);
316 }
317 void didGetReadable() override
318 {
319 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::rese tReader, this)));
320 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::sign alDone, this)));
321 }
322 };
323
324 class ThreadingDoneHandleNoNotificationTest : public ThreadingTestBase, public W ebDataConsumerHandle::Client {
325 public:
326 using Self = ThreadingDoneHandleNoNotificationTest;
327 void run()
328 {
329 m_context = Context::create();
330 m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent());
331 m_handle = CompositeDataConsumerHandle::create(CompositeDataConsumerHand le::createDoneHandle());
332
333 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::obta inReader, this)));
334
335 m_waitableEvent->wait();
336 }
337
338 private:
339 void obtainReader()
340 {
341 m_reader = m_handle->obtainReader(this);
342 m_reader = nullptr;
343 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::sign alDone, this)));
344 }
345 void didGetReadable() override
346 {
347 ASSERT_NOT_REACHED();
348 }
349 };
350
351 TEST(CompositeDataConsumerHandleTest, CreateWaitingHandle)
352 {
353 char buffer[20];
354 const void* p = nullptr;
355 size_t size = 0;
356 OwnPtr<WebDataConsumerHandle> handle = CompositeDataConsumerHandle::createWa itingHandle();
357 OwnPtr<WebDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr) ;
358
359 EXPECT_EQ(kShouldWait, reader->read(buffer, sizeof(buffer), kNone, &size));
360 EXPECT_EQ(kShouldWait, reader->beginRead(&p, kNone, &size));
361 EXPECT_EQ(kUnexpectedError, reader->endRead(99));
362 }
363
364 TEST(CompositeDataConsumerHandleTest, CreateDoneHandle)
365 {
366 char buffer[20];
367 const void* p = nullptr;
368 size_t size = 0;
369 OwnPtr<WebDataConsumerHandle> handle = CompositeDataConsumerHandle::createDo neHandle();
370 OwnPtr<WebDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr) ;
371
372 EXPECT_EQ(kDone, reader->read(buffer, sizeof(buffer), kNone, &size));
373 EXPECT_EQ(kDone, reader->beginRead(&p, kNone, &size));
374 EXPECT_EQ(kUnexpectedError, reader->endRead(99));
375 }
376
377 TEST(CompositeDataConsumerHandleTest, Read) 217 TEST(CompositeDataConsumerHandleTest, Read)
378 { 218 {
379 char buffer[20]; 219 char buffer[20];
380 size_t size = 0; 220 size_t size = 0;
381 NoopClient client; 221 DataConsumerHandleTestUtil::NoopClient client;
382 Checkpoint checkpoint; 222 Checkpoint checkpoint;
383 223
384 OwnPtr<MockHandle> handle1 = MockHandle::create(); 224 OwnPtr<MockHandle> handle1 = MockHandle::create();
385 OwnPtr<MockHandle> handle2 = MockHandle::create(); 225 OwnPtr<MockHandle> handle2 = MockHandle::create();
386 OwnPtr<MockReader> reader1 = MockReader::create(); 226 OwnPtr<MockReader> reader1 = MockReader::create();
387 OwnPtr<MockReader> reader2 = MockReader::create(); 227 OwnPtr<MockReader> reader2 = MockReader::create();
388 228
389 InSequence s; 229 InSequence s;
390 EXPECT_CALL(checkpoint, Call(0)); 230 EXPECT_CALL(checkpoint, Call(0));
391 EXPECT_CALL(*handle1, obtainReaderInternal(&client)).WillOnce(Return(reader1 .get())); 231 EXPECT_CALL(*handle1, obtainReaderInternal(&client)).WillOnce(Return(reader1 .get()));
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
574 EXPECT_EQ( 414 EXPECT_EQ(
575 "A reader is attached to handle1 on the reading thread.\n" 415 "A reader is attached to handle1 on the reading thread.\n"
576 "A reader is detached from handle1 on the reading thread.\n" 416 "A reader is detached from handle1 on the reading thread.\n"
577 "A reader is attached to handle3 on the reading thread.\n" 417 "A reader is attached to handle3 on the reading thread.\n"
578 "A reader is detached from handle3 on the reading thread.\n", 418 "A reader is detached from handle3 on the reading thread.\n",
579 test.result()); 419 test.result());
580 } 420 }
581 421
582 TEST(CompositeDataConsumerHandleTest, DoneHandleNotification) 422 TEST(CompositeDataConsumerHandleTest, DoneHandleNotification)
583 { 423 {
584 ThreadingDoneHandleNotificationTest test; 424 DataConsumerHandleTestUtil::ThreadingHandleNotificationTest test;
585 // Test this function returns. 425 // Test this function returns.
586 test.run(); 426 test.run(CompositeDataConsumerHandle::create(createDoneDataConsumerHandle()) );
587 } 427 }
588 428
589 TEST(CompositeDataConsumerHandleTest, DoneHandleNoNotification) 429 TEST(CompositeDataConsumerHandleTest, DoneHandleNoNotification)
590 { 430 {
591 ThreadingDoneHandleNoNotificationTest test; 431 DataConsumerHandleTestUtil::ThreadingHandleNoNotificationTest test;
592 // Test this function doesn't crash. 432 // Test this function doesn't crash.
593 test.run(); 433 test.run(CompositeDataConsumerHandle::create(createDoneDataConsumerHandle()) );
594 } 434 }
595 435
596 } // namespace 436 } // namespace
597 437
598 } // namespace blink 438 } // namespace blink
OLDNEW
« no previous file with comments | « Source/modules/fetch/CompositeDataConsumerHandle.cpp ('k') | Source/modules/fetch/DataConsumerHandleTestUtil.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698