blob: b23b3eadbb2509c46e2d83142154d4877dcbc0bf [file] [log] [blame]
// Copyright 2019 The Chromium 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 CHROME_CHROME_CLEANER_ENGINES_TARGET_CLEANER_ENGINE_REQUESTS_PROXY_H_
#define CHROME_CHROME_CLEANER_ENGINES_TARGET_CLEANER_ENGINE_REQUESTS_PROXY_H_
#include "base/memory/ref_counted.h"
#include "base/process/process_handle.h"
#include "base/single_thread_task_runner.h"
#include "chrome/chrome_cleaner/engines/target/sandbox_request_helper.h"
#include "chrome/chrome_cleaner/interfaces/cleaner_engine_requests.mojom.h"
namespace chrome_cleaner {
class CleanerEngineRequestsProxy
: public base::RefCountedThreadSafe<CleanerEngineRequestsProxy> {
public:
CleanerEngineRequestsProxy(
mojom::CleanerEngineRequestsAssociatedPtr requests_ptr,
scoped_refptr<base::SingleThreadTaskRunner> task_runner);
// Implements synchronous callbacks to be called on arbitrary threads from the
// engine.
virtual bool DeleteFile(const base::FilePath& file_name);
virtual bool DeleteFilePostReboot(const base::FilePath& file_name);
virtual bool NtDeleteRegistryKey(const String16EmbeddedNulls& key);
virtual bool NtDeleteRegistryValue(const String16EmbeddedNulls& key,
const String16EmbeddedNulls& value_name);
virtual bool NtChangeRegistryValue(const String16EmbeddedNulls& key,
const String16EmbeddedNulls& value_name,
const String16EmbeddedNulls& new_value);
virtual bool DeleteService(const base::string16& name);
virtual bool DeleteTask(const base::string16& name);
virtual bool TerminateProcess(base::ProcessId process_id);
scoped_refptr<base::SingleThreadTaskRunner> task_runner() const {
return task_runner_;
}
void UnbindRequestsPtr();
protected:
virtual ~CleanerEngineRequestsProxy();
private:
friend class base::RefCountedThreadSafe<CleanerEngineRequestsProxy>;
friend class TestEngineRequestInvoker;
MojoCallStatus SandboxDeleteFile(
const base::FilePath& file_name,
mojom::CleanerEngineRequests::SandboxDeleteFileCallback result_callback);
MojoCallStatus SandboxDeleteFilePostReboot(
const base::FilePath& file_name,
mojom::CleanerEngineRequests::SandboxDeleteFilePostRebootCallback
result_callback);
MojoCallStatus SandboxNtDeleteRegistryKey(
const String16EmbeddedNulls& key,
mojom::CleanerEngineRequests::SandboxNtDeleteRegistryKeyCallback
result_callback);
MojoCallStatus SandboxNtDeleteRegistryValue(
const String16EmbeddedNulls& key,
const String16EmbeddedNulls& value_name,
mojom::CleanerEngineRequests::SandboxNtDeleteRegistryValueCallback
result_callback);
MojoCallStatus SandboxNtChangeRegistryValue(
const String16EmbeddedNulls& key,
const String16EmbeddedNulls& value_name,
const String16EmbeddedNulls& new_value,
mojom::CleanerEngineRequests::SandboxNtChangeRegistryValueCallback
result_callback);
MojoCallStatus SandboxDeleteService(
const base::string16& name,
mojom::CleanerEngineRequests::SandboxDeleteServiceCallback
result_callback);
MojoCallStatus SandboxDeleteTask(
const base::string16& name,
mojom::CleanerEngineRequests::SandboxDeleteTaskCallback result_callback);
MojoCallStatus SandboxTerminateProcess(
uint32_t process_id,
mojom::CleanerEngineRequests::SandboxTerminateProcessCallback
result_callback);
// A CleanerEngineRequests that will send the requests over the Mojo
// connection.
mojom::CleanerEngineRequestsAssociatedPtr requests_ptr_;
// A task runner for the IPC thread.
scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
};
} // namespace chrome_cleaner
#endif // CHROME_CHROME_CLEANER_ENGINES_TARGET_CLEANER_ENGINE_REQUESTS_PROXY_H_