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

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

Issue 2104913002: Rename threadSafeBind() to crossThreadBind() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@TRV_CTCPointer
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/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/CrossThreadFunctional.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" 17 #include "wtf/PtrUtil.h"
18 #include <memory> 18 #include <memory>
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 class ThreadingRegistrationTest : public DataConsumerHandleTestUtil::ThreadingTe stBase { 54 class ThreadingRegistrationTest : public DataConsumerHandleTestUtil::ThreadingTe stBase {
55 public: 55 public:
56 using Self = ThreadingRegistrationTest; 56 using Self = ThreadingRegistrationTest;
57 static PassRefPtr<Self> create() { return adoptRef(new Self); } 57 static PassRefPtr<Self> create() { return adoptRef(new Self); }
58 58
59 void run() 59 void run()
60 { 60 {
61 ThreadHolder holder(this); 61 ThreadHolder holder(this);
62 m_waitableEvent = wrapUnique(new WaitableEvent()); 62 m_waitableEvent = wrapUnique(new WaitableEvent());
63 63
64 postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::c reateHandle, wrapPassRefPtr(this))); 64 postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self:: createHandle, wrapPassRefPtr(this)));
65 postTaskToReadingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::ob tainReader, wrapPassRefPtr(this))); 65 postTaskToReadingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self::o btainReader, wrapPassRefPtr(this)));
66 } 66 }
67 67
68 private: 68 private:
69 ThreadingRegistrationTest() = default; 69 ThreadingRegistrationTest() = default;
70 70
71 void createHandle() 71 void createHandle()
72 { 72 {
73 m_handle = CompositeDataConsumerHandle::create(DataConsumerHandle::creat e("handle1", m_context), &m_updater); 73 m_handle = CompositeDataConsumerHandle::create(DataConsumerHandle::creat e("handle1", m_context), &m_updater);
74 m_waitableEvent->signal(); 74 m_waitableEvent->signal();
75 } 75 }
76 void obtainReader() 76 void obtainReader()
77 { 77 {
78 m_reader = m_handle->obtainReader(&m_client); 78 m_reader = m_handle->obtainReader(&m_client);
79 postTaskToUpdatingThread(BLINK_FROM_HERE, threadSafeBind(&Self::update, wrapPassRefPtr(this))); 79 postTaskToUpdatingThread(BLINK_FROM_HERE, crossThreadBind(&Self::update, wrapPassRefPtr(this)));
80 } 80 }
81 void update() 81 void update()
82 { 82 {
83 m_updater->update(DataConsumerHandle::create("handle2", m_context)); 83 m_updater->update(DataConsumerHandle::create("handle2", m_context));
84 m_updater.clear(); 84 m_updater.clear();
85 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::resetRead er, wrapPassRefPtr(this))); 85 postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::resetRea der, wrapPassRefPtr(this)));
86 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::signalDon e, wrapPassRefPtr(this))); 86 postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::signalDo ne, wrapPassRefPtr(this)));
87 } 87 }
88 88
89 std::unique_ptr<WebDataConsumerHandle> m_handle; 89 std::unique_ptr<WebDataConsumerHandle> m_handle;
90 CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater; 90 CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater;
91 }; 91 };
92 92
93 class ThreadingRegistrationDeleteHandleTest : public DataConsumerHandleTestUtil: :ThreadingTestBase { 93 class ThreadingRegistrationDeleteHandleTest : public DataConsumerHandleTestUtil: :ThreadingTestBase {
94 public: 94 public:
95 using Self = ThreadingRegistrationDeleteHandleTest; 95 using Self = ThreadingRegistrationDeleteHandleTest;
96 static PassRefPtr<Self> create() { return adoptRef(new Self); } 96 static PassRefPtr<Self> create() { return adoptRef(new Self); }
97 97
98 void run() 98 void run()
99 { 99 {
100 ThreadHolder holder(this); 100 ThreadHolder holder(this);
101 m_waitableEvent = wrapUnique(new WaitableEvent()); 101 m_waitableEvent = wrapUnique(new WaitableEvent());
102 102
103 postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::c reateHandle, wrapPassRefPtr(this))); 103 postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self:: createHandle, wrapPassRefPtr(this)));
104 postTaskToReadingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::ob tainReader, wrapPassRefPtr(this))); 104 postTaskToReadingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self::o btainReader, wrapPassRefPtr(this)));
105 } 105 }
106 106
107 private: 107 private:
108 ThreadingRegistrationDeleteHandleTest() = default; 108 ThreadingRegistrationDeleteHandleTest() = default;
109 109
110 void createHandle() 110 void createHandle()
111 { 111 {
112 m_handle = CompositeDataConsumerHandle::create(DataConsumerHandle::creat e("handle1", m_context), &m_updater); 112 m_handle = CompositeDataConsumerHandle::create(DataConsumerHandle::creat e("handle1", m_context), &m_updater);
113 m_waitableEvent->signal(); 113 m_waitableEvent->signal();
114 } 114 }
115 115
116 void obtainReader() 116 void obtainReader()
117 { 117 {
118 m_reader = m_handle->obtainReader(&m_client); 118 m_reader = m_handle->obtainReader(&m_client);
119 postTaskToUpdatingThread(BLINK_FROM_HERE, threadSafeBind(&Self::update, wrapPassRefPtr(this))); 119 postTaskToUpdatingThread(BLINK_FROM_HERE, crossThreadBind(&Self::update, wrapPassRefPtr(this)));
120 } 120 }
121 void update() 121 void update()
122 { 122 {
123 m_updater->update(DataConsumerHandle::create("handle2", m_context)); 123 m_updater->update(DataConsumerHandle::create("handle2", m_context));
124 m_updater.clear(); 124 m_updater.clear();
125 m_handle = nullptr; 125 m_handle = nullptr;
126 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::resetRead er, wrapPassRefPtr(this))); 126 postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::resetRea der, wrapPassRefPtr(this)));
127 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::signalDon e, wrapPassRefPtr(this))); 127 postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::signalDo ne, wrapPassRefPtr(this)));
128 } 128 }
129 129
130 std::unique_ptr<WebDataConsumerHandle> m_handle; 130 std::unique_ptr<WebDataConsumerHandle> m_handle;
131 CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater; 131 CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater;
132 }; 132 };
133 133
134 class ThreadingRegistrationDeleteReaderTest : public DataConsumerHandleTestUtil: :ThreadingTestBase { 134 class ThreadingRegistrationDeleteReaderTest : public DataConsumerHandleTestUtil: :ThreadingTestBase {
135 public: 135 public:
136 using Self = ThreadingRegistrationDeleteReaderTest; 136 using Self = ThreadingRegistrationDeleteReaderTest;
137 static PassRefPtr<Self> create() { return adoptRef(new Self); } 137 static PassRefPtr<Self> create() { return adoptRef(new Self); }
138 138
139 void run() 139 void run()
140 { 140 {
141 ThreadHolder holder(this); 141 ThreadHolder holder(this);
142 m_waitableEvent = wrapUnique(new WaitableEvent()); 142 m_waitableEvent = wrapUnique(new WaitableEvent());
143 143
144 postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::c reateHandle, wrapPassRefPtr(this))); 144 postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self:: createHandle, wrapPassRefPtr(this)));
145 postTaskToReadingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::ob tainReader, wrapPassRefPtr(this))); 145 postTaskToReadingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self::o btainReader, wrapPassRefPtr(this)));
146 } 146 }
147 147
148 private: 148 private:
149 ThreadingRegistrationDeleteReaderTest() = default; 149 ThreadingRegistrationDeleteReaderTest() = default;
150 150
151 void createHandle() 151 void createHandle()
152 { 152 {
153 m_handle = CompositeDataConsumerHandle::create(DataConsumerHandle::creat e("handle1", m_context), &m_updater); 153 m_handle = CompositeDataConsumerHandle::create(DataConsumerHandle::creat e("handle1", m_context), &m_updater);
154 m_waitableEvent->signal(); 154 m_waitableEvent->signal();
155 } 155 }
156 156
157 void obtainReader() 157 void obtainReader()
158 { 158 {
159 m_reader = m_handle->obtainReader(&m_client); 159 m_reader = m_handle->obtainReader(&m_client);
160 postTaskToUpdatingThread(BLINK_FROM_HERE, threadSafeBind(&Self::update, wrapPassRefPtr(this))); 160 postTaskToUpdatingThread(BLINK_FROM_HERE, crossThreadBind(&Self::update, wrapPassRefPtr(this)));
161 } 161 }
162 void update() 162 void update()
163 { 163 {
164 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::resetRead er, wrapPassRefPtr(this))); 164 postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::resetRea der, wrapPassRefPtr(this)));
165 m_updater->update(DataConsumerHandle::create("handle2", m_context)); 165 m_updater->update(DataConsumerHandle::create("handle2", m_context));
166 m_updater.clear(); 166 m_updater.clear();
167 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::resetRead er, wrapPassRefPtr(this))); 167 postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::resetRea der, wrapPassRefPtr(this)));
168 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::signalDon e, wrapPassRefPtr(this))); 168 postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::signalDo ne, wrapPassRefPtr(this)));
169 } 169 }
170 170
171 std::unique_ptr<WebDataConsumerHandle> m_handle; 171 std::unique_ptr<WebDataConsumerHandle> m_handle;
172 CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater; 172 CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater;
173 }; 173 };
174 174
175 class ThreadingUpdatingReaderWhileUpdatingTest : public DataConsumerHandleTestUt il::ThreadingTestBase { 175 class ThreadingUpdatingReaderWhileUpdatingTest : public DataConsumerHandleTestUt il::ThreadingTestBase {
176 public: 176 public:
177 using Self = ThreadingUpdatingReaderWhileUpdatingTest; 177 using Self = ThreadingUpdatingReaderWhileUpdatingTest;
178 static PassRefPtr<Self> create() { return adoptRef(new Self); } 178 static PassRefPtr<Self> create() { return adoptRef(new Self); }
179 179
180 void run() 180 void run()
181 { 181 {
182 ThreadHolder holder(this); 182 ThreadHolder holder(this);
183 m_waitableEvent = wrapUnique(new WaitableEvent()); 183 m_waitableEvent = wrapUnique(new WaitableEvent());
184 m_updateEvent = wrapUnique(new WaitableEvent()); 184 m_updateEvent = wrapUnique(new WaitableEvent());
185 185
186 postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::c reateHandle, wrapPassRefPtr(this))); 186 postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self:: createHandle, wrapPassRefPtr(this)));
187 postTaskToReadingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::ob tainReader, wrapPassRefPtr(this))); 187 postTaskToReadingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self::o btainReader, wrapPassRefPtr(this)));
188 } 188 }
189 189
190 private: 190 private:
191 ThreadingUpdatingReaderWhileUpdatingTest() = default; 191 ThreadingUpdatingReaderWhileUpdatingTest() = default;
192 192
193 void createHandle() 193 void createHandle()
194 { 194 {
195 m_handle = CompositeDataConsumerHandle::create(DataConsumerHandle::creat e("handle1", m_context), &m_updater); 195 m_handle = CompositeDataConsumerHandle::create(DataConsumerHandle::creat e("handle1", m_context), &m_updater);
196 m_waitableEvent->signal(); 196 m_waitableEvent->signal();
197 } 197 }
198 198
199 void obtainReader() 199 void obtainReader()
200 { 200 {
201 m_reader = m_handle->obtainReader(&m_client); 201 m_reader = m_handle->obtainReader(&m_client);
202 postTaskToUpdatingThread(BLINK_FROM_HERE, threadSafeBind(&Self::update, wrapPassRefPtr(this))); 202 postTaskToUpdatingThread(BLINK_FROM_HERE, crossThreadBind(&Self::update, wrapPassRefPtr(this)));
203 m_updateEvent->wait(); 203 m_updateEvent->wait();
204 } 204 }
205 205
206 void update() 206 void update()
207 { 207 {
208 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::reobtainR eader, wrapPassRefPtr(this))); 208 postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::reobtain Reader, wrapPassRefPtr(this)));
209 m_updater->update(DataConsumerHandle::create("handle2", m_context)); 209 m_updater->update(DataConsumerHandle::create("handle2", m_context));
210 m_updater.clear(); 210 m_updater.clear();
211 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::resetRead er, wrapPassRefPtr(this))); 211 postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::resetRea der, wrapPassRefPtr(this)));
212 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::signalDon e, wrapPassRefPtr(this))); 212 postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::signalDo ne, wrapPassRefPtr(this)));
213 m_updateEvent->signal(); 213 m_updateEvent->signal();
214 } 214 }
215 215
216 void reobtainReader() 216 void reobtainReader()
217 { 217 {
218 m_reader = nullptr; 218 m_reader = nullptr;
219 m_reader = m_handle->obtainReader(&m_client); 219 m_reader = m_handle->obtainReader(&m_client);
220 } 220 }
221 221
222 std::unique_ptr<WebDataConsumerHandle> m_handle; 222 std::unique_ptr<WebDataConsumerHandle> m_handle;
223 CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater; 223 CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater;
224 std::unique_ptr<WaitableEvent> m_updateEvent; 224 std::unique_ptr<WaitableEvent> m_updateEvent;
225 }; 225 };
226 226
227 class ThreadingRegistrationUpdateTwiceAtOneTimeTest : public DataConsumerHandleT estUtil::ThreadingTestBase { 227 class ThreadingRegistrationUpdateTwiceAtOneTimeTest : public DataConsumerHandleT estUtil::ThreadingTestBase {
228 public: 228 public:
229 using Self = ThreadingRegistrationUpdateTwiceAtOneTimeTest; 229 using Self = ThreadingRegistrationUpdateTwiceAtOneTimeTest;
230 static PassRefPtr<Self> create() { return adoptRef(new Self); } 230 static PassRefPtr<Self> create() { return adoptRef(new Self); }
231 231
232 void run() 232 void run()
233 { 233 {
234 ThreadHolder holder(this); 234 ThreadHolder holder(this);
235 m_waitableEvent = wrapUnique(new WaitableEvent()); 235 m_waitableEvent = wrapUnique(new WaitableEvent());
236 m_updateEvent = wrapUnique(new WaitableEvent()); 236 m_updateEvent = wrapUnique(new WaitableEvent());
237 237
238 postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::c reateHandle, wrapPassRefPtr(this))); 238 postTaskToUpdatingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self:: createHandle, wrapPassRefPtr(this)));
239 postTaskToReadingThreadAndWait(BLINK_FROM_HERE, threadSafeBind(&Self::ob tainReader, wrapPassRefPtr(this))); 239 postTaskToReadingThreadAndWait(BLINK_FROM_HERE, crossThreadBind(&Self::o btainReader, wrapPassRefPtr(this)));
240 } 240 }
241 241
242 private: 242 private:
243 ThreadingRegistrationUpdateTwiceAtOneTimeTest() = default; 243 ThreadingRegistrationUpdateTwiceAtOneTimeTest() = default;
244 244
245 void createHandle() 245 void createHandle()
246 { 246 {
247 m_handle = CompositeDataConsumerHandle::create(DataConsumerHandle::creat e("handle1", m_context), &m_updater); 247 m_handle = CompositeDataConsumerHandle::create(DataConsumerHandle::creat e("handle1", m_context), &m_updater);
248 m_waitableEvent->signal(); 248 m_waitableEvent->signal();
249 } 249 }
250 250
251 void obtainReader() 251 void obtainReader()
252 { 252 {
253 m_reader = m_handle->obtainReader(&m_client); 253 m_reader = m_handle->obtainReader(&m_client);
254 postTaskToUpdatingThread(BLINK_FROM_HERE, threadSafeBind(&Self::update, wrapPassRefPtr(this))); 254 postTaskToUpdatingThread(BLINK_FROM_HERE, crossThreadBind(&Self::update, wrapPassRefPtr(this)));
255 // Stalls this thread while updating handles. 255 // Stalls this thread while updating handles.
256 m_updateEvent->wait(); 256 m_updateEvent->wait();
257 } 257 }
258 void update() 258 void update()
259 { 259 {
260 m_updater->update(DataConsumerHandle::create("handle2", m_context)); 260 m_updater->update(DataConsumerHandle::create("handle2", m_context));
261 m_updater->update(DataConsumerHandle::create("handle3", m_context)); 261 m_updater->update(DataConsumerHandle::create("handle3", m_context));
262 m_updateEvent->signal(); 262 m_updateEvent->signal();
263 m_updater.clear(); 263 m_updater.clear();
264 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::resetRead er, wrapPassRefPtr(this))); 264 postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::resetRea der, wrapPassRefPtr(this)));
265 postTaskToReadingThread(BLINK_FROM_HERE, threadSafeBind(&Self::signalDon e, wrapPassRefPtr(this))); 265 postTaskToReadingThread(BLINK_FROM_HERE, crossThreadBind(&Self::signalDo ne, wrapPassRefPtr(this)));
266 } 266 }
267 267
268 std::unique_ptr<WebDataConsumerHandle> m_handle; 268 std::unique_ptr<WebDataConsumerHandle> m_handle;
269 CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater; 269 CrossThreadPersistent<CompositeDataConsumerHandle::Updater> m_updater;
270 std::unique_ptr<WaitableEvent> m_updateEvent; 270 std::unique_ptr<WaitableEvent> m_updateEvent;
271 }; 271 };
272 272
273 TEST(CompositeDataConsumerHandleTest, Read) 273 TEST(CompositeDataConsumerHandleTest, Read)
274 { 274 {
275 char buffer[20]; 275 char buffer[20];
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 { 490 {
491 RefPtr<DataConsumerHandleTestUtil::ThreadingHandleNoNotificationTest> test = DataConsumerHandleTestUtil::ThreadingHandleNoNotificationTest::create(); 491 RefPtr<DataConsumerHandleTestUtil::ThreadingHandleNoNotificationTest> test = DataConsumerHandleTestUtil::ThreadingHandleNoNotificationTest::create();
492 CompositeDataConsumerHandle::Updater* updater = nullptr; 492 CompositeDataConsumerHandle::Updater* updater = nullptr;
493 // Test this function doesn't crash. 493 // Test this function doesn't crash.
494 test->run(CompositeDataConsumerHandle::create(createDoneDataConsumerHandle() , &updater)); 494 test->run(CompositeDataConsumerHandle::create(createDoneDataConsumerHandle() , &updater));
495 } 495 }
496 496
497 } // namespace 497 } // namespace
498 498
499 } // namespace blink 499 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698