Index: chrome/browser/media/webrtc_logging_handler_host.h |
diff --git a/chrome/browser/media/webrtc_logging_handler_host.h b/chrome/browser/media/webrtc_logging_handler_host.h |
deleted file mode 100644 |
index f55ee84bf8aa7a7603f2f82335e3b1c8a5a424c2..0000000000000000000000000000000000000000 |
--- a/chrome/browser/media/webrtc_logging_handler_host.h |
+++ /dev/null |
@@ -1,298 +0,0 @@ |
-// Copyright 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. |
- |
-#ifndef CHROME_BROWSER_MEDIA_WEBRTC_LOGGING_HANDLER_HOST_H_ |
-#define CHROME_BROWSER_MEDIA_WEBRTC_LOGGING_HANDLER_HOST_H_ |
- |
-#include <stddef.h> |
-#include <stdint.h> |
- |
-#include <map> |
-#include <string> |
-#include <vector> |
- |
-#include "base/macros.h" |
-#include "base/memory/shared_memory.h" |
-#include "build/build_config.h" |
-#include "chrome/browser/media/rtp_dump_type.h" |
-#include "chrome/browser/media/webrtc_rtp_dump_handler.h" |
-#include "chrome/common/media/webrtc_logging_message_data.h" |
-#include "chrome/common/partial_circular_buffer.h" |
-#include "content/public/browser/browser_message_filter.h" |
-#include "content/public/browser/render_process_host.h" |
-#include "net/base/network_interfaces.h" |
- |
-namespace net { |
-class URLRequestContextGetter; |
-} // namespace net |
- |
-class Profile; |
-class WebRtcLogUploader; |
- |
-#if defined(OS_ANDROID) |
-const size_t kWebRtcLogSize = 1 * 1024 * 1024; // 1 MB |
-#else |
-const size_t kWebRtcLogSize = 6 * 1024 * 1024; // 6 MB |
-#endif |
- |
-typedef std::map<std::string, std::string> MetaDataMap; |
- |
-struct WebRtcLogPaths { |
- base::FilePath log_path; // todo: rename to directory. |
- base::FilePath incoming_rtp_dump; |
- base::FilePath outgoing_rtp_dump; |
-}; |
- |
-class WebRtcLogBuffer { |
- public: |
- WebRtcLogBuffer(); |
- ~WebRtcLogBuffer(); |
- |
- void Log(const std::string& message); |
- |
- // Returns a circular buffer instance for reading the internal log buffer. |
- // Must only be called after the log has been marked as complete |
- // (see SetComplete) and the caller must ensure that the WebRtcLogBuffer |
- // instance remains in scope for the lifetime of the returned circular buffer. |
- PartialCircularBuffer Read(); |
- |
- // Switches the buffer to read-only mode, where access to the internal |
- // buffer is allowed from different threads than were used to contribute |
- // to the log. Calls to Log() won't be allowed after calling |
- // SetComplete() and the call to SetComplete() must be done on the same |
- // thread as constructed the buffer and calls Log(). |
- void SetComplete(); |
- |
- private: |
- base::ThreadChecker thread_checker_; |
- uint8_t buffer_[kWebRtcLogSize]; |
- PartialCircularBuffer circular_; |
- bool read_only_; |
-}; |
- |
-// WebRtcLoggingHandlerHost handles operations regarding the WebRTC logging: |
-// - Opens a shared memory buffer that the handler in the render process |
-// writes to. |
-// - Writes basic machine info to the log. |
-// - Informs the handler in the render process when to stop logging. |
-// - Closes the shared memory (and thereby discarding it) or triggers uploading |
-// of the log. |
-// - Detects when channel, i.e. renderer, is going away and possibly triggers |
-// uploading the log. |
-class WebRtcLoggingHandlerHost : public content::BrowserMessageFilter { |
- public: |
- typedef base::Callback<void(bool, const std::string&)> GenericDoneCallback; |
- typedef base::Callback<void(bool, const std::string&, const std::string&)> |
- UploadDoneCallback; |
- |
- // Key used to attach the handler to the RenderProcessHost. |
- static const char kWebRtcLoggingHandlerHostKey[]; |
- |
- WebRtcLoggingHandlerHost(int render_process_id, |
- Profile* profile, |
- WebRtcLogUploader* log_uploader); |
- |
- // Sets meta data that will be uploaded along with the log and also written |
- // in the beginning of the log. Must be called on the IO thread before calling |
- // StartLogging. |
- void SetMetaData(std::unique_ptr<MetaDataMap> meta_data, |
- const GenericDoneCallback& callback); |
- |
- // Opens a log and starts logging. Must be called on the IO thread. |
- void StartLogging(const GenericDoneCallback& callback); |
- |
- // Stops logging. Log will remain open until UploadLog or DiscardLog is |
- // called. Must be called on the IO thread. |
- void StopLogging(const GenericDoneCallback& callback); |
- |
- // Uploads the log and the RTP dumps. Discards the local copy. May only be |
- // called after logging has stopped. Must be called on the IO thread. |
- void UploadLog(const UploadDoneCallback& callback); |
- |
- // Uploads a log that was previously saved via a call to StoreLog(). |
- // Otherwise operates in the same way as UploadLog. |
- void UploadStoredLog(const std::string& log_id, |
- const UploadDoneCallback& callback); |
- |
- // Called by WebRtcLogUploader when uploading has finished. Must be called on |
- // the IO thread. |
- void UploadLogDone(); |
- |
- // Discards the log and the RTP dumps. May only be called after logging has |
- // stopped. Must be called on the IO thread. |
- void DiscardLog(const GenericDoneCallback& callback); |
- |
- // Stores the log locally using a hash of log_id + security origin. |
- void StoreLog(const std::string& log_id, const GenericDoneCallback& callback); |
- |
- // Adds a message to the log. |
- // This method must be called on the IO thread. |
- void LogMessage(const std::string& message); |
- |
- // May be called on any thread. |upload_log_on_render_close_| is used |
- // for decision making and it's OK if it changes before the execution based |
- // on that decision has finished. |
- void set_upload_log_on_render_close(bool should_upload) { |
- upload_log_on_render_close_ = should_upload; |
- } |
- |
- // Starts dumping the RTP headers for the specified direction. Must be called |
- // on the IO thread. |type| specifies which direction(s) of RTP packets should |
- // be dumped. |callback| will be called when starting the dump is done. |
- // |stop_callback| will be called when StopRtpDump is called. |
- void StartRtpDump(RtpDumpType type, |
- const GenericDoneCallback& callback, |
- const content::RenderProcessHost::WebRtcStopRtpDumpCallback& |
- stop_callback); |
- |
- // Stops dumping the RTP headers for the specified direction. Must be called |
- // on the IO thread. |type| specifies which direction(s) of RTP packet dumping |
- // should be stopped. |callback| will be called when stopping the dump is |
- // done. |
- void StopRtpDump(RtpDumpType type, const GenericDoneCallback& callback); |
- |
- // Called when an RTP packet is sent or received. Must be called on the UI |
- // thread. |
- void OnRtpPacket(std::unique_ptr<uint8_t[]> packet_header, |
- size_t header_length, |
- size_t packet_length, |
- bool incoming); |
- |
- private: |
- // States used for protecting from function calls made at non-allowed points |
- // in time. For example, StartLogging() is only allowed in CLOSED state. |
- // Transitions: SetMetaData(): CLOSED -> CLOSED. |
- // StartLogging(): CLOSED -> STARTING. |
- // Start done: STARTING -> STARTED. |
- // StopLogging(): STARTED -> STOPPING. |
- // Stop done: STOPPING -> STOPPED. |
- // UploadLog(): STOPPED -> UPLOADING. |
- // Upload done: UPLOADING -> CLOSED. |
- // DiscardLog(): STOPPED -> CLOSED. |
- enum LoggingState { |
- CLOSED, // Logging not started, no log in memory. |
- STARTING, // Start logging is in progress. |
- STARTED, // Logging started. |
- STOPPING, // Stop logging is in progress. |
- STOPPED, // Logging has been stopped, log still open in memory. |
- }; |
- |
- friend class content::BrowserThread; |
- friend class base::DeleteHelper<WebRtcLoggingHandlerHost>; |
- |
- ~WebRtcLoggingHandlerHost() override; |
- |
- // BrowserMessageFilter implementation. |
- void OnChannelClosing() override; |
- void OnDestruct() const override; |
- bool OnMessageReceived(const IPC::Message& message) override; |
- |
- // Handles log message requests from renderer process. |
- void OnAddLogMessages(const std::vector<WebRtcLoggingMessageData>& messages); |
- void OnLoggingStoppedInRenderer(); |
- |
- void LogInitialInfoOnFileThread(const GenericDoneCallback& callback); |
- void LogInitialInfoOnIOThread(const net::NetworkInterfaceList& network_list, |
- const GenericDoneCallback& callback); |
- |
- void EnableBrowserProcessLoggingOnUIThread(); |
- void DisableBrowserProcessLoggingOnUIThread(); |
- |
- // Called after stopping RTP dumps. |
- void StoreLogContinue(const std::string& log_id, |
- const GenericDoneCallback& callback); |
- |
- // Writes a formatted log |message| to the |circular_buffer_|. |
- void LogToCircularBuffer(const std::string& message); |
- |
- // Gets the log directory path for |profile_| and ensure it exists. Must be |
- // called on the FILE thread. |
- base::FilePath GetLogDirectoryAndEnsureExists(); |
- |
- void TriggerUpload(const UploadDoneCallback& callback, |
- const base::FilePath& log_directory); |
- |
- void StoreLogInDirectory(const std::string& log_id, |
- std::unique_ptr<WebRtcLogPaths> log_paths, |
- const GenericDoneCallback& done_callback, |
- const base::FilePath& directory); |
- |
- void UploadStoredLogOnFileThread(const std::string& log_id, |
- const UploadDoneCallback& callback); |
- |
- // A helper for TriggerUpload to do the real work. |
- void DoUploadLogAndRtpDumps(const base::FilePath& log_directory, |
- const UploadDoneCallback& callback); |
- |
- // Create the RTP dump handler and start dumping. Must be called after making |
- // sure the log directory exists. |
- void CreateRtpDumpHandlerAndStart(RtpDumpType type, |
- const GenericDoneCallback& callback, |
- const base::FilePath& dump_dir); |
- |
- // A helper for starting RTP dump assuming the RTP dump handler has been |
- // created. |
- void DoStartRtpDump(RtpDumpType type, const GenericDoneCallback& callback); |
- |
- // Adds the packet to the dump on IO thread. |
- void DumpRtpPacketOnIOThread(std::unique_ptr<uint8_t[]> packet_header, |
- size_t header_length, |
- size_t packet_length, |
- bool incoming); |
- |
- bool ReleaseRtpDumps(WebRtcLogPaths* log_paths); |
- |
- void FireGenericDoneCallback( |
- const WebRtcLoggingHandlerHost::GenericDoneCallback& callback, |
- bool success, |
- const std::string& error_message); |
- |
- std::unique_ptr<WebRtcLogBuffer> log_buffer_; |
- |
- // The profile associated with our renderer process. |
- Profile* const profile_; |
- |
- // These are only accessed on the IO thread, except when in STARTING state. In |
- // this state we are protected since entering any function that alters the |
- // state is not allowed. |
- std::unique_ptr<MetaDataMap> meta_data_; |
- |
- // These are only accessed on the IO thread. |
- GenericDoneCallback stop_callback_; |
- |
- // Only accessed on the IO thread, except when in STARTING, STOPPING or |
- // UPLOADING state if the action fails and the state must be reset. In these |
- // states however, we are protected since entering any function that alters |
- // the state is not allowed. |
- LoggingState logging_state_; |
- |
- // Only accessed on the IO thread. |
- bool upload_log_on_render_close_; |
- |
- // This is the handle to be passed to the render process. It's stored so that |
- // it doesn't have to be passed on when posting messages between threads. |
- // It's only accessed on the IO thread. |
- base::SharedMemoryHandle foreign_memory_handle_; |
- |
- // The system time in ms when logging is started. Reset when logging_state_ |
- // changes to STOPPED. |
- base::Time logging_started_time_; |
- |
- // The RTP dump handler responsible for creating the RTP header dump files. |
- std::unique_ptr<WebRtcRtpDumpHandler> rtp_dump_handler_; |
- |
- // The callback to call when StopRtpDump is called. |
- content::RenderProcessHost::WebRtcStopRtpDumpCallback stop_rtp_dump_callback_; |
- |
- // A pointer to the log uploader that's shared for all profiles. |
- // Ownership lies with the browser process. |
- WebRtcLogUploader* const log_uploader_; |
- |
- // The render process ID this object belongs to. |
- int render_process_id_; |
- |
- DISALLOW_COPY_AND_ASSIGN(WebRtcLoggingHandlerHost); |
-}; |
- |
-#endif // CHROME_BROWSER_MEDIA_WEBRTC_LOGGING_HANDLER_HOST_H_ |