Chromium Code Reviews| 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 |