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 "WebSocketEventListenerChild.h"
8 :
9 : #include "WebSocketEventService.h"
10 : #include "WebSocketFrame.h"
11 :
12 : namespace mozilla {
13 : namespace net {
14 :
15 0 : WebSocketEventListenerChild::WebSocketEventListenerChild(uint64_t aInnerWindowID,
16 0 : nsIEventTarget* aTarget)
17 : : NeckoTargetHolder(aTarget)
18 0 : , mService(WebSocketEventService::GetOrCreate())
19 0 : , mInnerWindowID(aInnerWindowID)
20 0 : {}
21 :
22 0 : WebSocketEventListenerChild::~WebSocketEventListenerChild()
23 : {
24 0 : MOZ_ASSERT(!mService);
25 0 : }
26 :
27 : mozilla::ipc::IPCResult
28 0 : WebSocketEventListenerChild::RecvWebSocketCreated(const uint32_t& aWebSocketSerialID,
29 : const nsString& aURI,
30 : const nsCString& aProtocols)
31 : {
32 0 : if (mService) {
33 0 : nsCOMPtr<nsIEventTarget> target = GetNeckoTarget();
34 0 : mService->WebSocketCreated(aWebSocketSerialID, mInnerWindowID, aURI,
35 0 : aProtocols, target);
36 : }
37 :
38 0 : return IPC_OK();
39 : }
40 :
41 : mozilla::ipc::IPCResult
42 0 : WebSocketEventListenerChild::RecvWebSocketOpened(const uint32_t& aWebSocketSerialID,
43 : const nsString& aEffectiveURI,
44 : const nsCString& aProtocols,
45 : const nsCString& aExtensions)
46 : {
47 0 : if (mService) {
48 0 : nsCOMPtr<nsIEventTarget> target = GetNeckoTarget();
49 0 : mService->WebSocketOpened(aWebSocketSerialID, mInnerWindowID,
50 0 : aEffectiveURI, aProtocols, aExtensions, target);
51 : }
52 :
53 0 : return IPC_OK();
54 : }
55 :
56 : mozilla::ipc::IPCResult
57 0 : WebSocketEventListenerChild::RecvWebSocketMessageAvailable(const uint32_t& aWebSocketSerialID,
58 : const nsCString& aData,
59 : const uint16_t& aMessageType)
60 : {
61 0 : if (mService) {
62 0 : nsCOMPtr<nsIEventTarget> target = GetNeckoTarget();
63 0 : mService->WebSocketMessageAvailable(aWebSocketSerialID, mInnerWindowID,
64 0 : aData, aMessageType, target);
65 : }
66 :
67 0 : return IPC_OK();
68 : }
69 :
70 : mozilla::ipc::IPCResult
71 0 : WebSocketEventListenerChild::RecvWebSocketClosed(const uint32_t& aWebSocketSerialID,
72 : const bool& aWasClean,
73 : const uint16_t& aCode,
74 : const nsString& aReason)
75 : {
76 0 : if (mService) {
77 0 : nsCOMPtr<nsIEventTarget> target = GetNeckoTarget();
78 0 : mService->WebSocketClosed(aWebSocketSerialID, mInnerWindowID,
79 0 : aWasClean, aCode, aReason, target);
80 : }
81 :
82 0 : return IPC_OK();
83 : }
84 :
85 : mozilla::ipc::IPCResult
86 0 : WebSocketEventListenerChild::RecvFrameReceived(const uint32_t& aWebSocketSerialID,
87 : const WebSocketFrameData& aFrameData)
88 : {
89 0 : if (mService) {
90 0 : nsCOMPtr<nsIEventTarget> target = GetNeckoTarget();
91 0 : RefPtr<WebSocketFrame> frame = new WebSocketFrame(aFrameData);
92 0 : mService->FrameReceived(aWebSocketSerialID, mInnerWindowID,
93 0 : frame.forget(), target);
94 : }
95 :
96 0 : return IPC_OK();
97 : }
98 :
99 : mozilla::ipc::IPCResult
100 0 : WebSocketEventListenerChild::RecvFrameSent(const uint32_t& aWebSocketSerialID,
101 : const WebSocketFrameData& aFrameData)
102 : {
103 0 : if (mService) {
104 0 : nsCOMPtr<nsIEventTarget> target = GetNeckoTarget();
105 0 : RefPtr<WebSocketFrame> frame = new WebSocketFrame(aFrameData);
106 0 : mService->FrameSent(aWebSocketSerialID, mInnerWindowID,
107 0 : frame.forget(), target);
108 : }
109 :
110 0 : return IPC_OK();
111 : }
112 :
113 : void
114 0 : WebSocketEventListenerChild::Close()
115 : {
116 0 : mService = nullptr;
117 0 : SendClose();
118 0 : }
119 :
120 : void
121 0 : WebSocketEventListenerChild::ActorDestroy(ActorDestroyReason aWhy)
122 : {
123 0 : mService = nullptr;
124 0 : }
125 :
126 : } // namespace net
127 : } // namespace mozilla
|