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

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

Issue 2080623002: Revert "Remove OwnPtr from Blink." (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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 "modules/fetch/CompositeDataConsumerHandle.h" 5 #include "modules/fetch/CompositeDataConsumerHandle.h"
6 6
7 #include "modules/fetch/DataConsumerHandleTestUtil.h" 7 #include "modules/fetch/DataConsumerHandleTestUtil.h"
8 #include "platform/ThreadSafeFunctional.h" 8 #include "platform/ThreadSafeFunctional.h"
9 #include "platform/WaitableEvent.h" 9 #include "platform/WaitableEvent.h"
10 #include "platform/heap/Handle.h" 10 #include "platform/heap/Handle.h"
11 #include "public/platform/Platform.h" 11 #include "public/platform/Platform.h"
12 #include "public/platform/WebThread.h" 12 #include "public/platform/WebThread.h"
13 #include "public/platform/WebTraceLocation.h" 13 #include "public/platform/WebTraceLocation.h"
14 #include "testing/gmock/include/gmock/gmock.h" 14 #include "testing/gmock/include/gmock/gmock.h"
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 #include "wtf/Locker.h" 16 #include "wtf/Locker.h"
17 #include "wtf/PtrUtil.h"
18 #include <memory>
19 17
20 namespace blink { 18 namespace blink {
21 19
22 namespace { 20 namespace {
23 21
24 using ::testing::InSequence; 22 using ::testing::InSequence;
25 using ::testing::Return; 23 using ::testing::Return;
26 using ::testing::StrictMock; 24 using ::testing::StrictMock;
27 using Checkpoint = StrictMock<::testing::MockFunction<void(int)>>; 25 using Checkpoint = StrictMock<::testing::MockFunction<void(int)>>;
28 26
29 const WebDataConsumerHandle::Result kShouldWait = WebDataConsumerHandle::ShouldW ait; 27 const WebDataConsumerHandle::Result kShouldWait = WebDataConsumerHandle::ShouldW ait;
30 const WebDataConsumerHandle::Result kOk = WebDataConsumerHandle::Ok; 28 const WebDataConsumerHandle::Result kOk = WebDataConsumerHandle::Ok;
31 const WebDataConsumerHandle::Flags kNone = WebDataConsumerHandle::FlagNone; 29 const WebDataConsumerHandle::Flags kNone = WebDataConsumerHandle::FlagNone;
32 30
33 class MockReader : public WebDataConsumerHandle::Reader { 31 class MockReader : public WebDataConsumerHandle::Reader {
34 public: 32 public:
35 static std::unique_ptr<StrictMock<MockReader>> create() { return wrapUnique( new StrictMock<MockReader>); } 33 static PassOwnPtr<StrictMock<MockReader>> create() { return adoptPtr(new Str ictMock<MockReader>); }
36 34
37 using Result = WebDataConsumerHandle::Result; 35 using Result = WebDataConsumerHandle::Result;
38 using Flags = WebDataConsumerHandle::Flags; 36 using Flags = WebDataConsumerHandle::Flags;
39 MOCK_METHOD4(read, Result(void*, size_t, Flags, size_t*)); 37 MOCK_METHOD4(read, Result(void*, size_t, Flags, size_t*));
40 MOCK_METHOD3(beginRead, Result(const void**, Flags, size_t*)); 38 MOCK_METHOD3(beginRead, Result(const void**, Flags, size_t*));
41 MOCK_METHOD1(endRead, Result(size_t)); 39 MOCK_METHOD1(endRead, Result(size_t));
42 }; 40 };
43 41
44 class MockHandle : public WebDataConsumerHandle { 42 class MockHandle : public WebDataConsumerHandle {
45 public: 43 public:
46 static std::unique_ptr<StrictMock<MockHandle>> create() { return wrapUnique( new StrictMock<MockHandle>); } 44 static PassOwnPtr<StrictMock<MockHandle>> create() { return adoptPtr(new Str ictMock<MockHandle>); }
47 45
48 MOCK_METHOD1(obtainReaderInternal, Reader*(Client*)); 46 MOCK_METHOD1(obtainReaderInternal, Reader*(Client*));
49 47
50 private: 48 private:
51 const char* debugName() const override { return "MockHandle in CompositeData ConsumerHandleTest"; } 49 const char* debugName() const override { return "MockHandle in CompositeData ConsumerHandleTest"; }
52 }; 50 };
53 51
54 class ThreadingRegistrationTest : public DataConsumerHandleTestUtil::ThreadingTe stBase { 52 class ThreadingRegistrationTest : public DataConsumerHandleTestUtil::ThreadingTe stBase {
55 public: 53 public:
56 using Self = ThreadingRegistrationTest; 54 using Self = ThreadingRegistrationTest;
57 static PassRefPtr<Self> create() { return adoptRef(new Self); } 55 static PassRefPtr<Self> create() { return adoptRef(new Self); }
58 56
59 void run() 57 void run()
60 { 58 {
61 ThreadHolder holder(this); 59 ThreadHolder holder(this);
62 m_waitableEvent = wrapUnique(new WaitableEvent()); 60 m_waitableEvent = adoptPtr(new WaitableEvent());
63 61
64 postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::c reateHandle, this)); 62 postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::c reateHandle, this));
65 postTaskToReadingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::ob tainReader, this)); 63 postTaskToReadingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::ob tainReader, this));
66 } 64 }
67 65
68 private: 66 private:
69 ThreadingRegistrationTest() = default; 67 ThreadingRegistrationTest() = default;
70 68
71 void createHandle() 69 void createHandle()
72 { 70 {
73 m_handle = CompositeDataConsumerHandle::create(DataConsumerHandle::creat e("handle1", m_context), &m_updater); 71 m_handle = CompositeDataConsumerHandle::create(DataConsumerHandle::creat e("handle1", m_context), &m_updater);
74 m_waitableEvent->signal(); 72 m_waitableEvent->signal();
75 } 73 }
76 void obtainReader() 74 void obtainReader()
77 { 75 {
78 m_reader = m_handle->obtainReader(&m_client); 76 m_reader = m_handle->obtainReader(&m_client);
79 postTaskToUpdatingThread(BLINK_FROM_HERE, threadSafeBind(&Self::update, this)); 77 postTaskToUpdatingThread(BLINK_FROM_HERE, threadSafeBind(&Self::update, this));
80 } 78 }
81 void update() 79 void update()
82 { 80 {
83 m_updater->update(DataConsumerHandle::create("handle2", m_context)); 81 m_updater->update(DataConsumerHandle::create("handle2", m_context));
84 m_updater.clear(); 82 m_updater.clear();
85 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::resetRead er, this)); 83 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::resetRead er, this));
86 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::signalDon e, this)); 84 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::signalDon e, this));
87 } 85 }
88 86
89 std::unique_ptr<WebDataConsumerHandle> m_handle; 87 OwnPtr<WebDataConsumerHandle> m_handle;
90 CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater; 88 CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater;
91 }; 89 };
92 90
93 class ThreadingRegistrationDeleteHandleTest : public DataConsumerHandleTestUtil: :ThreadingTestBase { 91 class ThreadingRegistrationDeleteHandleTest : public DataConsumerHandleTestUtil: :ThreadingTestBase {
94 public: 92 public:
95 using Self = ThreadingRegistrationDeleteHandleTest; 93 using Self = ThreadingRegistrationDeleteHandleTest;
96 static PassRefPtr<Self> create() { return adoptRef(new Self); } 94 static PassRefPtr<Self> create() { return adoptRef(new Self); }
97 95
98 void run() 96 void run()
99 { 97 {
100 ThreadHolder holder(this); 98 ThreadHolder holder(this);
101 m_waitableEvent = wrapUnique(new WaitableEvent()); 99 m_waitableEvent = adoptPtr(new WaitableEvent());
102 100
103 postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::c reateHandle, this)); 101 postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::c reateHandle, this));
104 postTaskToReadingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::ob tainReader, this)); 102 postTaskToReadingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::ob tainReader, this));
105 } 103 }
106 104
107 private: 105 private:
108 ThreadingRegistrationDeleteHandleTest() = default; 106 ThreadingRegistrationDeleteHandleTest() = default;
109 107
110 void createHandle() 108 void createHandle()
111 { 109 {
112 m_handle = CompositeDataConsumerHandle::create(DataConsumerHandle::creat e("handle1", m_context), &m_updater); 110 m_handle = CompositeDataConsumerHandle::create(DataConsumerHandle::creat e("handle1", m_context), &m_updater);
113 m_waitableEvent->signal(); 111 m_waitableEvent->signal();
114 } 112 }
115 113
116 void obtainReader() 114 void obtainReader()
117 { 115 {
118 m_reader = m_handle->obtainReader(&m_client); 116 m_reader = m_handle->obtainReader(&m_client);
119 postTaskToUpdatingThread(BLINK_FROM_HERE, threadSafeBind(&Self::update, this)); 117 postTaskToUpdatingThread(BLINK_FROM_HERE, threadSafeBind(&Self::update, this));
120 } 118 }
121 void update() 119 void update()
122 { 120 {
123 m_updater->update(DataConsumerHandle::create("handle2", m_context)); 121 m_updater->update(DataConsumerHandle::create("handle2", m_context));
124 m_updater.clear(); 122 m_updater.clear();
125 m_handle = nullptr; 123 m_handle = nullptr;
126 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::resetRead er, this)); 124 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::resetRead er, this));
127 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::signalDon e, this)); 125 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::signalDon e, this));
128 } 126 }
129 127
130 std::unique_ptr<WebDataConsumerHandle> m_handle; 128 OwnPtr<WebDataConsumerHandle> m_handle;
131 CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater; 129 CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater;
132 }; 130 };
133 131
134 class ThreadingRegistrationDeleteReaderTest : public DataConsumerHandleTestUtil: :ThreadingTestBase { 132 class ThreadingRegistrationDeleteReaderTest : public DataConsumerHandleTestUtil: :ThreadingTestBase {
135 public: 133 public:
136 using Self = ThreadingRegistrationDeleteReaderTest; 134 using Self = ThreadingRegistrationDeleteReaderTest;
137 static PassRefPtr<Self> create() { return adoptRef(new Self); } 135 static PassRefPtr<Self> create() { return adoptRef(new Self); }
138 136
139 void run() 137 void run()
140 { 138 {
141 ThreadHolder holder(this); 139 ThreadHolder holder(this);
142 m_waitableEvent = wrapUnique(new WaitableEvent()); 140 m_waitableEvent = adoptPtr(new WaitableEvent());
143 141
144 postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::c reateHandle, this)); 142 postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::c reateHandle, this));
145 postTaskToReadingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::ob tainReader, this)); 143 postTaskToReadingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::ob tainReader, this));
146 } 144 }
147 145
148 private: 146 private:
149 ThreadingRegistrationDeleteReaderTest() = default; 147 ThreadingRegistrationDeleteReaderTest() = default;
150 148
151 void createHandle() 149 void createHandle()
152 { 150 {
153 m_handle = CompositeDataConsumerHandle::create(DataConsumerHandle::creat e("handle1", m_context), &m_updater); 151 m_handle = CompositeDataConsumerHandle::create(DataConsumerHandle::creat e("handle1", m_context), &m_updater);
154 m_waitableEvent->signal(); 152 m_waitableEvent->signal();
155 } 153 }
156 154
157 void obtainReader() 155 void obtainReader()
158 { 156 {
159 m_reader = m_handle->obtainReader(&m_client); 157 m_reader = m_handle->obtainReader(&m_client);
160 postTaskToUpdatingThread(BLINK_FROM_HERE, threadSafeBind(&Self::update, this)); 158 postTaskToUpdatingThread(BLINK_FROM_HERE, threadSafeBind(&Self::update, this));
161 } 159 }
162 void update() 160 void update()
163 { 161 {
164 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::resetRead er, this)); 162 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::resetRead er, this));
165 m_updater->update(DataConsumerHandle::create("handle2", m_context)); 163 m_updater->update(DataConsumerHandle::create("handle2", m_context));
166 m_updater.clear(); 164 m_updater.clear();
167 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::resetRead er, this)); 165 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::resetRead er, this));
168 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::signalDon e, this)); 166 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::signalDon e, this));
169 } 167 }
170 168
171 std::unique_ptr<WebDataConsumerHandle> m_handle; 169 OwnPtr<WebDataConsumerHandle> m_handle;
172 CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater; 170 CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater;
173 }; 171 };
174 172
175 class ThreadingUpdatingReaderWhileUpdatingTest : public DataConsumerHandleTestUt il::ThreadingTestBase { 173 class ThreadingUpdatingReaderWhileUpdatingTest : public DataConsumerHandleTestUt il::ThreadingTestBase {
176 public: 174 public:
177 using Self = ThreadingUpdatingReaderWhileUpdatingTest; 175 using Self = ThreadingUpdatingReaderWhileUpdatingTest;
178 static PassRefPtr<Self> create() { return adoptRef(new Self); } 176 static PassRefPtr<Self> create() { return adoptRef(new Self); }
179 177
180 void run() 178 void run()
181 { 179 {
182 ThreadHolder holder(this); 180 ThreadHolder holder(this);
183 m_waitableEvent = wrapUnique(new WaitableEvent()); 181 m_waitableEvent = adoptPtr(new WaitableEvent());
184 m_updateEvent = wrapUnique(new WaitableEvent()); 182 m_updateEvent = adoptPtr(new WaitableEvent());
185 183
186 postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::c reateHandle, this)); 184 postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::c reateHandle, this));
187 postTaskToReadingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::ob tainReader, this)); 185 postTaskToReadingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::ob tainReader, this));
188 } 186 }
189 187
190 private: 188 private:
191 ThreadingUpdatingReaderWhileUpdatingTest() = default; 189 ThreadingUpdatingReaderWhileUpdatingTest() = default;
192 190
193 void createHandle() 191 void createHandle()
194 { 192 {
(...skipping 17 matching lines...) Expand all
212 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::signalDon e, this)); 210 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::signalDon e, this));
213 m_updateEvent->signal(); 211 m_updateEvent->signal();
214 } 212 }
215 213
216 void reobtainReader() 214 void reobtainReader()
217 { 215 {
218 m_reader = nullptr; 216 m_reader = nullptr;
219 m_reader = m_handle->obtainReader(&m_client); 217 m_reader = m_handle->obtainReader(&m_client);
220 } 218 }
221 219
222 std::unique_ptr<WebDataConsumerHandle> m_handle; 220 OwnPtr<WebDataConsumerHandle> m_handle;
223 CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater; 221 CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater;
224 std::unique_ptr<WaitableEvent> m_updateEvent; 222 OwnPtr<WaitableEvent> m_updateEvent;
225 }; 223 };
226 224
227 class ThreadingRegistrationUpdateTwiceAtOneTimeTest : public DataConsumerHandleT estUtil::ThreadingTestBase { 225 class ThreadingRegistrationUpdateTwiceAtOneTimeTest : public DataConsumerHandleT estUtil::ThreadingTestBase {
228 public: 226 public:
229 using Self = ThreadingRegistrationUpdateTwiceAtOneTimeTest; 227 using Self = ThreadingRegistrationUpdateTwiceAtOneTimeTest;
230 static PassRefPtr<Self> create() { return adoptRef(new Self); } 228 static PassRefPtr<Self> create() { return adoptRef(new Self); }
231 229
232 void run() 230 void run()
233 { 231 {
234 ThreadHolder holder(this); 232 ThreadHolder holder(this);
235 m_waitableEvent = wrapUnique(new WaitableEvent()); 233 m_waitableEvent = adoptPtr(new WaitableEvent());
236 m_updateEvent = wrapUnique(new WaitableEvent()); 234 m_updateEvent = adoptPtr(new WaitableEvent());
237 235
238 postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::c reateHandle, this)); 236 postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::c reateHandle, this));
239 postTaskToReadingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::ob tainReader, this)); 237 postTaskToReadingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::ob tainReader, this));
240 } 238 }
241 239
242 private: 240 private:
243 ThreadingRegistrationUpdateTwiceAtOneTimeTest() = default; 241 ThreadingRegistrationUpdateTwiceAtOneTimeTest() = default;
244 242
245 void createHandle() 243 void createHandle()
246 { 244 {
(...skipping 11 matching lines...) Expand all
258 void update() 256 void update()
259 { 257 {
260 m_updater->update(DataConsumerHandle::create("handle2", m_context)); 258 m_updater->update(DataConsumerHandle::create("handle2", m_context));
261 m_updater->update(DataConsumerHandle::create("handle3", m_context)); 259 m_updater->update(DataConsumerHandle::create("handle3", m_context));
262 m_updateEvent->signal(); 260 m_updateEvent->signal();
263 m_updater.clear(); 261 m_updater.clear();
264 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::resetRead er, this)); 262 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::resetRead er, this));
265 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::signalDon e, this)); 263 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::signalDon e, this));
266 } 264 }
267 265
268 std::unique_ptr<WebDataConsumerHandle> m_handle; 266 OwnPtr<WebDataConsumerHandle> m_handle;
269 CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater; 267 CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater;
270 std::unique_ptr<WaitableEvent> m_updateEvent; 268 OwnPtr<WaitableEvent> m_updateEvent;
271 }; 269 };
272 270
273 TEST(CompositeDataConsumerHandleTest, Read) 271 TEST(CompositeDataConsumerHandleTest, Read)
274 { 272 {
275 char buffer[20]; 273 char buffer[20];
276 size_t size = 0; 274 size_t size = 0;
277 DataConsumerHandleTestUtil::NoopClient client; 275 DataConsumerHandleTestUtil::NoopClient client;
278 Checkpoint checkpoint; 276 Checkpoint checkpoint;
279 277
280 std::unique_ptr<MockHandle> handle1 = MockHandle::create(); 278 OwnPtr<MockHandle> handle1 = MockHandle::create();
281 std::unique_ptr<MockHandle> handle2 = MockHandle::create(); 279 OwnPtr<MockHandle> handle2 = MockHandle::create();
282 std::unique_ptr<MockReader> reader1 = MockReader::create(); 280 OwnPtr<MockReader> reader1 = MockReader::create();
283 std::unique_ptr<MockReader> reader2 = MockReader::create(); 281 OwnPtr<MockReader> reader2 = MockReader::create();
284 282
285 InSequence s; 283 InSequence s;
286 EXPECT_CALL(checkpoint, Call(0)); 284 EXPECT_CALL(checkpoint, Call(0));
287 EXPECT_CALL(*handle1, obtainReaderInternal(&client)).WillOnce(Return(reader1 .get())); 285 EXPECT_CALL(*handle1, obtainReaderInternal(&client)).WillOnce(Return(reader1 .get()));
288 EXPECT_CALL(checkpoint, Call(1)); 286 EXPECT_CALL(checkpoint, Call(1));
289 EXPECT_CALL(*reader1, read(buffer, sizeof(buffer), kNone, &size)).WillOnce(R eturn(kOk)); 287 EXPECT_CALL(*reader1, read(buffer, sizeof(buffer), kNone, &size)).WillOnce(R eturn(kOk));
290 EXPECT_CALL(checkpoint, Call(2)); 288 EXPECT_CALL(checkpoint, Call(2));
291 EXPECT_CALL(*handle2, obtainReaderInternal(&client)).WillOnce(Return(reader2 .get())); 289 EXPECT_CALL(*handle2, obtainReaderInternal(&client)).WillOnce(Return(reader2 .get()));
292 EXPECT_CALL(checkpoint, Call(3)); 290 EXPECT_CALL(checkpoint, Call(3));
293 EXPECT_CALL(*reader2, read(buffer, sizeof(buffer), kNone, &size)).WillOnce(R eturn(kOk)); 291 EXPECT_CALL(*reader2, read(buffer, sizeof(buffer), kNone, &size)).WillOnce(R eturn(kOk));
294 EXPECT_CALL(checkpoint, Call(4)); 292 EXPECT_CALL(checkpoint, Call(4));
295 293
296 // They are adopted by |obtainReader|. 294 // They are adopted by |obtainReader|.
297 ASSERT_TRUE(reader1.release()); 295 ASSERT_TRUE(reader1.leakPtr());
298 ASSERT_TRUE(reader2.release()); 296 ASSERT_TRUE(reader2.leakPtr());
299 297
300 CompositeDataConsumerHandle::Updater* updater = nullptr; 298 CompositeDataConsumerHandle::Updater* updater = nullptr;
301 std::unique_ptr<WebDataConsumerHandle> handle = CompositeDataConsumerHandle: :create(std::move(handle1), &updater); 299 OwnPtr<WebDataConsumerHandle> handle = CompositeDataConsumerHandle::create(s td::move(handle1), &updater);
302 checkpoint.Call(0); 300 checkpoint.Call(0);
303 std::unique_ptr<WebDataConsumerHandle::Reader> reader = handle->obtainReader (&client); 301 OwnPtr<WebDataConsumerHandle::Reader> reader = handle->obtainReader(&client) ;
304 checkpoint.Call(1); 302 checkpoint.Call(1);
305 EXPECT_EQ(kOk, reader->read(buffer, sizeof(buffer), kNone, &size)); 303 EXPECT_EQ(kOk, reader->read(buffer, sizeof(buffer), kNone, &size));
306 checkpoint.Call(2); 304 checkpoint.Call(2);
307 updater->update(std::move(handle2)); 305 updater->update(std::move(handle2));
308 checkpoint.Call(3); 306 checkpoint.Call(3);
309 EXPECT_EQ(kOk, reader->read(buffer, sizeof(buffer), kNone, &size)); 307 EXPECT_EQ(kOk, reader->read(buffer, sizeof(buffer), kNone, &size));
310 checkpoint.Call(4); 308 checkpoint.Call(4);
311 } 309 }
312 310
313 TEST(CompositeDataConsumerHandleTest, TwoPhaseRead) 311 TEST(CompositeDataConsumerHandleTest, TwoPhaseRead)
314 { 312 {
315 const void* p = nullptr; 313 const void* p = nullptr;
316 size_t size = 0; 314 size_t size = 0;
317 Checkpoint checkpoint; 315 Checkpoint checkpoint;
318 316
319 std::unique_ptr<MockHandle> handle1 = MockHandle::create(); 317 OwnPtr<MockHandle> handle1 = MockHandle::create();
320 std::unique_ptr<MockHandle> handle2 = MockHandle::create(); 318 OwnPtr<MockHandle> handle2 = MockHandle::create();
321 std::unique_ptr<MockReader> reader1 = MockReader::create(); 319 OwnPtr<MockReader> reader1 = MockReader::create();
322 std::unique_ptr<MockReader> reader2 = MockReader::create(); 320 OwnPtr<MockReader> reader2 = MockReader::create();
323 321
324 InSequence s; 322 InSequence s;
325 EXPECT_CALL(checkpoint, Call(0)); 323 EXPECT_CALL(checkpoint, Call(0));
326 EXPECT_CALL(*handle1, obtainReaderInternal(nullptr)).WillOnce(Return(reader1 .get())); 324 EXPECT_CALL(*handle1, obtainReaderInternal(nullptr)).WillOnce(Return(reader1 .get()));
327 EXPECT_CALL(checkpoint, Call(1)); 325 EXPECT_CALL(checkpoint, Call(1));
328 EXPECT_CALL(*reader1, beginRead(&p, kNone, &size)).WillOnce(Return(kOk)); 326 EXPECT_CALL(*reader1, beginRead(&p, kNone, &size)).WillOnce(Return(kOk));
329 EXPECT_CALL(checkpoint, Call(2)); 327 EXPECT_CALL(checkpoint, Call(2));
330 EXPECT_CALL(*reader1, endRead(0)).WillOnce(Return(kOk)); 328 EXPECT_CALL(*reader1, endRead(0)).WillOnce(Return(kOk));
331 EXPECT_CALL(checkpoint, Call(3)); 329 EXPECT_CALL(checkpoint, Call(3));
332 EXPECT_CALL(*handle2, obtainReaderInternal(nullptr)).WillOnce(Return(reader2 .get())); 330 EXPECT_CALL(*handle2, obtainReaderInternal(nullptr)).WillOnce(Return(reader2 .get()));
333 EXPECT_CALL(checkpoint, Call(4)); 331 EXPECT_CALL(checkpoint, Call(4));
334 EXPECT_CALL(*reader2, beginRead(&p, kNone, &size)).WillOnce(Return(kOk)); 332 EXPECT_CALL(*reader2, beginRead(&p, kNone, &size)).WillOnce(Return(kOk));
335 EXPECT_CALL(checkpoint, Call(5)); 333 EXPECT_CALL(checkpoint, Call(5));
336 EXPECT_CALL(*reader2, endRead(0)).WillOnce(Return(kOk)); 334 EXPECT_CALL(*reader2, endRead(0)).WillOnce(Return(kOk));
337 EXPECT_CALL(checkpoint, Call(6)); 335 EXPECT_CALL(checkpoint, Call(6));
338 336
339 // They are adopted by |obtainReader|. 337 // They are adopted by |obtainReader|.
340 ASSERT_TRUE(reader1.release()); 338 ASSERT_TRUE(reader1.leakPtr());
341 ASSERT_TRUE(reader2.release()); 339 ASSERT_TRUE(reader2.leakPtr());
342 340
343 CompositeDataConsumerHandle::Updater* updater = nullptr; 341 CompositeDataConsumerHandle::Updater* updater = nullptr;
344 std::unique_ptr<WebDataConsumerHandle> handle = CompositeDataConsumerHandle: :create(std::move(handle1), &updater); 342 OwnPtr<WebDataConsumerHandle> handle = CompositeDataConsumerHandle::create(s td::move(handle1), &updater);
345 checkpoint.Call(0); 343 checkpoint.Call(0);
346 std::unique_ptr<WebDataConsumerHandle::Reader> reader = handle->obtainReader (nullptr); 344 OwnPtr<WebDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr) ;
347 checkpoint.Call(1); 345 checkpoint.Call(1);
348 EXPECT_EQ(kOk, reader->beginRead(&p, kNone, &size)); 346 EXPECT_EQ(kOk, reader->beginRead(&p, kNone, &size));
349 checkpoint.Call(2); 347 checkpoint.Call(2);
350 EXPECT_EQ(kOk, reader->endRead(0)); 348 EXPECT_EQ(kOk, reader->endRead(0));
351 checkpoint.Call(3); 349 checkpoint.Call(3);
352 updater->update(std::move(handle2)); 350 updater->update(std::move(handle2));
353 checkpoint.Call(4); 351 checkpoint.Call(4);
354 EXPECT_EQ(kOk, reader->beginRead(&p, kNone, &size)); 352 EXPECT_EQ(kOk, reader->beginRead(&p, kNone, &size));
355 checkpoint.Call(5); 353 checkpoint.Call(5);
356 EXPECT_EQ(kOk, reader->endRead(0)); 354 EXPECT_EQ(kOk, reader->endRead(0));
357 checkpoint.Call(6); 355 checkpoint.Call(6);
358 } 356 }
359 357
360 TEST(CompositeDataConsumerHandleTest, HangingTwoPhaseRead) 358 TEST(CompositeDataConsumerHandleTest, HangingTwoPhaseRead)
361 { 359 {
362 const void* p = nullptr; 360 const void* p = nullptr;
363 size_t size = 0; 361 size_t size = 0;
364 Checkpoint checkpoint; 362 Checkpoint checkpoint;
365 363
366 std::unique_ptr<MockHandle> handle1 = MockHandle::create(); 364 OwnPtr<MockHandle> handle1 = MockHandle::create();
367 std::unique_ptr<MockHandle> handle2 = MockHandle::create(); 365 OwnPtr<MockHandle> handle2 = MockHandle::create();
368 std::unique_ptr<MockHandle> handle3 = MockHandle::create(); 366 OwnPtr<MockHandle> handle3 = MockHandle::create();
369 std::unique_ptr<MockReader> reader1 = MockReader::create(); 367 OwnPtr<MockReader> reader1 = MockReader::create();
370 std::unique_ptr<MockReader> reader2 = MockReader::create(); 368 OwnPtr<MockReader> reader2 = MockReader::create();
371 std::unique_ptr<MockReader> reader3 = MockReader::create(); 369 OwnPtr<MockReader> reader3 = MockReader::create();
372 370
373 InSequence s; 371 InSequence s;
374 EXPECT_CALL(checkpoint, Call(0)); 372 EXPECT_CALL(checkpoint, Call(0));
375 EXPECT_CALL(*handle1, obtainReaderInternal(nullptr)).WillOnce(Return(reader1 .get())); 373 EXPECT_CALL(*handle1, obtainReaderInternal(nullptr)).WillOnce(Return(reader1 .get()));
376 EXPECT_CALL(checkpoint, Call(1)); 374 EXPECT_CALL(checkpoint, Call(1));
377 EXPECT_CALL(*reader1, beginRead(&p, kNone, &size)).WillOnce(Return(kOk)); 375 EXPECT_CALL(*reader1, beginRead(&p, kNone, &size)).WillOnce(Return(kOk));
378 EXPECT_CALL(checkpoint, Call(2)); 376 EXPECT_CALL(checkpoint, Call(2));
379 EXPECT_CALL(checkpoint, Call(3)); 377 EXPECT_CALL(checkpoint, Call(3));
380 EXPECT_CALL(*reader1, endRead(0)).WillOnce(Return(kOk)); 378 EXPECT_CALL(*reader1, endRead(0)).WillOnce(Return(kOk));
381 EXPECT_CALL(*handle2, obtainReaderInternal(nullptr)).WillOnce(Return(reader2 .get())); 379 EXPECT_CALL(*handle2, obtainReaderInternal(nullptr)).WillOnce(Return(reader2 .get()));
382 EXPECT_CALL(checkpoint, Call(4)); 380 EXPECT_CALL(checkpoint, Call(4));
383 EXPECT_CALL(*reader2, beginRead(&p, kNone, &size)).WillOnce(Return(kShouldWa it)); 381 EXPECT_CALL(*reader2, beginRead(&p, kNone, &size)).WillOnce(Return(kShouldWa it));
384 EXPECT_CALL(checkpoint, Call(5)); 382 EXPECT_CALL(checkpoint, Call(5));
385 EXPECT_CALL(*handle3, obtainReaderInternal(nullptr)).WillOnce(Return(reader3 .get())); 383 EXPECT_CALL(*handle3, obtainReaderInternal(nullptr)).WillOnce(Return(reader3 .get()));
386 EXPECT_CALL(checkpoint, Call(6)); 384 EXPECT_CALL(checkpoint, Call(6));
387 EXPECT_CALL(*reader3, beginRead(&p, kNone, &size)).WillOnce(Return(kOk)); 385 EXPECT_CALL(*reader3, beginRead(&p, kNone, &size)).WillOnce(Return(kOk));
388 EXPECT_CALL(checkpoint, Call(7)); 386 EXPECT_CALL(checkpoint, Call(7));
389 EXPECT_CALL(*reader3, endRead(0)).WillOnce(Return(kOk)); 387 EXPECT_CALL(*reader3, endRead(0)).WillOnce(Return(kOk));
390 EXPECT_CALL(checkpoint, Call(8)); 388 EXPECT_CALL(checkpoint, Call(8));
391 389
392 // They are adopted by |obtainReader|. 390 // They are adopted by |obtainReader|.
393 ASSERT_TRUE(reader1.release()); 391 ASSERT_TRUE(reader1.leakPtr());
394 ASSERT_TRUE(reader2.release()); 392 ASSERT_TRUE(reader2.leakPtr());
395 ASSERT_TRUE(reader3.release()); 393 ASSERT_TRUE(reader3.leakPtr());
396 394
397 CompositeDataConsumerHandle::Updater* updater = nullptr; 395 CompositeDataConsumerHandle::Updater* updater = nullptr;
398 std::unique_ptr<WebDataConsumerHandle> handle = CompositeDataConsumerHandle: :create(std::move(handle1), &updater); 396 OwnPtr<WebDataConsumerHandle> handle = CompositeDataConsumerHandle::create(s td::move(handle1), &updater);
399 checkpoint.Call(0); 397 checkpoint.Call(0);
400 std::unique_ptr<WebDataConsumerHandle::Reader> reader = handle->obtainReader (nullptr); 398 OwnPtr<WebDataConsumerHandle::Reader> reader = handle->obtainReader(nullptr) ;
401 checkpoint.Call(1); 399 checkpoint.Call(1);
402 EXPECT_EQ(kOk, reader->beginRead(&p, kNone, &size)); 400 EXPECT_EQ(kOk, reader->beginRead(&p, kNone, &size));
403 checkpoint.Call(2); 401 checkpoint.Call(2);
404 updater->update(std::move(handle2)); 402 updater->update(std::move(handle2));
405 checkpoint.Call(3); 403 checkpoint.Call(3);
406 EXPECT_EQ(kOk, reader->endRead(0)); 404 EXPECT_EQ(kOk, reader->endRead(0));
407 checkpoint.Call(4); 405 checkpoint.Call(4);
408 EXPECT_EQ(kShouldWait, reader->beginRead(&p, kNone, &size)); 406 EXPECT_EQ(kShouldWait, reader->beginRead(&p, kNone, &size));
409 checkpoint.Call(5); 407 checkpoint.Call(5);
410 updater->update(std::move(handle3)); 408 updater->update(std::move(handle3));
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 { 488 {
491 RefPtr<DataConsumerHandleTestUtil::ThreadingHandleNoNotificationTest> test = DataConsumerHandleTestUtil::ThreadingHandleNoNotificationTest::create(); 489 RefPtr<DataConsumerHandleTestUtil::ThreadingHandleNoNotificationTest> test = DataConsumerHandleTestUtil::ThreadingHandleNoNotificationTest::create();
492 CompositeDataConsumerHandle::Updater* updater = nullptr; 490 CompositeDataConsumerHandle::Updater* updater = nullptr;
493 // Test this function doesn't crash. 491 // Test this function doesn't crash.
494 test->run(CompositeDataConsumerHandle::create(createDoneDataConsumerHandle() , &updater)); 492 test->run(CompositeDataConsumerHandle::create(createDoneDataConsumerHandle() , &updater));
495 } 493 }
496 494
497 } // namespace 495 } // namespace
498 496
499 } // namespace blink 497 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698