Index: content/browser/renderer_host/media/webrtc_logging_handler_host.cc |
diff --git a/content/browser/renderer_host/media/webrtc_logging_handler_host.cc b/content/browser/renderer_host/media/webrtc_logging_handler_host.cc |
index 00d90fd8553091d344c3f8b298f4ef6c17b277b5..d92f6c2a60651f3b9ed5dcfb1762092fd91fb774 100644 |
--- a/content/browser/renderer_host/media/webrtc_logging_handler_host.cc |
+++ b/content/browser/renderer_host/media/webrtc_logging_handler_host.cc |
@@ -6,19 +6,28 @@ |
#include "base/bind.h" |
#include "base/logging.h" |
+#include "base/shared_memory.h" |
#include "content/common/media/webrtc_logging_messages.h" |
+#include "content/public/browser/browser_thread.h" |
+#include "content/public/browser/content_browser_client.h" |
namespace content { |
const size_t kWebRtcLogSize = 6 * 1024 * 1024; // 6 MB |
-WebRtcLoggingHandlerHost::WebRtcLoggingHandlerHost() { |
+WebRtcLoggingHandlerHost::WebRtcLoggingHandlerHost() |
+ : shared_memory_(NULL) { |
} |
WebRtcLoggingHandlerHost::~WebRtcLoggingHandlerHost() { |
+ // |shared_memory_| should normally have been handed to the upload manager |
+ // and thus be NULL now, see UploadLog. Delete it in case ownership hasn't |
+ // been passed on. |
+ delete shared_memory_; |
} |
void WebRtcLoggingHandlerHost::OnChannelClosing() { |
+ UploadLog(); |
BrowserMessageFilter::OnChannelClosing(); |
} |
@@ -40,16 +49,35 @@ bool WebRtcLoggingHandlerHost::OnMessageReceived(const IPC::Message& message, |
void WebRtcLoggingHandlerHost::OnOpenLog() { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- DCHECK(!base::SharedMemory::IsHandleValid(shared_memory_.handle())); |
- if (!shared_memory_.CreateAndMapAnonymous(kWebRtcLogSize)) { |
+ BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, base::Bind( |
+ &WebRtcLoggingHandlerHost::CheckLoggingAllowed, this)); |
+} |
+ |
+void WebRtcLoggingHandlerHost::CheckLoggingAllowed() { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ |
+ if (!GetContentClient()->browser()->IsWebRtcLoggingAllowed()) |
+ return; |
+ |
+ BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind( |
+ &WebRtcLoggingHandlerHost::DoOpenLog, this)); |
+} |
+ |
+void WebRtcLoggingHandlerHost::DoOpenLog() { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
+ DCHECK(!shared_memory_); |
+ |
+ shared_memory_ = new base::SharedMemory(); |
+ |
+ if (!shared_memory_->CreateAndMapAnonymous(kWebRtcLogSize)) { |
DLOG(ERROR) << "Failed to create shared memory."; |
Send(new WebRtcLoggingMsg_OpenLogFailed()); |
return; |
} |
base::SharedMemoryHandle foreign_memory_handle; |
- if (!shared_memory_.ShareToProcess(peer_handle(), |
+ if (!shared_memory_->ShareToProcess(peer_handle(), |
&foreign_memory_handle)) { |
Send(new WebRtcLoggingMsg_OpenLogFailed()); |
return; |
@@ -58,4 +86,17 @@ void WebRtcLoggingHandlerHost::OnOpenLog() { |
Send(new WebRtcLoggingMsg_LogOpened(foreign_memory_handle, kWebRtcLogSize)); |
} |
+void WebRtcLoggingHandlerHost::UploadLog() { |
+ if (!shared_memory_) |
+ return; |
+ |
+ BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, base::Bind( |
+ &ContentBrowserClient::UploadWebRtcLog, |
+ base::Unretained(GetContentClient()->browser()), |
+ shared_memory_, |
+ kWebRtcLogSize)); |
+ |
+ shared_memory_ = NULL; |
+} |
+ |
} // namespace content |