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

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

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

Powered by Google App Engine
This is Rietveld 408576698