blob: f016aa07bcd246f6254739c0e6c0b103f3726bb6 [file] [log] [blame]
// 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_