Commit 055e08db authored by Joel Hockey's avatar Joel Hockey Committed by Commit Bot

Add cicerone GetVshSession wrappers

Bug: 1113207
Change-Id: Ifab4a2be4c22765ed0a6ab54eaba58228636d201
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2355353Reviewed-by: default avatarSteven Bennetts <stevenjb@chromium.org>
Commit-Queue: Joel Hockey <joelhockey@chromium.org>
Cr-Commit-Position: refs/heads/master@{#798318}
parent d0d6bb33
...@@ -2102,6 +2102,31 @@ void CrostiniManager::OnFileWatchTriggered( ...@@ -2102,6 +2102,31 @@ void CrostiniManager::OnFileWatchTriggered(
} }
} }
void CrostiniManager::GetVshSession(const ContainerId& container_id,
int32_t host_vsh_pid,
VshSessionCallback callback) {
vm_tools::cicerone::GetVshSessionRequest request;
request.set_vm_name(container_id.vm_name);
request.set_container_name(container_id.container_name);
request.set_owner_id(CryptohomeIdForProfile(profile_));
request.set_host_vsh_pid(host_vsh_pid);
GetCiceroneClient()->GetVshSession(
request, base::BindOnce(
[](VshSessionCallback callback,
base::Optional<vm_tools::cicerone::GetVshSessionResponse>
response) {
if (!response) {
std::move(callback).Run(false, "Empty response", 0);
} else {
std::move(callback).Run(response->success(),
response->failure_reason(),
response->container_shell_pid());
}
},
std::move(callback)));
}
CrostiniManager::RestartId CrostiniManager::RestartCrostini( CrostiniManager::RestartId CrostiniManager::RestartCrostini(
ContainerId container_id, ContainerId container_id,
CrostiniResultCallback callback, CrostiniResultCallback callback,
......
...@@ -455,6 +455,15 @@ class CrostiniManager : public KeyedService, ...@@ -455,6 +455,15 @@ class CrostiniManager : public KeyedService,
void AddFileChangeObserver(CrostiniFileChangeObserver* observer); void AddFileChangeObserver(CrostiniFileChangeObserver* observer);
void RemoveFileChangeObserver(CrostiniFileChangeObserver* observer); void RemoveFileChangeObserver(CrostiniFileChangeObserver* observer);
// Lookup vsh session from pid. Used by terminal to open new tabs in cwd.
using VshSessionCallback =
base::OnceCallback<void(bool success,
const std::string& failure_reason,
int32_t container_shell_pid)>;
void GetVshSession(const ContainerId& container_id,
int32_t host_vsh_pid,
VshSessionCallback callback);
// Runs all the steps required to restart the given crostini vm and container. // Runs all the steps required to restart the given crostini vm and container.
// The optional |observer| tracks progress. If provided, it must be alive // The optional |observer| tracks progress. If provided, it must be alive
// until the restart completes (i.e. when |callback| is called) or the restart // until the restart completes (i.e. when |callback| is called) or the restart
......
...@@ -585,6 +585,28 @@ class CiceroneClientImpl : public CiceroneClient { ...@@ -585,6 +585,28 @@ class CiceroneClientImpl : public CiceroneClient {
weak_ptr_factory_.GetWeakPtr(), std::move(callback))); weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
} }
void GetVshSession(
const vm_tools::cicerone::GetVshSessionRequest& request,
DBusMethodCallback<vm_tools::cicerone::GetVshSessionResponse> callback)
override {
dbus::MethodCall method_call(vm_tools::cicerone::kVmCiceroneInterface,
vm_tools::cicerone::kGetVshSessionMethod);
dbus::MessageWriter writer(&method_call);
if (!writer.AppendProtoAsArrayOfBytes(request)) {
LOG(ERROR) << "Failed to encode GetVshSessionRequest protobuf";
base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::BindOnce(std::move(callback), base::nullopt));
return;
}
cicerone_proxy_->CallMethod(
&method_call, kDefaultTimeout.InMilliseconds(),
base::BindOnce(&CiceroneClientImpl::OnDBusProtoResponse<
vm_tools::cicerone::GetVshSessionResponse>,
weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
}
void WaitForServiceToBeAvailable( void WaitForServiceToBeAvailable(
dbus::ObjectProxy::WaitForServiceToBeAvailableCallback callback) dbus::ObjectProxy::WaitForServiceToBeAvailableCallback callback)
override { override {
......
...@@ -323,6 +323,13 @@ class COMPONENT_EXPORT(CHROMEOS_DBUS) CiceroneClient : public DBusClient { ...@@ -323,6 +323,13 @@ class COMPONENT_EXPORT(CHROMEOS_DBUS) CiceroneClient : public DBusClient {
DBusMethodCallback<vm_tools::cicerone::RemoveFileWatchResponse> DBusMethodCallback<vm_tools::cicerone::RemoveFileWatchResponse>
callback) = 0; callback) = 0;
// Looks up vsh session data such as container shell pid.
// |callback| is called when the method completes.
virtual void GetVshSession(
const vm_tools::cicerone::GetVshSessionRequest& request,
DBusMethodCallback<vm_tools::cicerone::GetVshSessionResponse>
callback) = 0;
// Registers |callback| to run when the Cicerone service becomes available. // Registers |callback| to run when the Cicerone service becomes available.
// If the service is already available, or if connecting to the name-owner- // If the service is already available, or if connecting to the name-owner-
// changed signal fails, |callback| will be run once asynchronously. // changed signal fails, |callback| will be run once asynchronously.
......
...@@ -388,6 +388,14 @@ void FakeCiceroneClient::RemoveFileWatch( ...@@ -388,6 +388,14 @@ void FakeCiceroneClient::RemoveFileWatch(
base::BindOnce(std::move(callback), remove_file_watch_response_)); base::BindOnce(std::move(callback), remove_file_watch_response_));
} }
void FakeCiceroneClient::GetVshSession(
const vm_tools::cicerone::GetVshSessionRequest& request,
DBusMethodCallback<vm_tools::cicerone::GetVshSessionResponse> callback) {
base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE,
base::BindOnce(std::move(callback), get_vsh_session_response_));
}
void FakeCiceroneClient::NotifyLxdContainerCreated( void FakeCiceroneClient::NotifyLxdContainerCreated(
const vm_tools::cicerone::LxdContainerCreatedSignal& proto) { const vm_tools::cicerone::LxdContainerCreatedSignal& proto) {
for (auto& observer : observer_list_) { for (auto& observer : observer_list_) {
......
...@@ -135,6 +135,10 @@ class COMPONENT_EXPORT(CHROMEOS_DBUS) FakeCiceroneClient ...@@ -135,6 +135,10 @@ class COMPONENT_EXPORT(CHROMEOS_DBUS) FakeCiceroneClient
const vm_tools::cicerone::RemoveFileWatchRequest& request, const vm_tools::cicerone::RemoveFileWatchRequest& request,
DBusMethodCallback<vm_tools::cicerone::RemoveFileWatchResponse> callback) DBusMethodCallback<vm_tools::cicerone::RemoveFileWatchResponse> callback)
override; override;
void GetVshSession(
const vm_tools::cicerone::GetVshSessionRequest& request,
DBusMethodCallback<vm_tools::cicerone::GetVshSessionResponse> callback)
override;
void WaitForServiceToBeAvailable( void WaitForServiceToBeAvailable(
dbus::ObjectProxy::WaitForServiceToBeAvailableCallback callback) override; dbus::ObjectProxy::WaitForServiceToBeAvailableCallback callback) override;
...@@ -313,6 +317,10 @@ class COMPONENT_EXPORT(CHROMEOS_DBUS) FakeCiceroneClient ...@@ -313,6 +317,10 @@ class COMPONENT_EXPORT(CHROMEOS_DBUS) FakeCiceroneClient
vm_tools::cicerone::RemoveFileWatchResponse remove_file_watch_response) { vm_tools::cicerone::RemoveFileWatchResponse remove_file_watch_response) {
remove_file_watch_response_ = std::move(remove_file_watch_response); remove_file_watch_response_ = std::move(remove_file_watch_response);
} }
void set_get_vsh_session_response(
vm_tools::cicerone::GetVshSessionResponse get_vsh_session_response) {
get_vsh_session_response_ = std::move(get_vsh_session_response);
}
// Returns true if the method has been invoked at least once, false otherwise. // Returns true if the method has been invoked at least once, false otherwise.
bool configure_for_arc_sideload_called() { bool configure_for_arc_sideload_called() {
...@@ -422,6 +430,7 @@ class COMPONENT_EXPORT(CHROMEOS_DBUS) FakeCiceroneClient ...@@ -422,6 +430,7 @@ class COMPONENT_EXPORT(CHROMEOS_DBUS) FakeCiceroneClient
vm_tools::cicerone::StartLxdResponse start_lxd_response_; vm_tools::cicerone::StartLxdResponse start_lxd_response_;
vm_tools::cicerone::AddFileWatchResponse add_file_watch_response_; vm_tools::cicerone::AddFileWatchResponse add_file_watch_response_;
vm_tools::cicerone::RemoveFileWatchResponse remove_file_watch_response_; vm_tools::cicerone::RemoveFileWatchResponse remove_file_watch_response_;
vm_tools::cicerone::GetVshSessionResponse get_vsh_session_response_;
vm_tools::cicerone::OsRelease lxd_container_os_release_; vm_tools::cicerone::OsRelease lxd_container_os_release_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment