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

Side by Side Diff: third_party/WebKit/Source/modules/fetch/DataConsumerTeeTest.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/DataConsumerTee.h" 5 #include "modules/fetch/DataConsumerTee.h"
6 6
7 #include "core/testing/DummyPageHolder.h" 7 #include "core/testing/DummyPageHolder.h"
8 #include "core/testing/NullExecutionContext.h" 8 #include "core/testing/NullExecutionContext.h"
9 #include "modules/fetch/DataConsumerHandleTestUtil.h" 9 #include "modules/fetch/DataConsumerHandleTestUtil.h"
10 #include "platform/ThreadSafeFunctional.h" 10 #include "platform/ThreadSafeFunctional.h"
11 #include "platform/WaitableEvent.h" 11 #include "platform/WaitableEvent.h"
12 #include "platform/WebThreadSupportingGC.h" 12 #include "platform/WebThreadSupportingGC.h"
13 #include "public/platform/Platform.h" 13 #include "public/platform/Platform.h"
14 #include "public/platform/WebThread.h" 14 #include "public/platform/WebThread.h"
15 #include "public/platform/WebTraceLocation.h" 15 #include "public/platform/WebTraceLocation.h"
16 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
17 #include "wtf/PassRefPtr.h" 17 #include "wtf/PassRefPtr.h"
18 #include "wtf/PtrUtil.h"
19 #include "wtf/RefPtr.h" 18 #include "wtf/RefPtr.h"
20 #include <memory>
21 #include <string.h> 19 #include <string.h>
22 #include <v8.h> 20 #include <v8.h>
23 21
24 namespace blink { 22 namespace blink {
25 namespace { 23 namespace {
26 24
27 using ::testing::InSequence; 25 using ::testing::InSequence;
28 using ::testing::Return; 26 using ::testing::Return;
29 using ::testing::StrictMock; 27 using ::testing::StrictMock;
30 using ::testing::_; 28 using ::testing::_;
(...skipping 17 matching lines...) Expand all
48 using HandleReaderRunner = DataConsumerHandleTestUtil::HandleReaderRunner<T>; 46 using HandleReaderRunner = DataConsumerHandleTestUtil::HandleReaderRunner<T>;
49 47
50 String toString(const Vector<char>& v) 48 String toString(const Vector<char>& v)
51 { 49 {
52 return String(v.data(), v.size()); 50 return String(v.data(), v.size());
53 } 51 }
54 52
55 template<typename Handle> 53 template<typename Handle>
56 class TeeCreationThread { 54 class TeeCreationThread {
57 public: 55 public:
58 void run(std::unique_ptr<Handle> src, std::unique_ptr<Handle>* dest1, std::u nique_ptr<Handle>* dest2) 56 void run(PassOwnPtr<Handle> src, OwnPtr<Handle>* dest1, OwnPtr<Handle>* dest 2)
59 { 57 {
60 m_thread = wrapUnique(new Thread("src thread", Thread::WithExecutionCont ext)); 58 m_thread = adoptPtr(new Thread("src thread", Thread::WithExecutionContex t));
61 m_waitableEvent = wrapUnique(new WaitableEvent()); 59 m_waitableEvent = adoptPtr(new WaitableEvent());
62 m_thread->thread()->postTask(BLINK_FROM_HERE, threadSafeBind(&TeeCreatio nThread<Handle>::runInternal, AllowCrossThreadAccess(this), passed(std::move(src )), AllowCrossThreadAccess(dest1), AllowCrossThreadAccess(dest2))); 60 m_thread->thread()->postTask(BLINK_FROM_HERE, threadSafeBind(&TeeCreatio nThread<Handle>::runInternal, AllowCrossThreadAccess(this), passed(std::move(src )), AllowCrossThreadAccess(dest1), AllowCrossThreadAccess(dest2)));
63 m_waitableEvent->wait(); 61 m_waitableEvent->wait();
64 } 62 }
65 63
66 Thread* getThread() { return m_thread.get(); } 64 Thread* getThread() { return m_thread.get(); }
67 65
68 private: 66 private:
69 void runInternal(std::unique_ptr<Handle> src, std::unique_ptr<Handle>* dest1 , std::unique_ptr<Handle>* dest2) 67 void runInternal(PassOwnPtr<Handle> src, OwnPtr<Handle>* dest1, OwnPtr<Handl e>* dest2)
70 { 68 {
71 DataConsumerTee::create(m_thread->getExecutionContext(), std::move(src), dest1, dest2); 69 DataConsumerTee::create(m_thread->getExecutionContext(), std::move(src), dest1, dest2);
72 m_waitableEvent->signal(); 70 m_waitableEvent->signal();
73 } 71 }
74 72
75 std::unique_ptr<Thread> m_thread; 73 OwnPtr<Thread> m_thread;
76 std::unique_ptr<WaitableEvent> m_waitableEvent; 74 OwnPtr<WaitableEvent> m_waitableEvent;
77 }; 75 };
78 76
79 TEST(DataConsumerTeeTest, CreateDone) 77 TEST(DataConsumerTeeTest, CreateDone)
80 { 78 {
81 std::unique_ptr<Handle> src(Handle::create()); 79 OwnPtr<Handle> src(Handle::create());
82 std::unique_ptr<WebDataConsumerHandle> dest1, dest2; 80 OwnPtr<WebDataConsumerHandle> dest1, dest2;
83 81
84 src->add(Command(Command::Done)); 82 src->add(Command(Command::Done));
85 83
86 std::unique_ptr<TeeCreationThread<WebDataConsumerHandle>> t = wrapUnique(new TeeCreationThread<WebDataConsumerHandle>()); 84 OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreatio nThread<WebDataConsumerHandle>());
87 t->run(std::move(src), &dest1, &dest2); 85 t->run(std::move(src), &dest1, &dest2);
88 86
89 ASSERT_TRUE(dest1); 87 ASSERT_TRUE(dest1);
90 ASSERT_TRUE(dest2); 88 ASSERT_TRUE(dest2);
91 89
92 HandleReaderRunner<HandleReader> r1(std::move(dest1)), r2(std::move(dest2)); 90 HandleReaderRunner<HandleReader> r1(std::move(dest1)), r2(std::move(dest2));
93 91
94 std::unique_ptr<HandleReadResult> res1 = r1.wait(); 92 OwnPtr<HandleReadResult> res1 = r1.wait();
95 std::unique_ptr<HandleReadResult> res2 = r2.wait(); 93 OwnPtr<HandleReadResult> res2 = r2.wait();
96 94
97 EXPECT_EQ(kDone, res1->result()); 95 EXPECT_EQ(kDone, res1->result());
98 EXPECT_EQ(0u, res1->data().size()); 96 EXPECT_EQ(0u, res1->data().size());
99 EXPECT_EQ(kDone, res2->result()); 97 EXPECT_EQ(kDone, res2->result());
100 EXPECT_EQ(0u, res2->data().size()); 98 EXPECT_EQ(0u, res2->data().size());
101 } 99 }
102 100
103 TEST(DataConsumerTeeTest, Read) 101 TEST(DataConsumerTeeTest, Read)
104 { 102 {
105 std::unique_ptr<Handle> src(Handle::create()); 103 OwnPtr<Handle> src(Handle::create());
106 std::unique_ptr<WebDataConsumerHandle> dest1, dest2; 104 OwnPtr<WebDataConsumerHandle> dest1, dest2;
107 105
108 src->add(Command(Command::Wait)); 106 src->add(Command(Command::Wait));
109 src->add(Command(Command::Data, "hello, ")); 107 src->add(Command(Command::Data, "hello, "));
110 src->add(Command(Command::Wait)); 108 src->add(Command(Command::Wait));
111 src->add(Command(Command::Data, "world")); 109 src->add(Command(Command::Data, "world"));
112 src->add(Command(Command::Wait)); 110 src->add(Command(Command::Wait));
113 src->add(Command(Command::Wait)); 111 src->add(Command(Command::Wait));
114 src->add(Command(Command::Done)); 112 src->add(Command(Command::Done));
115 113
116 std::unique_ptr<TeeCreationThread<WebDataConsumerHandle>> t = wrapUnique(new TeeCreationThread<WebDataConsumerHandle>()); 114 OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreatio nThread<WebDataConsumerHandle>());
117 t->run(std::move(src), &dest1, &dest2); 115 t->run(std::move(src), &dest1, &dest2);
118 116
119 ASSERT_TRUE(dest1); 117 ASSERT_TRUE(dest1);
120 ASSERT_TRUE(dest2); 118 ASSERT_TRUE(dest2);
121 119
122 HandleReaderRunner<HandleReader> r1(std::move(dest1)); 120 HandleReaderRunner<HandleReader> r1(std::move(dest1));
123 HandleReaderRunner<HandleReader> r2(std::move(dest2)); 121 HandleReaderRunner<HandleReader> r2(std::move(dest2));
124 122
125 std::unique_ptr<HandleReadResult> res1 = r1.wait(); 123 OwnPtr<HandleReadResult> res1 = r1.wait();
126 std::unique_ptr<HandleReadResult> res2 = r2.wait(); 124 OwnPtr<HandleReadResult> res2 = r2.wait();
127 125
128 EXPECT_EQ(kDone, res1->result()); 126 EXPECT_EQ(kDone, res1->result());
129 EXPECT_EQ("hello, world", toString(res1->data())); 127 EXPECT_EQ("hello, world", toString(res1->data()));
130 128
131 EXPECT_EQ(kDone, res2->result()); 129 EXPECT_EQ(kDone, res2->result());
132 EXPECT_EQ("hello, world", toString(res2->data())); 130 EXPECT_EQ("hello, world", toString(res2->data()));
133 } 131 }
134 132
135 TEST(DataConsumerTeeTest, TwoPhaseRead) 133 TEST(DataConsumerTeeTest, TwoPhaseRead)
136 { 134 {
137 std::unique_ptr<Handle> src(Handle::create()); 135 OwnPtr<Handle> src(Handle::create());
138 std::unique_ptr<WebDataConsumerHandle> dest1, dest2; 136 OwnPtr<WebDataConsumerHandle> dest1, dest2;
139 137
140 src->add(Command(Command::Wait)); 138 src->add(Command(Command::Wait));
141 src->add(Command(Command::Data, "hello, ")); 139 src->add(Command(Command::Data, "hello, "));
142 src->add(Command(Command::Wait)); 140 src->add(Command(Command::Wait));
143 src->add(Command(Command::Wait)); 141 src->add(Command(Command::Wait));
144 src->add(Command(Command::Wait)); 142 src->add(Command(Command::Wait));
145 src->add(Command(Command::Data, "world")); 143 src->add(Command(Command::Data, "world"));
146 src->add(Command(Command::Wait)); 144 src->add(Command(Command::Wait));
147 src->add(Command(Command::Done)); 145 src->add(Command(Command::Done));
148 146
149 std::unique_ptr<TeeCreationThread<WebDataConsumerHandle>> t = wrapUnique(new TeeCreationThread<WebDataConsumerHandle>()); 147 OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreatio nThread<WebDataConsumerHandle>());
150 t->run(std::move(src), &dest1, &dest2); 148 t->run(std::move(src), &dest1, &dest2);
151 149
152 ASSERT_TRUE(dest1); 150 ASSERT_TRUE(dest1);
153 ASSERT_TRUE(dest2); 151 ASSERT_TRUE(dest2);
154 152
155 HandleReaderRunner<HandleTwoPhaseReader> r1(std::move(dest1)); 153 HandleReaderRunner<HandleTwoPhaseReader> r1(std::move(dest1));
156 HandleReaderRunner<HandleTwoPhaseReader> r2(std::move(dest2)); 154 HandleReaderRunner<HandleTwoPhaseReader> r2(std::move(dest2));
157 155
158 std::unique_ptr<HandleReadResult> res1 = r1.wait(); 156 OwnPtr<HandleReadResult> res1 = r1.wait();
159 std::unique_ptr<HandleReadResult> res2 = r2.wait(); 157 OwnPtr<HandleReadResult> res2 = r2.wait();
160 158
161 EXPECT_EQ(kDone, res1->result()); 159 EXPECT_EQ(kDone, res1->result());
162 EXPECT_EQ("hello, world", toString(res1->data())); 160 EXPECT_EQ("hello, world", toString(res1->data()));
163 161
164 EXPECT_EQ(kDone, res2->result()); 162 EXPECT_EQ(kDone, res2->result());
165 EXPECT_EQ("hello, world", toString(res2->data())); 163 EXPECT_EQ("hello, world", toString(res2->data()));
166 } 164 }
167 165
168 TEST(DataConsumerTeeTest, Error) 166 TEST(DataConsumerTeeTest, Error)
169 { 167 {
170 std::unique_ptr<Handle> src(Handle::create()); 168 OwnPtr<Handle> src(Handle::create());
171 std::unique_ptr<WebDataConsumerHandle> dest1, dest2; 169 OwnPtr<WebDataConsumerHandle> dest1, dest2;
172 170
173 src->add(Command(Command::Data, "hello, ")); 171 src->add(Command(Command::Data, "hello, "));
174 src->add(Command(Command::Data, "world")); 172 src->add(Command(Command::Data, "world"));
175 src->add(Command(Command::Error)); 173 src->add(Command(Command::Error));
176 174
177 std::unique_ptr<TeeCreationThread<WebDataConsumerHandle>> t = wrapUnique(new TeeCreationThread<WebDataConsumerHandle>()); 175 OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreatio nThread<WebDataConsumerHandle>());
178 t->run(std::move(src), &dest1, &dest2); 176 t->run(std::move(src), &dest1, &dest2);
179 177
180 ASSERT_TRUE(dest1); 178 ASSERT_TRUE(dest1);
181 ASSERT_TRUE(dest2); 179 ASSERT_TRUE(dest2);
182 180
183 HandleReaderRunner<HandleReader> r1(std::move(dest1)); 181 HandleReaderRunner<HandleReader> r1(std::move(dest1));
184 HandleReaderRunner<HandleReader> r2(std::move(dest2)); 182 HandleReaderRunner<HandleReader> r2(std::move(dest2));
185 183
186 std::unique_ptr<HandleReadResult> res1 = r1.wait(); 184 OwnPtr<HandleReadResult> res1 = r1.wait();
187 std::unique_ptr<HandleReadResult> res2 = r2.wait(); 185 OwnPtr<HandleReadResult> res2 = r2.wait();
188 186
189 EXPECT_EQ(kUnexpectedError, res1->result()); 187 EXPECT_EQ(kUnexpectedError, res1->result());
190 EXPECT_EQ(kUnexpectedError, res2->result()); 188 EXPECT_EQ(kUnexpectedError, res2->result());
191 } 189 }
192 190
193 void postStop(Thread* thread) 191 void postStop(Thread* thread)
194 { 192 {
195 thread->getExecutionContext()->stopActiveDOMObjects(); 193 thread->getExecutionContext()->stopActiveDOMObjects();
196 } 194 }
197 195
198 TEST(DataConsumerTeeTest, StopSource) 196 TEST(DataConsumerTeeTest, StopSource)
199 { 197 {
200 std::unique_ptr<Handle> src(Handle::create()); 198 OwnPtr<Handle> src(Handle::create());
201 std::unique_ptr<WebDataConsumerHandle> dest1, dest2; 199 OwnPtr<WebDataConsumerHandle> dest1, dest2;
202 200
203 src->add(Command(Command::Data, "hello, ")); 201 src->add(Command(Command::Data, "hello, "));
204 src->add(Command(Command::Data, "world")); 202 src->add(Command(Command::Data, "world"));
205 203
206 std::unique_ptr<TeeCreationThread<WebDataConsumerHandle>> t = wrapUnique(new TeeCreationThread<WebDataConsumerHandle>()); 204 OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreatio nThread<WebDataConsumerHandle>());
207 t->run(std::move(src), &dest1, &dest2); 205 t->run(std::move(src), &dest1, &dest2);
208 206
209 ASSERT_TRUE(dest1); 207 ASSERT_TRUE(dest1);
210 ASSERT_TRUE(dest2); 208 ASSERT_TRUE(dest2);
211 209
212 HandleReaderRunner<HandleReader> r1(std::move(dest1)); 210 HandleReaderRunner<HandleReader> r1(std::move(dest1));
213 HandleReaderRunner<HandleReader> r2(std::move(dest2)); 211 HandleReaderRunner<HandleReader> r2(std::move(dest2));
214 212
215 // We can pass a raw pointer because the subsequent |wait| calls ensure 213 // We can pass a raw pointer because the subsequent |wait| calls ensure
216 // t->thread() is alive. 214 // t->thread() is alive.
217 t->getThread()->thread()->postTask(BLINK_FROM_HERE, threadSafeBind(postStop, AllowCrossThreadAccess(t->getThread()))); 215 t->getThread()->thread()->postTask(BLINK_FROM_HERE, threadSafeBind(postStop, AllowCrossThreadAccess(t->getThread())));
218 216
219 std::unique_ptr<HandleReadResult> res1 = r1.wait(); 217 OwnPtr<HandleReadResult> res1 = r1.wait();
220 std::unique_ptr<HandleReadResult> res2 = r2.wait(); 218 OwnPtr<HandleReadResult> res2 = r2.wait();
221 219
222 EXPECT_EQ(kUnexpectedError, res1->result()); 220 EXPECT_EQ(kUnexpectedError, res1->result());
223 EXPECT_EQ(kUnexpectedError, res2->result()); 221 EXPECT_EQ(kUnexpectedError, res2->result());
224 } 222 }
225 223
226 TEST(DataConsumerTeeTest, DetachSource) 224 TEST(DataConsumerTeeTest, DetachSource)
227 { 225 {
228 std::unique_ptr<Handle> src(Handle::create()); 226 OwnPtr<Handle> src(Handle::create());
229 std::unique_ptr<WebDataConsumerHandle> dest1, dest2; 227 OwnPtr<WebDataConsumerHandle> dest1, dest2;
230 228
231 src->add(Command(Command::Data, "hello, ")); 229 src->add(Command(Command::Data, "hello, "));
232 src->add(Command(Command::Data, "world")); 230 src->add(Command(Command::Data, "world"));
233 231
234 std::unique_ptr<TeeCreationThread<WebDataConsumerHandle>> t = wrapUnique(new TeeCreationThread<WebDataConsumerHandle>()); 232 OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreatio nThread<WebDataConsumerHandle>());
235 t->run(std::move(src), &dest1, &dest2); 233 t->run(std::move(src), &dest1, &dest2);
236 234
237 ASSERT_TRUE(dest1); 235 ASSERT_TRUE(dest1);
238 ASSERT_TRUE(dest2); 236 ASSERT_TRUE(dest2);
239 237
240 HandleReaderRunner<HandleReader> r1(std::move(dest1)); 238 HandleReaderRunner<HandleReader> r1(std::move(dest1));
241 HandleReaderRunner<HandleReader> r2(std::move(dest2)); 239 HandleReaderRunner<HandleReader> r2(std::move(dest2));
242 240
243 t = nullptr; 241 t = nullptr;
244 242
245 std::unique_ptr<HandleReadResult> res1 = r1.wait(); 243 OwnPtr<HandleReadResult> res1 = r1.wait();
246 std::unique_ptr<HandleReadResult> res2 = r2.wait(); 244 OwnPtr<HandleReadResult> res2 = r2.wait();
247 245
248 EXPECT_EQ(kUnexpectedError, res1->result()); 246 EXPECT_EQ(kUnexpectedError, res1->result());
249 EXPECT_EQ(kUnexpectedError, res2->result()); 247 EXPECT_EQ(kUnexpectedError, res2->result());
250 } 248 }
251 249
252 TEST(DataConsumerTeeTest, DetachSourceAfterReadingDone) 250 TEST(DataConsumerTeeTest, DetachSourceAfterReadingDone)
253 { 251 {
254 std::unique_ptr<Handle> src(Handle::create()); 252 OwnPtr<Handle> src(Handle::create());
255 std::unique_ptr<WebDataConsumerHandle> dest1, dest2; 253 OwnPtr<WebDataConsumerHandle> dest1, dest2;
256 254
257 src->add(Command(Command::Data, "hello, ")); 255 src->add(Command(Command::Data, "hello, "));
258 src->add(Command(Command::Data, "world")); 256 src->add(Command(Command::Data, "world"));
259 src->add(Command(Command::Done)); 257 src->add(Command(Command::Done));
260 258
261 std::unique_ptr<TeeCreationThread<WebDataConsumerHandle>> t = wrapUnique(new TeeCreationThread<WebDataConsumerHandle>()); 259 OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreatio nThread<WebDataConsumerHandle>());
262 t->run(std::move(src), &dest1, &dest2); 260 t->run(std::move(src), &dest1, &dest2);
263 261
264 ASSERT_TRUE(dest1); 262 ASSERT_TRUE(dest1);
265 ASSERT_TRUE(dest2); 263 ASSERT_TRUE(dest2);
266 264
267 HandleReaderRunner<HandleReader> r1(std::move(dest1)); 265 HandleReaderRunner<HandleReader> r1(std::move(dest1));
268 std::unique_ptr<HandleReadResult> res1 = r1.wait(); 266 OwnPtr<HandleReadResult> res1 = r1.wait();
269 267
270 EXPECT_EQ(kDone, res1->result()); 268 EXPECT_EQ(kDone, res1->result());
271 EXPECT_EQ("hello, world", toString(res1->data())); 269 EXPECT_EQ("hello, world", toString(res1->data()));
272 270
273 t = nullptr; 271 t = nullptr;
274 272
275 HandleReaderRunner<HandleReader> r2(std::move(dest2)); 273 HandleReaderRunner<HandleReader> r2(std::move(dest2));
276 std::unique_ptr<HandleReadResult> res2 = r2.wait(); 274 OwnPtr<HandleReadResult> res2 = r2.wait();
277 275
278 EXPECT_EQ(kDone, res2->result()); 276 EXPECT_EQ(kDone, res2->result());
279 EXPECT_EQ("hello, world", toString(res2->data())); 277 EXPECT_EQ("hello, world", toString(res2->data()));
280 } 278 }
281 279
282 TEST(DataConsumerTeeTest, DetachOneDestination) 280 TEST(DataConsumerTeeTest, DetachOneDestination)
283 { 281 {
284 std::unique_ptr<Handle> src(Handle::create()); 282 OwnPtr<Handle> src(Handle::create());
285 std::unique_ptr<WebDataConsumerHandle> dest1, dest2; 283 OwnPtr<WebDataConsumerHandle> dest1, dest2;
286 284
287 src->add(Command(Command::Data, "hello, ")); 285 src->add(Command(Command::Data, "hello, "));
288 src->add(Command(Command::Data, "world")); 286 src->add(Command(Command::Data, "world"));
289 src->add(Command(Command::Done)); 287 src->add(Command(Command::Done));
290 288
291 std::unique_ptr<TeeCreationThread<WebDataConsumerHandle>> t = wrapUnique(new TeeCreationThread<WebDataConsumerHandle>()); 289 OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreatio nThread<WebDataConsumerHandle>());
292 t->run(std::move(src), &dest1, &dest2); 290 t->run(std::move(src), &dest1, &dest2);
293 291
294 ASSERT_TRUE(dest1); 292 ASSERT_TRUE(dest1);
295 ASSERT_TRUE(dest2); 293 ASSERT_TRUE(dest2);
296 294
297 dest1 = nullptr; 295 dest1 = nullptr;
298 296
299 HandleReaderRunner<HandleReader> r2(std::move(dest2)); 297 HandleReaderRunner<HandleReader> r2(std::move(dest2));
300 std::unique_ptr<HandleReadResult> res2 = r2.wait(); 298 OwnPtr<HandleReadResult> res2 = r2.wait();
301 299
302 EXPECT_EQ(kDone, res2->result()); 300 EXPECT_EQ(kDone, res2->result());
303 EXPECT_EQ("hello, world", toString(res2->data())); 301 EXPECT_EQ("hello, world", toString(res2->data()));
304 } 302 }
305 303
306 TEST(DataConsumerTeeTest, DetachBothDestinationsShouldStopSourceReader) 304 TEST(DataConsumerTeeTest, DetachBothDestinationsShouldStopSourceReader)
307 { 305 {
308 std::unique_ptr<Handle> src(Handle::create()); 306 OwnPtr<Handle> src(Handle::create());
309 RefPtr<Handle::Context> context(src->getContext()); 307 RefPtr<Handle::Context> context(src->getContext());
310 std::unique_ptr<WebDataConsumerHandle> dest1, dest2; 308 OwnPtr<WebDataConsumerHandle> dest1, dest2;
311 309
312 src->add(Command(Command::Data, "hello, ")); 310 src->add(Command(Command::Data, "hello, "));
313 src->add(Command(Command::Data, "world")); 311 src->add(Command(Command::Data, "world"));
314 312
315 std::unique_ptr<TeeCreationThread<WebDataConsumerHandle>> t = wrapUnique(new TeeCreationThread<WebDataConsumerHandle>()); 313 OwnPtr<TeeCreationThread<WebDataConsumerHandle>> t = adoptPtr(new TeeCreatio nThread<WebDataConsumerHandle>());
316 t->run(std::move(src), &dest1, &dest2); 314 t->run(std::move(src), &dest1, &dest2);
317 315
318 ASSERT_TRUE(dest1); 316 ASSERT_TRUE(dest1);
319 ASSERT_TRUE(dest2); 317 ASSERT_TRUE(dest2);
320 318
321 dest1 = nullptr; 319 dest1 = nullptr;
322 dest2 = nullptr; 320 dest2 = nullptr;
323 321
324 // Collect garbage to finalize the source reader. 322 // Collect garbage to finalize the source reader.
325 ThreadHeap::collectAllGarbage(); 323 ThreadHeap::collectAllGarbage();
326 context->detached()->wait(); 324 context->detached()->wait();
327 } 325 }
328 326
329 TEST(FetchDataConsumerTeeTest, Create) 327 TEST(FetchDataConsumerTeeTest, Create)
330 { 328 {
331 RefPtr<BlobDataHandle> blobDataHandle = BlobDataHandle::create(); 329 RefPtr<BlobDataHandle> blobDataHandle = BlobDataHandle::create();
332 std::unique_ptr<MockFetchDataConsumerHandle> src(MockFetchDataConsumerHandle ::create()); 330 OwnPtr<MockFetchDataConsumerHandle> src(MockFetchDataConsumerHandle::create( ));
333 std::unique_ptr<MockFetchDataConsumerReader> reader(MockFetchDataConsumerRea der::create()); 331 OwnPtr<MockFetchDataConsumerReader> reader(MockFetchDataConsumerReader::crea te());
334 332
335 Checkpoint checkpoint; 333 Checkpoint checkpoint;
336 InSequence s; 334 InSequence s;
337 EXPECT_CALL(checkpoint, Call(1)); 335 EXPECT_CALL(checkpoint, Call(1));
338 EXPECT_CALL(*src, obtainReaderInternal(_)).WillOnce(Return(reader.get())); 336 EXPECT_CALL(*src, obtainReaderInternal(_)).WillOnce(Return(reader.get()));
339 EXPECT_CALL(*reader, drainAsBlobDataHandle(kAllowBlobWithInvalidSize)).WillO nce(Return(blobDataHandle)); 337 EXPECT_CALL(*reader, drainAsBlobDataHandle(kAllowBlobWithInvalidSize)).WillO nce(Return(blobDataHandle));
340 EXPECT_CALL(*reader, destruct()); 338 EXPECT_CALL(*reader, destruct());
341 EXPECT_CALL(checkpoint, Call(2)); 339 EXPECT_CALL(checkpoint, Call(2));
342 340
343 // |reader| is adopted by |obtainReader|. 341 // |reader| is adopted by |obtainReader|.
344 ASSERT_TRUE(reader.release()); 342 ASSERT_TRUE(reader.leakPtr());
345 343
346 std::unique_ptr<FetchDataConsumerHandle> dest1, dest2; 344 OwnPtr<FetchDataConsumerHandle> dest1, dest2;
347 std::unique_ptr<TeeCreationThread<FetchDataConsumerHandle>> t = wrapUnique(n ew TeeCreationThread<FetchDataConsumerHandle>()); 345 OwnPtr<TeeCreationThread<FetchDataConsumerHandle>> t = adoptPtr(new TeeCreat ionThread<FetchDataConsumerHandle>());
348 346
349 checkpoint.Call(1); 347 checkpoint.Call(1);
350 t->run(std::move(src), &dest1, &dest2); 348 t->run(std::move(src), &dest1, &dest2);
351 checkpoint.Call(2); 349 checkpoint.Call(2);
352 350
353 ASSERT_TRUE(dest1); 351 ASSERT_TRUE(dest1);
354 ASSERT_TRUE(dest2); 352 ASSERT_TRUE(dest2);
355 EXPECT_EQ(blobDataHandle, dest1->obtainReader(nullptr)->drainAsBlobDataHandl e(kAllowBlobWithInvalidSize)); 353 EXPECT_EQ(blobDataHandle, dest1->obtainReader(nullptr)->drainAsBlobDataHandl e(kAllowBlobWithInvalidSize));
356 EXPECT_EQ(blobDataHandle, dest2->obtainReader(nullptr)->drainAsBlobDataHandl e(kAllowBlobWithInvalidSize)); 354 EXPECT_EQ(blobDataHandle, dest2->obtainReader(nullptr)->drainAsBlobDataHandl e(kAllowBlobWithInvalidSize));
357 } 355 }
358 356
359 TEST(FetchDataConsumerTeeTest, CreateFromBlobWithInvalidSize) 357 TEST(FetchDataConsumerTeeTest, CreateFromBlobWithInvalidSize)
360 { 358 {
361 RefPtr<BlobDataHandle> blobDataHandle = BlobDataHandle::create(BlobData::cre ate(), -1); 359 RefPtr<BlobDataHandle> blobDataHandle = BlobDataHandle::create(BlobData::cre ate(), -1);
362 std::unique_ptr<MockFetchDataConsumerHandle> src(MockFetchDataConsumerHandle ::create()); 360 OwnPtr<MockFetchDataConsumerHandle> src(MockFetchDataConsumerHandle::create( ));
363 std::unique_ptr<MockFetchDataConsumerReader> reader(MockFetchDataConsumerRea der::create()); 361 OwnPtr<MockFetchDataConsumerReader> reader(MockFetchDataConsumerReader::crea te());
364 362
365 Checkpoint checkpoint; 363 Checkpoint checkpoint;
366 InSequence s; 364 InSequence s;
367 EXPECT_CALL(checkpoint, Call(1)); 365 EXPECT_CALL(checkpoint, Call(1));
368 EXPECT_CALL(*src, obtainReaderInternal(_)).WillOnce(Return(reader.get())); 366 EXPECT_CALL(*src, obtainReaderInternal(_)).WillOnce(Return(reader.get()));
369 EXPECT_CALL(*reader, drainAsBlobDataHandle(kAllowBlobWithInvalidSize)).WillO nce(Return(blobDataHandle)); 367 EXPECT_CALL(*reader, drainAsBlobDataHandle(kAllowBlobWithInvalidSize)).WillO nce(Return(blobDataHandle));
370 EXPECT_CALL(*reader, destruct()); 368 EXPECT_CALL(*reader, destruct());
371 EXPECT_CALL(checkpoint, Call(2)); 369 EXPECT_CALL(checkpoint, Call(2));
372 370
373 // |reader| is adopted by |obtainReader|. 371 // |reader| is adopted by |obtainReader|.
374 ASSERT_TRUE(reader.release()); 372 ASSERT_TRUE(reader.leakPtr());
375 373
376 std::unique_ptr<FetchDataConsumerHandle> dest1, dest2; 374 OwnPtr<FetchDataConsumerHandle> dest1, dest2;
377 std::unique_ptr<TeeCreationThread<FetchDataConsumerHandle>> t = wrapUnique(n ew TeeCreationThread<FetchDataConsumerHandle>()); 375 OwnPtr<TeeCreationThread<FetchDataConsumerHandle>> t = adoptPtr(new TeeCreat ionThread<FetchDataConsumerHandle>());
378 376
379 checkpoint.Call(1); 377 checkpoint.Call(1);
380 t->run(std::move(src), &dest1, &dest2); 378 t->run(std::move(src), &dest1, &dest2);
381 checkpoint.Call(2); 379 checkpoint.Call(2);
382 380
383 ASSERT_TRUE(dest1); 381 ASSERT_TRUE(dest1);
384 ASSERT_TRUE(dest2); 382 ASSERT_TRUE(dest2);
385 EXPECT_FALSE(dest1->obtainReader(nullptr)->drainAsBlobDataHandle(kDisallowBl obWithInvalidSize)); 383 EXPECT_FALSE(dest1->obtainReader(nullptr)->drainAsBlobDataHandle(kDisallowBl obWithInvalidSize));
386 EXPECT_EQ(blobDataHandle, dest1->obtainReader(nullptr)->drainAsBlobDataHandl e(kAllowBlobWithInvalidSize)); 384 EXPECT_EQ(blobDataHandle, dest1->obtainReader(nullptr)->drainAsBlobDataHandl e(kAllowBlobWithInvalidSize));
387 EXPECT_FALSE(dest2->obtainReader(nullptr)->drainAsBlobDataHandle(kDisallowBl obWithInvalidSize)); 385 EXPECT_FALSE(dest2->obtainReader(nullptr)->drainAsBlobDataHandle(kDisallowBl obWithInvalidSize));
388 EXPECT_EQ(blobDataHandle, dest2->obtainReader(nullptr)->drainAsBlobDataHandl e(kAllowBlobWithInvalidSize)); 386 EXPECT_EQ(blobDataHandle, dest2->obtainReader(nullptr)->drainAsBlobDataHandl e(kAllowBlobWithInvalidSize));
389 } 387 }
390 388
391 TEST(FetchDataConsumerTeeTest, CreateDone) 389 TEST(FetchDataConsumerTeeTest, CreateDone)
392 { 390 {
393 std::unique_ptr<Handle> src(Handle::create()); 391 OwnPtr<Handle> src(Handle::create());
394 std::unique_ptr<FetchDataConsumerHandle> dest1, dest2; 392 OwnPtr<FetchDataConsumerHandle> dest1, dest2;
395 393
396 src->add(Command(Command::Done)); 394 src->add(Command(Command::Done));
397 395
398 std::unique_ptr<TeeCreationThread<FetchDataConsumerHandle>> t = wrapUnique(n ew TeeCreationThread<FetchDataConsumerHandle>()); 396 OwnPtr<TeeCreationThread<FetchDataConsumerHandle>> t = adoptPtr(new TeeCreat ionThread<FetchDataConsumerHandle>());
399 t->run(createFetchDataConsumerHandleFromWebHandle(std::move(src)), &dest1, & dest2); 397 t->run(createFetchDataConsumerHandleFromWebHandle(std::move(src)), &dest1, & dest2);
400 398
401 ASSERT_TRUE(dest1); 399 ASSERT_TRUE(dest1);
402 ASSERT_TRUE(dest2); 400 ASSERT_TRUE(dest2);
403 401
404 EXPECT_FALSE(dest1->obtainReader(nullptr)->drainAsBlobDataHandle(kAllowBlobW ithInvalidSize)); 402 EXPECT_FALSE(dest1->obtainReader(nullptr)->drainAsBlobDataHandle(kAllowBlobW ithInvalidSize));
405 EXPECT_FALSE(dest2->obtainReader(nullptr)->drainAsBlobDataHandle(kAllowBlobW ithInvalidSize)); 403 EXPECT_FALSE(dest2->obtainReader(nullptr)->drainAsBlobDataHandle(kAllowBlobW ithInvalidSize));
406 404
407 HandleReaderRunner<HandleReader> r1(std::move(dest1)), r2(std::move(dest2)); 405 HandleReaderRunner<HandleReader> r1(std::move(dest1)), r2(std::move(dest2));
408 406
409 std::unique_ptr<HandleReadResult> res1 = r1.wait(); 407 OwnPtr<HandleReadResult> res1 = r1.wait();
410 std::unique_ptr<HandleReadResult> res2 = r2.wait(); 408 OwnPtr<HandleReadResult> res2 = r2.wait();
411 409
412 EXPECT_EQ(kDone, res1->result()); 410 EXPECT_EQ(kDone, res1->result());
413 EXPECT_EQ(0u, res1->data().size()); 411 EXPECT_EQ(0u, res1->data().size());
414 EXPECT_EQ(kDone, res2->result()); 412 EXPECT_EQ(kDone, res2->result());
415 EXPECT_EQ(0u, res2->data().size()); 413 EXPECT_EQ(0u, res2->data().size());
416 } 414 }
417 415
418 } // namespace 416 } // namespace
419 } // namespace blink 417 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698