| 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
|
| index 9bf5db25396fcfe0a2ebfe6e8bedc09c9518d463..e6007773ea084268dee0a755e2f5dedfcd0a1a4b 100644
|
| --- a/chrome/browser/media/webrtc_logging_handler_host.h
|
| +++ b/chrome/browser/media/webrtc_logging_handler_host.h
|
| @@ -10,6 +10,7 @@
|
| #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/net_util.h"
|
| @@ -18,11 +19,49 @@ namespace net {
|
| class URLRequestContextGetter;
|
| } // namespace net
|
|
|
| -class PartialCircularBuffer;
|
| class Profile;
|
|
|
| +#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 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.
|
| @@ -43,7 +82,7 @@ class WebRtcLoggingHandlerHost : public content::BrowserMessageFilter {
|
| // 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(const MetaDataMap& meta_data,
|
| + void SetMetaData(scoped_ptr<MetaDataMap> meta_data,
|
| const GenericDoneCallback& callback);
|
|
|
| // Opens a log and starts logging. Must be called on the IO thread.
|
| @@ -57,6 +96,11 @@ class WebRtcLoggingHandlerHost : public content::BrowserMessageFilter {
|
| // 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();
|
| @@ -65,6 +109,9 @@ class WebRtcLoggingHandlerHost : public content::BrowserMessageFilter {
|
| // 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.
|
| void LogMessage(const std::string& message);
|
|
|
| @@ -114,7 +161,6 @@ class WebRtcLoggingHandlerHost : public content::BrowserMessageFilter {
|
| STARTED, // Logging started.
|
| STOPPING, // Stop logging is in progress.
|
| STOPPED, // Logging has been stopped, log still open in memory.
|
| - UPLOADING // Uploading log is in progress.
|
| };
|
|
|
| friend class content::BrowserThread;
|
| @@ -134,11 +180,17 @@ class WebRtcLoggingHandlerHost : public content::BrowserMessageFilter {
|
| // Handles log message requests from browser process.
|
| void AddLogMessageFromBrowser(const WebRtcLoggingMessageData& message);
|
|
|
| - void StartLoggingIfAllowed();
|
| - void DoStartLogging();
|
| - void LogInitialInfoOnFileThread();
|
| - void LogInitialInfoOnIOThread(const net::NetworkInterfaceList& network_list);
|
| - void NotifyLoggingStarted();
|
| + void StartLoggingIfAllowed(const GenericDoneCallback& callback);
|
| + void DoStartLogging(bool permissions_granted,
|
| + const GenericDoneCallback& callback);
|
| + void LogInitialInfoOnFileThread(const GenericDoneCallback& callback);
|
| + void LogInitialInfoOnIOThread(const net::NetworkInterfaceList& network_list,
|
| + const GenericDoneCallback& callback);
|
| + void NotifyLoggingStarted(const GenericDoneCallback& callback);
|
| +
|
| + // 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);
|
| @@ -147,24 +199,30 @@ class WebRtcLoggingHandlerHost : public content::BrowserMessageFilter {
|
| // called on the FILE thread.
|
| base::FilePath GetLogDirectoryAndEnsureExists();
|
|
|
| - void TriggerUpload(const base::FilePath& log_directory);
|
| + void TriggerUpload(const UploadDoneCallback& callback,
|
| + const base::FilePath& log_directory);
|
|
|
| - // A helper for TriggerUpload to do the real work.
|
| - void DoUploadLogAndRtpDumps(const base::FilePath& log_directory);
|
| + void StoreLogInDirectory(const std::string& log_id,
|
| + scoped_ptr<WebRtcLogPaths> log_paths,
|
| + const GenericDoneCallback& done_callback,
|
| + const base::FilePath& directory);
|
| +
|
| + void UploadStoredLogOnFileThread(const std::string& log_id,
|
| + const UploadDoneCallback& callback);
|
|
|
| - void FireGenericDoneCallback(GenericDoneCallback* callback,
|
| - bool success,
|
| - const std::string& error_message);
|
| + // 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,
|
| - GenericDoneCallback callback,
|
| + 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, GenericDoneCallback* callback);
|
| + void DoStartRtpDump(RtpDumpType type, const GenericDoneCallback& callback);
|
|
|
| // Adds the packet to the dump on IO thread.
|
| void DumpRtpPacketOnIOThread(scoped_ptr<uint8[]> packet_header,
|
| @@ -172,21 +230,20 @@ class WebRtcLoggingHandlerHost : public content::BrowserMessageFilter {
|
| size_t packet_length,
|
| bool incoming);
|
|
|
| - scoped_ptr<unsigned char[]> log_buffer_;
|
| - scoped_ptr<PartialCircularBuffer> circular_buffer_;
|
| + bool ReleaseRtpDumps(WebRtcLogPaths* log_paths);
|
| +
|
| + scoped_ptr<WebRtcLogBuffer> log_buffer_;
|
|
|
| // The profile associated with our renderer process.
|
| - Profile* profile_;
|
| + 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.
|
| - MetaDataMap meta_data_;
|
| + scoped_ptr<MetaDataMap> meta_data_;
|
|
|
| // These are only accessed on the IO thread.
|
| - GenericDoneCallback start_callback_;
|
| GenericDoneCallback stop_callback_;
|
| - UploadDoneCallback upload_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
|
|
|