Index: chrome/browser/ui/webui/media/webrtc_internals_proxy.cc |
diff --git a/chrome/browser/ui/webui/media/webrtc_internals_proxy.cc b/chrome/browser/ui/webui/media/webrtc_internals_proxy.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a48a7acc08155883d178b6a3c26231b109818f0f |
--- /dev/null |
+++ b/chrome/browser/ui/webui/media/webrtc_internals_proxy.cc |
@@ -0,0 +1,63 @@ |
+// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/ui/webui/media/webrtc_internals_proxy.h" |
+ |
+#include "chrome/browser/browser_process.h" |
+#include "chrome/browser/media/webrtc_internals.h" |
+#include "chrome/browser/ui/webui/media/webrtc_internals_message_handler.h" |
+#include "content/public/browser/web_ui.h" |
+ |
+using content::BrowserThread; |
+using media::WebRTCInternals; |
+ |
+WebRTCInternalsProxy::WebRTCInternalsProxy() {} |
+ |
+void WebRTCInternalsProxy::OnUpdate(const std::string& command, |
+ const base::Value* args) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
+ std::vector<const Value*> args_vector; |
+ args_vector.push_back(args); |
+ string16 update = content::WebUI::GetJavascriptCall(command, args_vector); |
+ |
+ BrowserThread::PostTask( |
+ BrowserThread::UI, FROM_HERE, |
+ base::Bind(&WebRTCInternalsProxy::UpdateOnUIThread, this, update)); |
+} |
+ |
+void WebRTCInternalsProxy::Attach(WebRTCInternalsMessageHandler* handler) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ handler_ = handler; |
+ BrowserThread::PostTask( |
+ BrowserThread::IO, FROM_HERE, |
+ base::Bind(&WebRTCInternalsProxy::ObserveWebRTCInternalsOnIOThread, |
+ this)); |
+} |
+ |
+void WebRTCInternalsProxy::Detach() { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ handler_ = NULL; |
+ BrowserThread::PostTask( |
+ BrowserThread::IO, FROM_HERE, |
+ base::Bind( |
+ &WebRTCInternalsProxy::StopObservingWebRTCInternalsOnIOThread, this)); |
+} |
+ |
+WebRTCInternalsProxy::~WebRTCInternalsProxy() {} |
+ |
+void WebRTCInternalsProxy::ObserveWebRTCInternalsOnIOThread() { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
+ WebRTCInternals::GetInstance()->AddObserver(this); |
+} |
+ |
+void WebRTCInternalsProxy::StopObservingWebRTCInternalsOnIOThread() { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
+ WebRTCInternals::GetInstance()->RemoveObserver(this); |
+} |
+ |
+void WebRTCInternalsProxy::UpdateOnUIThread(const string16& update) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ if (handler_) |
+ handler_->OnUpdate(update); |
+} |