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

Unified Diff: content/browser/renderer_host/webrtc_logging_handler_host.cc

Issue 14329020: Implementing uploading of a WebRTC diagnostic log. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed pre-submit warnings/errors (including adding bzip2 to content/browser DEPS). Created 7 years, 8 months 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/browser/renderer_host/webrtc_logging_handler_host.cc
diff --git a/content/browser/renderer_host/webrtc_logging_handler_host.cc b/content/browser/renderer_host/webrtc_logging_handler_host.cc
index 4e213c4b61707fe71b06460f74777c0dc97deb72..8a881c62408ffeb8a38a97449a51c44cfb0084dd 100644
--- a/content/browser/renderer_host/webrtc_logging_handler_host.cc
+++ b/content/browser/renderer_host/webrtc_logging_handler_host.cc
@@ -6,19 +6,29 @@
#include "base/bind.h"
#include "base/logging.h"
+#include "base/shared_memory.h"
+#include "content/browser/webrtc_log_manager.h"
#include "content/common/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),
+ log_file_compressed_(base::kInvalidPlatformFileValue) {
}
WebRtcLoggingHandlerHost::~WebRtcLoggingHandlerHost() {
+ // |shared_memory_| should have been handed to upload manager (and NULL here).
+ // Delete it in case it wasn't.
+ delete shared_memory_;
}
void WebRtcLoggingHandlerHost::OnChannelClosing() {
+ UploadLog();
BrowserMessageFilter::OnChannelClosing();
}
@@ -40,16 +50,39 @@ bool WebRtcLoggingHandlerHost::OnMessageReceived(const IPC::Message& message,
void WebRtcLoggingHandlerHost::OnOpenLog() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- DCHECK(!base::SharedMemory::IsHandleValid(shared_memory_.handle()));
+ DCHECK(!shared_memory_);
+ DCHECK(log_file_compressed_ == base::kInvalidPlatformFileValue);
- if (!shared_memory_.CreateAndMapAnonymous(kWebRtcLogSize)) {
+ BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, base::Bind(
+ &WebRtcLoggingHandlerHost::CreateWebRtcLogFile, this));
+}
+
+void WebRtcLoggingHandlerHost::CreateWebRtcLogFile() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
+
+ // TODO(grunell): Maybe go through the log manager and have that keep track
+ // of maximum number of logs?
+ log_file_compressed_ = GetContentClient()->browser()->CreateWebRtcLogFile();
+ if (log_file_compressed_ == base::kInvalidPlatformFileValue)
+ return;
+
+ BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind(
+ &WebRtcLoggingHandlerHost::FinishOpenLog, this));
+}
+
+void WebRtcLoggingHandlerHost::FinishOpenLog() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
+
+ 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 +91,47 @@ void WebRtcLoggingHandlerHost::OnOpenLog() {
Send(new WebRtcLoggingMsg_LogOpened(foreign_memory_handle, kWebRtcLogSize));
}
+bool WebRtcLoggingHandlerHost::IsUploadingEnabled() {
+ // TODO(grunell): Move to chrome.
Jói 2013/05/02 16:47:31 Do you really want to move this fully to the embed
Henrik Grunell 2013/05/03 07:59:36 I've done some more changes/refactoring and cleani
+ /*
+ // If the user permits metrics reporting / crash uploading with the checkbox
+ // in the prefs, we allow uploading automatically. We disable uploading
+ // completely for non-official builds. This can be forced with a flag.
+ const CommandLine* command_line = CommandLine::ForCurrentProcess();
+ if (command_line->HasSwitch(switches::kEnableMetricsReportingForTesting))
+ return true;
+
+ bool enabled = false;
+
+#if defined(GOOGLE_CHROME_BUILD)
+#if defined(OS_CHROMEOS)
+ chromeos::CrosSettings::Get()->GetBoolean(chromeos::kStatsReportingPref,
+ &enabled);
+#else
+ // TODO(grunell): Fails, has to be on UI thread.
+ enabled = g_browser_process->local_state()->GetBoolean(
+ prefs::kMetricsReportingEnabled);
+#endif // #if defined(OS_CHROMEOS)
+#endif // defined(GOOGLE_CHROME_BUILD)
+
+ return enabled;
+ */
+ return true;
+}
+
+void WebRtcLoggingHandlerHost::UploadLog() {
+ // Check if logging has been enabled.
+ if (!shared_memory_)
+ return;
+
+ BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, base::Bind(
+ &WebRtcLogManager::UploadLog,
+ base::Unretained(WebRtcLogManager::GetInstance()),
+ shared_memory_,
+ kWebRtcLogSize,
+ log_file_compressed_));
+
+ shared_memory_ = NULL;
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698