chromium/chromecast/app/android/cast_crash_uploader_android.h

// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROMECAST_APP_ANDROID_CAST_CRASH_UPLOADER_ANDROID_H_
#define CHROMECAST_APP_ANDROID_CAST_CRASH_UPLOADER_ANDROID_H_

#include <jni.h>

#include <memory>
#include <string>

#include "base/files/file_path.h"
#include "base/memory/weak_ptr.h"
#include "base/task/sequenced_task_runner.h"
#include "base/timer/timer.h"
#include "chromecast/app/cast_crash_uploader.h"
#include "components/prefs/pref_service.h"

namespace chromecast {
class CastCrashReporterClientAndroid;

class CastCrashUploaderAndroid : public CastCrashUploader {
 public:
  void UploadDumps(const std::string& uuid,
                   const std::string& application_feedback,
                   const bool can_send_usage_stats) override;

  CastCrashUploaderAndroid(const std::string process_type,
                           const base::FilePath log_file_path,
                           PrefService* pref_service);
  ~CastCrashUploaderAndroid() override;

 private:
  void StartPeriodicCrashReportUpload();
  void OnStartPeriodicCrashReportUpload();
  void UploadCrashReport(bool opt_in_stats);

  // Path to the current process's log file.
  base::FilePath log_file_path_;

  PrefService* pref_service_;

  std::string process_type_;
  scoped_refptr<base::SequencedTaskRunner> crash_reporter_runner_;
  std::unique_ptr<base::RepeatingTimer> crash_reporter_timer_;

  std::unique_ptr<CastCrashReporterClientAndroid> crash_reporter_client_;
  base::WeakPtrFactory<CastCrashUploaderAndroid> weak_factory_;
};

}  // namespace chromecast

#endif  // CHROMECAST_APP_ANDROID_CAST_CRASH_UPLOADER_ANDROID_H_