Line data Source code
1 : /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 : /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 : /* This Source Code Form is subject to the terms of the Mozilla Public
4 : * License, v. 2.0. If a copy of the MPL was not distributed with this file,
5 : * You can obtain one at http://mozilla.org/MPL/2.0/. */
6 :
7 : #include "WebSocketEventService.h"
8 : #include "WebSocketEventListenerParent.h"
9 : #include "mozilla/Unused.h"
10 :
11 : namespace mozilla {
12 : namespace net {
13 :
14 0 : NS_INTERFACE_MAP_BEGIN(WebSocketEventListenerParent)
15 0 : NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIWebSocketEventListener)
16 0 : NS_INTERFACE_MAP_ENTRY(nsIWebSocketEventListener)
17 0 : NS_INTERFACE_MAP_END
18 :
19 0 : NS_IMPL_ADDREF(WebSocketEventListenerParent)
20 0 : NS_IMPL_RELEASE(WebSocketEventListenerParent)
21 :
22 0 : WebSocketEventListenerParent::WebSocketEventListenerParent(uint64_t aInnerWindowID)
23 0 : : mService(WebSocketEventService::GetOrCreate())
24 0 : , mInnerWindowID(aInnerWindowID)
25 : {
26 0 : DebugOnly<nsresult> rv = mService->AddListener(mInnerWindowID, this);
27 0 : MOZ_ASSERT(NS_SUCCEEDED(rv));
28 0 : }
29 :
30 0 : WebSocketEventListenerParent::~WebSocketEventListenerParent()
31 : {
32 0 : MOZ_ASSERT(!mService);
33 0 : }
34 :
35 : mozilla::ipc::IPCResult
36 0 : WebSocketEventListenerParent::RecvClose()
37 : {
38 0 : if (mService) {
39 0 : UnregisterListener();
40 0 : Unused << Send__delete__(this);
41 : }
42 :
43 0 : return IPC_OK();
44 : }
45 :
46 : void
47 0 : WebSocketEventListenerParent::ActorDestroy(ActorDestroyReason aWhy)
48 : {
49 0 : UnregisterListener();
50 0 : }
51 :
52 : void
53 0 : WebSocketEventListenerParent::UnregisterListener()
54 : {
55 0 : if (mService) {
56 0 : DebugOnly<nsresult> rv = mService->RemoveListener(mInnerWindowID, this);
57 0 : MOZ_ASSERT(NS_SUCCEEDED(rv));
58 0 : mService = nullptr;
59 : }
60 0 : }
61 :
62 : NS_IMETHODIMP
63 0 : WebSocketEventListenerParent::WebSocketCreated(uint32_t aWebSocketSerialID,
64 : const nsAString& aURI,
65 : const nsACString& aProtocols)
66 : {
67 0 : Unused << SendWebSocketCreated(aWebSocketSerialID, nsString(aURI),
68 0 : nsCString(aProtocols));
69 0 : return NS_OK;
70 : }
71 :
72 : NS_IMETHODIMP
73 0 : WebSocketEventListenerParent::WebSocketOpened(uint32_t aWebSocketSerialID,
74 : const nsAString& aEffectiveURI,
75 : const nsACString& aProtocols,
76 : const nsACString& aExtensions)
77 : {
78 0 : Unused << SendWebSocketOpened(aWebSocketSerialID, nsString(aEffectiveURI),
79 0 : nsCString(aProtocols), nsCString(aExtensions));
80 0 : return NS_OK;
81 : }
82 :
83 : NS_IMETHODIMP
84 0 : WebSocketEventListenerParent::WebSocketClosed(uint32_t aWebSocketSerialID,
85 : bool aWasClean,
86 : uint16_t aCode,
87 : const nsAString& aReason)
88 : {
89 0 : Unused << SendWebSocketClosed(aWebSocketSerialID, aWasClean, aCode,
90 0 : nsString(aReason));
91 0 : return NS_OK;
92 : }
93 :
94 : NS_IMETHODIMP
95 0 : WebSocketEventListenerParent::WebSocketMessageAvailable(uint32_t aWebSocketSerialID,
96 : const nsACString& aData,
97 : uint16_t aMessageType)
98 : {
99 0 : Unused << SendWebSocketMessageAvailable(aWebSocketSerialID, nsCString(aData),
100 : aMessageType);
101 0 : return NS_OK;
102 : }
103 :
104 : NS_IMETHODIMP
105 0 : WebSocketEventListenerParent::FrameReceived(uint32_t aWebSocketSerialID,
106 : nsIWebSocketFrame* aFrame)
107 : {
108 0 : if (!aFrame) {
109 0 : return NS_ERROR_FAILURE;
110 : }
111 :
112 0 : WebSocketFrame* frame = static_cast<WebSocketFrame*>(aFrame);
113 0 : Unused << SendFrameReceived(aWebSocketSerialID, frame->Data());
114 0 : return NS_OK;
115 : }
116 :
117 : NS_IMETHODIMP
118 0 : WebSocketEventListenerParent::FrameSent(uint32_t aWebSocketSerialID,
119 : nsIWebSocketFrame* aFrame)
120 : {
121 0 : if (!aFrame) {
122 0 : return NS_ERROR_FAILURE;
123 : }
124 :
125 0 : WebSocketFrame* frame = static_cast<WebSocketFrame*>(aFrame);
126 0 : Unused << SendFrameSent(aWebSocketSerialID, frame->Data());
127 0 : return NS_OK;
128 : }
129 :
130 : } // namespace net
131 : } // namespace mozilla
|