1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "content/shell/renderer/test_runner/mock_webrtc_dtmf_sender_handler.h"
6
7#include "base/logging.h"
8#include "content/shell/renderer/test_runner/web_test_delegate.h"
9#include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
10#include "third_party/WebKit/public/platform/WebRTCDTMFSenderHandlerClient.h"
11
12using namespace blink;
13
14namespace content {
15
16class DTMFSenderToneTask : public WebMethodTask<MockWebRTCDTMFSenderHandler> {
17 public:
18  DTMFSenderToneTask(MockWebRTCDTMFSenderHandler* object,
19                     WebRTCDTMFSenderHandlerClient* client)
20      : WebMethodTask<MockWebRTCDTMFSenderHandler>(object), client_(client) {}
21
22  virtual void RunIfValid() OVERRIDE {
23    WebString tones = object_->currentToneBuffer();
24    object_->ClearToneBuffer();
25    client_->didPlayTone(tones);
26  }
27
28 private:
29  WebRTCDTMFSenderHandlerClient* client_;
30};
31
32/////////////////////
33
34MockWebRTCDTMFSenderHandler::MockWebRTCDTMFSenderHandler(
35    const WebMediaStreamTrack& track,
36    WebTestDelegate* delegate)
37    : client_(0), track_(track), delegate_(delegate) {
38}
39
40void MockWebRTCDTMFSenderHandler::setClient(
41    WebRTCDTMFSenderHandlerClient* client) {
42  client_ = client;
43}
44
45WebString MockWebRTCDTMFSenderHandler::currentToneBuffer() {
46  return tone_buffer_;
47}
48
49bool MockWebRTCDTMFSenderHandler::canInsertDTMF() {
50  DCHECK(client_ && !track_.isNull());
51  return track_.source().type() == WebMediaStreamSource::TypeAudio &&
52         track_.isEnabled() &&
53         track_.source().readyState() == WebMediaStreamSource::ReadyStateLive;
54}
55
56bool MockWebRTCDTMFSenderHandler::insertDTMF(const WebString& tones,
57                                             long duration,
58                                             long inter_tone_gap) {
59  DCHECK(client_);
60  if (!canInsertDTMF())
61    return false;
62
63  tone_buffer_ = tones;
64  delegate_->PostTask(new DTMFSenderToneTask(this, client_));
65  delegate_->PostTask(new DTMFSenderToneTask(this, client_));
66  return true;
67}
68
69}  // namespace content
70