Commit 60838521 authored by Regan Hsu's avatar Regan Hsu Committed by Commit Bot

[CrOS PhoneHub] Expose Notification Access Setup operation status to JS.

* Plumbs PhoneHubManager from OsSettingsManager to MultideviceSection,
  and from there NotificationAccessManager to MultideviceHandler.
* MultideviceHandler will receive NotificationAccessSetupOperation
  Status and notify the JS layer.
* MultideviceHandler listens to Cancel and Start setup events.

Bug: 1106937
Change-Id: I28a755da5f535b6b3039f1950f3458e6b3444952
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2364020
Commit-Queue: Regan Hsu <hsuregan@chromium.org>
Reviewed-by: default avatarKyle Horimoto <khorimoto@chromium.org>
Cr-Commit-Position: refs/heads/master@{#800021}
parent a60e4d52
......@@ -3623,6 +3623,7 @@ source_set("unit_tests") {
"//chromeos/attestation:test_support",
"//chromeos/audio",
"//chromeos/components/multidevice:test_support",
"//chromeos/components/phonehub:test_support",
"//chromeos/components/proximity_auth",
"//chromeos/components/proximity_auth:test_support",
"//chromeos/components/tether:test_support",
......
......@@ -2522,6 +2522,7 @@ static_library("ui") {
"//chromeos/components/multidevice",
"//chromeos/components/multidevice/debug_webui",
"//chromeos/components/multidevice/logging",
"//chromeos/components/phonehub",
"//chromeos/components/print_management",
"//chromeos/components/proximity_auth",
"//chromeos/components/quick_answers",
......
......@@ -16,7 +16,9 @@
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_dialog.h"
#include "chromeos/components/multidevice/logging/logging.h"
#include "chromeos/components/phonehub/notification_access_manager.h"
#include "chromeos/components/proximity_auth/proximity_auth_pref_names.h"
#include "chromeos/constants/chromeos_features.h"
#include "chromeos/services/multidevice_setup/public/cpp/prefs.h"
#include "components/content_settings/core/common/content_settings_pattern.h"
#include "components/prefs/pref_service.h"
......@@ -60,11 +62,13 @@ void OnRetrySetHostNowResult(bool success) {
MultideviceHandler::MultideviceHandler(
PrefService* prefs,
multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client,
phonehub::NotificationAccessManager* notification_access_manager,
multidevice_setup::AndroidSmsPairingStateTracker*
android_sms_pairing_state_tracker,
android_sms::AndroidSmsAppManager* android_sms_app_manager)
: prefs_(prefs),
multidevice_setup_client_(multidevice_setup_client),
notification_access_manager_(notification_access_manager),
android_sms_pairing_state_tracker_(android_sms_pairing_state_tracker),
android_sms_app_manager_(android_sms_app_manager),
multidevice_setup_observer_(this),
......@@ -116,6 +120,14 @@ void MultideviceHandler::RegisterMessages() {
"getAndroidSmsInfo",
base::BindRepeating(&MultideviceHandler::HandleGetAndroidSmsInfo,
base::Unretained(this)));
web_ui()->RegisterMessageCallback(
"attemptNotificationSetup",
base::BindRepeating(&MultideviceHandler::HandleAttemptNotificationSetup,
base::Unretained(this)));
web_ui()->RegisterMessageCallback(
"cancelNotificationSetup",
base::BindRepeating(&MultideviceHandler::HandleCancelNotificationSetup,
base::Unretained(this)));
}
void MultideviceHandler::OnJavascriptAllowed() {
......@@ -148,6 +160,9 @@ void MultideviceHandler::OnJavascriptDisallowed() {
if (multidevice_setup_client_)
multidevice_setup_observer_.Remove(multidevice_setup_client_);
if (notification_access_manager_)
notification_access_operation_.reset();
if (android_sms_pairing_state_tracker_) {
android_sms_pairing_state_tracker_observer_.Remove(
android_sms_pairing_state_tracker_);
......@@ -337,7 +352,6 @@ MultideviceHandler::GenerateAndroidSmsInfo() {
}
void MultideviceHandler::HandleGetAndroidSmsInfo(const base::ListValue* args) {
AllowJavascript();
CHECK_EQ(1U, args->GetSize());
const base::Value* callback_id;
CHECK(args->Get(0, &callback_id));
......@@ -345,6 +359,39 @@ void MultideviceHandler::HandleGetAndroidSmsInfo(const base::ListValue* args) {
ResolveJavascriptCallback(*callback_id, *GenerateAndroidSmsInfo());
}
void MultideviceHandler::HandleAttemptNotificationSetup(
const base::ListValue* args) {
DCHECK(features::IsPhoneHubEnabled());
DCHECK(!notification_access_operation_);
if (notification_access_manager_->HasAccessBeenGranted()) {
PA_LOG(WARNING) << "Phonehub notification access has already been granted, "
"returning early.";
return;
}
notification_access_operation_ =
notification_access_manager_->AttemptNotificationSetup(/*delegate=*/this);
DCHECK(notification_access_operation_);
}
void MultideviceHandler::HandleCancelNotificationSetup(
const base::ListValue* args) {
DCHECK(features::IsPhoneHubEnabled());
DCHECK(notification_access_operation_);
notification_access_operation_.reset();
}
void MultideviceHandler::OnStatusChange(
phonehub::NotificationAccessSetupOperation::Status new_status) {
FireWebUIListener("notification-access-setup-operation-status-changed",
base::Value(static_cast<int32_t>(new_status)));
if (phonehub::NotificationAccessSetupOperation::IsFinalStatus(new_status))
notification_access_operation_.reset();
}
void MultideviceHandler::OnSetFeatureStateEnabledResult(
const std::string& js_callback_id,
bool success) {
......
......@@ -12,6 +12,7 @@
#include "chrome/browser/chromeos/android_sms/android_sms_service_factory.h"
#include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h"
#include "chromeos/components/multidevice/remote_device_ref.h"
#include "chromeos/components/phonehub/notification_access_setup_operation.h"
#include "chromeos/services/multidevice_setup/public/cpp/multidevice_setup_client.h"
#include "chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom-forward.h"
#include "components/prefs/pref_change_registrar.h"
......@@ -24,6 +25,10 @@ class DictionaryValue;
namespace chromeos {
namespace phonehub {
class NotificationAccessManager;
} // namespace phonehub
namespace settings {
// Chrome "Multidevice" (a.k.a. "Connected Devices") settings page UI handler.
......@@ -31,11 +36,13 @@ class MultideviceHandler
: public ::settings::SettingsPageUIHandler,
public multidevice_setup::MultiDeviceSetupClient::Observer,
public multidevice_setup::AndroidSmsPairingStateTracker::Observer,
public android_sms::AndroidSmsAppManager::Observer {
public android_sms::AndroidSmsAppManager::Observer,
public phonehub::NotificationAccessSetupOperation::Delegate {
public:
MultideviceHandler(
PrefService* prefs,
multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client,
phonehub::NotificationAccessManager* notification_access_manager,
multidevice_setup::AndroidSmsPairingStateTracker*
android_sms_pairing_state_tracker,
android_sms::AndroidSmsAppManager* android_sms_app_manager);
......@@ -58,6 +65,10 @@ class MultideviceHandler
const multidevice_setup::MultiDeviceSetupClient::FeatureStatesMap&
feature_states_map) override;
// NotificationAccessSetupOperation::Delegate:
void OnStatusChange(
phonehub::NotificationAccessSetupOperation::Status new_status) override;
// multidevice_setup::AndroidSmsPairingStateTracker::Observer:
void OnPairingStateChanged() override;
......@@ -78,6 +89,8 @@ class MultideviceHandler
void HandleSetSmartLockSignInEnabled(const base::ListValue* args);
void HandleGetSmartLockSignInAllowed(const base::ListValue* args);
void HandleGetAndroidSmsInfo(const base::ListValue* args);
void HandleAttemptNotificationSetup(const base::ListValue* args);
void HandleCancelNotificationSetup(const base::ListValue* args);
void OnSetFeatureStateEnabledResult(const std::string& js_callback_id,
bool success);
......@@ -110,6 +123,11 @@ class MultideviceHandler
GetFeatureStatesMap();
multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client_;
phonehub::NotificationAccessManager* notification_access_manager_;
std::unique_ptr<phonehub::NotificationAccessSetupOperation>
notification_access_operation_;
multidevice_setup::AndroidSmsPairingStateTracker*
android_sms_pairing_state_tracker_;
android_sms::AndroidSmsAppManager* android_sms_app_manager_;
......
......@@ -7,9 +7,12 @@
#include <memory>
#include "base/macros.h"
#include "base/test/scoped_feature_list.h"
#include "chrome/browser/chromeos/android_sms/android_sms_urls.h"
#include "chrome/browser/chromeos/android_sms/fake_android_sms_app_manager.h"
#include "chromeos/components/multidevice/remote_device_test_util.h"
#include "chromeos/components/phonehub/fake_notification_access_manager.h"
#include "chromeos/constants/chromeos_features.h"
#include "chromeos/services/multidevice_setup/public/cpp/fake_android_sms_pairing_state_tracker.h"
#include "chromeos/services/multidevice_setup/public/cpp/fake_multidevice_setup_client.h"
#include "components/content_settings/core/common/content_settings_pattern.h"
......@@ -28,11 +31,13 @@ class TestMultideviceHandler : public MultideviceHandler {
TestMultideviceHandler(
PrefService* prefs,
multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client,
phonehub::NotificationAccessManager* notification_access_manager,
multidevice_setup::AndroidSmsPairingStateTracker*
android_sms_pairing_state_tracker,
android_sms::AndroidSmsAppManager* android_sms_app_manager)
: MultideviceHandler(prefs,
multidevice_setup_client,
notification_access_manager,
android_sms_pairing_state_tracker,
android_sms_app_manager) {}
~TestMultideviceHandler() override = default;
......@@ -153,6 +158,9 @@ class MultideviceHandlerTest : public testing::Test {
fake_multidevice_setup_client_ =
std::make_unique<multidevice_setup::FakeMultiDeviceSetupClient>();
fake_notification_access_manager_ =
std::make_unique<phonehub::FakeNotificationAccessManager>(
/*has_access_been_granted=*/false);
fake_android_sms_pairing_state_tracker_ = std::make_unique<
multidevice_setup::FakeAndroidSmsPairingStateTracker>();
fake_android_sms_app_manager_ =
......@@ -162,11 +170,14 @@ class MultideviceHandlerTest : public testing::Test {
handler_ = std::make_unique<TestMultideviceHandler>(
prefs_.get(), fake_multidevice_setup_client_.get(),
fake_notification_access_manager_.get(),
fake_android_sms_pairing_state_tracker_.get(),
fake_android_sms_app_manager_.get());
handler_->set_web_ui(test_web_ui_.get());
handler_->RegisterMessages();
handler_->AllowJavascript();
scoped_feature_list_.InitWithFeatures({chromeos::features::kPhoneHub}, {});
}
void CallGetPageContentData() {
......@@ -217,6 +228,20 @@ class MultideviceHandlerTest : public testing::Test {
call_data.arg3()->FindKey("enabled")->GetBool());
}
void CallAttemptNotificationSetup(bool has_access_been_granted) {
fake_notification_access_manager()->SetHasAccessBeenGranted(
has_access_been_granted);
base::ListValue empty_args;
test_web_ui()->HandleReceivedMessage("attemptNotificationSetup",
&empty_args);
}
void CallCancelNotificationSetup() {
base::ListValue empty_args;
test_web_ui()->HandleReceivedMessage("cancelNotificationSetup",
&empty_args);
}
void SimulateHostStatusUpdate(
multidevice_setup::mojom::HostStatus host_status,
const base::Optional<multidevice::RemoteDeviceRef>& host_device) {
......@@ -325,6 +350,31 @@ class MultideviceHandlerTest : public testing::Test {
return fake_android_sms_app_manager_.get();
}
phonehub::FakeNotificationAccessManager* fake_notification_access_manager() {
return fake_notification_access_manager_.get();
}
void SimulateNotificationOptInStatusChange(
phonehub::NotificationAccessSetupOperation::Status status) {
size_t call_data_count_before_call = test_web_ui()->call_data().size();
fake_notification_access_manager()->SetNotificationSetupOperationStatus(
status);
EXPECT_EQ(call_data_count_before_call + 1u,
test_web_ui()->call_data().size());
const content::TestWebUI::CallData& call_data =
CallDataAtIndex(call_data_count_before_call);
EXPECT_EQ("cr.webUIListenerCallback", call_data.function_name());
EXPECT_EQ("notification-access-setup-operation-status-changed",
call_data.arg1()->GetString());
EXPECT_EQ(call_data.arg2()->GetInt(), static_cast<int32_t>(status));
}
bool IsNotificationAccessSetupOperationInProgress() {
return fake_notification_access_manager()->IsSetupOperationInProgress();
}
const multidevice::RemoteDeviceRef test_device_;
private:
......@@ -339,6 +389,8 @@ class MultideviceHandlerTest : public testing::Test {
std::unique_ptr<content::TestWebUI> test_web_ui_;
std::unique_ptr<multidevice_setup::FakeMultiDeviceSetupClient>
fake_multidevice_setup_client_;
std::unique_ptr<phonehub::FakeNotificationAccessManager>
fake_notification_access_manager_;
std::unique_ptr<multidevice_setup::FakeAndroidSmsPairingStateTracker>
fake_android_sms_pairing_state_tracker_;
......@@ -351,9 +403,60 @@ class MultideviceHandlerTest : public testing::Test {
std::unique_ptr<TestMultideviceHandler> handler_;
base::test::ScopedFeatureList scoped_feature_list_;
DISALLOW_COPY_AND_ASSIGN(MultideviceHandlerTest);
};
TEST_F(MultideviceHandlerTest, NotificationSetupFlow) {
using Status = phonehub::NotificationAccessSetupOperation::Status;
// Simulate success flow.
CallAttemptNotificationSetup(/*has_access_been_granted=*/false);
EXPECT_TRUE(IsNotificationAccessSetupOperationInProgress());
SimulateNotificationOptInStatusChange(Status::kConnecting);
EXPECT_TRUE(IsNotificationAccessSetupOperationInProgress());
SimulateNotificationOptInStatusChange(
Status::kSentMessageToPhoneAndWaitingForResponse);
EXPECT_TRUE(IsNotificationAccessSetupOperationInProgress());
SimulateNotificationOptInStatusChange(Status::kCompletedSuccessfully);
EXPECT_FALSE(IsNotificationAccessSetupOperationInProgress());
// Simulate cancel flow.
CallAttemptNotificationSetup(/*has_access_been_granted=*/false);
EXPECT_TRUE(IsNotificationAccessSetupOperationInProgress());
CallCancelNotificationSetup();
EXPECT_FALSE(IsNotificationAccessSetupOperationInProgress());
// Simulate failure via time-out flow.
CallAttemptNotificationSetup(/*has_access_been_granted=*/false);
EXPECT_TRUE(IsNotificationAccessSetupOperationInProgress());
SimulateNotificationOptInStatusChange(Status::kConnecting);
EXPECT_TRUE(IsNotificationAccessSetupOperationInProgress());
SimulateNotificationOptInStatusChange(Status::kTimedOutConnecting);
EXPECT_FALSE(IsNotificationAccessSetupOperationInProgress());
// Simulate failure via connected then disconnected flow.
CallAttemptNotificationSetup(/*has_access_been_granted=*/false);
EXPECT_TRUE(IsNotificationAccessSetupOperationInProgress());
SimulateNotificationOptInStatusChange(Status::kConnecting);
EXPECT_TRUE(IsNotificationAccessSetupOperationInProgress());
SimulateNotificationOptInStatusChange(Status::kConnectionDisconnected);
EXPECT_FALSE(IsNotificationAccessSetupOperationInProgress());
// If access has already been granted, a setup operation should not occur.
CallAttemptNotificationSetup(/*has_access_been_granted=*/true);
EXPECT_FALSE(IsNotificationAccessSetupOperationInProgress());
}
TEST_F(MultideviceHandlerTest, PageContentData) {
CallGetPageContentData();
CallGetPageContentData();
......
......@@ -18,6 +18,7 @@
#include "chrome/common/url_constants.h"
#include "chrome/common/webui_url_constants.h"
#include "chrome/grit/generated_resources.h"
#include "chromeos/components/phonehub/phone_hub_manager.h"
#include "chromeos/constants/chromeos_features.h"
#include "chromeos/services/multidevice_setup/public/cpp/prefs.h"
#include "chromeos/services/multidevice_setup/public/cpp/url_provider.h"
......@@ -195,10 +196,12 @@ MultiDeviceSection::MultiDeviceSection(
Profile* profile,
SearchTagRegistry* search_tag_registry,
multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client,
phonehub::PhoneHubManager* phone_hub_manager,
android_sms::AndroidSmsService* android_sms_service,
PrefService* pref_service)
: OsSettingsSection(profile, search_tag_registry),
multidevice_setup_client_(multidevice_setup_client),
phone_hub_manager_(phone_hub_manager),
android_sms_service_(android_sms_service),
pref_service_(pref_service) {
if (base::FeatureList::IsEnabled(::features::kNearbySharing)) {
......@@ -321,6 +324,8 @@ void MultiDeviceSection::AddHandlers(content::WebUI* web_ui) {
web_ui->AddMessageHandler(
std::make_unique<chromeos::settings::MultideviceHandler>(
pref_service_, multidevice_setup_client_,
phone_hub_manager_ ? phone_hub_manager_->notification_access_manager()
: nullptr,
android_sms_service_
? android_sms_service_->android_sms_pairing_state_tracker()
: nullptr,
......
......@@ -21,6 +21,10 @@ namespace android_sms {
class AndroidSmsService;
} // namespace android_sms
namespace phonehub {
class PhoneHubManager;
} // namespace phonehub
namespace settings {
class SearchTagRegistry;
......@@ -36,6 +40,7 @@ class MultiDeviceSection
Profile* profile,
SearchTagRegistry* search_tag_registry,
multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client,
phonehub::PhoneHubManager* phone_hub_manager,
android_sms::AndroidSmsService* android_sms_service,
PrefService* pref_service);
~MultiDeviceSection() override;
......@@ -59,6 +64,7 @@ class MultiDeviceSection
void OnNearbySharingEnabledChanged();
multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client_;
phonehub::PhoneHubManager* phone_hub_manager_;
android_sms::AndroidSmsService* android_sms_service_;
PrefService* pref_service_;
PrefChangeRegistrar pref_change_registrar_;
......
......@@ -22,6 +22,7 @@ OsSettingsManager::OsSettingsManager(
Profile* profile,
local_search_service::LocalSearchService* local_search_service,
multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client,
phonehub::PhoneHubManager* phone_hub_manager,
syncer::SyncService* sync_service,
SupervisedUserService* supervised_user_service,
KerberosCredentialsManager* kerberos_credentials_manager,
......@@ -35,6 +36,7 @@ OsSettingsManager::OsSettingsManager(
std::make_unique<OsSettingsSections>(profile,
search_tag_registry_.get(),
multidevice_setup_client,
phone_hub_manager,
sync_service,
supervised_user_service,
kerberos_credentials_manager,
......
......@@ -44,6 +44,10 @@ namespace multidevice_setup {
class MultiDeviceSetupClient;
} // namespace multidevice_setup
namespace phonehub {
class PhoneHubManager;
} // namespace phonehub
namespace settings {
class Hierarchy;
......@@ -82,6 +86,7 @@ class OsSettingsManager : public KeyedService {
Profile* profile,
local_search_service::LocalSearchService* local_search_service,
multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client,
phonehub::PhoneHubManager* phone_hub_manager,
syncer::SyncService* sync_service,
SupervisedUserService* supervised_user_service,
KerberosCredentialsManager* kerberos_credentials_manager,
......
......@@ -7,6 +7,7 @@
#include "chrome/browser/chromeos/android_sms/android_sms_service_factory.h"
#include "chrome/browser/chromeos/kerberos/kerberos_credentials_manager_factory.h"
#include "chrome/browser/chromeos/multidevice_setup/multidevice_setup_client_factory.h"
#include "chrome/browser/chromeos/phonehub/phone_hub_manager_factory.h"
#include "chrome/browser/chromeos/printing/cups_printers_manager_factory.h"
#include "chrome/browser/chromeos/profiles/profile_helper.h"
#include "chrome/browser/profiles/incognito_helpers.h"
......@@ -40,6 +41,7 @@ OsSettingsManagerFactory::OsSettingsManagerFactory()
BrowserContextDependencyManager::GetInstance()) {
DependsOn(local_search_service::LocalSearchServiceFactory::GetInstance());
DependsOn(multidevice_setup::MultiDeviceSetupClientFactory::GetInstance());
DependsOn(phonehub::PhoneHubManagerFactory::GetInstance());
DependsOn(ProfileSyncServiceFactory::GetInstance());
DependsOn(SupervisedUserServiceFactory::GetInstance());
DependsOn(KerberosCredentialsManagerFactory::GetInstance());
......@@ -69,6 +71,7 @@ KeyedService* OsSettingsManagerFactory::BuildServiceInstanceFor(
local_search_service::LocalSearchServiceFactory::GetForBrowserContext(
context),
multidevice_setup::MultiDeviceSetupClientFactory::GetForProfile(profile),
phonehub::PhoneHubManagerFactory::GetForProfile(profile),
ProfileSyncServiceFactory::GetForProfile(profile),
SupervisedUserServiceFactory::GetForProfile(profile),
kerberos_credentials_manager,
......
......@@ -24,6 +24,7 @@
#include "chrome/browser/ui/webui/settings/chromeos/privacy_section.h"
#include "chrome/browser/ui/webui/settings/chromeos/reset_section.h"
#include "chrome/browser/ui/webui/settings/chromeos/search_section.h"
#include "chromeos/components/phonehub/phone_hub_manager.h"
namespace chromeos {
namespace settings {
......@@ -32,6 +33,7 @@ OsSettingsSections::OsSettingsSections(
Profile* profile,
SearchTagRegistry* search_tag_registry,
multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client,
phonehub::PhoneHubManager* phone_hub_manager,
syncer::SyncService* sync_service,
SupervisedUserService* supervised_user_service,
KerberosCredentialsManager* kerberos_credentials_manager,
......@@ -54,7 +56,7 @@ OsSettingsSections::OsSettingsSections(
sections_.push_back(std::move(bluetooth_section));
auto multidevice_section = std::make_unique<MultiDeviceSection>(
profile, search_tag_registry, multidevice_setup_client,
profile, search_tag_registry, multidevice_setup_client, phone_hub_manager,
android_sms_service, profile->GetPrefs());
sections_map_[mojom::Section::kMultiDevice] = multidevice_section.get();
sections_.push_back(std::move(multidevice_section));
......
......@@ -36,6 +36,10 @@ namespace multidevice_setup {
class MultiDeviceSetupClient;
} // namespace multidevice_setup
namespace phonehub {
class PhoneHubManager;
} // namespace phonehub
namespace settings {
// Collection of all OsSettingsSection implementations.
......@@ -45,6 +49,7 @@ class OsSettingsSections {
Profile* profile,
SearchTagRegistry* search_tag_registry,
multidevice_setup::MultiDeviceSetupClient* multidevice_setup_client,
phonehub::PhoneHubManager* phone_hub_manager,
syncer::SyncService* sync_service,
SupervisedUserService* supervised_user_service,
KerberosCredentialsManager* kerberos_credentials_manager,
......
......@@ -100,6 +100,7 @@
#include "chrome/browser/chromeos/android_sms/android_sms_app_manager.h"
#include "chrome/browser/chromeos/android_sms/android_sms_service_factory.h"
#include "chrome/browser/chromeos/multidevice_setup/multidevice_setup_client_factory.h"
#include "chrome/browser/chromeos/phonehub/phone_hub_manager_factory.h"
#include "chrome/browser/chromeos/profiles/profile_helper.h"
#include "chrome/browser/ui/webui/certificate_provisioning_ui_handler.h"
#include "chrome/browser/ui/webui/settings/chromeos/account_manager_handler.h"
......@@ -109,6 +110,7 @@
#include "chrome/grit/browser_resources.h"
#include "chromeos/components/account_manager/account_manager.h"
#include "chromeos/components/account_manager/account_manager_factory.h"
#include "chromeos/components/phonehub/phone_hub_manager.h"
#include "chromeos/constants/chromeos_features.h"
#include "chromeos/login/auth/password_visibility_utils.h"
#include "components/arc/arc_util.h"
......@@ -409,11 +411,15 @@ void SettingsUI::InitBrowserSettingsWebUIHandlers() {
chromeos::android_sms::AndroidSmsService* android_sms_service =
chromeos::android_sms::AndroidSmsServiceFactory::GetForBrowserContext(
profile);
chromeos::phonehub::PhoneHubManager* phone_hub_manager =
chromeos::phonehub::PhoneHubManagerFactory::GetForProfile(profile);
web_ui()->AddMessageHandler(
std::make_unique<chromeos::settings::MultideviceHandler>(
profile->GetPrefs(),
chromeos::multidevice_setup::MultiDeviceSetupClientFactory::
GetForProfile(profile),
phone_hub_manager ? phone_hub_manager->notification_access_manager()
: nullptr,
android_sms_service
? android_sms_service->android_sms_pairing_state_tracker()
: nullptr,
......
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