| Index: content/shell/renderer/test_runner/mock_webrtc_peer_connection_handler.cc
|
| diff --git a/content/shell/renderer/test_runner/mock_webrtc_peer_connection_handler.cc b/content/shell/renderer/test_runner/mock_webrtc_peer_connection_handler.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c1cdee95ab81464f01fde43ea61d7494b844572f
|
| --- /dev/null
|
| +++ b/content/shell/renderer/test_runner/mock_webrtc_peer_connection_handler.cc
|
| @@ -0,0 +1,310 @@
|
| +// Copyright 2013 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 "content/shell/renderer/test_runner/mock_webrtc_peer_connection_handler.h"
|
| +
|
| +#include "content/shell/renderer/test_runner/TestInterfaces.h"
|
| +#include "content/shell/renderer/test_runner/WebTestDelegate.h"
|
| +#include "content/shell/renderer/test_runner/mock_constraints.h"
|
| +#include "content/shell/renderer/test_runner/mock_webrtc_data_channel_handler.h"
|
| +#include "content/shell/renderer/test_runner/mock_webrtc_dtmf_sender_handler.h"
|
| +#include "third_party/WebKit/public/platform/WebMediaConstraints.h"
|
| +#include "third_party/WebKit/public/platform/WebMediaStream.h"
|
| +#include "third_party/WebKit/public/platform/WebMediaStreamTrack.h"
|
| +#include "third_party/WebKit/public/platform/WebRTCDataChannelInit.h"
|
| +#include "third_party/WebKit/public/platform/WebRTCPeerConnectionHandlerClient.h"
|
| +#include "third_party/WebKit/public/platform/WebRTCStatsResponse.h"
|
| +#include "third_party/WebKit/public/platform/WebRTCVoidRequest.h"
|
| +#include "third_party/WebKit/public/platform/WebString.h"
|
| +#include "third_party/WebKit/public/platform/WebVector.h"
|
| +
|
| +using namespace blink;
|
| +
|
| +namespace content {
|
| +
|
| +class RTCSessionDescriptionRequestSuccededTask
|
| + : public WebMethodTask<MockWebRTCPeerConnectionHandler> {
|
| + public:
|
| + RTCSessionDescriptionRequestSuccededTask(
|
| + MockWebRTCPeerConnectionHandler* object,
|
| + const WebRTCSessionDescriptionRequest& request,
|
| + const WebRTCSessionDescription& result)
|
| + : WebMethodTask<MockWebRTCPeerConnectionHandler>(object),
|
| + request_(request),
|
| + result_(result) {}
|
| +
|
| + virtual void runIfValid() OVERRIDE { request_.requestSucceeded(result_); }
|
| +
|
| + private:
|
| + WebRTCSessionDescriptionRequest request_;
|
| + WebRTCSessionDescription result_;
|
| +};
|
| +
|
| +class RTCSessionDescriptionRequestFailedTask
|
| + : public WebMethodTask<MockWebRTCPeerConnectionHandler> {
|
| + public:
|
| + RTCSessionDescriptionRequestFailedTask(
|
| + MockWebRTCPeerConnectionHandler* object,
|
| + const WebRTCSessionDescriptionRequest& request)
|
| + : WebMethodTask<MockWebRTCPeerConnectionHandler>(object),
|
| + request_(request) {}
|
| +
|
| + virtual void runIfValid() OVERRIDE { request_.requestFailed("TEST_ERROR"); }
|
| +
|
| + private:
|
| + WebRTCSessionDescriptionRequest request_;
|
| +};
|
| +
|
| +class RTCStatsRequestSucceededTask
|
| + : public WebMethodTask<MockWebRTCPeerConnectionHandler> {
|
| + public:
|
| + RTCStatsRequestSucceededTask(MockWebRTCPeerConnectionHandler* object,
|
| + const blink::WebRTCStatsRequest& request,
|
| + const blink::WebRTCStatsResponse& response)
|
| + : WebMethodTask<MockWebRTCPeerConnectionHandler>(object),
|
| + request_(request),
|
| + response_(response) {}
|
| +
|
| + virtual void runIfValid() OVERRIDE { request_.requestSucceeded(response_); }
|
| +
|
| + private:
|
| + blink::WebRTCStatsRequest request_;
|
| + blink::WebRTCStatsResponse response_;
|
| +};
|
| +
|
| +class RTCVoidRequestTask
|
| + : public WebMethodTask<MockWebRTCPeerConnectionHandler> {
|
| + public:
|
| + RTCVoidRequestTask(MockWebRTCPeerConnectionHandler* object,
|
| + const WebRTCVoidRequest& request,
|
| + bool succeeded)
|
| + : WebMethodTask<MockWebRTCPeerConnectionHandler>(object),
|
| + request_(request),
|
| + succeeded_(succeeded) {}
|
| +
|
| + virtual void runIfValid() OVERRIDE {
|
| + if (succeeded_)
|
| + request_.requestSucceeded();
|
| + else
|
| + request_.requestFailed("TEST_ERROR");
|
| + }
|
| +
|
| + private:
|
| + WebRTCVoidRequest request_;
|
| + bool succeeded_;
|
| +};
|
| +
|
| +class RTCPeerConnectionStateTask
|
| + : public WebMethodTask<MockWebRTCPeerConnectionHandler> {
|
| + public:
|
| + RTCPeerConnectionStateTask(
|
| + MockWebRTCPeerConnectionHandler* object,
|
| + WebRTCPeerConnectionHandlerClient* client,
|
| + WebRTCPeerConnectionHandlerClient::ICEConnectionState connection_state,
|
| + WebRTCPeerConnectionHandlerClient::ICEGatheringState gathering_state)
|
| + : WebMethodTask<MockWebRTCPeerConnectionHandler>(object),
|
| + client_(client),
|
| + connection_state_(connection_state),
|
| + gathering_state_(gathering_state) {}
|
| +
|
| + virtual void runIfValid() OVERRIDE {
|
| + client_->didChangeICEGatheringState(gathering_state_);
|
| + client_->didChangeICEConnectionState(connection_state_);
|
| + }
|
| +
|
| + private:
|
| + WebRTCPeerConnectionHandlerClient* client_;
|
| + WebRTCPeerConnectionHandlerClient::ICEConnectionState connection_state_;
|
| + WebRTCPeerConnectionHandlerClient::ICEGatheringState gathering_state_;
|
| +};
|
| +
|
| +class RemoteDataChannelTask
|
| + : public WebMethodTask<MockWebRTCPeerConnectionHandler> {
|
| + public:
|
| + RemoteDataChannelTask(MockWebRTCPeerConnectionHandler* object,
|
| + WebRTCPeerConnectionHandlerClient* client,
|
| + WebTestDelegate* delegate)
|
| + : WebMethodTask<MockWebRTCPeerConnectionHandler>(object),
|
| + client_(client),
|
| + delegate_(delegate) {}
|
| +
|
| + virtual void runIfValid() OVERRIDE {
|
| + WebRTCDataChannelInit init;
|
| + WebRTCDataChannelHandler* remote_data_channel =
|
| + new MockWebRTCDataChannelHandler(
|
| + "MockRemoteDataChannel", init, delegate_);
|
| + client_->didAddRemoteDataChannel(remote_data_channel);
|
| + }
|
| +
|
| + private:
|
| + WebRTCPeerConnectionHandlerClient* client_;
|
| + WebTestDelegate* delegate_;
|
| +};
|
| +
|
| +/////////////////////
|
| +
|
| +MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler() {
|
| +}
|
| +
|
| +MockWebRTCPeerConnectionHandler::MockWebRTCPeerConnectionHandler(
|
| + WebRTCPeerConnectionHandlerClient* client,
|
| + TestInterfaces* interfaces)
|
| + : client_(client),
|
| + stopped_(false),
|
| + stream_count_(0),
|
| + interfaces_(interfaces) {
|
| +}
|
| +
|
| +bool MockWebRTCPeerConnectionHandler::initialize(
|
| + const WebRTCConfiguration& configuration,
|
| + const WebMediaConstraints& constraints) {
|
| + if (MockConstraints::VerifyConstraints(constraints)) {
|
| + interfaces_->delegate()->postTask(new RTCPeerConnectionStateTask(
|
| + this,
|
| + client_,
|
| + WebRTCPeerConnectionHandlerClient::ICEConnectionStateCompleted,
|
| + WebRTCPeerConnectionHandlerClient::ICEGatheringStateComplete));
|
| + return true;
|
| + }
|
| +
|
| + return false;
|
| +}
|
| +
|
| +void MockWebRTCPeerConnectionHandler::createOffer(
|
| + const WebRTCSessionDescriptionRequest& request,
|
| + const WebMediaConstraints& constraints) {
|
| + WebString should_succeed;
|
| + if (constraints.getMandatoryConstraintValue("succeed", should_succeed) &&
|
| + should_succeed == "true") {
|
| + WebRTCSessionDescription session_description;
|
| + session_description.initialize("offer", "local");
|
| + interfaces_->delegate()->postTask(
|
| + new RTCSessionDescriptionRequestSuccededTask(
|
| + this, request, session_description));
|
| + } else
|
| + interfaces_->delegate()->postTask(
|
| + new RTCSessionDescriptionRequestFailedTask(this, request));
|
| +}
|
| +
|
| +void MockWebRTCPeerConnectionHandler::createAnswer(
|
| + const WebRTCSessionDescriptionRequest& request,
|
| + const WebMediaConstraints& constraints) {
|
| + if (!remote_description_.isNull()) {
|
| + WebRTCSessionDescription session_description;
|
| + session_description.initialize("answer", "local");
|
| + interfaces_->delegate()->postTask(
|
| + new RTCSessionDescriptionRequestSuccededTask(
|
| + this, request, session_description));
|
| + } else
|
| + interfaces_->delegate()->postTask(
|
| + new RTCSessionDescriptionRequestFailedTask(this, request));
|
| +}
|
| +
|
| +void MockWebRTCPeerConnectionHandler::setLocalDescription(
|
| + const WebRTCVoidRequest& request,
|
| + const WebRTCSessionDescription& local_description) {
|
| + if (!local_description.isNull() && local_description.sdp() == "local") {
|
| + local_description_ = local_description;
|
| + interfaces_->delegate()->postTask(
|
| + new RTCVoidRequestTask(this, request, true));
|
| + } else
|
| + interfaces_->delegate()->postTask(
|
| + new RTCVoidRequestTask(this, request, false));
|
| +}
|
| +
|
| +void MockWebRTCPeerConnectionHandler::setRemoteDescription(
|
| + const WebRTCVoidRequest& request,
|
| + const WebRTCSessionDescription& remote_description) {
|
| + if (!remote_description.isNull() && remote_description.sdp() == "remote") {
|
| + remote_description_ = remote_description;
|
| + interfaces_->delegate()->postTask(
|
| + new RTCVoidRequestTask(this, request, true));
|
| + } else
|
| + interfaces_->delegate()->postTask(
|
| + new RTCVoidRequestTask(this, request, false));
|
| +}
|
| +
|
| +WebRTCSessionDescription MockWebRTCPeerConnectionHandler::localDescription() {
|
| + return local_description_;
|
| +}
|
| +
|
| +WebRTCSessionDescription MockWebRTCPeerConnectionHandler::remoteDescription() {
|
| + return remote_description_;
|
| +}
|
| +
|
| +bool MockWebRTCPeerConnectionHandler::updateICE(
|
| + const WebRTCConfiguration& configuration,
|
| + const WebMediaConstraints& constraints) {
|
| + return true;
|
| +}
|
| +
|
| +bool MockWebRTCPeerConnectionHandler::addICECandidate(
|
| + const WebRTCICECandidate& ice_candidate) {
|
| + client_->didGenerateICECandidate(ice_candidate);
|
| + return true;
|
| +}
|
| +
|
| +bool MockWebRTCPeerConnectionHandler::addICECandidate(
|
| + const WebRTCVoidRequest& request,
|
| + const WebRTCICECandidate& ice_candidate) {
|
| + interfaces_->delegate()->postTask(
|
| + new RTCVoidRequestTask(this, request, true));
|
| + return true;
|
| +}
|
| +
|
| +bool MockWebRTCPeerConnectionHandler::addStream(
|
| + const WebMediaStream& stream,
|
| + const WebMediaConstraints& constraints) {
|
| + ++stream_count_;
|
| + client_->negotiationNeeded();
|
| + return true;
|
| +}
|
| +
|
| +void MockWebRTCPeerConnectionHandler::removeStream(
|
| + const WebMediaStream& stream) {
|
| + --stream_count_;
|
| + client_->negotiationNeeded();
|
| +}
|
| +
|
| +void MockWebRTCPeerConnectionHandler::getStats(
|
| + const WebRTCStatsRequest& request) {
|
| + WebRTCStatsResponse response = request.createResponse();
|
| + double current_date = interfaces_->delegate()->getCurrentTimeInMillisecond();
|
| + if (request.hasSelector()) {
|
| + // FIXME: There is no check that the fetched values are valid.
|
| + size_t report_index =
|
| + response.addReport("Mock video", "ssrc", current_date);
|
| + response.addStatistic(report_index, "type", "video");
|
| + } else {
|
| + for (int i = 0; i < stream_count_; ++i) {
|
| + size_t report_index =
|
| + response.addReport("Mock audio", "ssrc", current_date);
|
| + response.addStatistic(report_index, "type", "audio");
|
| + report_index = response.addReport("Mock video", "ssrc", current_date);
|
| + response.addStatistic(report_index, "type", "video");
|
| + }
|
| + }
|
| + interfaces_->delegate()->postTask(
|
| + new RTCStatsRequestSucceededTask(this, request, response));
|
| +}
|
| +
|
| +WebRTCDataChannelHandler* MockWebRTCPeerConnectionHandler::createDataChannel(
|
| + const WebString& label,
|
| + const blink::WebRTCDataChannelInit& init) {
|
| + interfaces_->delegate()->postTask(
|
| + new RemoteDataChannelTask(this, client_, interfaces_->delegate()));
|
| +
|
| + return new MockWebRTCDataChannelHandler(label, init, interfaces_->delegate());
|
| +}
|
| +
|
| +WebRTCDTMFSenderHandler* MockWebRTCPeerConnectionHandler::createDTMFSender(
|
| + const WebMediaStreamTrack& track) {
|
| + return new MockWebRTCDTMFSenderHandler(track, interfaces_->delegate());
|
| +}
|
| +
|
| +void MockWebRTCPeerConnectionHandler::stop() {
|
| + stopped_ = true;
|
| +}
|
| +
|
| +} // namespace content
|
|
|