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

Side by Side 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 unified diff | Download patch
OLDNEW
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698