| Index: content/renderer/media/rtc_dtmf_sender_handler.cc
|
| diff --git a/content/renderer/media/rtc_dtmf_sender_handler.cc b/content/renderer/media/rtc_dtmf_sender_handler.cc
|
| index 23c5cc18f88b3e30d351243cd4aaf60329eba8ba..3aea3d15fe0544e435915f10f8f626e51777f246 100644
|
| --- a/content/renderer/media/rtc_dtmf_sender_handler.cc
|
| +++ b/content/renderer/media/rtc_dtmf_sender_handler.cc
|
| @@ -6,18 +6,53 @@
|
|
|
| #include <string>
|
|
|
| +#include "base/bind.h"
|
| +#include "base/location.h"
|
| #include "base/logging.h"
|
| +#include "base/message_loop/message_loop_proxy.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| +#include "base/threading/thread_checker.h"
|
|
|
| using webrtc::DtmfSenderInterface;
|
|
|
| namespace content {
|
|
|
| +class RtcDtmfSenderHandler::Observer :
|
| + public base::RefCountedThreadSafe<Observer>,
|
| + public webrtc::DtmfSenderObserverInterface {
|
| + public:
|
| + explicit Observer(const base::WeakPtr<RtcDtmfSenderHandler>& handler)
|
| + : main_thread_(base::MessageLoopProxy::current()), handler_(handler) {}
|
| +
|
| + private:
|
| + friend class base::RefCountedThreadSafe<Observer>;
|
| +
|
| + ~Observer() override {}
|
| +
|
| + void OnToneChange(const std::string& tone) override {
|
| + main_thread_->PostTask(FROM_HERE,
|
| + base::Bind(&RtcDtmfSenderHandler::Observer::OnToneChangeOnMainThread,
|
| + this, tone));
|
| + }
|
| +
|
| + void OnToneChangeOnMainThread(const std::string& tone) {
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| + if (handler_)
|
| + handler_->OnToneChange(tone);
|
| + }
|
| +
|
| + base::ThreadChecker thread_checker_;
|
| + const scoped_refptr<base::SingleThreadTaskRunner> main_thread_;
|
| + base::WeakPtr<RtcDtmfSenderHandler> handler_;
|
| +};
|
| +
|
| RtcDtmfSenderHandler::RtcDtmfSenderHandler(DtmfSenderInterface* dtmf_sender)
|
| : dtmf_sender_(dtmf_sender),
|
| - webkit_client_(NULL) {
|
| + webkit_client_(NULL),
|
| + weak_factory_(this),
|
| + observer_(new Observer(weak_factory_.GetWeakPtr())) {
|
| DVLOG(1) << "::ctor";
|
| - dtmf_sender_->RegisterObserver(this);
|
| + dtmf_sender_->RegisterObserver(observer_.get());
|
| }
|
|
|
| RtcDtmfSenderHandler::~RtcDtmfSenderHandler() {
|
|
|