• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/WebTestDelegate.h"
9 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
10 #include "third_party/WebKit/public/platform/WebRTCDTMFSenderHandlerClient.h"
11 
12 using namespace blink;
13 
14 namespace content {
15 
16 class DTMFSenderToneTask : public WebMethodTask<MockWebRTCDTMFSenderHandler> {
17  public:
DTMFSenderToneTask(MockWebRTCDTMFSenderHandler * object,WebRTCDTMFSenderHandlerClient * client)18   DTMFSenderToneTask(MockWebRTCDTMFSenderHandler* object,
19                      WebRTCDTMFSenderHandlerClient* client)
20       : WebMethodTask<MockWebRTCDTMFSenderHandler>(object), client_(client) {}
21 
runIfValid()22   virtual void runIfValid() OVERRIDE {
23     WebString tones = m_object->currentToneBuffer();
24     m_object->ClearToneBuffer();
25     client_->didPlayTone(tones);
26   }
27 
28  private:
29   WebRTCDTMFSenderHandlerClient* client_;
30 };
31 
32 /////////////////////
33 
MockWebRTCDTMFSenderHandler(const WebMediaStreamTrack & track,WebTestDelegate * delegate)34 MockWebRTCDTMFSenderHandler::MockWebRTCDTMFSenderHandler(
35     const WebMediaStreamTrack& track,
36     WebTestDelegate* delegate)
37     : client_(0), track_(track), delegate_(delegate) {
38 }
39 
setClient(WebRTCDTMFSenderHandlerClient * client)40 void MockWebRTCDTMFSenderHandler::setClient(
41     WebRTCDTMFSenderHandlerClient* client) {
42   client_ = client;
43 }
44 
currentToneBuffer()45 WebString MockWebRTCDTMFSenderHandler::currentToneBuffer() {
46   return tone_buffer_;
47 }
48 
canInsertDTMF()49 bool 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 
insertDTMF(const WebString & tones,long duration,long inter_tone_gap)56 bool 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