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

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: Fix Android build. 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..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() {
« no previous file with comments | « content/renderer/media/rtc_dtmf_sender_handler.h ('k') | content/renderer/media/webrtc/media_stream_remote_video_source.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698