// Copyright 2015 The Crashpad Authors // // 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_CRASH_REPORT_UPLOAD_THREAD_H_ #define CRASHPAD_HANDLER_CRASH_REPORT_UPLOAD_THREAD_H_ #include <functional> #include <memory> #include <string> #include <unordered_map> #include "build/build_config.h" #include "client/crash_report_database.h" #include "util/misc/uuid.h" #include "util/stdlib/thread_safe_vector.h" #include "util/thread/stoppable.h" #include "util/thread/worker_thread.h" namespace crashpad { //! \brief A thread that processes pending crash reports in a //! CrashReportDatabase by uploading them or marking them as completed //! without upload, as desired. //! //! A producer of crash reports should notify an object of this class that a new //! report has been added to the database by calling ReportPending(). //! //! Independently of being triggered by ReportPending(), objects of this class //! can periodically examine the database for pending reports. This allows //! failed upload attempts for reports left in the pending state to be retried. //! It also catches reports that are added without a ReportPending() signal //! being caught. This may happen if crash reports are added to the database by //! other processes. class CrashReportUploadThread : public WorkerThread::Delegate, public Stoppable { … }; } // namespace crashpad #endif // CRASHPAD_HANDLER_CRASH_REPORT_UPLOAD_THREAD_H_