| 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 a35bf3e5bf84696cd44d1fd125514162cc74d177..9261c5a058970d2401e414fd44aef525d4ccdf78 100644
|
| --- a/chrome/browser/media/webrtc_logging_handler_host.h
|
| +++ b/chrome/browser/media/webrtc_logging_handler_host.h
|
| @@ -18,13 +18,72 @@ class RenderProcessHost;
|
| // WebRtcLoggingHandlerHost handles operations regarding the WebRTC logging:
|
| // - Opens a shared memory buffer that the handler in the render process
|
| // writes to.
|
| -// - Detects when channel, i.e. renderer, is going away and triggers uploading
|
| -// the log.
|
| +// - 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;
|
| +
|
| WebRtcLoggingHandlerHost();
|
|
|
| + // 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 std::map<std::string, std::string>& 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 discards the local copy. May only be called after
|
| + // logging has stopped. Must be called on the IO thread.
|
| + void UploadLog(const UploadDoneCallback& callback);
|
| +
|
| + // Called by WebRtcLogUploader when uploading has finished. Must be called on
|
| + // the IO thread.
|
| + void UploadLogDone();
|
| +
|
| + // Discards the log. May only be called after logging has stopped. Must be
|
| + // called on the IO thread.
|
| + void DiscardLog(const GenericDoneCallback& callback);
|
| +
|
| + // 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;
|
| + }
|
| +
|
| 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.
|
| + UPLOADING // Uploading log is in progress.
|
| + };
|
| +
|
| friend class content::BrowserThread;
|
| friend class base::DeleteHelper<WebRtcLoggingHandlerHost>;
|
|
|
| @@ -36,19 +95,40 @@ class WebRtcLoggingHandlerHost : public content::BrowserMessageFilter {
|
| virtual bool OnMessageReceived(const IPC::Message& message,
|
| bool* message_was_ok) OVERRIDE;
|
|
|
| - void OnOpenLog(const std::string& app_session_id, const std::string& app_url);
|
| + void OnLoggingStoppedInRenderer();
|
|
|
| - void OpenLogIfAllowed();
|
| - void DoOpenLog();
|
| + void StartLoggingIfAllowed();
|
| + void DoStartLogging();
|
| void LogMachineInfo();
|
| - void NotifyLogOpened();
|
| + void NotifyLoggingStarted();
|
|
|
| - void UploadLog();
|
| + void TriggerUploadLog();
|
| +
|
| + void FireGenericDoneCallback(GenericDoneCallback* callback,
|
| + bool success,
|
| + const std::string& error_message);
|
|
|
| scoped_refptr<net::URLRequestContextGetter> system_request_context_;
|
| scoped_ptr<base::SharedMemory> shared_memory_;
|
| - std::string app_session_id_;
|
| - std::string app_url_;
|
| +
|
| + // 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::map<std::string, std::string> 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
|
| + // 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.
|
|
|