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