OLD | NEW |
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/DataConsumerTee.h" | 6 #include "modules/fetch/DataConsumerTee.h" |
7 | 7 |
8 #include "core/testing/DummyPageHolder.h" | 8 #include "core/testing/DummyPageHolder.h" |
9 #include "core/testing/NullExecutionContext.h" | 9 #include "core/testing/NullExecutionContext.h" |
10 #include "modules/fetch/DataConsumerHandleTestUtil.h" | 10 #include "modules/fetch/DataConsumerHandleTestUtil.h" |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
53 return String(v.data(), v.size()); | 53 return String(v.data(), v.size()); |
54 } | 54 } |
55 | 55 |
56 template<typename Handle> | 56 template<typename Handle> |
57 class TeeCreationThread { | 57 class TeeCreationThread { |
58 public: | 58 public: |
59 void run(PassOwnPtr<Handle> src, OwnPtr<Handle>* dest1, OwnPtr<Handle>* dest
2) | 59 void run(PassOwnPtr<Handle> src, OwnPtr<Handle>* dest1, OwnPtr<Handle>* dest
2) |
60 { | 60 { |
61 m_thread = adoptPtr(new Thread("src thread", Thread::WithExecutionContex
t)); | 61 m_thread = adoptPtr(new Thread("src thread", Thread::WithExecutionContex
t)); |
62 m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent()); | 62 m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent()); |
63 m_thread->thread()->postTask(FROM_HERE, new Task(threadSafeBind(&TeeCrea
tionThread<Handle>::runInternal, AllowCrossThreadAccess(this), src, AllowCrossTh
readAccess(dest1), AllowCrossThreadAccess(dest2)))); | 63 m_thread->thread()->postTask(BLINK_FROM_HERE, new Task(threadSafeBind(&T
eeCreationThread<Handle>::runInternal, AllowCrossThreadAccess(this), src, AllowC
rossThreadAccess(dest1), AllowCrossThreadAccess(dest2)))); |
64 m_waitableEvent->wait(); | 64 m_waitableEvent->wait(); |
65 } | 65 } |
66 | 66 |
67 Thread* thread() { return m_thread.get(); } | 67 Thread* thread() { return m_thread.get(); } |
68 | 68 |
69 private: | 69 private: |
70 void runInternal(PassOwnPtr<Handle> src, OwnPtr<Handle>* dest1, OwnPtr<Handl
e>* dest2) | 70 void runInternal(PassOwnPtr<Handle> src, OwnPtr<Handle>* dest1, OwnPtr<Handl
e>* dest2) |
71 { | 71 { |
72 DataConsumerTee::create(m_thread->executionContext(), src, dest1, dest2)
; | 72 DataConsumerTee::create(m_thread->executionContext(), src, dest1, dest2)
; |
73 m_waitableEvent->signal(); | 73 m_waitableEvent->signal(); |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
208 t->run(src.release(), &dest1, &dest2); | 208 t->run(src.release(), &dest1, &dest2); |
209 | 209 |
210 ASSERT_TRUE(dest1); | 210 ASSERT_TRUE(dest1); |
211 ASSERT_TRUE(dest2); | 211 ASSERT_TRUE(dest2); |
212 | 212 |
213 HandleReaderRunner<HandleReader> r1(dest1.release()); | 213 HandleReaderRunner<HandleReader> r1(dest1.release()); |
214 HandleReaderRunner<HandleReader> r2(dest2.release()); | 214 HandleReaderRunner<HandleReader> r2(dest2.release()); |
215 | 215 |
216 // We can pass a raw pointer because the subsequent |wait| calls ensure | 216 // We can pass a raw pointer because the subsequent |wait| calls ensure |
217 // t->thread() is alive. | 217 // t->thread() is alive. |
218 t->thread()->thread()->postTask(FROM_HERE, new Task(threadSafeBind(postStop,
AllowCrossThreadAccess(t->thread())))); | 218 t->thread()->thread()->postTask(BLINK_FROM_HERE, new Task(threadSafeBind(pos
tStop, AllowCrossThreadAccess(t->thread())))); |
219 | 219 |
220 OwnPtr<HandleReadResult> res1 = r1.wait(); | 220 OwnPtr<HandleReadResult> res1 = r1.wait(); |
221 OwnPtr<HandleReadResult> res2 = r2.wait(); | 221 OwnPtr<HandleReadResult> res2 = r2.wait(); |
222 | 222 |
223 EXPECT_EQ(kUnexpectedError, res1->result()); | 223 EXPECT_EQ(kUnexpectedError, res1->result()); |
224 EXPECT_EQ(kUnexpectedError, res2->result()); | 224 EXPECT_EQ(kUnexpectedError, res2->result()); |
225 } | 225 } |
226 | 226 |
227 TEST(DataConsumerTeeTest, DetachSource) | 227 TEST(DataConsumerTeeTest, DetachSource) |
228 { | 228 { |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
411 OwnPtr<HandleReadResult> res2 = r2.wait(); | 411 OwnPtr<HandleReadResult> res2 = r2.wait(); |
412 | 412 |
413 EXPECT_EQ(kDone, res1->result()); | 413 EXPECT_EQ(kDone, res1->result()); |
414 EXPECT_EQ(0u, res1->data().size()); | 414 EXPECT_EQ(0u, res1->data().size()); |
415 EXPECT_EQ(kDone, res2->result()); | 415 EXPECT_EQ(kDone, res2->result()); |
416 EXPECT_EQ(0u, res2->data().size()); | 416 EXPECT_EQ(0u, res2->data().size()); |
417 } | 417 } |
418 | 418 |
419 } // namespace | 419 } // namespace |
420 } // namespace blink | 420 } // namespace blink |
OLD | NEW |