Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(500)

Unified Diff: third_party/WebKit/Source/core/page/NetworkStateNotifier.h

Issue 2704083002: Remove Page dependency from NetworkStateNotifier (Closed)
Patch Set: nullcheck for tests Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/page/NetworkStateNotifier.h
diff --git a/third_party/WebKit/Source/core/page/NetworkStateNotifier.h b/third_party/WebKit/Source/core/page/NetworkStateNotifier.h
index d7ab66b6b594a6e08e9b2a5ced27f83a465b57ce..c0bf4b615c9c46db858c79d51c514021070370b7 100644
--- a/third_party/WebKit/Source/core/page/NetworkStateNotifier.h
+++ b/third_party/WebKit/Source/core/page/NetworkStateNotifier.h
@@ -28,6 +28,7 @@
#include <memory>
#include "core/CoreExport.h"
+#include "platform/CrossThreadCopier.h"
#include "platform/WebTaskRunner.h"
#include "public/platform/WebConnectionType.h"
#include "wtf/Allocator.h"
@@ -45,9 +46,9 @@ class CORE_EXPORT NetworkStateNotifier {
public:
class NetworkStateObserver {
public:
- // Will be called on the task runner that is passed in addObserver.
- virtual void connectionChange(WebConnectionType,
- double maxBandwidthMbps) = 0;
+ // Will be called on the task runner that is passed in add*Observer.
+ virtual void connectionChange(WebConnectionType, double maxBandwidthMbps) {}
+ virtual void onLineStateChange(bool onLine) {}
};
NetworkStateNotifier() : m_hasOverride(false) {}
@@ -114,8 +115,11 @@ class CORE_EXPORT NetworkStateNotifier {
// before the observer or its execution context goes away. It's possible for
// an observer to be called twice for the same event if it is first removed
// and then added during notification.
- void addObserver(NetworkStateObserver*, WebTaskRunner*);
- void removeObserver(NetworkStateObserver*, WebTaskRunner*);
+ void addConnectionObserver(NetworkStateObserver*, PassRefPtr<WebTaskRunner>);
+ void addOnLineObserver(NetworkStateObserver*, PassRefPtr<WebTaskRunner>);
+ void removeConnectionObserver(NetworkStateObserver*,
+ PassRefPtr<WebTaskRunner>);
+ void removeOnLineObserver(NetworkStateObserver*, PassRefPtr<WebTaskRunner>);
private:
struct ObserverList {
@@ -133,6 +137,7 @@ class CORE_EXPORT NetworkStateNotifier {
WebConnectionType type = WebConnectionTypeOther;
double maxBandwidthMbps = kInvalidMaxBandwidth;
};
+ friend CrossThreadCopier<NetworkStateNotifier::NetworkState>;
// This helper scope issues required notifications when mutating the state if
// something has changed. It's only possible to mutate the state on the main
@@ -148,28 +153,46 @@ class CORE_EXPORT NetworkStateNotifier {
NetworkState m_before;
};
+ enum class ObserverType {
+ ONLINE_STATE,
+ CONNECTION_TYPE,
+ };
+
// The ObserverListMap is cross-thread accessed, adding/removing Observers
// running on a task runner.
using ObserverListMap =
- HashMap<WebTaskRunner*, std::unique_ptr<ObserverList>>;
+ HashMap<RefPtr<WebTaskRunner>, std::unique_ptr<ObserverList>>;
- void notifyObservers(WebConnectionType, double maxBandwidthMbps);
- void notifyObserversOfConnectionChangeOnTaskRunner(WebConnectionType,
- double maxBandwidthMbps,
- WebTaskRunner*);
+ void notifyObservers(ObserverListMap&, ObserverType, const NetworkState&);
+ void notifyObserversOnTaskRunner(ObserverListMap*,
+ ObserverType,
+ PassRefPtr<WebTaskRunner>,
+ const NetworkState&);
- ObserverList* lockAndFindObserverList(WebTaskRunner*);
+ void addObserver(ObserverListMap&,
+ NetworkStateObserver*,
+ PassRefPtr<WebTaskRunner>);
+ void removeObserver(ObserverListMap&,
+ NetworkStateObserver*,
+ PassRefPtr<WebTaskRunner>);
+
+ ObserverList* lockAndFindObserverList(ObserverListMap&,
+ PassRefPtr<WebTaskRunner>);
// Removed observers are nulled out in the list in case the list is being
// iterated over. Once done iterating, call this to clean up nulled
// observers.
- void collectZeroedObservers(ObserverList*, WebTaskRunner*);
+ void collectZeroedObservers(ObserverListMap&,
+ ObserverList*,
+ PassRefPtr<WebTaskRunner>);
mutable Mutex m_mutex;
NetworkState m_state;
bool m_hasOverride;
NetworkState m_override;
- ObserverListMap m_observers;
+
+ ObserverListMap m_connectionObservers;
+ ObserverListMap m_onLineStateObservers;
};
CORE_EXPORT NetworkStateNotifier& networkStateNotifier();
« no previous file with comments | « third_party/WebKit/Source/core/dom/Document.cpp ('k') | third_party/WebKit/Source/core/page/NetworkStateNotifier.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698