Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(60)

Side by Side Diff: third_party/WebKit/Source/modules/websockets/WebSocketHandleImpl.cpp

Issue 2343433002: WebSocket Mojo API: set reason when disconnecting a WebSocket interface because of insufficient res… (Closed)
Patch Set: . Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "modules/websockets/WebSocketHandleImpl.h" 5 #include "modules/websockets/WebSocketHandleImpl.h"
6 6
7 #include "modules/websockets/WebSocketHandleClient.h" 7 #include "modules/websockets/WebSocketHandleClient.h"
8 #include "platform/network/NetworkLog.h" 8 #include "platform/network/NetworkLog.h"
9 #include "platform/network/WebSocketHandshakeRequest.h" 9 #include "platform/network/WebSocketHandshakeRequest.h"
10 #include "platform/network/WebSocketHandshakeResponse.h" 10 #include "platform/network/WebSocketHandshakeResponse.h"
(...skipping 27 matching lines...) Expand all
38 m_websocket->StartClosingHandshake(kAbnormalShutdownOpCode, emptyString( )); 38 m_websocket->StartClosingHandshake(kAbnormalShutdownOpCode, emptyString( ));
39 } 39 }
40 40
41 void WebSocketHandleImpl::initialize(InterfaceProvider* interfaceProvider) 41 void WebSocketHandleImpl::initialize(InterfaceProvider* interfaceProvider)
42 { 42 {
43 NETWORK_DVLOG(1) << this << " initialize(...)"; 43 NETWORK_DVLOG(1) << this << " initialize(...)";
44 44
45 DCHECK(!m_websocket); 45 DCHECK(!m_websocket);
46 interfaceProvider->getInterface(mojo::GetProxy(&m_websocket)); 46 interfaceProvider->getInterface(mojo::GetProxy(&m_websocket));
47 47
48 m_websocket.set_connection_error_handler( 48 m_websocket.set_connection_error_with_reason_handler(
49 convertToBaseCallback(bind(&WebSocketHandleImpl::onConnectionError, unre tained(this)))); 49 convertToBaseCallback(WTF::bind(&WebSocketHandleImpl::onConnectionError, unretained(this))));
50 } 50 }
51 51
52 void WebSocketHandleImpl::connect(const KURL& url, const Vector<String>& protoco ls, SecurityOrigin* origin, const KURL& firstPartyForCookies, const String& user AgentOverride, WebSocketHandleClient* client) 52 void WebSocketHandleImpl::connect(const KURL& url, const Vector<String>& protoco ls, SecurityOrigin* origin, const KURL& firstPartyForCookies, const String& user AgentOverride, WebSocketHandleClient* client)
53 { 53 {
54 DCHECK(m_websocket); 54 DCHECK(m_websocket);
55 55
56 NETWORK_DVLOG(1) << this << " connect(" << url.getString() << ", " << origin ->toString() << ")"; 56 NETWORK_DVLOG(1) << this << " connect(" << url.getString() << ", " << origin ->toString() << ")";
57 57
58 DCHECK(!m_client); 58 DCHECK(!m_client);
59 DCHECK(client); 59 DCHECK(client);
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 115
116 m_websocket->StartClosingHandshake(code, reason.isNull() ? emptyString() : r eason); 116 m_websocket->StartClosingHandshake(code, reason.isNull() ? emptyString() : r eason);
117 } 117 }
118 118
119 void WebSocketHandleImpl::disconnect() 119 void WebSocketHandleImpl::disconnect()
120 { 120 {
121 m_websocket.reset(); 121 m_websocket.reset();
122 m_client = nullptr; 122 m_client = nullptr;
123 } 123 }
124 124
125 void WebSocketHandleImpl::onConnectionError() 125 void WebSocketHandleImpl::onConnectionError(uint32_t customReason, const std::st ring& description)
126 { 126 {
127 if (!blink::Platform::current()) { 127 if (!blink::Platform::current()) {
128 // In the renderrer shutdown sequence, mojo channels are destructed and this 128 // In the renderrer shutdown sequence, mojo channels are destructed and this
129 // function is called. On the other hand, blink objects became invalid 129 // function is called. On the other hand, blink objects became invalid
130 // *silently*, which means we must not touch |*client_| any more. 130 // *silently*, which means we must not touch |*client_| any more.
131 // TODO(yhirano): Remove this code once the shutdown sequence is fixed. 131 // TODO(yhirano): Remove this code once the shutdown sequence is fixed.
132 disconnect(); 132 disconnect();
133 return; 133 return;
134 } 134 }
135 135
136 // Our connection to the WebSocket was dropped. This could be due to 136 // Our connection to the WebSocket was dropped. This could be due to
137 // exceeding the maximum number of concurrent websockets from this process. 137 // exceeding the maximum number of concurrent websockets from this process.
138 138 String failureMessage;
139 // TODO(darin): Communicate a more specific error here (see crbug/634502). 139 if (customReason == mojom::blink::WebSocket::kInsufficientResources) {
140 OnFailChannel( 140 failureMessage = description.empty() ? "Insufficient resources" : String ::fromUTF8(description.c_str(), description.size());
141 "Error in connection establishment: net:" 141 } else {
142 ":ERR_INSUFFICIENT_RESOURCES"); 142 DCHECK(description.empty());
143 failureMessage = "Unspecified reason";
144 }
145 OnFailChannel(failureMessage);
143 } 146 }
144 147
145 void WebSocketHandleImpl::OnFailChannel(const String& message) 148 void WebSocketHandleImpl::OnFailChannel(const String& message)
146 { 149 {
147 NETWORK_DVLOG(1) << this << " OnFailChannel(" << message << ")"; 150 NETWORK_DVLOG(1) << this << " OnFailChannel(" << message << ")";
148 151
149 WebSocketHandleClient* client = m_client; 152 WebSocketHandleClient* client = m_client;
150 disconnect(); 153 disconnect();
151 if (!client) 154 if (!client)
152 return; 155 return;
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 { 247 {
245 NETWORK_DVLOG(1) << this << " OnClosingHandshake()"; 248 NETWORK_DVLOG(1) << this << " OnClosingHandshake()";
246 if (!m_client) 249 if (!m_client)
247 return; 250 return;
248 251
249 m_client->didStartClosingHandshake(this); 252 m_client->didStartClosingHandshake(this);
250 // |this| can be deleted here. 253 // |this| can be deleted here.
251 } 254 }
252 255
253 } // namespace blink 256 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698