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

Unified Diff: handler/win/registrar.h

Issue 1213723004: Implement a Windows crash client registrar. (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@child_process
Patch Set: More self-review. Created 5 years, 6 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: handler/win/registrar.h
diff --git a/handler/win/registrar.h b/handler/win/registrar.h
new file mode 100644
index 0000000000000000000000000000000000000000..0ee9774b8c29702f7a07cfa43088cdb06ad4ba65
--- /dev/null
+++ b/handler/win/registrar.h
@@ -0,0 +1,102 @@
+// Copyright 2015 The Crashpad Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef CRASHPAD_HANDLER_WIN_REGISTRAR_H_
+#define CRASHPAD_HANDLER_WIN_REGISTRAR_H_
+
+#include <windows.h>
+
+#include "base/basictypes.h"
+#include "base/memory/scoped_ptr.h"
+#include "util/stdlib/pointer_container.h"
+#include "util/win/scoped_handle.h"
+
+namespace crashpad {
+
+//! \brief Registers, tracks, and dispatches crash reporting requests for client
+//! processes. This class is multi-threaded and thread-safe. The
+//! constructor, destructor, and public methods may be invoked from any
+//! thread.
+class Registrar {
+ public:
+ //! \brief Handles crash reporting requests. The delegate may be invoked or
+ //! destroyed on any thread.
+ class Delegate {
+ public:
+ virtual ~Delegate() {}
+
+ //! \brief Generates a crash report. Must complete synchronously. Must not
+ //! re-enter the Registrar instance. May be invoked concurrently on
+ //! multiple threads.
+ //!
+ //! \param client_process A handle to the process to report on.
+ virtual void GenerateReportForClient(HANDLE client_process) = 0;
+ };
+
+ //! \brief Instantiates a Registrar.
+ //! \param delegate The delegate that will handle crash reporting requests.
+ explicit Registrar(scoped_ptr<Delegate> delegate);
+
+ //! \brief Destroys the registrar. Blocks until all background operations
+ //! (including report generation operations) complete.
+ ~Registrar();
+
+ //! \brief Registers a process for crash reporting. The process remains
+ //! registered until it exits or the registrar is destroyed.
+ //! \param client_process The client to register.
scottmg 2015/06/29 20:29:05 I think it needs a \n before \param line here.
scottmg 2015/06/29 20:29:05 \param lines are one of \param[in], \param[out], o
+ //! \param request_report_event Receives a HANDLE, valid in the client
+ //! process, to an event that should be signaled to request a report.
+ //! \param report_complete_event Receives a HANDLE, valid in the client
+ //! process, to an event that will be signaled when the report is
+ //! generated.
+ //! \return True if successful.
+ bool RegisterProcess(ScopedKernelHANDLE client_process,
+ HANDLE* request_report_event,
+ HANDLE* report_complete_event);
+
+ private:
+ // Stores per-registration state.
+ struct Entry;
+
+ // Forwards a report request to the Delegate instance.
+ void OnRequestReport(Entry* entry);
+
+ // Unregisters a client process that has exited.
+ void OnProcessExit(Entry* entry);
+
+ // Registers ReportRequestCallback and ProcessExitCallback for |entry|.
+ // Returns the wait handles (which must eventually be freed with
+ // UnregisterWaitEx) and true if successful.
+ static bool RegisterWaits(Entry* entry,
+ HANDLE* request_report_event_wait_handle,
+ HANDLE* process_exit_wait_handle);
+
+ // Static callbacks that forward to OnRequestReport and OnProcessExit.
+ static VOID CALLBACK
+ ReportRequestCallback(PVOID lpParameter, BOOLEAN /* TimerOrWaitFired */);
+ static VOID CALLBACK
+ ProcessExitCallback(PVOID lpParameter, BOOLEAN /* TimerOrWaitFired */);
+
+ scoped_ptr<Delegate> delegate_;
+
+ // Protects |entries_|.
+ ScopedKernelHANDLE mutex_;
+ PointerVector<Entry> entries_;
+
+ DISALLOW_COPY_AND_ASSIGN(Registrar);
+};
+
+} // namespace crashpad
+
+#endif // CRASHPAD_HANDLER_WIN_REGISTRAR_H_
« no previous file with comments | « handler/handler_test.gyp ('k') | handler/win/registrar.cc » ('j') | handler/win/registrar.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698