123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
- /* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- #ifndef mozilla_net_WebSocketEventService_h
- #define mozilla_net_WebSocketEventService_h
- #include "mozilla/AlreadyAddRefed.h"
- #include "mozilla/Atomics.h"
- #include "nsIWebSocketEventService.h"
- #include "nsAutoPtr.h"
- #include "nsCOMPtr.h"
- #include "nsClassHashtable.h"
- #include "nsHashKeys.h"
- #include "nsIObserver.h"
- #include "nsISupportsImpl.h"
- #include "nsTArray.h"
- namespace mozilla {
- namespace net {
- class WebSocketFrame;
- class WebSocketEventListenerChild;
- class WebSocketEventService final : public nsIWebSocketEventService
- , public nsIObserver
- {
- friend class WebSocketBaseRunnable;
- public:
- NS_DECL_ISUPPORTS
- NS_DECL_NSIOBSERVER
- NS_DECL_NSIWEBSOCKETEVENTSERVICE
- static already_AddRefed<WebSocketEventService> GetOrCreate();
- void WebSocketCreated(uint32_t aWebSocketSerialID,
- uint64_t aInnerWindowID,
- const nsAString& aURI,
- const nsACString& aProtocols);
- void WebSocketOpened(uint32_t aWebSocketSerialID,
- uint64_t aInnerWindowID,
- const nsAString& aEffectiveURI,
- const nsACString& aProtocols,
- const nsACString& aExtensions);
- void WebSocketMessageAvailable(uint32_t aWebSocketSerialID,
- uint64_t aInnerWindowID,
- const nsACString& aData,
- uint16_t aMessageType);
- void WebSocketClosed(uint32_t aWebSocketSerialID,
- uint64_t aInnerWindowID,
- bool aWasClean,
- uint16_t aCode,
- const nsAString& aReason);
- void FrameReceived(uint32_t aWebSocketSerialID,
- uint64_t aInnerWindowID,
- already_AddRefed<WebSocketFrame> aFrame);
- void FrameSent(uint32_t aWebSocketSerialID,
- uint64_t aInnerWindowID,
- already_AddRefed<WebSocketFrame> aFrame);
- already_AddRefed<WebSocketFrame>
- CreateFrameIfNeeded(bool aFinBit, bool aRsvBit1, bool aRsvBit2, bool aRsvBit3,
- uint8_t aOpCode, bool aMaskBit, uint32_t aMask,
- const nsCString& aPayload);
- already_AddRefed<WebSocketFrame>
- CreateFrameIfNeeded(bool aFinBit, bool aRsvBit1, bool aRsvBit2, bool aRsvBit3,
- uint8_t aOpCode, bool aMaskBit, uint32_t aMask,
- uint8_t* aPayload, uint32_t aPayloadLength);
- already_AddRefed<WebSocketFrame>
- CreateFrameIfNeeded(bool aFinBit, bool aRsvBit1, bool aRsvBit2, bool aRsvBit3,
- uint8_t aOpCode, bool aMaskBit, uint32_t aMask,
- uint8_t* aPayloadInHdr, uint32_t aPayloadInHdrLength,
- uint8_t* aPayload, uint32_t aPayloadLength);
- private:
- WebSocketEventService();
- ~WebSocketEventService();
- bool HasListeners() const;
- void Shutdown();
- typedef nsTArray<nsCOMPtr<nsIWebSocketEventListener>> WindowListeners;
- struct WindowListener
- {
- WindowListeners mListeners;
- RefPtr<WebSocketEventListenerChild> mActor;
- };
- void GetListeners(uint64_t aInnerWindowID,
- WindowListeners& aListeners) const;
- void ShutdownActorListener(WindowListener* aListener);
- // Used only on the main-thread.
- nsClassHashtable<nsUint64HashKey, WindowListener> mWindows;
- Atomic<uint64_t> mCountListeners;
- };
- } // net namespace
- } // mozilla namespace
- /**
- * Casting WebSocketEventService to nsISupports is ambiguous.
- * This method handles that.
- */
- inline nsISupports*
- ToSupports(mozilla::net::WebSocketEventService* p)
- {
- return NS_ISUPPORTS_CAST(nsIWebSocketEventService*, p);
- }
- #endif // mozilla_net_WebSocketEventService_h
|