Commit 77f5e3f9 authored by Yue Li's avatar Yue Li Committed by Commit Bot

Guard sending app capabilities with Device Apps bit

If Device Apps bit is disabled, we should not send the list of installed
apps to the server. Also disable the open app feature.

Bug: b/140584925
Test: Manual Test
Change-Id: Id998a23b9d5e34cf3515a4ef07fda538c16fa2ee
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1854819
Commit-Queue: Yue Li <updowndota@chromium.org>
Reviewed-by: default avatarTao Wu <wutao@chromium.org>
Reviewed-by: default avatarXiaohui Chen <xiaohuic@chromium.org>
Cr-Commit-Position: refs/heads/master@{#707045}
parent 3c10c8ab
......@@ -85,6 +85,9 @@ class COMPONENT_EXPORT(ASSISTANT_SERVICE) AssistantManagerService
// state value.
virtual void AddAndFireStateObserver(StateObserver* observer) = 0;
virtual void RemoveStateObserver(const StateObserver* observer) = 0;
// Sync the device apps user consent status.
virtual void SyncDeviceAppsStatus() = 0;
};
// Observes all state changes made to the |AssistantManagerService::State|.
......
......@@ -367,6 +367,12 @@ void AssistantManagerServiceImpl::RemoveStateObserver(
state_observers_.RemoveObserver(observer);
}
void AssistantManagerServiceImpl::SyncDeviceAppsStatus() {
assistant_settings_manager_->SyncDeviceAppsStatus(
base::BindOnce(&AssistantManagerServiceImpl::OnDeviceAppsEnabled,
weak_factory_.GetWeakPtr()));
}
void AssistantManagerServiceImpl::StartVoiceInteraction() {
platform_api_->SetMicState(true);
assistant_manager_->StartAssistantInteraction();
......@@ -1167,6 +1173,8 @@ void AssistantManagerServiceImpl::OnStartFinished() {
base::TimeTicks::Now() - started_time_;
UMA_HISTOGRAM_TIMES("Assistant.ServiceReadyTime", time_since_started);
SyncDeviceAppsStatus();
RegisterFallbackMediaHandler();
AddMediaControllerObserver();
......@@ -1508,6 +1516,12 @@ void AssistantManagerServiceImpl::OnAccessibilityStatusChanged(
UpdateInternalOptions(assistant_manager_internal_);
}
void AssistantManagerServiceImpl::OnDeviceAppsEnabled(bool enabled) {
display_connection_->SetDeviceAppsEnabled(enabled);
action_module_->SetAppSupportEnabled(
assistant::features::IsAppSupportEnabled() && enabled);
}
void AssistantManagerServiceImpl::StopAlarmTimerRinging() {
if (!assistant_manager_internal_)
return;
......
......@@ -122,6 +122,7 @@ class COMPONENT_EXPORT(ASSISTANT_SERVICE) AssistantManagerServiceImpl
const CommunicationErrorObserver* observer) override;
void AddAndFireStateObserver(StateObserver* observer) override;
void RemoveStateObserver(const StateObserver* observer) override;
void SyncDeviceAppsStatus() override;
// mojom::Assistant overrides:
void StartCachedScreenContextInteraction() override;
......@@ -273,6 +274,8 @@ class COMPONENT_EXPORT(ASSISTANT_SERVICE) AssistantManagerServiceImpl
void OnMediaControlAction(const std::string& action_name,
const std::string& media_action_args_proto);
void OnDeviceAppsEnabled(bool enabled);
void RegisterFallbackMediaHandler();
void AddMediaControllerObserver();
void RegisterAlarmsTimersListener();
......
......@@ -195,6 +195,22 @@ void AssistantSettingsManagerImpl::SyncSpeakerIdEnrollmentStatus() {
});
}
void AssistantSettingsManagerImpl::SyncDeviceAppsStatus(
base::OnceCallback<void(bool)> callback) {
DCHECK(main_task_runner()->RunsTasksInCurrentSequence());
SettingsUiSelector selector;
ConsentFlowUiSelector* consent_flow_ui =
selector.mutable_consent_flow_ui_selector();
consent_flow_ui->set_flow_id(
ActivityControlSettingsUiSelector::ASSISTANT_SUW_ONBOARDING_ON_CHROME_OS);
selector.set_gaia_user_context_ui(true);
GetSettings(
selector.SerializeAsString(),
base::BindOnce(&AssistantSettingsManagerImpl::HandleDeviceAppsStatusSync,
weak_factory_.GetWeakPtr(), std::move(callback)));
}
void AssistantSettingsManagerImpl::HandleSpeakerIdEnrollmentUpdate(
const assistant_client::SpeakerIdEnrollmentUpdate& update) {
DCHECK(main_task_runner()->RunsTasksInCurrentSequence());
......@@ -263,6 +279,34 @@ void AssistantSettingsManagerImpl::HandleStopSpeakerIdEnrollment(
callback.Run();
}
void AssistantSettingsManagerImpl::HandleDeviceAppsStatusSync(
base::OnceCallback<void(bool)> callback,
const std::string& settings) {
DCHECK(main_task_runner()->RunsTasksInCurrentSequence());
SettingsUi settings_ui;
if (!settings_ui.ParseFromString(settings)) {
LOG(ERROR) << "Failed to parse the response proto, set the DA bit to false";
std::move(callback).Run(false);
return;
}
if (!settings_ui.has_gaia_user_context_ui()) {
LOG(ERROR) << "Failed to get gaia user context, set the DA bit to false";
std::move(callback).Run(false);
return;
}
const auto& gaia_user_context_ui = settings_ui.gaia_user_context_ui();
if (!gaia_user_context_ui.has_device_apps_enabled()) {
LOG(ERROR) << "Failed to get the device apps bit, set it to false";
std::move(callback).Run(false);
return;
}
std::move(callback).Run(gaia_user_context_ui.device_apps_enabled());
}
void AssistantSettingsManagerImpl::UpdateServerDeviceSettings() {
DCHECK(main_task_runner()->RunsTasksInCurrentSequence());
......
......@@ -60,6 +60,8 @@ class AssistantSettingsManagerImpl : public AssistantSettingsManager {
StopSpeakerIdEnrollmentCallback callback) override;
void SyncSpeakerIdEnrollmentStatus() override;
void SyncDeviceAppsStatus(base::OnceCallback<void(bool)> callback);
void UpdateServerDeviceSettings();
private:
......@@ -68,6 +70,8 @@ class AssistantSettingsManagerImpl : public AssistantSettingsManager {
void HandleStopSpeakerIdEnrollment(base::RepeatingCallback<void()> callback);
void HandleSpeakerIdEnrollmentStatusSync(
const assistant_client::SpeakerIdEnrollmentStatus& status);
void HandleDeviceAppsStatusSync(base::OnceCallback<void(bool)> callback,
const std::string& settings);
ash::AssistantStateBase* assistant_state();
mojom::AssistantController* assistant_controller();
......
......@@ -43,6 +43,7 @@ class COMPONENT_EXPORT(ASSISTANT_SERVICE) FakeAssistantManagerServiceImpl
const CommunicationErrorObserver* observer) override {}
void AddAndFireStateObserver(StateObserver* observer) override;
void RemoveStateObserver(const StateObserver* observer) override;
void SyncDeviceAppsStatus() override {}
// mojom::Assistant overrides:
void StartCachedScreenContextInteraction() override;
......
......@@ -25,4 +25,8 @@ message GaiaUserContextUi {
// Whether Assistant is disabled by Dasher domain admin.
// This bit only makes sense for GAIA traffic.
optional bool assistant_disabled_by_dasher_domain = 4;
// Whether Device Apps is enabled to store user's apps which could help
// improve user experience across Google services.
optional bool device_apps_enabled = 6;
}
......@@ -262,6 +262,17 @@ void Service::OnLockStateChanged(bool locked) {
UpdateListeningState();
}
void Service::OnAssistantConsentStatusChanged(int consent_status) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
// Notify device apps status when user accepts activity control.
if (assistant_manager_service_ &&
assistant_manager_service_->GetState() ==
AssistantManagerService::State::RUNNING) {
assistant_manager_service_->SyncDeviceAppsStatus();
}
}
void Service::OnAssistantHotwordAlwaysOn(bool hotword_always_on) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
// No need to update hotword status if power source is connected.
......
......@@ -108,6 +108,7 @@ class COMPONENT_EXPORT(ASSISTANT_SERVICE) Service
void OnLockStateChanged(bool locked) override;
// ash::AssistantStateObserver overrides:
void OnAssistantConsentStatusChanged(int consent_status) override;
void OnAssistantHotwordAlwaysOn(bool hotword_always_on) override;
void OnAssistantSettingsEnabled(bool enabled) override;
void OnAssistantHotwordEnabled(bool enabled) override;
......
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