Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(660)

Unified Diff: content/renderer/media/rtc_dtmf_sender_handler.cc

Issue 699613002: Change DtmfSenderHandler to handle events on the signaling thread. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..315d1d727fddfe2175ca507ad1ec61b480ced453 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::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.
+ base::WeakPtr<RtcDtmfSenderHandler> handler_;
+};
+
RtcDtmfSenderHandler::RtcDtmfSenderHandler(DtmfSenderInterface* dtmf_sender)
: dtmf_sender_(dtmf_sender),
- webkit_client_(NULL) {
+ webkit_client_(NULL),
+ weak_factory_(this) {
DVLOG(1) << "::ctor";
- dtmf_sender_->RegisterObserver(this);
+ 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...
+ dtmf_sender_->RegisterObserver(observer_.get());
}
RtcDtmfSenderHandler::~RtcDtmfSenderHandler() {

Powered by Google App Engine
This is Rietveld 408576698