blob: 2c81f895be4d5a195693735bd905e01682b3375d [file] [log] [blame]
// Copyright 2020 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.
#include "src/developer/debug/debug_agent/mock_job_handle.h"
#include "src/developer/debug/debug_agent/job_exception_channel_type.h"
#include "src/developer/debug/debug_agent/mock_process_handle.h"
namespace debug_agent {
MockJobHandle::MockJobHandle(zx_koid_t koid, std::string name)
: job_koid_(koid), name_(std::move(name)) {}
std::unique_ptr<JobHandle> MockJobHandle::Duplicate() const {
return std::make_unique<MockJobHandle>(*this);
}
std::vector<std::unique_ptr<JobHandle>> MockJobHandle::GetChildJobs() const {
// Need to return a unique set of objects every time so make copies.
std::vector<std::unique_ptr<JobHandle>> result;
for (auto& job : child_jobs_)
result.push_back(std::make_unique<MockJobHandle>(job));
return result;
}
std::vector<std::unique_ptr<ProcessHandle>> MockJobHandle::GetChildProcesses() const {
// Need to return a unique set of objects every time so make copies.
std::vector<std::unique_ptr<ProcessHandle>> result;
for (auto& process : child_processes_)
result.push_back(std::make_unique<MockProcessHandle>(process));
return result;
}
void MockJobHandle::OnException(std::unique_ptr<MockExceptionHandle> exception,
MockJobExceptionInfo info) {
switch (info) {
case MockJobExceptionInfo::kProcessStarting:
FX_CHECK(observer_type_ == JobExceptionChannelType::kDebugger);
observer_->OnProcessStarting(exception->GetProcessHandle());
break;
case MockJobExceptionInfo::kProcessNameChanged:
FX_CHECK(observer_type_ == JobExceptionChannelType::kDebugger);
observer_->OnProcessNameChanged(exception->GetProcessHandle());
break;
case MockJobExceptionInfo::kException:
FX_CHECK(observer_type_ == JobExceptionChannelType::kException);
observer_->OnUnhandledException(std::move(exception));
break;
}
}
} // namespace debug_agent