|  | // Copyright 2014 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "components/test_runner/mock_webrtc_data_channel_handler.h" | 
|  |  | 
|  | #include "base/bind.h" | 
|  | #include "base/bind_helpers.h" | 
|  | #include "base/logging.h" | 
|  | #include "components/test_runner/web_test_delegate.h" | 
|  | #include "third_party/WebKit/public/platform/WebRTCDataChannelHandlerClient.h" | 
|  |  | 
|  | using namespace blink; | 
|  |  | 
|  | namespace test_runner { | 
|  |  | 
|  | MockWebRTCDataChannelHandler::MockWebRTCDataChannelHandler( | 
|  | WebString label, | 
|  | const WebRTCDataChannelInit& init, | 
|  | WebTestDelegate* delegate) | 
|  | : client_(0), | 
|  | label_(label), | 
|  | init_(init), | 
|  | delegate_(delegate), | 
|  | weak_factory_(this) { | 
|  | reliable_ = (init.ordered && init.maxRetransmits == -1 && | 
|  | init.maxRetransmitTime == -1); | 
|  | } | 
|  |  | 
|  | MockWebRTCDataChannelHandler::~MockWebRTCDataChannelHandler() {} | 
|  |  | 
|  | void MockWebRTCDataChannelHandler::setClient( | 
|  | WebRTCDataChannelHandlerClient* client) { | 
|  | client_ = client; | 
|  | if (client_) | 
|  | delegate_->PostTask( | 
|  | base::Bind(&MockWebRTCDataChannelHandler::ReportOpenedState, | 
|  | weak_factory_.GetWeakPtr())); | 
|  | } | 
|  |  | 
|  | blink::WebString MockWebRTCDataChannelHandler::label() { | 
|  | return label_; | 
|  | } | 
|  |  | 
|  | bool MockWebRTCDataChannelHandler::isReliable() { | 
|  | return reliable_; | 
|  | } | 
|  |  | 
|  | bool MockWebRTCDataChannelHandler::ordered() const { | 
|  | return init_.ordered; | 
|  | } | 
|  |  | 
|  | unsigned short MockWebRTCDataChannelHandler::maxRetransmitTime() const { | 
|  | return init_.maxRetransmitTime; | 
|  | } | 
|  |  | 
|  | unsigned short MockWebRTCDataChannelHandler::maxRetransmits() const { | 
|  | return init_.maxRetransmits; | 
|  | } | 
|  |  | 
|  | WebString MockWebRTCDataChannelHandler::protocol() const { | 
|  | return init_.protocol; | 
|  | } | 
|  |  | 
|  | bool MockWebRTCDataChannelHandler::negotiated() const { | 
|  | return init_.negotiated; | 
|  | } | 
|  |  | 
|  | unsigned short MockWebRTCDataChannelHandler::id() const { | 
|  | return init_.id; | 
|  | } | 
|  |  | 
|  | blink::WebRTCDataChannelHandlerClient::ReadyState | 
|  | MockWebRTCDataChannelHandler::state() const { | 
|  | return blink::WebRTCDataChannelHandlerClient::ReadyStateConnecting; | 
|  | } | 
|  |  | 
|  | unsigned long MockWebRTCDataChannelHandler::bufferedAmount() { | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | bool MockWebRTCDataChannelHandler::sendStringData(const WebString& data) { | 
|  | DCHECK(client_); | 
|  | client_->didReceiveStringData(data); | 
|  | return true; | 
|  | } | 
|  |  | 
|  | bool MockWebRTCDataChannelHandler::sendRawData(const char* data, size_t size) { | 
|  | DCHECK(client_); | 
|  | client_->didReceiveRawData(data, size); | 
|  | return true; | 
|  | } | 
|  |  | 
|  | void MockWebRTCDataChannelHandler::close() { | 
|  | DCHECK(client_); | 
|  | delegate_->PostTask( | 
|  | base::Bind(&MockWebRTCDataChannelHandler::ReportClosedState, | 
|  | weak_factory_.GetWeakPtr())); | 
|  | } | 
|  |  | 
|  | void MockWebRTCDataChannelHandler::ReportOpenedState() { | 
|  | client_->didChangeReadyState(WebRTCDataChannelHandlerClient::ReadyStateOpen); | 
|  | } | 
|  |  | 
|  | void MockWebRTCDataChannelHandler::ReportClosedState() { | 
|  | client_->didChangeReadyState( | 
|  | WebRTCDataChannelHandlerClient::ReadyStateClosed); | 
|  | } | 
|  |  | 
|  | }  // namespace test_runner |