Index: chrome/renderer/media/webrtc_logging_handler_impl.cc |
diff --git a/chrome/renderer/media/webrtc_logging_handler_impl.cc b/chrome/renderer/media/webrtc_logging_handler_impl.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e1a452247a7b5076f70b30d84439a7ec38e14a04 |
--- /dev/null |
+++ b/chrome/renderer/media/webrtc_logging_handler_impl.cc |
@@ -0,0 +1,88 @@ |
+// 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/renderer/media/webrtc_logging_handler_impl.h" |
+ |
+#include "base/logging.h" |
+#include "base/message_loop_proxy.h" |
+#include "chrome/common/partial_circular_buffer.h" |
+#include "chrome/renderer/media/webrtc_logging_message_filter.h" |
+#include "content/public/renderer/webrtc_logging_initializer.h" |
+ |
+namespace chrome { |
+ |
+WebRtcLoggingHandlerImpl::WebRtcLoggingHandlerImpl( |
+ const scoped_refptr<base::MessageLoopProxy>& io_message_loop, |
+ WebRtcLoggingMessageFilter* message_filter) |
+ : io_message_loop_(io_message_loop), |
+ message_filter_(message_filter), |
+ log_initialized_(false) { |
+ content::InitWebRtcLoggingDelegate(this); |
+} |
+ |
+WebRtcLoggingHandlerImpl::~WebRtcLoggingHandlerImpl() { |
+ DCHECK(io_message_loop_->BelongsToCurrentThread()); |
+} |
+ |
+void WebRtcLoggingHandlerImpl::InitLogging(const std::string& app_session_id, |
+ const std::string& app_url) { |
+ if (!io_message_loop_->BelongsToCurrentThread()) { |
+ io_message_loop_->PostTask( |
+ FROM_HERE, base::Bind( |
+ &WebRtcLoggingHandlerImpl::InitLogging, |
+ base::Unretained(this), |
+ app_session_id, |
+ app_url)); |
+ return; |
+ } |
+ |
+ if (!log_initialized_) { |
+ log_initialized_ = true; |
+ message_filter_->InitLogging(app_session_id); |
+ } |
+} |
+ |
+void WebRtcLoggingHandlerImpl::LogMessage(const std::string& message) { |
+ if (!io_message_loop_->BelongsToCurrentThread()) { |
+ io_message_loop_->PostTask( |
+ FROM_HERE, base::Bind( |
+ &WebRtcLoggingHandlerImpl::LogMessage, |
+ base::Unretained(this), |
+ message)); |
+ return; |
+ } |
+ |
+ if (circular_buffer_) { |
+ circular_buffer_->Write(message.c_str(), message.length()); |
+ const char eol = '\n'; |
+ circular_buffer_->Write(&eol, 1); |
+ } |
+} |
+ |
+void WebRtcLoggingHandlerImpl::OnFilterRemoved() { |
+ DCHECK(io_message_loop_->BelongsToCurrentThread()); |
+ message_filter_ = NULL; |
+} |
+ |
+void WebRtcLoggingHandlerImpl::OnLogOpened( |
+ base::SharedMemoryHandle handle, |
+ uint32 length) { |
+ DCHECK(io_message_loop_->BelongsToCurrentThread()); |
+ |
+ shared_memory_.reset(new base::SharedMemory(handle, false)); |
+ CHECK(shared_memory_->Map(length)); |
+ circular_buffer_.reset( |
+ new chrome::PartialCircularBuffer(shared_memory_->memory(), |
+ length, |
+ length / 2)); |
+} |
+ |
+void WebRtcLoggingHandlerImpl::OnOpenLogFailed() { |
+ DCHECK(io_message_loop_->BelongsToCurrentThread()); |
+ DLOG(ERROR) << "Could not open log."; |
+ // TODO(grunell): Implement. |
Jói
2013/05/27 17:50:03
Is this not needed for the current change?
Henrik Grunell
2013/05/28 06:04:30
No it isn't.
|
+ NOTIMPLEMENTED(); |
+} |
+ |
+} // namespace chrome |