Chromium Code Reviews| Index: third_party/WebKit/Source/core/page/NetworkStateNotifier.cpp | 
| diff --git a/third_party/WebKit/Source/core/page/NetworkStateNotifier.cpp b/third_party/WebKit/Source/core/page/NetworkStateNotifier.cpp | 
| index 9998e33b898aeb62052e247d847ba6062fe3f937..972aea0f9526f46fca41842571e6ef2c4cd4eb81 100644 | 
| --- a/third_party/WebKit/Source/core/page/NetworkStateNotifier.cpp | 
| +++ b/third_party/WebKit/Source/core/page/NetworkStateNotifier.cpp | 
| @@ -25,10 +25,9 @@ | 
| #include "core/page/NetworkStateNotifier.h" | 
| -#include "core/dom/ExecutionContext.h" | 
| -#include "core/dom/ExecutionContextTask.h" | 
| #include "core/dom/TaskRunnerHelper.h" | 
| #include "core/page/Page.h" | 
| +#include "platform/CrossThreadFunctional.h" | 
| #include "wtf/Assertions.h" | 
| #include "wtf/Functional.h" | 
| #include "wtf/PtrUtil.h" | 
| @@ -86,25 +85,25 @@ void NetworkStateNotifier::setWebConnection(WebConnectionType type, | 
| } | 
| void NetworkStateNotifier::addObserver(NetworkStateObserver* observer, | 
| - ExecutionContext* context) { | 
| - ASSERT(context->isContextThread()); | 
| - ASSERT(observer); | 
| + WebTaskRunner* taskRunner) { | 
| + DCHECK(taskRunner->runsTasksOnCurrentThread()); | 
| + DCHECK(observer); | 
| MutexLocker locker(m_mutex); | 
| - ObserverListMap::AddResult result = m_observers.insert(context, nullptr); | 
| + ObserverListMap::AddResult result = m_observers.insert(taskRunner, nullptr); | 
| if (result.isNewEntry) | 
| result.storedValue->value = WTF::wrapUnique(new ObserverList); | 
| - ASSERT(result.storedValue->value->observers.find(observer) == kNotFound); | 
| + DCHECK(result.storedValue->value->observers.find(observer) == kNotFound); | 
| result.storedValue->value->observers.push_back(observer); | 
| } | 
| void NetworkStateNotifier::removeObserver(NetworkStateObserver* observer, | 
| - ExecutionContext* context) { | 
| - ASSERT(context->isContextThread()); | 
| - ASSERT(observer); | 
| + WebTaskRunner* taskRunner) { | 
| + DCHECK(taskRunner->runsTasksOnCurrentThread()); | 
| + DCHECK(observer); | 
| - ObserverList* observerList = lockAndFindObserverList(context); | 
| + ObserverList* observerList = lockAndFindObserverList(taskRunner); | 
| if (!observerList) | 
| return; | 
| @@ -116,7 +115,7 @@ void NetworkStateNotifier::removeObserver(NetworkStateObserver* observer, | 
| } | 
| if (!observerList->iterating && !observerList->zeroedObservers.isEmpty()) | 
| - collectZeroedObservers(observerList, context); | 
| + collectZeroedObservers(observerList, taskRunner); | 
| } | 
| void NetworkStateNotifier::setOverride(bool onLine, | 
| @@ -147,28 +146,30 @@ void NetworkStateNotifier::clearOverride() { | 
| void NetworkStateNotifier::notifyObservers(WebConnectionType type, | 
| double maxBandwidthMbps) { | 
| DCHECK(isMainThread()); | 
| + MutexLocker locker(m_mutex); | 
| 
 
jkarlin
2017/02/15 19:26:33
Phew. Thanks for this! Looks like it got deleted i
 
 | 
| for (const auto& entry : m_observers) { | 
| - ExecutionContext* context = entry.key; | 
| - context->postTask( | 
| - TaskType::Networking, BLINK_FROM_HERE, | 
| - createCrossThreadTask( | 
| + WebTaskRunner* taskRunner = entry.key; | 
| + taskRunner->postTask( | 
| + BLINK_FROM_HERE, | 
| + crossThreadBind( | 
| &NetworkStateNotifier::notifyObserversOfConnectionChangeOnContext, | 
| - crossThreadUnretained(this), type, maxBandwidthMbps)); | 
| + crossThreadUnretained(this), type, maxBandwidthMbps, | 
| + crossThreadUnretained(taskRunner))); | 
| } | 
| } | 
| void NetworkStateNotifier::notifyObserversOfConnectionChangeOnContext( | 
| 
 
jkarlin
2017/02/15 19:26:33
Please rename this to ...OnTaskRunner
 
kinuko
2017/02/16 03:55:00
Done. Thanks =)
 
 | 
| WebConnectionType type, | 
| double maxBandwidthMbps, | 
| - ExecutionContext* context) { | 
| - ObserverList* observerList = lockAndFindObserverList(context); | 
| + WebTaskRunner* taskRunner) { | 
| + ObserverList* observerList = lockAndFindObserverList(taskRunner); | 
| // The context could have been removed before the notification task got to | 
| // run. | 
| if (!observerList) | 
| return; | 
| - ASSERT(context->isContextThread()); | 
| + DCHECK(taskRunner->runsTasksOnCurrentThread()); | 
| observerList->iterating = true; | 
| @@ -181,20 +182,20 @@ void NetworkStateNotifier::notifyObserversOfConnectionChangeOnContext( | 
| observerList->iterating = false; | 
| if (!observerList->zeroedObservers.isEmpty()) | 
| - collectZeroedObservers(observerList, context); | 
| + collectZeroedObservers(observerList, taskRunner); | 
| } | 
| NetworkStateNotifier::ObserverList* | 
| -NetworkStateNotifier::lockAndFindObserverList(ExecutionContext* context) { | 
| +NetworkStateNotifier::lockAndFindObserverList(WebTaskRunner* taskRunner) { | 
| MutexLocker locker(m_mutex); | 
| - ObserverListMap::iterator it = m_observers.find(context); | 
| + ObserverListMap::iterator it = m_observers.find(taskRunner); | 
| return it == m_observers.end() ? nullptr : it->value.get(); | 
| } | 
| void NetworkStateNotifier::collectZeroedObservers(ObserverList* list, | 
| - ExecutionContext* context) { | 
| - ASSERT(context->isContextThread()); | 
| - ASSERT(!list->iterating); | 
| + WebTaskRunner* taskRunner) { | 
| + DCHECK(taskRunner->runsTasksOnCurrentThread()); | 
| + DCHECK(!list->iterating); | 
| // If any observers were removed during the iteration they will have | 
| // 0 values, clean them up. | 
| @@ -205,7 +206,7 @@ void NetworkStateNotifier::collectZeroedObservers(ObserverList* list, | 
| if (list->observers.isEmpty()) { | 
| MutexLocker locker(m_mutex); | 
| - m_observers.erase(context); // deletes list | 
| + m_observers.erase(taskRunner); // deletes list | 
| } | 
| } |