Commit e670945d authored by Joel Hockey's avatar Joel Hockey Committed by Commit Bot

PluginVm dbus service to show settings page

Caller specifies settings subpage which is validated against
whitelist.

Bug: b:131589705
Change-Id: I16fc5ae721eebf4c41c2470324a413865e8f91b1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1605440
Commit-Queue: Joel Hockey <joelhockey@chromium.org>
Reviewed-by: default avatarMattias Nissler <mnissler@chromium.org>
Reviewed-by: default avatarXiyuan Xia <xiyuan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#660228}
parent 0aa451e9
......@@ -12,6 +12,9 @@
#include "chrome/browser/chromeos/plugin_vm/plugin_vm_util.h"
#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
#include "chrome/browser/chromeos/profiles/profile_helper.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/ui/settings_window_manager_chromeos.h"
#include "chrome/common/webui_url_constants.h"
#include "chromeos/dbus/plugin_vm_service/plugin_vm_service.pb.h"
#include "dbus/message.h"
#include "third_party/cros_system_api/dbus/service_constants.h"
......@@ -30,6 +33,12 @@ void PluginVmServiceProvider::Start(
weak_ptr_factory_.GetWeakPtr()),
base::BindRepeating(&PluginVmServiceProvider::OnExported,
weak_ptr_factory_.GetWeakPtr()));
exported_object->ExportMethod(
kPluginVmServiceInterface, kPluginVmServiceShowSettingsPage,
base::BindRepeating(&PluginVmServiceProvider::ShowSettingsPage,
weak_ptr_factory_.GetWeakPtr()),
base::BindRepeating(&PluginVmServiceProvider::OnExported,
weak_ptr_factory_.GetWeakPtr()));
}
void PluginVmServiceProvider::OnExported(const std::string& interface_name,
......@@ -54,4 +63,35 @@ void PluginVmServiceProvider::GetLicenseData(
response_sender.Run(std::move(response));
}
void PluginVmServiceProvider::ShowSettingsPage(
dbus::MethodCall* method_call,
dbus::ExportedObject::ResponseSender response_sender) {
dbus::MessageReader reader(method_call);
plugin_vm_service::ShowSettingsPageRequest request;
if (!reader.PopArrayOfBytesAsProto(&request)) {
constexpr char error_message[] =
"Unable to parse ShowSettingsPageRequest from message";
LOG(ERROR) << error_message;
response_sender.Run(dbus::ErrorResponse::FromMethodCall(
method_call, DBUS_ERROR_INVALID_ARGS, error_message));
return;
}
// Validate subpage path.
if ((request.subpage_path() != chrome::kPluginVmDetailsSubPage) &&
(request.subpage_path() != chrome::kPluginVmSharedPathSubPage)) {
constexpr char error_message[] = "Invalid subpage_path";
LOG(ERROR) << error_message;
response_sender.Run(dbus::ErrorResponse::FromMethodCall(
method_call, DBUS_ERROR_INVALID_ARGS, error_message));
return;
}
chrome::SettingsWindowManager::GetInstance()->ShowOSSettings(
ProfileManager::GetPrimaryUserProfile(), request.subpage_path());
response_sender.Run(dbus::Response::FromMethodCall(method_call));
}
} // namespace chromeos
......@@ -18,7 +18,8 @@ class MethodCall;
namespace chromeos {
// This class exports D-Bus methods for querying PluginVm information.
// This class exports D-Bus methods for querying PluginVm information,
// and to show the PluginVm settings page.
//
// GetLicenseData:
// % dbus-send --system --type=method_call --print-reply
......@@ -32,6 +33,13 @@ namespace chromeos {
// string device_id = 2; // If it is available, this contains the
// // directory API ID, if not, this contains
// // the empty string.
//
// ShowSettingsPage:
// % dbus-send --system --type=method_call --print-reply
// --dest=org.chromium.PluginVmService /org/chromium/PluginVmService
// org.chromium.PluginVmServiceInterface.ShowSettingsPage
// array:byte:0x0a,0x10,0x70,0x6c,0x75,0x67,0x69,0x6e,0x56,0x6d,0x2f,0x64,
// 0x65,0x74,0x61,0x69,0x6c,0x73
// })
class PluginVmServiceProvider
: public CrosDBusService::ServiceProviderInterface {
......@@ -53,6 +61,10 @@ class PluginVmServiceProvider
void GetLicenseData(dbus::MethodCall* method_call,
dbus::ExportedObject::ResponseSender response_sender);
// Called from PluginVm process to show the settings page.
void ShowSettingsPage(dbus::MethodCall* method_call,
dbus::ExportedObject::ResponseSender response_sender);
// Keep this last so that all weak pointers will be invalidated at the
// beginning of destruction.
base::WeakPtrFactory<PluginVmServiceProvider> weak_ptr_factory_;
......
......@@ -365,6 +365,8 @@ const char kInternetSubPage[] = "internet";
const char kConnectedDevicesSubPage[] = "multidevice/features";
const char kLockScreenSubPage[] = "lockScreen";
const char kNetworkDetailSubPage[] = "networkDetail";
const char kPluginVmDetailsSubPage[] = "pluginVm/details";
const char kPluginVmSharedPathSubPage[] = "pluginVm/sharedPath";
const char kPowerSubPage[] = "power";
const char kSmartLockSettingsSubPage[] = "multidevice/features/smartLock";
const char kSmbSharesPageAddDialog[] = "smbShares?showAddShare=true";
......
......@@ -327,6 +327,8 @@ extern const char kInternetSubPage[];
extern const char kConnectedDevicesSubPage[];
extern const char kLockScreenSubPage[];
extern const char kNetworkDetailSubPage[];
extern const char kPluginVmDetailsSubPage[];
extern const char kPluginVmSharedPathSubPage[];
extern const char kPowerSubPage[];
extern const char kSmartLockSettingsSubPage[];
extern const char kSmbSharesPage[];
......
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