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

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

Issue 1925583003: Replace AllowCrossThreadAccess() + non-GCed pointers with crossThreadUnretained() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@Kuroneko_4
Patch Set: Rebase. Created 4 years, 5 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"
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 return String(v.data(), v.size()); 52 return String(v.data(), v.size());
53 } 53 }
54 54
55 template<typename Handle> 55 template<typename Handle>
56 class TeeCreationThread { 56 class TeeCreationThread {
57 public: 57 public:
58 void run(std::unique_ptr<Handle> src, std::unique_ptr<Handle>* dest1, std::u nique_ptr<Handle>* dest2) 58 void run(std::unique_ptr<Handle> src, std::unique_ptr<Handle>* dest1, std::u nique_ptr<Handle>* dest2)
59 { 59 {
60 m_thread = wrapUnique(new Thread("src thread", Thread::WithExecutionCont ext)); 60 m_thread = wrapUnique(new Thread("src thread", Thread::WithExecutionCont ext));
61 m_waitableEvent = wrapUnique(new WaitableEvent()); 61 m_waitableEvent = wrapUnique(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))); 62 m_thread->thread()->postTask(BLINK_FROM_HERE, threadSafeBind(&TeeCreatio nThread<Handle>::runInternal, crossThreadUnretained(this), passed(std::move(src) ), crossThreadUnretained(dest1), crossThreadUnretained(dest2)));
63 m_waitableEvent->wait(); 63 m_waitableEvent->wait();
64 } 64 }
65 65
66 Thread* getThread() { return m_thread.get(); } 66 Thread* getThread() { return m_thread.get(); }
67 67
68 private: 68 private:
69 void runInternal(std::unique_ptr<Handle> src, std::unique_ptr<Handle>* dest1 , std::unique_ptr<Handle>* dest2) 69 void runInternal(std::unique_ptr<Handle> src, std::unique_ptr<Handle>* dest1 , std::unique_ptr<Handle>* dest2)
70 { 70 {
71 DataConsumerTee::create(m_thread->getExecutionContext(), std::move(src), dest1, dest2); 71 DataConsumerTee::create(m_thread->getExecutionContext(), std::move(src), dest1, dest2);
72 m_waitableEvent->signal(); 72 m_waitableEvent->signal();
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 t->run(std::move(src), &dest1, &dest2); 207 t->run(std::move(src), &dest1, &dest2);
208 208
209 ASSERT_TRUE(dest1); 209 ASSERT_TRUE(dest1);
210 ASSERT_TRUE(dest2); 210 ASSERT_TRUE(dest2);
211 211
212 HandleReaderRunner<HandleReader> r1(std::move(dest1)); 212 HandleReaderRunner<HandleReader> r1(std::move(dest1));
213 HandleReaderRunner<HandleReader> r2(std::move(dest2)); 213 HandleReaderRunner<HandleReader> r2(std::move(dest2));
214 214
215 // 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
216 // t->thread() is alive. 216 // t->thread() is alive.
217 t->getThread()->thread()->postTask(BLINK_FROM_HERE, threadSafeBind(postStop, AllowCrossThreadAccess(t->getThread()))); 217 t->getThread()->thread()->postTask(BLINK_FROM_HERE, threadSafeBind(postStop, crossThreadUnretained(t->getThread())));
218 218
219 std::unique_ptr<HandleReadResult> res1 = r1.wait(); 219 std::unique_ptr<HandleReadResult> res1 = r1.wait();
220 std::unique_ptr<HandleReadResult> res2 = r2.wait(); 220 std::unique_ptr<HandleReadResult> res2 = r2.wait();
221 221
222 EXPECT_EQ(kUnexpectedError, res1->result()); 222 EXPECT_EQ(kUnexpectedError, res1->result());
223 EXPECT_EQ(kUnexpectedError, res2->result()); 223 EXPECT_EQ(kUnexpectedError, res2->result());
224 } 224 }
225 225
226 TEST(DataConsumerTeeTest, DetachSource) 226 TEST(DataConsumerTeeTest, DetachSource)
227 { 227 {
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 std::unique_ptr<HandleReadResult> res2 = r2.wait(); 410 std::unique_ptr<HandleReadResult> res2 = r2.wait();
411 411
412 EXPECT_EQ(kDone, res1->result()); 412 EXPECT_EQ(kDone, res1->result());
413 EXPECT_EQ(0u, res1->data().size()); 413 EXPECT_EQ(0u, res1->data().size());
414 EXPECT_EQ(kDone, res2->result()); 414 EXPECT_EQ(kDone, res2->result());
415 EXPECT_EQ(0u, res2->data().size()); 415 EXPECT_EQ(0u, res2->data().size());
416 } 416 }
417 417
418 } // namespace 418 } // namespace
419 } // namespace blink 419 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698