| 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..b35bf70a4b079cfd3d6ae058477ca65dcffe9c34 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);
|
| for (const auto& entry : m_observers) {
|
| - ExecutionContext* context = entry.key;
|
| - context->postTask(
|
| - TaskType::Networking, BLINK_FROM_HERE,
|
| - createCrossThreadTask(
|
| - &NetworkStateNotifier::notifyObserversOfConnectionChangeOnContext,
|
| - crossThreadUnretained(this), type, maxBandwidthMbps));
|
| + WebTaskRunner* taskRunner = entry.key;
|
| + taskRunner->postTask(
|
| + BLINK_FROM_HERE,
|
| + crossThreadBind(&NetworkStateNotifier::
|
| + notifyObserversOfConnectionChangeOnTaskRunner,
|
| + crossThreadUnretained(this), type, maxBandwidthMbps,
|
| + crossThreadUnretained(taskRunner)));
|
| }
|
| }
|
|
|
| -void NetworkStateNotifier::notifyObserversOfConnectionChangeOnContext(
|
| +void NetworkStateNotifier::notifyObserversOfConnectionChangeOnTaskRunner(
|
| 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
|
| }
|
| }
|
|
|
|
|