| // Copyright 2018 The Fuchsia 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 SRC_DEVELOPER_FORENSICS_PUBLIC_FAKES_CRASH_REPORTER_H_ |
| #define SRC_DEVELOPER_FORENSICS_PUBLIC_FAKES_CRASH_REPORTER_H_ |
| |
| #include <fuchsia/feedback/cpp/fidl.h> |
| #include <fuchsia/feedback/testing/cpp/fidl.h> |
| #include <lib/fidl/cpp/binding.h> |
| |
| #include <list> |
| #include <memory> |
| |
| namespace forensics { |
| namespace fakes { |
| |
| class FakeCrashReporterQuerier; |
| |
| // Fake handler for fuchsia.feedback.CrashReporter, returns an error if the filed crash report |
| // doesn't contain a program name. Otherwise, an ok response is returned. |
| class CrashReporter : public fuchsia::feedback::CrashReporter { |
| public: |
| void SetQuerier( |
| fidl::InterfaceRequest<fuchsia::feedback::testing::FakeCrashReporterQuerier> request); |
| void ResetQuerier(); |
| |
| // |fuchsia::feedback::CrashReporter| |
| void File(fuchsia::feedback::CrashReport report, FileCallback callback) override; |
| |
| private: |
| std::unique_ptr<FakeCrashReporterQuerier> querier_; |
| size_t num_crash_reports_filed_{0}; |
| }; |
| |
| class FakeCrashReporterQuerier : public fuchsia::feedback::testing::FakeCrashReporterQuerier { |
| public: |
| FakeCrashReporterQuerier( |
| CrashReporter* crash_reporter, |
| fidl::InterfaceRequest<fuchsia::feedback::testing::FakeCrashReporterQuerier> request, |
| size_t num_crash_reports_filed); |
| |
| void UpdateAndNotify(size_t num_crash_reports_filed); |
| |
| // |fuchsia::feedback::testing::FakeCrashReporterQuerier| |
| void WatchFile(WatchFileCallback callback) override; |
| |
| private: |
| // If |callback_| has a value, execute it on the condition |watch_file_dirty_bit_| is set. |
| void Notify(); |
| |
| fidl::Binding<fuchsia::feedback::testing::FakeCrashReporterQuerier> connection_; |
| std::optional<WatchFileCallback> callback_; |
| |
| size_t num_crash_reports_filed_; |
| bool watch_file_dirty_bit_; |
| }; |
| |
| } // namespace fakes |
| } // namespace forensics |
| |
| #endif // SRC_DEVELOPER_FORENSICS_PUBLIC_FAKES_CRASH_REPORTER_H_ |