| 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 |