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

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

Issue 2704083002: Remove Page dependency from NetworkStateNotifier (Closed)
Patch Set: DOMWindow -> Document 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..74ab480c89cc630bfed592a1305f803dab6d6007 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,10 @@ 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*, WebTaskRunner*);
+ void addOnLineObserver(NetworkStateObserver*, WebTaskRunner*);
+ void removeConnectionObserver(NetworkStateObserver*, WebTaskRunner*);
dcheng 2017/02/22 09:23:15 I find it surprising the unregister method takes a
kinuko 2017/02/22 13:17:27 This class groups observers by WebTaskRunner's to
+ void removeOnLineObserver(NetworkStateObserver*, WebTaskRunner*);
private:
struct ObserverList {
@@ -133,6 +136,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 +152,39 @@ 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>>;
- void notifyObservers(WebConnectionType, double maxBandwidthMbps);
- void notifyObserversOfConnectionChangeOnTaskRunner(WebConnectionType,
- double maxBandwidthMbps,
- WebTaskRunner*);
+ void notifyObservers(ObserverListMap&, ObserverType, const NetworkState&);
+ void notifyObserversOnTaskRunner(ObserverListMap*,
+ ObserverType,
+ WebTaskRunner*,
+ const NetworkState&);
- ObserverList* lockAndFindObserverList(WebTaskRunner*);
+ void addObserver(ObserverListMap&, NetworkStateObserver*, WebTaskRunner*);
+ void removeObserver(ObserverListMap&, NetworkStateObserver*, WebTaskRunner*);
+
+ ObserverList* lockAndFindObserverList(ObserverListMap&, 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*, 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();

Powered by Google App Engine
This is Rietveld 408576698