| // Copyright 2018 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| syntax = "proto3"; |
| |
| option cc_enable_arenas = true; |
| |
| // This file defines services that will be running in the host that will be used |
| // by the container. |
| package vm_tools.container; |
| |
| import "common.proto"; |
| |
| // Request protobuf for notifying host that a container has started up. |
| message ContainerStartupInfo { |
| // The security token the container was given. |
| string token = 1; |
| |
| // The vsock port on which garcon will be listening. |
| uint32 garcon_port = 2; |
| } |
| |
| // Request protobuf for notifying host that a container is shutting down. |
| message ContainerShutdownInfo { |
| // The security token the container was given. |
| string token = 1; |
| } |
| |
| // Corresponds to a .desktop file from the Desktop Entry Spec: |
| // https://www.freedesktop.org/wiki/Specifications/desktop-entry-spec/ |
| message Application { |
| // A "localestring". Entries with a provided locale should set the |locale| |
| // field to the value inside the [] and default entries should leave it empty. |
| message LocalizedString { |
| message StringWithLocale { |
| string locale = 1; |
| string value = 2; |
| } |
| repeated StringWithLocale values = 1; |
| } |
| |
| // A repeated "localestring". Entries with a locale should set the |locale| |
| // field to the value inside the [], e.g for the key "Name[fr]", |locale| |
| // should be "fr"; for the default entry, |locale| should be empty. The |
| // browser is responsible for mapping this to something it can use. |
| message LocaleStrings { |
| message StringsWithLocale { |
| string locale = 1; |
| repeated string value = 2; |
| } |
| repeated StringsWithLocale values = 1; |
| } |
| |
| // This is the 'key' for the application and used in other requests such as |
| // launching the application or retrieving its icon. |
| string desktop_file_id = 1; |
| |
| // These fields map directly to keys from the Desktop Entry spec. |
| LocalizedString name = 2; |
| LocalizedString comment = 3; |
| repeated string mime_types = 4; |
| bool no_display = 5; |
| string startup_wm_class = 6; |
| bool startup_notify = 7; |
| LocaleStrings keywords = 9; |
| string executable_file_name = 10; |
| |
| // If set, the package_id of the installed package that owns this .desktop |
| // file. If not set, the .desktop file is not owned by an installed package. |
| string package_id = 8; |
| } |
| |
| // Request protobuf for notifying the host of our list of installed |
| // applications. |
| message UpdateApplicationListRequest { |
| // The security token the container was given. |
| string token = 1; |
| // The list of all the installed applications. |
| repeated Application application = 2; |
| } |
| |
| // Request protobuf for opening a URL in the host. |
| message OpenUrlRequest { |
| // The URL to open. |
| string url = 1; |
| |
| // The security token the container was given. |
| string token = 2; |
| } |
| |
| // A message sent to indicate how many UpdateApplicationList are |
| // scheduled to be sent. |
| message PendingAppListUpdateCount { |
| // Security token for the container. |
| string token = 1; |
| |
| // The number of app list updates that have been triggered but not yet sent. |
| uint32 count = 2; |
| } |
| |
| // Progress update when a Linux package install is in progress or completed. |
| message InstallLinuxPackageProgressInfo { |
| // The security token the container was given. |
| string token = 1; |
| |
| enum Status { |
| // Install has completed and was successful. No further signals will be |
| // sent after this one. |
| SUCCEEDED = 0; |
| |
| // Install failed to complete, the specific reason will be in |
| // failure_details. No further signals will be sent after this one. |
| FAILED = 1; |
| |
| // This is while packages are being downloaded. |
| DOWNLOADING = 2; |
| |
| // General installation phase for package and dependency installation. |
| INSTALLING = 3; |
| } |
| |
| // Current status of the installation progress. |
| Status status = 2; |
| |
| // Overall percentage progress. |
| uint32 progress_percent = 3; |
| |
| // Details relating to the failure state. |
| string failure_details = 4; |
| |
| // Command identifier to track installation progress. |
| string command_uuid = 5; |
| } |
| |
| message UninstallPackageProgressInfo { |
| // The security token the container was given. |
| string token = 1; |
| |
| enum Status { |
| // Uninstall has completed and was successful. No further signals will be |
| // sent after this one. |
| SUCCEEDED = 0; |
| |
| // Uninstall failed to complete, the specific reason will be in |
| // failure_details. No further signals will be sent after this one. |
| FAILED = 1; |
| |
| // This is sent while the uninstall is in progress. progress_percent will be |
| // filled in. |
| UNINSTALLING = 2; |
| } |
| |
| // Current status of the uninstallation progress. |
| Status status = 2; |
| |
| // Overall percentage progress. |
| uint32 progress_percent = 3; |
| |
| // Details relating to the failure state. |
| string failure_details = 4; |
| } |
| |
| message ApplyAnsiblePlaybookProgressInfo { |
| // The security token the container was given. |
| string token = 1; |
| |
| enum Status { |
| UNKNOWN = 0; |
| |
| // Application has completed and was successful. No further signals will be |
| // sent after this one. |
| SUCCEEDED = 1; |
| |
| // Application failed to complete, the specific reason will be in |
| // failure_details. No further signals will be sent after this one. |
| FAILED = 2; |
| |
| // Ansible playbook is being currently applied. |
| IN_PROGRESS = 3; |
| } |
| |
| // Current status of the application progress. |
| Status status = 2; |
| |
| // Details relating to the failure state. |
| string failure_details = 3; |
| } |
| |
| // Request protobuf for opening a new terminal in the container. |
| message OpenTerminalRequest { |
| // The security token the container was given. |
| string token = 1; |
| |
| // Extra parameters to use when launching a terminal application that allow |
| // executing a command inside the terminal. |
| repeated string params = 2; |
| } |
| |
| // Request protobuf for updating the container MIME types. |
| message UpdateMimeTypesRequest { |
| // The security token the container was given. |
| string token = 1; |
| |
| // MIME type mappings with file extension as the key without a period prefix |
| // and MIME type as the value. |
| map<string, string> mime_type_mappings = 2; |
| } |
| |
| // Service that is notified of events from a container. |
| service ContainerListener { |
| // Called by each container when it starts up to indicate that it is ready to |
| // handle incoming requests. |
| rpc ContainerReady(ContainerStartupInfo) returns (EmptyMessage); |
| |
| // Called by each container before it shuts down to indicate it should no |
| // longer be sent incoming requests. |
| rpc ContainerShutdown(ContainerShutdownInfo) returns (EmptyMessage); |
| |
| // Called by a container to update the list of applications installed within |
| // the container. |
| rpc UpdateApplicationList(UpdateApplicationListRequest) |
| returns (EmptyMessage); |
| |
| // Called by a container to indicate that an app list update has |
| // been scheduled or completed. |
| rpc PendingUpdateApplicationListCalls(PendingAppListUpdateCount) |
| returns (EmptyMessage); |
| |
| // Called by a container to open the specified URL with the browser in the |
| // host. |
| rpc OpenUrl(OpenUrlRequest) returns (EmptyMessage); |
| |
| // Called by a container during a Linux package install to update on progress |
| // and completion/failure. |
| rpc InstallLinuxPackageProgress(InstallLinuxPackageProgressInfo) |
| returns (EmptyMessage); |
| |
| rpc UninstallPackageProgress(UninstallPackageProgressInfo) |
| returns (EmptyMessage); |
| |
| // Called by a container during a Ansible playbook application to update on |
| // progress and completion/failure. |
| rpc ApplyAnsiblePlaybookProgress(ApplyAnsiblePlaybookProgressInfo) |
| returns (EmptyMessage); |
| |
| // Called by a container to have the host open a new terminal that is |
| // connected to the container. |
| rpc OpenTerminal(OpenTerminalRequest) returns (EmptyMessage); |
| |
| // Called by a container to update the MIME type associations for this |
| // container. |
| rpc UpdateMimeTypes(UpdateMimeTypesRequest) returns (EmptyMessage); |
| |
| // If adding more rpc's, please update ContainerListenerFuzzerSingleAction as |
| // well. |
| } |