| OLD | NEW |
| 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/renderer_host/websocket_host.h" | 5 #include "content/browser/renderer_host/websocket_host.h" |
| 6 | 6 |
| 7 #include <inttypes.h> | 7 #include <inttypes.h> |
| 8 | 8 |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 392 IPC_MESSAGE_HANDLER(WebSocketMsg_DropChannel, OnDropChannel) | 392 IPC_MESSAGE_HANDLER(WebSocketMsg_DropChannel, OnDropChannel) |
| 393 IPC_MESSAGE_UNHANDLED(handled = false) | 393 IPC_MESSAGE_UNHANDLED(handled = false) |
| 394 IPC_END_MESSAGE_MAP() | 394 IPC_END_MESSAGE_MAP() |
| 395 return handled; | 395 return handled; |
| 396 } | 396 } |
| 397 | 397 |
| 398 void WebSocketHost::OnAddChannelRequest( | 398 void WebSocketHost::OnAddChannelRequest( |
| 399 const GURL& socket_url, | 399 const GURL& socket_url, |
| 400 const std::vector<std::string>& requested_protocols, | 400 const std::vector<std::string>& requested_protocols, |
| 401 const url::Origin& origin, | 401 const url::Origin& origin, |
| 402 const std::string& additional_headers, |
| 402 int render_frame_id) { | 403 int render_frame_id) { |
| 403 DVLOG(3) << "WebSocketHost::OnAddChannelRequest" | 404 DVLOG(3) << "WebSocketHost::OnAddChannelRequest" |
| 404 << " routing_id=" << routing_id_ << " socket_url=\"" << socket_url | 405 << " routing_id=" << routing_id_ << " socket_url=\"" << socket_url |
| 405 << "\" requested_protocols=\"" | 406 << "\" requested_protocols=\"" |
| 406 << base::JoinString(requested_protocols, ", ") << "\" origin=\"" | 407 << base::JoinString(requested_protocols, ", ") << "\" origin=\"" |
| 407 << origin << "\""; | 408 << origin << "\" additional_headers=\"" << additional_headers |
| 409 << "\""; |
| 408 | 410 |
| 409 DCHECK(!channel_); | 411 DCHECK(!channel_); |
| 410 if (delay_ > base::TimeDelta()) { | 412 if (delay_ > base::TimeDelta()) { |
| 411 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 413 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
| 412 FROM_HERE, | 414 FROM_HERE, |
| 413 base::Bind(&WebSocketHost::AddChannel, weak_ptr_factory_.GetWeakPtr(), | 415 base::Bind(&WebSocketHost::AddChannel, weak_ptr_factory_.GetWeakPtr(), |
| 414 socket_url, requested_protocols, origin, render_frame_id), | 416 socket_url, requested_protocols, origin, |
| 417 additional_headers, render_frame_id), |
| 415 delay_); | 418 delay_); |
| 416 } else { | 419 } else { |
| 417 AddChannel(socket_url, requested_protocols, origin, render_frame_id); | 420 AddChannel(socket_url, requested_protocols, origin, |
| 421 additional_headers, render_frame_id); |
| 418 } | 422 } |
| 419 // |this| may have been deleted here. | 423 // |this| may have been deleted here. |
| 420 } | 424 } |
| 421 | 425 |
| 422 void WebSocketHost::AddChannel( | 426 void WebSocketHost::AddChannel( |
| 423 const GURL& socket_url, | 427 const GURL& socket_url, |
| 424 const std::vector<std::string>& requested_protocols, | 428 const std::vector<std::string>& requested_protocols, |
| 425 const url::Origin& origin, | 429 const url::Origin& origin, |
| 430 const std::string& additional_headers, |
| 426 int render_frame_id) { | 431 int render_frame_id) { |
| 427 DVLOG(3) << "WebSocketHost::AddChannel" | 432 DVLOG(3) << "WebSocketHost::AddChannel" |
| 428 << " routing_id=" << routing_id_ << " socket_url=\"" << socket_url | 433 << " routing_id=" << routing_id_ << " socket_url=\"" << socket_url |
| 429 << "\" requested_protocols=\"" | 434 << "\" requested_protocols=\"" |
| 430 << base::JoinString(requested_protocols, ", ") << "\" origin=\"" | 435 << base::JoinString(requested_protocols, ", ") << "\" origin=\"" |
| 431 << origin << "\""; | 436 << origin << "\" additional_headers=\"" |
| 437 << additional_headers << "\""; |
| 432 | 438 |
| 433 DCHECK(!channel_); | 439 DCHECK(!channel_); |
| 434 | 440 |
| 435 std::unique_ptr<net::WebSocketEventInterface> event_interface( | 441 std::unique_ptr<net::WebSocketEventInterface> event_interface( |
| 436 new WebSocketEventHandler(dispatcher_, this, routing_id_, | 442 new WebSocketEventHandler(dispatcher_, this, routing_id_, |
| 437 render_frame_id)); | 443 render_frame_id)); |
| 438 channel_.reset(new net::WebSocketChannel(std::move(event_interface), | 444 channel_.reset(new net::WebSocketChannel(std::move(event_interface), |
| 439 url_request_context_)); | 445 url_request_context_)); |
| 440 | 446 |
| 441 if (pending_flow_control_quota_ > 0) { | 447 if (pending_flow_control_quota_ > 0) { |
| 442 // channel_->SendFlowControl(pending_flow_control_quota_) must be called | 448 // channel_->SendFlowControl(pending_flow_control_quota_) must be called |
| 443 // after channel_->SendAddChannelRequest() below. | 449 // after channel_->SendAddChannelRequest() below. |
| 444 // We post OnFlowControl() here using |weak_ptr_factory_| instead of | 450 // We post OnFlowControl() here using |weak_ptr_factory_| instead of |
| 445 // calling SendFlowControl directly, because |this| may have been deleted | 451 // calling SendFlowControl directly, because |this| may have been deleted |
| 446 // after channel_->SendAddChannelRequest(). | 452 // after channel_->SendAddChannelRequest(). |
| 447 base::ThreadTaskRunnerHandle::Get()->PostTask( | 453 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 448 FROM_HERE, base::Bind(&WebSocketHost::OnFlowControl, | 454 FROM_HERE, base::Bind(&WebSocketHost::OnFlowControl, |
| 449 weak_ptr_factory_.GetWeakPtr(), | 455 weak_ptr_factory_.GetWeakPtr(), |
| 450 pending_flow_control_quota_)); | 456 pending_flow_control_quota_)); |
| 451 pending_flow_control_quota_ = 0; | 457 pending_flow_control_quota_ = 0; |
| 452 } | 458 } |
| 453 | 459 channel_->SendAddChannelRequest( |
| 454 channel_->SendAddChannelRequest(socket_url, requested_protocols, origin); | 460 socket_url, requested_protocols, origin, |
| 461 additional_headers); |
| 455 // |this| may have been deleted here. | 462 // |this| may have been deleted here. |
| 456 } | 463 } |
| 457 | 464 |
| 458 void WebSocketHost::OnSendBlob(const std::string& uuid, | 465 void WebSocketHost::OnSendBlob(const std::string& uuid, |
| 459 uint64_t expected_size) { | 466 uint64_t expected_size) { |
| 460 DVLOG(3) << "WebSocketHost::OnSendBlob" | 467 DVLOG(3) << "WebSocketHost::OnSendBlob" |
| 461 << " routing_id=" << routing_id_ << " uuid=" << uuid | 468 << " routing_id=" << routing_id_ << " uuid=" << uuid |
| 462 << " expected_size=" << expected_size; | 469 << " expected_size=" << expected_size; |
| 463 | 470 |
| 464 DCHECK(channel_); | 471 DCHECK(channel_); |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 574 default: | 581 default: |
| 575 ignore_result(dispatcher_->NotifyFailure( | 582 ignore_result(dispatcher_->NotifyFailure( |
| 576 routing_id_, | 583 routing_id_, |
| 577 "Failed to load Blob: error code = " + net::ErrorToString(result))); | 584 "Failed to load Blob: error code = " + net::ErrorToString(result))); |
| 578 // |this| is destroyed here. | 585 // |this| is destroyed here. |
| 579 return; | 586 return; |
| 580 } | 587 } |
| 581 } | 588 } |
| 582 | 589 |
| 583 } // namespace content | 590 } // namespace content |
| OLD | NEW |