Index: Source/core/page/NetworkStateNotifier.h |
diff --git a/Source/core/page/NetworkStateNotifier.h b/Source/core/page/NetworkStateNotifier.h |
index 7e5fb725d6ed50145f3b1ecab2a47a7eff2bd009..933511d3f170eac7df80de2a1852070b11c9b7f7 100644 |
--- a/Source/core/page/NetworkStateNotifier.h |
+++ b/Source/core/page/NetworkStateNotifier.h |
@@ -26,17 +26,34 @@ |
#ifndef NetworkStateNotifier_h |
#define NetworkStateNotifier_h |
+#include "public/platform/WebNetworkConnection.h" |
#include "wtf/FastAllocBase.h" |
+#include "wtf/HashMap.h" |
#include "wtf/Noncopyable.h" |
#include "wtf/ThreadingPrimitives.h" |
+#include "wtf/Vector.h" |
namespace WebCore { |
+class ExecutionContext; |
+ |
class NetworkStateNotifier { |
WTF_MAKE_NONCOPYABLE(NetworkStateNotifier); WTF_MAKE_FAST_ALLOCATED; |
public: |
+ class NetworkStateObserver { |
+ public: |
+ // Will be called on the thread of the context passed in addObserver. |
+ virtual void connectionTypeChange( |
+ blink::WebNetworkConnection::ConnectionType) = 0; |
adamk
2014/05/20 15:00:36
Nit: Don't break lines like this in Blink; there's
jkarlin
2014/05/20 16:20:23
Done.
|
+ }; |
+ |
+ typedef NetworkStateObserver* ObserverType; |
adamk
2014/05/20 15:00:36
I found this typedef a bit confusing while reading
jkarlin
2014/05/20 16:20:23
Done.
|
+ |
NetworkStateNotifier() |
- : m_isOnLine(true) { } |
+ : m_isOnLine(true) |
+ , m_type(blink::WebNetworkConnection::Other) |
+ { |
+ } |
bool onLine() const |
{ |
@@ -46,13 +63,41 @@ public: |
void setOnLine(bool); |
+ blink::WebNetworkConnection::ConnectionType connectionType() const |
+ { |
+ MutexLocker locker(m_mutex); |
+ return m_type; |
+ } |
+ |
+ void setWebConnectionType(blink::WebNetworkConnection::ConnectionType); |
+ |
+ // Must be called on the context's thread. Do not call add/removeObserver |
+ // while handling a connectionTypeChange notification as it mutates the |
+ // container while it's being iterated over. |
+ void addObserver(ObserverType, ExecutionContext*); |
+ void removeObserver(ObserverType, ExecutionContext*); |
+ |
private: |
+ struct ObserverList { |
+ ObserverList() |
+ : iterating(false) |
+ { |
+ } |
+ bool iterating; |
+ Vector<ObserverType> observers; |
+ }; |
+ |
+ typedef HashMap<ExecutionContext*, ObserverList> ObserverListMap; |
+ |
+ void notifyObserversOnContext(ExecutionContext*, blink::WebNetworkConnection::ConnectionType); |
+ |
mutable Mutex m_mutex; |
bool m_isOnLine; |
+ blink::WebNetworkConnection::ConnectionType m_type; |
+ ObserverListMap m_observers; |
}; |
NetworkStateNotifier& networkStateNotifier(); |
- |
adamk
2014/05/20 15:00:36
Nit: I'd leave this blank line.
|
-}; |
+} |
adamk
2014/05/20 15:00:36
and maybe add a "// namespace WebCore" comment
jkarlin
2014/05/20 16:20:23
Done.
|
#endif // NetworkStateNotifier_h |