Skip to content

Commit b799ebc

Browse files
committed
Bug 1263991 part 5: Create API on FlyWebPublishedServer for getting back a nsITransport when accepting a websocket request, rather than getting back a WebSocket DOM object. r=djvj
1 parent 4ab94e9 commit b799ebc

File tree

5 files changed

+90
-71
lines changed

5 files changed

+90
-71
lines changed

dom/flyweb/FlyWebPublishedServer.cpp

Lines changed: 70 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "mozilla/Preferences.h"
1818
#include "mozilla/unused.h"
1919
#include "nsGlobalWindow.h"
20+
#include "WebSocketChannel.h"
2021

2122
namespace mozilla {
2223
namespace dom {
@@ -111,6 +112,51 @@ FlyWebPublishedServer::PublishedServerStarted(nsresult aStatus)
111112
}
112113
}
113114

115+
already_AddRefed<WebSocket>
116+
FlyWebPublishedServer::OnWebSocketAccept(InternalRequest* aConnectRequest,
117+
const Optional<nsAString>& aProtocol,
118+
ErrorResult& aRv)
119+
{
120+
MOZ_ASSERT(aConnectRequest);
121+
122+
LOG_I("FlyWebPublishedServer::OnWebSocketAccept(%p)", this);
123+
124+
nsCOMPtr<nsITransportProvider> provider =
125+
OnWebSocketAcceptInternal(aConnectRequest,
126+
aProtocol,
127+
aRv);
128+
if (aRv.Failed()) {
129+
return nullptr;
130+
}
131+
MOZ_ASSERT(provider);
132+
133+
nsCOMPtr<nsPIDOMWindowInner> window = do_QueryInterface(GetOwner());
134+
AutoJSContext cx;
135+
GlobalObject global(cx, nsGlobalWindow::Cast(window)->FastGetGlobalJSObject());
136+
137+
nsAutoCString extensions, negotiatedExtensions;
138+
aConnectRequest->Headers()->
139+
Get(NS_LITERAL_CSTRING("Sec-WebSocket-Extensions"), extensions, aRv);
140+
mozilla::net::ProcessServerWebSocketExtensions(extensions,
141+
negotiatedExtensions);
142+
143+
nsCString url;
144+
aConnectRequest->GetURL(url);
145+
Sequence<nsString> protocols;
146+
if (aProtocol.WasPassed() &&
147+
!protocols.AppendElement(aProtocol.Value(), fallible)) {
148+
aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
149+
return nullptr;
150+
}
151+
152+
return WebSocket::ConstructorCommon(global,
153+
NS_ConvertUTF8toUTF16(url),
154+
protocols,
155+
provider,
156+
negotiatedExtensions,
157+
aRv);
158+
}
159+
114160
/******** FlyWebPublishedServerImpl ********/
115161

116162
NS_IMPL_ISUPPORTS_INHERITED0(FlyWebPublishedServerImpl, mozilla::DOMEventTargetHelper)
@@ -166,52 +212,6 @@ FlyWebPublishedServerImpl::OnFetchResponse(InternalRequest* aRequest,
166212
}
167213
}
168214

169-
already_AddRefed<WebSocket>
170-
FlyWebPublishedServerImpl::OnWebSocketAccept(InternalRequest* aConnectRequest,
171-
const Optional<nsAString>& aProtocol,
172-
ErrorResult& aRv)
173-
{
174-
MOZ_ASSERT(aConnectRequest);
175-
176-
LOG_I("FlyWebPublishedMDNSServer::OnWebSocketAccept(%p)", this);
177-
178-
if (!mHttpServer) {
179-
aRv.Throw(NS_ERROR_UNEXPECTED);
180-
return nullptr;
181-
}
182-
183-
nsAutoCString negotiatedExtensions;
184-
nsCOMPtr<nsITransportProvider> provider =
185-
mHttpServer->AcceptWebSocket(aConnectRequest,
186-
aProtocol,
187-
negotiatedExtensions,
188-
aRv);
189-
if (aRv.Failed()) {
190-
return nullptr;
191-
}
192-
MOZ_ASSERT(provider);
193-
194-
nsCOMPtr<nsPIDOMWindowInner> window = do_QueryInterface(GetOwner());
195-
AutoJSContext cx;
196-
GlobalObject global(cx, nsGlobalWindow::Cast(window)->FastGetGlobalJSObject());
197-
198-
nsCString url;
199-
aConnectRequest->GetURL(url);
200-
Sequence<nsString> protocols;
201-
if (aProtocol.WasPassed() &&
202-
!protocols.AppendElement(aProtocol.Value(), fallible)) {
203-
aRv.Throw(NS_ERROR_OUT_OF_MEMORY);
204-
return nullptr;
205-
}
206-
207-
return WebSocket::ConstructorCommon(global,
208-
NS_ConvertUTF8toUTF16(url),
209-
protocols,
210-
provider,
211-
negotiatedExtensions,
212-
aRv);
213-
}
214-
215215
void
216216
FlyWebPublishedServerImpl::OnWebSocketResponse(InternalRequest* aConnectRequest,
217217
InternalResponse* aResponse)
@@ -226,6 +226,23 @@ FlyWebPublishedServerImpl::OnWebSocketResponse(InternalRequest* aConnectRequest,
226226
}
227227
}
228228

229+
already_AddRefed<nsITransportProvider>
230+
FlyWebPublishedServerImpl::OnWebSocketAcceptInternal(InternalRequest* aConnectRequest,
231+
const Optional<nsAString>& aProtocol,
232+
ErrorResult& aRv)
233+
{
234+
LOG_I("FlyWebPublishedServerImpl::OnWebSocketAcceptInternal(%p)", this);
235+
236+
if (!mHttpServer) {
237+
aRv.Throw(NS_ERROR_UNEXPECTED);
238+
return nullptr;
239+
}
240+
241+
return mHttpServer->AcceptWebSocket(aConnectRequest,
242+
aProtocol,
243+
aRv);
244+
}
245+
229246
/******** FlyWebPublishedServerChild ********/
230247

231248
FlyWebPublishedServerChild::FlyWebPublishedServerChild(nsPIDOMWindowInner* aOwner,
@@ -310,12 +327,14 @@ FlyWebPublishedServerChild::OnFetchResponse(InternalRequest* aRequest,
310327
}
311328
}
312329

313-
already_AddRefed<WebSocket>
314-
FlyWebPublishedServerChild::OnWebSocketAccept(InternalRequest* aConnectRequest,
315-
const Optional<nsAString>& aProtocol,
316-
ErrorResult& aRv)
330+
already_AddRefed<nsITransportProvider>
331+
FlyWebPublishedServerChild::OnWebSocketAcceptInternal(InternalRequest* aConnectRequest,
332+
const Optional<nsAString>& aProtocol,
333+
ErrorResult& aRv)
317334
{
318-
// Send ipdl message to parent
335+
LOG_I("FlyWebPublishedServerChild::OnWebSocketAcceptInternal(%p)", this);
336+
337+
aRv.Throw(NS_ERROR_NOT_IMPLEMENTED);
319338
return nullptr;
320339
}
321340

dom/flyweb/FlyWebPublishedServer.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "mozilla/MozPromise.h"
1212

1313
class nsPIDOMWindowInner;
14+
class nsITransportProvider;
1415

1516
namespace mozilla {
1617

@@ -58,12 +59,16 @@ class FlyWebPublishedServer : public mozilla::DOMEventTargetHelper
5859

5960
virtual void OnFetchResponse(InternalRequest* aRequest,
6061
InternalResponse* aResponse) = 0;
61-
virtual already_AddRefed<WebSocket>
62+
already_AddRefed<WebSocket>
6263
OnWebSocketAccept(InternalRequest* aConnectRequest,
6364
const Optional<nsAString>& aProtocol,
64-
ErrorResult& aRv) = 0;
65+
ErrorResult& aRv);
6566
virtual void OnWebSocketResponse(InternalRequest* aConnectRequest,
6667
InternalResponse* aResponse) = 0;
68+
virtual already_AddRefed<nsITransportProvider>
69+
OnWebSocketAcceptInternal(InternalRequest* aConnectRequest,
70+
const Optional<nsAString>& aProtocol,
71+
ErrorResult& aRv) = 0;
6772

6873
virtual void Close();
6974

@@ -82,7 +87,6 @@ class FlyWebPublishedServer : public mozilla::DOMEventTargetHelper
8287
}
8388

8489
protected:
85-
8690
virtual ~FlyWebPublishedServer()
8791
{
8892
MOZ_ASSERT(!mIsRegistered, "Subclass dtor forgot to call Close()");

dom/flyweb/FlyWebPublishedServerIPC.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,12 @@ class FlyWebPublishedServerImpl final : public FlyWebPublishedServer
4747

4848
virtual void OnFetchResponse(InternalRequest* aRequest,
4949
InternalResponse* aResponse) override;
50-
virtual already_AddRefed<WebSocket>
51-
OnWebSocketAccept(InternalRequest* aConnectRequest,
52-
const Optional<nsAString>& aProtocol,
53-
ErrorResult& aRv) override;
5450
virtual void OnWebSocketResponse(InternalRequest* aConnectRequest,
5551
InternalResponse* aResponse) override;
52+
virtual already_AddRefed<nsITransportProvider>
53+
OnWebSocketAcceptInternal(InternalRequest* aConnectRequest,
54+
const Optional<nsAString>& aProtocol,
55+
ErrorResult& aRv) override;
5656

5757
void SetCancelRegister(nsICancelable* aCancelRegister)
5858
{
@@ -100,12 +100,12 @@ class FlyWebPublishedServerChild final : public FlyWebPublishedServer
100100

101101
virtual void OnFetchResponse(InternalRequest* aRequest,
102102
InternalResponse* aResponse) override;
103-
virtual already_AddRefed<WebSocket>
104-
OnWebSocketAccept(InternalRequest* aConnectRequest,
105-
const Optional<nsAString>& aProtocol,
106-
ErrorResult& aRv) override;
107103
virtual void OnWebSocketResponse(InternalRequest* aConnectRequest,
108104
InternalResponse* aResponse) override;
105+
virtual already_AddRefed<nsITransportProvider>
106+
OnWebSocketAcceptInternal(InternalRequest* aConnectRequest,
107+
const Optional<nsAString>& aProtocol,
108+
ErrorResult& aRv) override;
109109

110110
virtual void Close() override;
111111

dom/flyweb/HttpServer.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -175,15 +175,14 @@ HttpServer::SendResponse(InternalRequest* aRequest, InternalResponse* aResponse)
175175
already_AddRefed<nsITransportProvider>
176176
HttpServer::AcceptWebSocket(InternalRequest* aConnectRequest,
177177
const Optional<nsAString>& aProtocol,
178-
nsACString& aNegotiatedExtensions,
179178
ErrorResult& aRv)
180179
{
181180
for (Connection* conn : mConnections) {
182181
if (!conn->HasPendingWebSocketRequest(aConnectRequest)) {
183182
continue;
184183
}
185184
nsCOMPtr<nsITransportProvider> provider =
186-
conn->HandleAcceptWebSocket(aProtocol, aNegotiatedExtensions, aRv);
185+
conn->HandleAcceptWebSocket(aProtocol, aRv);
187186
if (aRv.Failed()) {
188187
conn->Close();
189188
}
@@ -790,7 +789,6 @@ HttpServer::Connection::TryHandleResponse(InternalRequest* aRequest,
790789

791790
already_AddRefed<nsITransportProvider>
792791
HttpServer::Connection::HandleAcceptWebSocket(const Optional<nsAString>& aProtocol,
793-
nsACString& aNegotiatedExtensions,
794792
ErrorResult& aRv)
795793
{
796794
MOZ_ASSERT(mPendingWebSocketRequest);
@@ -830,14 +828,14 @@ HttpServer::Connection::HandleAcceptWebSocket(const Optional<nsAString>& aProtoc
830828
}
831829
headers->Set(NS_LITERAL_CSTRING("Sec-WebSocket-Accept"), hash, aRv);
832830

833-
nsAutoCString extensions;
831+
nsAutoCString extensions, negotiatedExtensions;
834832
mPendingWebSocketRequest->Headers()->
835833
Get(NS_LITERAL_CSTRING("Sec-WebSocket-Extensions"), extensions, aRv);
836834
mozilla::net::ProcessServerWebSocketExtensions(extensions,
837-
aNegotiatedExtensions);
838-
if (!aNegotiatedExtensions.IsEmpty()) {
835+
negotiatedExtensions);
836+
if (!negotiatedExtensions.IsEmpty()) {
839837
headers->Set(NS_LITERAL_CSTRING("Sec-WebSocket-Extensions"),
840-
aNegotiatedExtensions, aRv);
838+
negotiatedExtensions, aRv);
841839
}
842840

843841
RefPtr<TransportProvider> result = new TransportProvider();

dom/flyweb/HttpServer.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ class HttpServer final : public nsIServerSocketListener,
5555
already_AddRefed<nsITransportProvider>
5656
AcceptWebSocket(InternalRequest* aConnectRequest,
5757
const Optional<nsAString>& aProtocol,
58-
nsACString& aNegotiatedExtensions,
5958
ErrorResult& aRv);
6059
void SendWebSocketResponse(InternalRequest* aConnectRequest,
6160
InternalResponse* aResponse);
@@ -113,7 +112,6 @@ class HttpServer final : public nsIServerSocketListener,
113112
InternalResponse* aResponse);
114113
already_AddRefed<nsITransportProvider>
115114
HandleAcceptWebSocket(const Optional<nsAString>& aProtocol,
116-
nsACString& aNegotiatedExtensions,
117115
ErrorResult& aRv);
118116
void HandleWebSocketResponse(InternalResponse* aResponse);
119117
bool HasPendingWebSocketRequest(InternalRequest* aRequest)

0 commit comments

Comments
 (0)