Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/netwerk/protocol/websocket/WebSocketFrame.cpp
Line
Count
Source (jump to first uncovered line)
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
5
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
7
#include "WebSocketFrame.h"
8
9
#include "WebSocketChannel.h"
10
#include "nsSocketTransportService2.h"
11
#include "nsThreadUtils.h" // for NS_IsMainThread
12
#include "ipc/IPCMessageUtils.h"
13
14
namespace mozilla {
15
namespace net {
16
17
0
NS_INTERFACE_MAP_BEGIN(WebSocketFrame)
18
0
  NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIWebSocketFrame)
19
0
  NS_INTERFACE_MAP_ENTRY(nsIWebSocketFrame)
20
0
NS_INTERFACE_MAP_END
21
22
NS_IMPL_ADDREF(WebSocketFrame)
23
NS_IMPL_RELEASE(WebSocketFrame)
24
25
WebSocketFrame::WebSocketFrame(const WebSocketFrameData& aData)
26
  : mData(aData)
27
0
{}
28
29
WebSocketFrame::WebSocketFrame(bool aFinBit, bool aRsvBit1, bool aRsvBit2,
30
                               bool aRsvBit3, uint8_t aOpCode, bool aMaskBit,
31
                               uint32_t aMask, const nsCString& aPayload)
32
  : mData(PR_Now(), aFinBit, aRsvBit1, aRsvBit2, aRsvBit3, aOpCode, aMaskBit,
33
          aMask, aPayload)
34
0
{
35
0
  MOZ_ASSERT(OnSocketThread(), "not on socket thread");
36
0
  mData.mTimeStamp = PR_Now();
37
0
}
38
39
#define WSF_GETTER( method, value , type )     \
40
NS_IMETHODIMP                                  \
41
0
WebSocketFrame::method(type* aValue)           \
42
0
{                                              \
43
0
  MOZ_ASSERT(NS_IsMainThread());               \
44
0
  if (!aValue) {                               \
45
0
    return NS_ERROR_FAILURE;                   \
46
0
  }                                            \
47
0
  *aValue = value;                             \
48
0
  return NS_OK;                                \
49
0
}
Unexecuted instantiation: mozilla::net::WebSocketFrame::GetTimeStamp(double*)
Unexecuted instantiation: mozilla::net::WebSocketFrame::GetFinBit(bool*)
Unexecuted instantiation: mozilla::net::WebSocketFrame::GetRsvBit1(bool*)
Unexecuted instantiation: mozilla::net::WebSocketFrame::GetRsvBit2(bool*)
Unexecuted instantiation: mozilla::net::WebSocketFrame::GetRsvBit3(bool*)
Unexecuted instantiation: mozilla::net::WebSocketFrame::GetOpCode(unsigned short*)
Unexecuted instantiation: mozilla::net::WebSocketFrame::GetMaskBit(bool*)
Unexecuted instantiation: mozilla::net::WebSocketFrame::GetMask(unsigned int*)
50
51
WSF_GETTER(GetTimeStamp, mData.mTimeStamp, DOMHighResTimeStamp);
52
WSF_GETTER(GetFinBit, mData.mFinBit, bool);
53
WSF_GETTER(GetRsvBit1, mData.mRsvBit1, bool);
54
WSF_GETTER(GetRsvBit2, mData.mRsvBit2, bool);
55
WSF_GETTER(GetRsvBit3, mData.mRsvBit3, bool);
56
WSF_GETTER(GetOpCode, mData.mOpCode, uint16_t);
57
WSF_GETTER(GetMaskBit, mData.mMaskBit, bool);
58
WSF_GETTER(GetMask, mData.mMask, uint32_t);
59
60
#undef WSF_GETTER
61
62
NS_IMETHODIMP
63
WebSocketFrame::GetPayload(nsACString& aValue)
64
0
{
65
0
  MOZ_ASSERT(NS_IsMainThread());
66
0
  aValue = mData.mPayload;
67
0
  return NS_OK;
68
0
}
69
70
WebSocketFrameData::WebSocketFrameData()
71
  : mTimeStamp(0)
72
  , mFinBit(false)
73
  , mRsvBit1(false)
74
  , mRsvBit2(false)
75
  , mRsvBit3(false)
76
  , mMaskBit(false)
77
  , mOpCode(0)
78
  , mMask(0)
79
0
{
80
0
  MOZ_COUNT_CTOR(WebSocketFrameData);
81
0
}
82
83
WebSocketFrameData::WebSocketFrameData(DOMHighResTimeStamp aTimeStamp,
84
                                       bool aFinBit, bool aRsvBit1,
85
                                       bool aRsvBit2, bool aRsvBit3,
86
                                       uint8_t aOpCode, bool aMaskBit,
87
                                       uint32_t aMask,
88
                                       const nsCString& aPayload)
89
  : mTimeStamp(aTimeStamp)
90
  , mFinBit(aFinBit)
91
  , mRsvBit1(aRsvBit1)
92
  , mRsvBit2(aRsvBit2)
93
  , mRsvBit3(aRsvBit3)
94
  , mMaskBit(aMaskBit)
95
  , mOpCode(aOpCode)
96
  , mMask(aMask)
97
  , mPayload(aPayload)
98
0
{
99
0
  MOZ_COUNT_CTOR(WebSocketFrameData);
100
0
}
101
102
WebSocketFrameData::WebSocketFrameData(const WebSocketFrameData& aData)
103
  : mTimeStamp(aData.mTimeStamp)
104
  , mFinBit(aData.mFinBit)
105
  , mRsvBit1(aData.mRsvBit1)
106
  , mRsvBit2(aData.mRsvBit2)
107
  , mRsvBit3(aData.mRsvBit3)
108
  , mMaskBit(aData.mMaskBit)
109
  , mOpCode(aData.mOpCode)
110
  , mMask(aData.mMask)
111
  , mPayload(aData.mPayload)
112
0
{
113
0
  MOZ_COUNT_CTOR(WebSocketFrameData);
114
0
}
115
116
WebSocketFrameData::~WebSocketFrameData()
117
0
{
118
0
  MOZ_COUNT_DTOR(WebSocketFrameData);
119
0
}
120
121
void
122
WebSocketFrameData::WriteIPCParams(IPC::Message* aMessage) const
123
0
{
124
0
  WriteParam(aMessage, mTimeStamp);
125
0
  WriteParam(aMessage, mFinBit);
126
0
  WriteParam(aMessage, mRsvBit1);
127
0
  WriteParam(aMessage, mRsvBit2);
128
0
  WriteParam(aMessage, mRsvBit3);
129
0
  WriteParam(aMessage, mOpCode);
130
0
  WriteParam(aMessage, mMaskBit);
131
0
  WriteParam(aMessage, mMask);
132
0
  WriteParam(aMessage, mPayload);
133
0
}
134
135
bool
136
WebSocketFrameData::ReadIPCParams(const IPC::Message* aMessage,
137
                                  PickleIterator* aIter)
138
0
{
139
0
  if (!ReadParam(aMessage, aIter, &mTimeStamp)) {
140
0
    return false;
141
0
  }
142
0
143
0
#define ReadParamHelper(x)                     \
144
0
  {                                            \
145
0
    bool bit;                                  \
146
0
    if (!ReadParam(aMessage, aIter, &bit)) {   \
147
0
      return false;                            \
148
0
    }                                          \
149
0
    x = bit;                                   \
150
0
  }
151
0
152
0
  ReadParamHelper(mFinBit);
153
0
  ReadParamHelper(mRsvBit1);
154
0
  ReadParamHelper(mRsvBit2);
155
0
  ReadParamHelper(mRsvBit3);
156
0
  ReadParamHelper(mMaskBit);
157
0
158
0
#undef ReadParamHelper
159
0
160
0
  return ReadParam(aMessage, aIter, &mOpCode) &&
161
0
         ReadParam(aMessage, aIter, &mMask) &&
162
0
         ReadParam(aMessage, aIter, &mPayload);
163
0
}
164
165
} // net namespace
166
} // mozilla namespace