OLD | NEW |
---|---|
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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/renderer/media/rtc_dtmf_sender_handler.h" | 5 #include "content/renderer/media/rtc_dtmf_sender_handler.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/bind.h" | |
10 #include "base/location.h" | |
9 #include "base/logging.h" | 11 #include "base/logging.h" |
12 #include "base/message_loop/message_loop_proxy.h" | |
10 #include "base/strings/utf_string_conversions.h" | 13 #include "base/strings/utf_string_conversions.h" |
14 #include "base/threading/thread_checker.h" | |
11 | 15 |
12 using webrtc::DtmfSenderInterface; | 16 using webrtc::DtmfSenderInterface; |
13 | 17 |
14 namespace content { | 18 namespace content { |
15 | 19 |
20 class RtcDtmfSenderHandler::Observer : | |
21 public base::RefCountedThreadSafe<Observer>, | |
22 public webrtc::DtmfSenderObserverInterface { | |
23 public: | |
24 explicit Observer(const base::WeakPtr<RtcDtmfSenderHandler>& handler) | |
25 : main_thread_(base::MessageLoopProxy::current()), handler_(handler) {} | |
26 | |
27 private: | |
28 friend class base::RefCountedThreadSafe<Observer>; | |
29 | |
30 ~Observer() override {} | |
31 | |
32 void OnToneChange(const std::string& tone) override { | |
33 main_thread_->PostTask(FROM_HERE, | |
34 base::Bind(&RtcDtmfSenderHandler::Observer::OnToneChangeOnMainThread, | |
35 this, tone)); | |
36 } | |
37 | |
38 void OnToneChangeOnMainThread(const std::string& tone) { | |
39 DCHECK(thread_checker_.CalledOnValidThread()); | |
40 if (handler_) | |
41 handler_->OnToneChange(tone); | |
42 } | |
43 | |
44 base::ThreadChecker thread_checker_; | |
45 const scoped_refptr<base::MessageLoopProxy> main_thread_; | |
tommi (sloooow) - chröme
2014/11/03 13:49:56
const scoped_refptr<base::SingleThreadTaskRunner>
perkj_chrome
2014/11/03 14:53:33
Done.
| |
46 base::WeakPtr<RtcDtmfSenderHandler> handler_; | |
47 }; | |
48 | |
16 RtcDtmfSenderHandler::RtcDtmfSenderHandler(DtmfSenderInterface* dtmf_sender) | 49 RtcDtmfSenderHandler::RtcDtmfSenderHandler(DtmfSenderInterface* dtmf_sender) |
17 : dtmf_sender_(dtmf_sender), | 50 : dtmf_sender_(dtmf_sender), |
18 webkit_client_(NULL) { | 51 webkit_client_(NULL), |
52 weak_factory_(this) { | |
19 DVLOG(1) << "::ctor"; | 53 DVLOG(1) << "::ctor"; |
20 dtmf_sender_->RegisterObserver(this); | 54 observer_ = new Observer(weak_factory_.GetWeakPtr()); |
tommi (sloooow) - chröme
2014/11/03 13:49:56
nit: initializer list? (should be ok as long as it
perkj_chrome
2014/11/03 14:53:33
Done.
dmichael (off chromium)
2014/12/04 19:28:46
WeakPtrFactory should always be the last member...
| |
55 dtmf_sender_->RegisterObserver(observer_.get()); | |
21 } | 56 } |
22 | 57 |
23 RtcDtmfSenderHandler::~RtcDtmfSenderHandler() { | 58 RtcDtmfSenderHandler::~RtcDtmfSenderHandler() { |
24 DVLOG(1) << "::dtor"; | 59 DVLOG(1) << "::dtor"; |
25 dtmf_sender_->UnregisterObserver(); | 60 dtmf_sender_->UnregisterObserver(); |
26 } | 61 } |
27 | 62 |
28 void RtcDtmfSenderHandler::setClient( | 63 void RtcDtmfSenderHandler::setClient( |
29 blink::WebRTCDTMFSenderHandlerClient* client) { | 64 blink::WebRTCDTMFSenderHandlerClient* client) { |
30 webkit_client_ = client; | 65 webkit_client_ = client; |
(...skipping 18 matching lines...) Expand all Loading... | |
49 void RtcDtmfSenderHandler::OnToneChange(const std::string& tone) { | 84 void RtcDtmfSenderHandler::OnToneChange(const std::string& tone) { |
50 if (!webkit_client_) { | 85 if (!webkit_client_) { |
51 LOG(ERROR) << "WebRTCDTMFSenderHandlerClient not set."; | 86 LOG(ERROR) << "WebRTCDTMFSenderHandlerClient not set."; |
52 return; | 87 return; |
53 } | 88 } |
54 webkit_client_->didPlayTone(base::UTF8ToUTF16(tone)); | 89 webkit_client_->didPlayTone(base::UTF8ToUTF16(tone)); |
55 } | 90 } |
56 | 91 |
57 } // namespace content | 92 } // namespace content |
58 | 93 |
OLD | NEW |