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

Side by Side Diff: content/browser/websockets/websocket_impl.cc

Issue 2284473002: Move WebSocketHandleImpl into Blink (take 2) (Closed)
Patch Set: Rebase 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 "content/browser/websockets/websocket_impl.h" 5 #include "content/browser/websockets/websocket_impl.h"
6 6
7 #include <inttypes.h> 7 #include <inttypes.h>
8 8
9 #include <utility> 9 #include <utility>
10 10
(...skipping 25 matching lines...) Expand all
36 #include "net/websockets/websocket_frame.h" // for WebSocketFrameHeader::OpCode 36 #include "net/websockets/websocket_frame.h" // for WebSocketFrameHeader::OpCode
37 #include "net/websockets/websocket_handshake_request_info.h" 37 #include "net/websockets/websocket_handshake_request_info.h"
38 #include "net/websockets/websocket_handshake_response_info.h" 38 #include "net/websockets/websocket_handshake_response_info.h"
39 #include "url/origin.h" 39 #include "url/origin.h"
40 40
41 namespace content { 41 namespace content {
42 namespace { 42 namespace {
43 43
44 typedef net::WebSocketEventInterface::ChannelState ChannelState; 44 typedef net::WebSocketEventInterface::ChannelState ChannelState;
45 45
46 // Convert a mojom::WebSocketMessageType to a 46 // Convert a blink::mojom::WebSocketMessageType to a
47 // net::WebSocketFrameHeader::OpCode 47 // net::WebSocketFrameHeader::OpCode
48 net::WebSocketFrameHeader::OpCode MessageTypeToOpCode( 48 net::WebSocketFrameHeader::OpCode MessageTypeToOpCode(
49 mojom::WebSocketMessageType type) { 49 blink::mojom::WebSocketMessageType type) {
50 DCHECK(type == mojom::WebSocketMessageType::CONTINUATION || 50 DCHECK(type == blink::mojom::WebSocketMessageType::CONTINUATION ||
51 type == mojom::WebSocketMessageType::TEXT || 51 type == blink::mojom::WebSocketMessageType::TEXT ||
52 type == mojom::WebSocketMessageType::BINARY); 52 type == blink::mojom::WebSocketMessageType::BINARY);
53 typedef net::WebSocketFrameHeader::OpCode OpCode; 53 typedef net::WebSocketFrameHeader::OpCode OpCode;
54 // These compile asserts verify that the same underlying values are used for 54 // These compile asserts verify that the same underlying values are used for
55 // both types, so we can simply cast between them. 55 // both types, so we can simply cast between them.
56 static_assert( 56 static_assert(
57 static_cast<OpCode>(mojom::WebSocketMessageType::CONTINUATION) == 57 static_cast<OpCode>(blink::mojom::WebSocketMessageType::CONTINUATION) ==
58 net::WebSocketFrameHeader::kOpCodeContinuation, 58 net::WebSocketFrameHeader::kOpCodeContinuation,
59 "enum values must match for opcode continuation"); 59 "enum values must match for opcode continuation");
60 static_assert( 60 static_assert(
61 static_cast<OpCode>(mojom::WebSocketMessageType::TEXT) == 61 static_cast<OpCode>(blink::mojom::WebSocketMessageType::TEXT) ==
62 net::WebSocketFrameHeader::kOpCodeText, 62 net::WebSocketFrameHeader::kOpCodeText,
63 "enum values must match for opcode text"); 63 "enum values must match for opcode text");
64 static_assert( 64 static_assert(
65 static_cast<OpCode>(mojom::WebSocketMessageType::BINARY) == 65 static_cast<OpCode>(blink::mojom::WebSocketMessageType::BINARY) ==
66 net::WebSocketFrameHeader::kOpCodeBinary, 66 net::WebSocketFrameHeader::kOpCodeBinary,
67 "enum values must match for opcode binary"); 67 "enum values must match for opcode binary");
68 return static_cast<OpCode>(type); 68 return static_cast<OpCode>(type);
69 } 69 }
70 70
71 mojom::WebSocketMessageType OpCodeToMessageType( 71 blink::mojom::WebSocketMessageType OpCodeToMessageType(
72 net::WebSocketFrameHeader::OpCode opCode) { 72 net::WebSocketFrameHeader::OpCode opCode) {
73 DCHECK(opCode == net::WebSocketFrameHeader::kOpCodeContinuation || 73 DCHECK(opCode == net::WebSocketFrameHeader::kOpCodeContinuation ||
74 opCode == net::WebSocketFrameHeader::kOpCodeText || 74 opCode == net::WebSocketFrameHeader::kOpCodeText ||
75 opCode == net::WebSocketFrameHeader::kOpCodeBinary); 75 opCode == net::WebSocketFrameHeader::kOpCodeBinary);
76 // This cast is guaranteed valid by the static_assert() statements above. 76 // This cast is guaranteed valid by the static_assert() statements above.
77 return static_cast<mojom::WebSocketMessageType>(opCode); 77 return static_cast<blink::mojom::WebSocketMessageType>(opCode);
78 } 78 }
79 79
80 } // namespace 80 } // namespace
81 81
82 // Implementation of net::WebSocketEventInterface. Receives events from our 82 // Implementation of net::WebSocketEventInterface. Receives events from our
83 // WebSocketChannel object. 83 // WebSocketChannel object.
84 class WebSocketImpl::WebSocketEventHandler final 84 class WebSocketImpl::WebSocketEventHandler final
85 : public net::WebSocketEventInterface { 85 : public net::WebSocketEventInterface {
86 public: 86 public:
87 explicit WebSocketEventHandler(WebSocketImpl* impl); 87 explicit WebSocketEventHandler(WebSocketImpl* impl);
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 bool should_send = 237 bool should_send =
238 ChildProcessSecurityPolicyImpl::GetInstance()->CanReadRawCookies( 238 ChildProcessSecurityPolicyImpl::GetInstance()->CanReadRawCookies(
239 impl_->delegate_->GetClientProcessId()); 239 impl_->delegate_->GetClientProcessId());
240 240
241 DVLOG(3) << "WebSocketEventHandler::OnStartOpeningHandshake @" 241 DVLOG(3) << "WebSocketEventHandler::OnStartOpeningHandshake @"
242 << reinterpret_cast<void*>(this) << " should_send=" << should_send; 242 << reinterpret_cast<void*>(this) << " should_send=" << should_send;
243 243
244 if (!should_send) 244 if (!should_send)
245 return WebSocketEventInterface::CHANNEL_ALIVE; 245 return WebSocketEventInterface::CHANNEL_ALIVE;
246 246
247 mojom::WebSocketHandshakeRequestPtr request_to_pass( 247 blink::mojom::WebSocketHandshakeRequestPtr request_to_pass(
248 mojom::WebSocketHandshakeRequest::New()); 248 blink::mojom::WebSocketHandshakeRequest::New());
249 request_to_pass->url.Swap(&request->url); 249 request_to_pass->url.Swap(&request->url);
250 net::HttpRequestHeaders::Iterator it(request->headers); 250 net::HttpRequestHeaders::Iterator it(request->headers);
251 while (it.GetNext()) { 251 while (it.GetNext()) {
252 mojom::HttpHeaderPtr header(mojom::HttpHeader::New()); 252 blink::mojom::HttpHeaderPtr header(blink::mojom::HttpHeader::New());
253 header->name = it.name(); 253 header->name = it.name();
254 header->value = it.value(); 254 header->value = it.value();
255 request_to_pass->headers.push_back(std::move(header)); 255 request_to_pass->headers.push_back(std::move(header));
256 } 256 }
257 request_to_pass->headers_text = 257 request_to_pass->headers_text =
258 base::StringPrintf("GET %s HTTP/1.1\r\n", 258 base::StringPrintf("GET %s HTTP/1.1\r\n",
259 request_to_pass->url.spec().c_str()) + 259 request_to_pass->url.spec().c_str()) +
260 request->headers.ToString(); 260 request->headers.ToString();
261 261
262 impl_->client_->OnStartOpeningHandshake(std::move(request_to_pass)); 262 impl_->client_->OnStartOpeningHandshake(std::move(request_to_pass));
263 263
264 return WebSocketEventInterface::CHANNEL_ALIVE; 264 return WebSocketEventInterface::CHANNEL_ALIVE;
265 } 265 }
266 266
267 ChannelState WebSocketImpl::WebSocketEventHandler::OnFinishOpeningHandshake( 267 ChannelState WebSocketImpl::WebSocketEventHandler::OnFinishOpeningHandshake(
268 std::unique_ptr<net::WebSocketHandshakeResponseInfo> response) { 268 std::unique_ptr<net::WebSocketHandshakeResponseInfo> response) {
269 bool should_send = 269 bool should_send =
270 ChildProcessSecurityPolicyImpl::GetInstance()->CanReadRawCookies( 270 ChildProcessSecurityPolicyImpl::GetInstance()->CanReadRawCookies(
271 impl_->delegate_->GetClientProcessId()); 271 impl_->delegate_->GetClientProcessId());
272 272
273 DVLOG(3) << "WebSocketEventHandler::OnFinishOpeningHandshake " 273 DVLOG(3) << "WebSocketEventHandler::OnFinishOpeningHandshake "
274 << reinterpret_cast<void*>(this) << " should_send=" << should_send; 274 << reinterpret_cast<void*>(this) << " should_send=" << should_send;
275 275
276 if (!should_send) 276 if (!should_send)
277 return WebSocketEventInterface::CHANNEL_ALIVE; 277 return WebSocketEventInterface::CHANNEL_ALIVE;
278 278
279 mojom::WebSocketHandshakeResponsePtr response_to_pass( 279 blink::mojom::WebSocketHandshakeResponsePtr response_to_pass(
280 mojom::WebSocketHandshakeResponse::New()); 280 blink::mojom::WebSocketHandshakeResponse::New());
281 response_to_pass->url.Swap(&response->url); 281 response_to_pass->url.Swap(&response->url);
282 response_to_pass->status_code = response->status_code; 282 response_to_pass->status_code = response->status_code;
283 response_to_pass->status_text = response->status_text; 283 response_to_pass->status_text = response->status_text;
284 size_t iter = 0; 284 size_t iter = 0;
285 std::string name, value; 285 std::string name, value;
286 while (response->headers->EnumerateHeaderLines(&iter, &name, &value)) { 286 while (response->headers->EnumerateHeaderLines(&iter, &name, &value)) {
287 mojom::HttpHeaderPtr header(mojom::HttpHeader::New()); 287 blink::mojom::HttpHeaderPtr header(blink::mojom::HttpHeader::New());
288 header->name = name; 288 header->name = name;
289 header->value = value; 289 header->value = value;
290 response_to_pass->headers.push_back(std::move(header)); 290 response_to_pass->headers.push_back(std::move(header));
291 } 291 }
292 response_to_pass->headers_text = 292 response_to_pass->headers_text =
293 net::HttpUtil::ConvertHeadersBackToHTTPResponse( 293 net::HttpUtil::ConvertHeadersBackToHTTPResponse(
294 response->headers->raw_headers()); 294 response->headers->raw_headers());
295 295
296 impl_->client_->OnFinishOpeningHandshake(std::move(response_to_pass)); 296 impl_->client_->OnFinishOpeningHandshake(std::move(response_to_pass));
297 297
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
343 } 343 }
344 344
345 void WebSocketImpl::WebSocketEventHandler::SSLErrorHandlerDelegate:: 345 void WebSocketImpl::WebSocketEventHandler::SSLErrorHandlerDelegate::
346 ContinueSSLRequest() { 346 ContinueSSLRequest() {
347 DVLOG(3) << "SSLErrorHandlerDelegate::ContinueSSLRequest"; 347 DVLOG(3) << "SSLErrorHandlerDelegate::ContinueSSLRequest";
348 callbacks_->ContinueSSLRequest(); 348 callbacks_->ContinueSSLRequest();
349 } 349 }
350 350
351 WebSocketImpl::WebSocketImpl( 351 WebSocketImpl::WebSocketImpl(
352 Delegate* delegate, 352 Delegate* delegate,
353 mojom::WebSocketRequest request, 353 blink::mojom::WebSocketRequest request,
354 int frame_id, 354 int frame_id,
355 base::TimeDelta delay) 355 base::TimeDelta delay)
356 : delegate_(delegate), 356 : delegate_(delegate),
357 binding_(this, std::move(request)), 357 binding_(this, std::move(request)),
358 delay_(delay), 358 delay_(delay),
359 pending_flow_control_quota_(0), 359 pending_flow_control_quota_(0),
360 frame_id_(frame_id), 360 frame_id_(frame_id),
361 handshake_succeeded_(false), 361 handshake_succeeded_(false),
362 weak_ptr_factory_(this) { 362 weak_ptr_factory_(this) {
363 binding_.set_connection_error_handler( 363 binding_.set_connection_error_handler(
364 base::Bind(&WebSocketImpl::OnConnectionError, base::Unretained(this))); 364 base::Bind(&WebSocketImpl::OnConnectionError, base::Unretained(this)));
365 } 365 }
366 366
367 WebSocketImpl::~WebSocketImpl() {} 367 WebSocketImpl::~WebSocketImpl() {}
368 368
369 void WebSocketImpl::GoAway() { 369 void WebSocketImpl::GoAway() {
370 StartClosingHandshake(static_cast<uint16_t>(net::kWebSocketErrorGoingAway), 370 StartClosingHandshake(static_cast<uint16_t>(net::kWebSocketErrorGoingAway),
371 ""); 371 "");
372 } 372 }
373 373
374 void WebSocketImpl::AddChannelRequest( 374 void WebSocketImpl::AddChannelRequest(
375 const GURL& socket_url, 375 const GURL& socket_url,
376 const std::vector<std::string>& requested_protocols, 376 const std::vector<std::string>& requested_protocols,
377 const url::Origin& origin, 377 const url::Origin& origin,
378 const GURL& first_party_for_cookies, 378 const GURL& first_party_for_cookies,
379 const std::string& user_agent_override, 379 const std::string& user_agent_override,
380 mojom::WebSocketClientPtr client) { 380 blink::mojom::WebSocketClientPtr client) {
381 DVLOG(3) << "WebSocketImpl::AddChannelRequest @" 381 DVLOG(3) << "WebSocketImpl::AddChannelRequest @"
382 << reinterpret_cast<void*>(this) 382 << reinterpret_cast<void*>(this)
383 << " socket_url=\"" << socket_url << "\" requested_protocols=\"" 383 << " socket_url=\"" << socket_url << "\" requested_protocols=\""
384 << base::JoinString(requested_protocols, ", ") 384 << base::JoinString(requested_protocols, ", ")
385 << "\" origin=\"" << origin 385 << "\" origin=\"" << origin
386 << "\" first_party_for_cookies=\"" << first_party_for_cookies 386 << "\" first_party_for_cookies=\"" << first_party_for_cookies
387 << "\" user_agent_override=\"" << user_agent_override 387 << "\" user_agent_override=\"" << user_agent_override
388 << "\""; 388 << "\"";
389 389
390 if (client_ || !client) { 390 if (client_ || !client) {
(...skipping 17 matching lines...) Expand all
408 first_party_for_cookies, 408 first_party_for_cookies,
409 user_agent_override), 409 user_agent_override),
410 delay_); 410 delay_);
411 } else { 411 } else {
412 AddChannel(socket_url, requested_protocols, origin, first_party_for_cookies, 412 AddChannel(socket_url, requested_protocols, origin, first_party_for_cookies,
413 user_agent_override); 413 user_agent_override);
414 } 414 }
415 } 415 }
416 416
417 void WebSocketImpl::SendFrame(bool fin, 417 void WebSocketImpl::SendFrame(bool fin,
418 mojom::WebSocketMessageType type, 418 blink::mojom::WebSocketMessageType type,
419 const std::vector<uint8_t>& data) { 419 const std::vector<uint8_t>& data) {
420 DVLOG(3) << "WebSocketImpl::SendFrame @" 420 DVLOG(3) << "WebSocketImpl::SendFrame @"
421 << reinterpret_cast<void*>(this) << " fin=" << fin 421 << reinterpret_cast<void*>(this) << " fin=" << fin
422 << " type=" << type << " data is " << data.size() << " bytes"; 422 << " type=" << type << " data is " << data.size() << " bytes";
423 423
424 if (!channel_) { 424 if (!channel_) {
425 // The client should not be sending us frames until after we've informed 425 // The client should not be sending us frames until after we've informed
426 // it that the channel has been opened (OnAddChannelResponse). 426 // it that the channel has been opened (OnAddChannelResponse).
427 if (handshake_succeeded_) { 427 if (handshake_succeeded_) {
428 DVLOG(1) << "Dropping frame sent to closed websocket"; 428 DVLOG(1) << "Dropping frame sent to closed websocket";
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
522 net::HttpRequestHeaders::kUserAgent, 522 net::HttpRequestHeaders::kUserAgent,
523 user_agent_override.c_str()); 523 user_agent_override.c_str());
524 } 524 }
525 channel_->SendAddChannelRequest(socket_url, requested_protocols, origin, 525 channel_->SendAddChannelRequest(socket_url, requested_protocols, origin,
526 first_party_for_cookies, additional_headers); 526 first_party_for_cookies, additional_headers);
527 if (quota > 0) 527 if (quota > 0)
528 SendFlowControl(quota); 528 SendFlowControl(quota);
529 } 529 }
530 530
531 } // namespace content 531 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/websockets/websocket_impl.h ('k') | content/browser/websockets/websocket_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698