| 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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 49 MOCK_METHOD1(obtainReaderInternal, Reader*(Client*)); | 49 MOCK_METHOD1(obtainReaderInternal, Reader*(Client*)); |
| 50 }; | 50 }; |
| 51 | 51 |
| 52 class ThreadingRegistrationTest : public DataConsumerHandleTestUtil::ThreadingTe
stBase { | 52 class ThreadingRegistrationTest : public DataConsumerHandleTestUtil::ThreadingTe
stBase { |
| 53 public: | 53 public: |
| 54 using Self = ThreadingRegistrationTest; | 54 using Self = ThreadingRegistrationTest; |
| 55 void run() | 55 void run() |
| 56 { | 56 { |
| 57 m_context = Context::create(); | 57 m_context = Context::create(); |
| 58 m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent()); | 58 m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent()); |
| 59 m_handle = CompositeDataConsumerHandle::create(adoptPtr(new DataConsumer
Handle("handle1", m_context))); | |
| 60 | 59 |
| 61 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::obta
inReader, this))); | 60 postTaskAndWait(updatingThread(), FROM_HERE, new Task(threadSafeBind(&Se
lf::createHandle, this))); |
| 62 | 61 postTaskAndWait(readingThread(), FROM_HERE, new Task(threadSafeBind(&Sel
f::obtainReader, this))); |
| 63 m_waitableEvent->wait(); | |
| 64 } | 62 } |
| 65 | 63 |
| 66 private: | 64 private: |
| 65 void createHandle() |
| 66 { |
| 67 m_handle = CompositeDataConsumerHandle::create(adoptPtr(new DataConsumer
Handle("handle1", m_context))); |
| 68 m_waitableEvent->signal(); |
| 69 } |
| 67 void obtainReader() | 70 void obtainReader() |
| 68 { | 71 { |
| 69 m_reader = m_handle->obtainReader(&m_client); | 72 m_reader = m_handle->obtainReader(&m_client); |
| 70 updatingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::upd
ate, this))); | 73 updatingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::upd
ate, this))); |
| 71 } | 74 } |
| 72 void update() | 75 void update() |
| 73 { | 76 { |
| 74 m_handle->update(adoptPtr(new DataConsumerHandle("handle2", m_context)))
; | 77 m_handle->update(adoptPtr(new DataConsumerHandle("handle2", m_context)))
; |
| 75 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::rese
tReader, this))); | 78 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::rese
tReader, this))); |
| 76 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::sign
alDone, this))); | 79 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::sign
alDone, this))); |
| 77 } | 80 } |
| 78 | 81 |
| 79 OwnPtr<CompositeDataConsumerHandle> m_handle; | 82 OwnPtr<CompositeDataConsumerHandle> m_handle; |
| 80 }; | 83 }; |
| 81 | 84 |
| 82 class ThreadingRegistrationDeleteHandleTest : public DataConsumerHandleTestUtil:
:ThreadingTestBase { | 85 class ThreadingRegistrationDeleteHandleTest : public DataConsumerHandleTestUtil:
:ThreadingTestBase { |
| 83 public: | 86 public: |
| 84 using Self = ThreadingRegistrationDeleteHandleTest; | 87 using Self = ThreadingRegistrationDeleteHandleTest; |
| 85 void run() | 88 void run() |
| 86 { | 89 { |
| 87 m_context = Context::create(); | 90 m_context = Context::create(); |
| 88 m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent()); | 91 m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent()); |
| 89 m_handle = CompositeDataConsumerHandle::create(adoptPtr(new DataConsumer
Handle("handle1", m_context))); | |
| 90 | 92 |
| 91 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::obta
inReader, this))); | 93 postTaskAndWait(updatingThread(), FROM_HERE, new Task(threadSafeBind(&Se
lf::createHandle, this))); |
| 92 | 94 postTaskAndWait(readingThread(), FROM_HERE, new Task(threadSafeBind(&Sel
f::obtainReader, this))); |
| 93 m_waitableEvent->wait(); | |
| 94 } | 95 } |
| 95 | 96 |
| 96 private: | 97 private: |
| 98 void createHandle() |
| 99 { |
| 100 m_handle = CompositeDataConsumerHandle::create(adoptPtr(new DataConsumer
Handle("handle1", m_context))); |
| 101 m_waitableEvent->signal(); |
| 102 } |
| 103 |
| 97 void obtainReader() | 104 void obtainReader() |
| 98 { | 105 { |
| 99 m_reader = m_handle->obtainReader(&m_client); | 106 m_reader = m_handle->obtainReader(&m_client); |
| 100 updatingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::upd
ate, this))); | 107 updatingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::upd
ate, this))); |
| 101 } | 108 } |
| 102 void update() | 109 void update() |
| 103 { | 110 { |
| 104 m_handle->update(adoptPtr(new DataConsumerHandle("handle2", m_context)))
; | 111 m_handle->update(adoptPtr(new DataConsumerHandle("handle2", m_context)))
; |
| 105 m_handle = nullptr; | 112 m_handle = nullptr; |
| 106 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::rese
tReader, this))); | 113 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::rese
tReader, this))); |
| 107 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::sign
alDone, this))); | 114 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::sign
alDone, this))); |
| 108 } | 115 } |
| 109 | 116 |
| 110 OwnPtr<CompositeDataConsumerHandle> m_handle; | 117 OwnPtr<CompositeDataConsumerHandle> m_handle; |
| 111 }; | 118 }; |
| 112 | 119 |
| 113 class ThreadingRegistrationDeleteReaderTest : public DataConsumerHandleTestUtil:
:ThreadingTestBase { | 120 class ThreadingRegistrationDeleteReaderTest : public DataConsumerHandleTestUtil:
:ThreadingTestBase { |
| 114 public: | 121 public: |
| 115 using Self = ThreadingRegistrationDeleteReaderTest; | 122 using Self = ThreadingRegistrationDeleteReaderTest; |
| 116 void run() | 123 void run() |
| 117 { | 124 { |
| 118 m_context = Context::create(); | 125 m_context = Context::create(); |
| 119 m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent()); | 126 m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent()); |
| 120 m_handle = CompositeDataConsumerHandle::create(adoptPtr(new DataConsumer
Handle("handle1", m_context))); | |
| 121 | 127 |
| 122 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::obta
inReader, this))); | 128 postTaskAndWait(updatingThread(), FROM_HERE, new Task(threadSafeBind(&Se
lf::createHandle, this))); |
| 123 | 129 postTaskAndWait(readingThread(), FROM_HERE, new Task(threadSafeBind(&Sel
f::obtainReader, this))); |
| 124 m_waitableEvent->wait(); | |
| 125 } | 130 } |
| 126 | 131 |
| 127 private: | 132 private: |
| 133 void createHandle() |
| 134 { |
| 135 m_handle = CompositeDataConsumerHandle::create(adoptPtr(new DataConsumer
Handle("handle1", m_context))); |
| 136 m_waitableEvent->signal(); |
| 137 } |
| 138 |
| 128 void obtainReader() | 139 void obtainReader() |
| 129 { | 140 { |
| 130 m_reader = m_handle->obtainReader(&m_client); | 141 m_reader = m_handle->obtainReader(&m_client); |
| 131 updatingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::upd
ate, this))); | 142 updatingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::upd
ate, this))); |
| 132 } | 143 } |
| 133 void update() | 144 void update() |
| 134 { | 145 { |
| 135 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::rese
tReader, this))); | 146 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::rese
tReader, this))); |
| 136 m_handle->update(adoptPtr(new DataConsumerHandle("handle2", m_context)))
; | 147 m_handle->update(adoptPtr(new DataConsumerHandle("handle2", m_context)))
; |
| 137 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::rese
tReader, this))); | 148 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::rese
tReader, this))); |
| 138 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::sign
alDone, this))); | 149 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::sign
alDone, this))); |
| 139 } | 150 } |
| 140 | 151 |
| 141 OwnPtr<CompositeDataConsumerHandle> m_handle; | 152 OwnPtr<CompositeDataConsumerHandle> m_handle; |
| 142 }; | 153 }; |
| 143 | 154 |
| 144 class ThreadingUpdatingReaderWhileUpdatingTest : public DataConsumerHandleTestUt
il::ThreadingTestBase { | 155 class ThreadingUpdatingReaderWhileUpdatingTest : public DataConsumerHandleTestUt
il::ThreadingTestBase { |
| 145 public: | 156 public: |
| 146 using Self = ThreadingUpdatingReaderWhileUpdatingTest; | 157 using Self = ThreadingUpdatingReaderWhileUpdatingTest; |
| 147 void run() | 158 void run() |
| 148 { | 159 { |
| 149 m_context = Context::create(); | 160 m_context = Context::create(); |
| 150 m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent()); | 161 m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent()); |
| 151 m_updateEvent = adoptPtr(Platform::current()->createWaitableEvent()); | 162 m_updateEvent = adoptPtr(Platform::current()->createWaitableEvent()); |
| 152 m_handle = CompositeDataConsumerHandle::create(adoptPtr(new DataConsumer
Handle("handle1", m_context))); | |
| 153 | 163 |
| 154 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::obta
inReader, this))); | 164 postTaskAndWait(updatingThread(), FROM_HERE, new Task(threadSafeBind(&Se
lf::createHandle, this))); |
| 155 | 165 postTaskAndWait(readingThread(), FROM_HERE, new Task(threadSafeBind(&Sel
f::obtainReader, this))); |
| 156 m_waitableEvent->wait(); | |
| 157 } | 166 } |
| 158 | 167 |
| 159 private: | 168 private: |
| 169 void createHandle() |
| 170 { |
| 171 m_handle = CompositeDataConsumerHandle::create(adoptPtr(new DataConsumer
Handle("handle1", m_context))); |
| 172 m_waitableEvent->signal(); |
| 173 } |
| 174 |
| 160 void obtainReader() | 175 void obtainReader() |
| 161 { | 176 { |
| 162 m_reader = m_handle->obtainReader(&m_client); | 177 m_reader = m_handle->obtainReader(&m_client); |
| 163 updatingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::upd
ate, this))); | 178 updatingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::upd
ate, this))); |
| 164 m_updateEvent->wait(); | 179 m_updateEvent->wait(); |
| 165 } | 180 } |
| 166 | 181 |
| 167 void update() | 182 void update() |
| 168 { | 183 { |
| 169 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::reob
tainReader, this))); | 184 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::reob
tainReader, this))); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 183 OwnPtr<WebWaitableEvent> m_updateEvent; | 198 OwnPtr<WebWaitableEvent> m_updateEvent; |
| 184 }; | 199 }; |
| 185 | 200 |
| 186 class ThreadingRegistrationUpdateTwiceAtOneTimeTest : public DataConsumerHandleT
estUtil::ThreadingTestBase { | 201 class ThreadingRegistrationUpdateTwiceAtOneTimeTest : public DataConsumerHandleT
estUtil::ThreadingTestBase { |
| 187 public: | 202 public: |
| 188 using Self = ThreadingRegistrationUpdateTwiceAtOneTimeTest; | 203 using Self = ThreadingRegistrationUpdateTwiceAtOneTimeTest; |
| 189 void run() | 204 void run() |
| 190 { | 205 { |
| 191 m_context = Context::create(); | 206 m_context = Context::create(); |
| 192 m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent()); | 207 m_waitableEvent = adoptPtr(Platform::current()->createWaitableEvent()); |
| 193 m_handle = CompositeDataConsumerHandle::create(adoptPtr(new DataConsumer
Handle("handle1", m_context))); | |
| 194 | 208 |
| 195 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::obta
inReader, this))); | 209 postTaskAndWait(updatingThread(), FROM_HERE, new Task(threadSafeBind(&Se
lf::createHandle, this))); |
| 196 | 210 postTaskAndWait(readingThread(), FROM_HERE, new Task(threadSafeBind(&Sel
f::obtainReader, this))); |
| 197 m_waitableEvent->wait(); | |
| 198 } | 211 } |
| 199 | 212 |
| 200 private: | 213 private: |
| 214 void createHandle() |
| 215 { |
| 216 m_handle = CompositeDataConsumerHandle::create(adoptPtr(new DataConsumer
Handle("handle1", m_context))); |
| 217 m_waitableEvent->signal(); |
| 218 } |
| 219 |
| 201 void obtainReader() | 220 void obtainReader() |
| 202 { | 221 { |
| 203 m_reader = m_handle->obtainReader(&m_client); | 222 m_reader = m_handle->obtainReader(&m_client); |
| 204 updatingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::upd
ate, this))); | 223 updatingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::upd
ate, this))); |
| 205 } | 224 } |
| 206 void update() | 225 void update() |
| 207 { | 226 { |
| 208 m_handle->update(adoptPtr(new DataConsumerHandle("handle2", m_context)))
; | 227 m_handle->update(adoptPtr(new DataConsumerHandle("handle2", m_context)))
; |
| 209 m_handle->update(adoptPtr(new DataConsumerHandle("handle3", m_context)))
; | 228 m_handle->update(adoptPtr(new DataConsumerHandle("handle3", m_context)))
; |
| 210 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::rese
tReader, this))); | 229 readingThread()->postTask(FROM_HERE, new Task(threadSafeBind(&Self::rese
tReader, this))); |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 429 TEST(CompositeDataConsumerHandleTest, DoneHandleNoNotification) | 448 TEST(CompositeDataConsumerHandleTest, DoneHandleNoNotification) |
| 430 { | 449 { |
| 431 DataConsumerHandleTestUtil::ThreadingHandleNoNotificationTest test; | 450 DataConsumerHandleTestUtil::ThreadingHandleNoNotificationTest test; |
| 432 // Test this function doesn't crash. | 451 // Test this function doesn't crash. |
| 433 test.run(CompositeDataConsumerHandle::create(createDoneDataConsumerHandle())
); | 452 test.run(CompositeDataConsumerHandle::create(createDoneDataConsumerHandle())
); |
| 434 } | 453 } |
| 435 | 454 |
| 436 } // namespace | 455 } // namespace |
| 437 | 456 |
| 438 } // namespace blink | 457 } // namespace blink |
| OLD | NEW |