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

#ifndef COMPONENTS_OFFLINE_PAGES_TASK_SQL_CALLBACK_TASK_H_
#define COMPONENTS_OFFLINE_PAGES_TASK_SQL_CALLBACK_TASK_H_

#include "base/functional/callback.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "components/offline_pages/task/task.h"

namespace sql {
class Database;
}

namespace offline_pages {
class SqlStoreBase;

// A simple task that calls store->Execute() with the provided |exec_callback|
// and completes. |done_callback|, if provided, is called with the result. This
// class can be used if there are no UI thread actions that need done.
class SqlCallbackTask : public Task {
 public:
  typedef base::OnceCallback<bool(sql::Database* db)> ExecuteCallback;
  typedef base::OnceCallback<void(bool)> DoneCallback;

  SqlCallbackTask(SqlStoreBase* store,
                  ExecuteCallback exec_callback,
                  DoneCallback done_callback = {});
  ~SqlCallbackTask() override;
  void Run() override;

 private:
  base::WeakPtr<SqlCallbackTask> GetWeakPtr() {
    return weak_ptr_factory_.GetWeakPtr();
  }

  void Done(bool result);

  raw_ptr<SqlStoreBase> store_;
  ExecuteCallback exec_callback_;
  DoneCallback done_callback_;
  base::WeakPtrFactory<SqlCallbackTask> weak_ptr_factory_{this};
};

}  // namespace offline_pages

#endif  // COMPONENTS_OFFLINE_PAGES_TASK_SQL_CALLBACK_TASK_H_
