// 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 "content/browser/media/webrtc_internals_message_handler.h" #include "content/browser/media/webrtc_internals.h" #include "content/common/media/peer_connection_tracker_messages.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/render_process_host.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_ui.h" namespace content { WebRTCInternalsMessageHandler::WebRTCInternalsMessageHandler() { WebRTCInternals::GetInstance()->AddObserver(this); } WebRTCInternalsMessageHandler::~WebRTCInternalsMessageHandler() { WebRTCInternals::GetInstance()->RemoveObserver(this); } void WebRTCInternalsMessageHandler::RegisterMessages() { web_ui()->RegisterMessageCallback("getAllStats", base::Bind(&WebRTCInternalsMessageHandler::OnGetAllStats, base::Unretained(this))); web_ui()->RegisterMessageCallback("enableAecRecording", base::Bind(&WebRTCInternalsMessageHandler::OnSetAecRecordingEnabled, base::Unretained(this), true)); web_ui()->RegisterMessageCallback("disableAecRecording", base::Bind(&WebRTCInternalsMessageHandler::OnSetAecRecordingEnabled, base::Unretained(this), false)); web_ui()->RegisterMessageCallback("finishedDOMLoad", base::Bind(&WebRTCInternalsMessageHandler::OnDOMLoadDone, base::Unretained(this))); } void WebRTCInternalsMessageHandler::OnGetAllStats( const base::ListValue* /* unused_list */) { for (RenderProcessHost::iterator i( content::RenderProcessHost::AllHostsIterator()); !i.IsAtEnd(); i.Advance()) { i.GetCurrentValue()->Send(new PeerConnectionTracker_GetAllStats()); } } void WebRTCInternalsMessageHandler::OnSetAecRecordingEnabled( bool enable, const base::ListValue* /* unused_list */) { if (enable) WebRTCInternals::GetInstance()->EnableAecDump(web_ui()->GetWebContents()); else WebRTCInternals::GetInstance()->DisableAecDump(); } void WebRTCInternalsMessageHandler::OnDOMLoadDone( const base::ListValue* /* unused_list */) { WebRTCInternals::GetInstance()->UpdateObserver(this); if (WebRTCInternals::GetInstance()->aec_dump_enabled()) { std::vector args_vector; base::string16 script = WebUI::GetJavascriptCall("setAecRecordingEnabled", args_vector); RenderFrameHost* host = web_ui()->GetWebContents()->GetMainFrame(); if (host) host->ExecuteJavaScript(script); } } void WebRTCInternalsMessageHandler::OnUpdate(const std::string& command, const base::Value* args) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); std::vector args_vector; if (args) args_vector.push_back(args); base::string16 update = WebUI::GetJavascriptCall(command, args_vector); RenderFrameHost* host = web_ui()->GetWebContents()->GetMainFrame(); if (host) host->ExecuteJavaScript(update); } } // namespace content