diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-12-10 16:19:40 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-12-10 16:01:50 +0000 |
commit | 51f6c2793adab2d864b3d2b360000ef8db1d3e92 (patch) | |
tree | 835b3b4446b012c75e80177cef9fbe6972cc7dbe /chromium/chrome/browser/ui/webui/chromeos/login | |
parent | 6036726eb981b6c4b42047513b9d3f4ac865daac (diff) |
BASELINE: Update Chromium to 71.0.3578.93
Change-Id: I6a32086c33670e1b033f8b10e6bf1fd4da1d105d
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'chromium/chrome/browser/ui/webui/chromeos/login')
38 files changed, 673 insertions, 787 deletions
diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/arc_terms_of_service_screen_handler.cc b/chromium/chrome/browser/ui/webui/chromeos/login/arc_terms_of_service_screen_handler.cc index 8b3d420b688..f1d7e7e852c 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/arc_terms_of_service_screen_handler.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/login/arc_terms_of_service_screen_handler.cc @@ -246,6 +246,8 @@ void ArcTermsOfServiceScreenHandler::DoShow() { Profile* profile = ProfileManager::GetActiveUserProfile(); CHECK(profile); + CallJS("clearDemoMode"); + // Enable ARC to match ArcSessionManager logic. ArcSessionManager expects that // ARC is enabled (prefs::kArcEnabled = true) on showing Terms of Service. If // user accepts ToS then prefs::kArcEnabled is left activated. If user skips diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/assistant_optin_flow_screen_handler.cc b/chromium/chrome/browser/ui/webui/chromeos/login/assistant_optin_flow_screen_handler.cc index 50203401165..9a63d3a5d32 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/assistant_optin_flow_screen_handler.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/login/assistant_optin_flow_screen_handler.cc @@ -4,12 +4,13 @@ #include "chrome/browser/ui/webui/chromeos/login/assistant_optin_flow_screen_handler.h" +#include "base/metrics/histogram_macros.h" +#include "chrome/browser/browser_process.h" #include "chrome/browser/chromeos/login/oobe_screen.h" #include "chrome/browser/chromeos/login/screens/assistant_optin_flow_screen.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_utils.h" -#include "chrome/grit/browser_resources.h" #include "chrome/grit/generated_resources.h" #include "chromeos/services/assistant/public/mojom/constants.mojom.h" #include "chromeos/services/assistant/public/proto/settings_ui.pb.h" @@ -26,6 +27,7 @@ constexpr char kJsScreenPath[] = "login.AssistantOptInFlowScreen"; constexpr char kSkipPressed[] = "skip-pressed"; constexpr char kNextPressed[] = "next-pressed"; constexpr char kFlowFinished[] = "flow-finished"; +constexpr char kReloadRequested[] = "reload-requested"; } // namespace @@ -45,6 +47,7 @@ AssistantOptInFlowScreenHandler::~AssistantOptInFlowScreenHandler() { void AssistantOptInFlowScreenHandler::DeclareLocalizedValues( ::login::LocalizedValuesBuilder* builder) { + builder->Add("locale", g_browser_process->GetApplicationLocale()); builder->Add("assistantOptinLoading", IDS_VOICE_INTERACTION_VALUE_PROP_LOADING); builder->Add("assistantOptinLoadErrorTitle", @@ -59,33 +62,42 @@ void AssistantOptInFlowScreenHandler::DeclareLocalizedValues( builder->Add("assistantReadyTitle", IDS_ASSISTANT_READY_SCREEN_TITLE); builder->Add("assistantReadyMessage", IDS_ASSISTANT_READY_SCREEN_MESSAGE); builder->Add("assistantReadyButton", IDS_ASSISTANT_DONE_BUTTON); + builder->Add("back", IDS_EULA_BACK_BUTTON); + builder->Add("next", IDS_EULA_NEXT_BUTTON); } void AssistantOptInFlowScreenHandler::RegisterMessages() { - AddCallback( - "assistant.ValuePropScreen.userActed", + AddPrefixedCallback( + "ValuePropScreen.userActed", &AssistantOptInFlowScreenHandler::HandleValuePropScreenUserAction); - AddCallback( - "assistant.ThirdPartyScreen.userActed", + AddPrefixedCallback( + "ThirdPartyScreen.userActed", &AssistantOptInFlowScreenHandler::HandleThirdPartyScreenUserAction); - AddCallback("assistant.GetMoreScreen.userActed", - &AssistantOptInFlowScreenHandler::HandleGetMoreScreenUserAction); - AddCallback("assistant.ReadyScreen.userActed", - &AssistantOptInFlowScreenHandler::HandleReadyScreenUserAction); - AddCallback("assistant.ValuePropScreen.screenShown", - &AssistantOptInFlowScreenHandler::HandleValuePropScreenShown); - AddCallback("assistant.ThirdPartyScreen.screenShown", - &AssistantOptInFlowScreenHandler::HandleThirdPartyScreenShown); - AddCallback("assistant.GetMoreScreen.screenShown", - &AssistantOptInFlowScreenHandler::HandleGetMoreScreenShown); - AddCallback("assistant.ReadyScreen.screenShown", - &AssistantOptInFlowScreenHandler::HandleReadyScreenShown); - AddCallback("assistantOptInFlow.hotwordResult", - &AssistantOptInFlowScreenHandler::HandleHotwordResult); - AddCallback("assistantOptInFlow.flowFinished", - &AssistantOptInFlowScreenHandler::HandleFlowFinished); - AddCallback("assistantOptInFlow.initialized", - &AssistantOptInFlowScreenHandler::HandleFlowInitialized); + AddPrefixedCallback( + "GetMoreScreen.userActed", + &AssistantOptInFlowScreenHandler::HandleGetMoreScreenUserAction); + AddPrefixedCallback( + "ReadyScreen.userActed", + &AssistantOptInFlowScreenHandler::HandleReadyScreenUserAction); + AddPrefixedCallback( + "ValuePropScreen.screenShown", + &AssistantOptInFlowScreenHandler::HandleValuePropScreenShown); + AddPrefixedCallback( + "ThirdPartyScreen.screenShown", + &AssistantOptInFlowScreenHandler::HandleThirdPartyScreenShown); + AddPrefixedCallback( + "GetMoreScreen.screenShown", + &AssistantOptInFlowScreenHandler::HandleGetMoreScreenShown); + AddPrefixedCallback("ReadyScreen.screenShown", + &AssistantOptInFlowScreenHandler::HandleReadyScreenShown); + AddPrefixedCallback("LoadingScreen.timeout", + &AssistantOptInFlowScreenHandler::HandleLoadingTimeout); + AddPrefixedCallback("hotwordResult", + &AssistantOptInFlowScreenHandler::HandleHotwordResult); + AddPrefixedCallback("flowFinished", + &AssistantOptInFlowScreenHandler::HandleFlowFinished); + AddPrefixedCallback("initialized", + &AssistantOptInFlowScreenHandler::HandleFlowInitialized); } void AssistantOptInFlowScreenHandler::Bind(AssistantOptInFlowScreen* screen) { @@ -101,22 +113,13 @@ void AssistantOptInFlowScreenHandler::Unbind() { } void AssistantOptInFlowScreenHandler::Show() { - // Make sure enable Assistant service since we need it during the flow. - PrefService* prefs = ProfileManager::GetActiveUserProfile()->GetPrefs(); - prefs->SetBoolean(arc::prefs::kVoiceInteractionEnabled, true); - - if (arc::VoiceInteractionControllerClient::Get()->voice_interaction_state() == - ash::mojom::VoiceInteractionState::NOT_READY) { - arc::VoiceInteractionControllerClient::Get()->AddObserver(this); - } else { - BindAssistantSettingsManager(); - } - if (!page_is_ready() || !screen_) { show_on_init_ = true; return; } + SetupAssistantConnection(); + ShowScreen(kScreenId); } @@ -130,6 +133,19 @@ void AssistantOptInFlowScreenHandler::Initialize() { show_on_init_ = false; } +void AssistantOptInFlowScreenHandler::SetupAssistantConnection() { + // Make sure enable Assistant service since we need it during the flow. + PrefService* prefs = ProfileManager::GetActiveUserProfile()->GetPrefs(); + prefs->SetBoolean(arc::prefs::kVoiceInteractionEnabled, true); + + if (arc::VoiceInteractionControllerClient::Get()->voice_interaction_state() == + ash::mojom::VoiceInteractionState::NOT_READY) { + arc::VoiceInteractionControllerClient::Get()->AddObserver(this); + } else { + BindAssistantSettingsManager(); + } +} + void AssistantOptInFlowScreenHandler::ShowNextScreen() { CallJS("showNextScreen"); } @@ -137,6 +153,7 @@ void AssistantOptInFlowScreenHandler::ShowNextScreen() { void AssistantOptInFlowScreenHandler::OnActivityControlOptInResult( bool opted_in) { Profile* profile = ProfileManager::GetActiveUserProfile(); + RecordActivityControlConsent(profile, ui_audit_key_, opted_in); if (opted_in) { RecordAssistantOptInStatus(ACTIVITY_CONTROL_ACCEPTED); settings_manager_->UpdateSettings( @@ -148,10 +165,8 @@ void AssistantOptInFlowScreenHandler::OnActivityControlOptInResult( RecordAssistantOptInStatus(ACTIVITY_CONTROL_SKIPPED); profile->GetPrefs()->SetBoolean( arc::prefs::kVoiceInteractionActivityControlAccepted, false); - screen_->OnUserAction(kFlowFinished); + HandleFlowFinished(); } - - RecordActivityControlConsent(profile, ui_audit_key_, opted_in); } void AssistantOptInFlowScreenHandler::OnEmailOptInResult(bool opted_in) { @@ -196,6 +211,7 @@ void AssistantOptInFlowScreenHandler::SendGetSettingsRequest() { selector.SerializeAsString(), base::BindOnce(&AssistantOptInFlowScreenHandler::OnGetSettingsResponse, weak_factory_.GetWeakPtr())); + send_request_time_ = base::TimeTicks::Now(); } void AssistantOptInFlowScreenHandler::ReloadContent(const base::Value& dict) { @@ -209,6 +225,11 @@ void AssistantOptInFlowScreenHandler::AddSettingZippy(const std::string& type, void AssistantOptInFlowScreenHandler::OnGetSettingsResponse( const std::string& settings) { + const base::TimeDelta time_since_request_sent = + base::TimeTicks::Now() - send_request_time_; + UMA_HISTOGRAM_TIMES("Assistant.OptInFlow.GetSettingsRequestTime", + time_since_request_sent); + assistant::SettingsUi settings_ui; settings_ui.ParseFromString(settings); @@ -223,12 +244,18 @@ void AssistantOptInFlowScreenHandler::OnGetSettingsResponse( ui_audit_key_ = activity_control_ui.ui_audit_key(); // Process activity control data. - if (!activity_control_ui.setting_zippy().size()) { + bool skip_activity_control = !activity_control_ui.setting_zippy().size(); + if (skip_activity_control) { // No need to consent. Move to the next screen. activity_control_needed_ = false; PrefService* prefs = ProfileManager::GetActiveUserProfile()->GetPrefs(); - prefs->SetBoolean(arc::prefs::kVoiceInteractionActivityControlAccepted, - true); + prefs->SetBoolean( + arc::prefs::kVoiceInteractionActivityControlAccepted, + (settings_ui.consent_flow_ui().consent_status() == + assistant::ConsentFlowUi_ConsentStatus_ALREADY_CONSENTED || + settings_ui.consent_flow_ui().consent_status() == + assistant::ConsentFlowUi_ConsentStatus_ASK_FOR_CONSENT)); + // Skip activity control and users will be in opted out mode. ShowNextScreen(); } else { AddSettingZippy("settings", @@ -236,14 +263,36 @@ void AssistantOptInFlowScreenHandler::OnGetSettingsResponse( } // Process third party disclosure data. - AddSettingZippy("disclosure", CreateDisclosureData( - third_party_disclosure_ui.disclosures())); + bool skip_third_party_disclosure = + skip_activity_control && !third_party_disclosure_ui.disclosures().size(); + if (third_party_disclosure_ui.disclosures().size()) { + AddSettingZippy("disclosure", CreateDisclosureData( + third_party_disclosure_ui.disclosures())); + } else if (skip_third_party_disclosure) { + ShowNextScreen(); + } else { + // TODO(llin): Show an error message and log it properly. + LOG(ERROR) << "Missing third Party disclosure data."; + return; + } // Process get more data. email_optin_needed_ = settings_ui.has_email_opt_in_ui() && settings_ui.email_opt_in_ui().has_title(); - AddSettingZippy("get-more", CreateGetMoreData(email_optin_needed_, - settings_ui.email_opt_in_ui())); + auto get_more_data = + CreateGetMoreData(email_optin_needed_, settings_ui.email_opt_in_ui()); + + bool skip_get_more = + skip_third_party_disclosure && !get_more_data.GetList().size(); + if (get_more_data.GetList().size()) { + AddSettingZippy("get-more", get_more_data); + } else if (skip_get_more) { + ShowNextScreen(); + } else { + // TODO(llin): Show an error message and log it properly. + LOG(ERROR) << "Missing get more data."; + return; + } // Pass string constants dictionary. ReloadContent(GetSettingsUiStrings(settings_ui, activity_control_needed_)); @@ -284,31 +333,18 @@ void AssistantOptInFlowScreenHandler::OnUpdateSettingsResponse( ShowNextScreen(); } -void AssistantOptInFlowScreenHandler::HandleHotwordResult(bool enable_hotword) { - enable_hotword_ = enable_hotword; - - if (!email_optin_needed_) { - // No need to send email optin result. Safe to update hotword pref and - // restart Assistant here. - PrefService* prefs = ProfileManager::GetActiveUserProfile()->GetPrefs(); - prefs->SetBoolean(arc::prefs::kVoiceInteractionHotwordEnabled, - enable_hotword); - } -} - -void AssistantOptInFlowScreenHandler::HandleLoadingScreenUserAction( - const std::string& action) { - if (action == kSkipPressed) { - screen_->OnUserAction(kFlowFinished); - } -} - void AssistantOptInFlowScreenHandler::HandleValuePropScreenUserAction( const std::string& action) { if (action == kSkipPressed) { OnActivityControlOptInResult(false); } else if (action == kNextPressed) { OnActivityControlOptInResult(true); + } else if (action == kReloadRequested) { + if (settings_manager_.is_bound()) { + SendGetSettingsRequest(); + } else { + LOG(ERROR) << "Settings mojom failed to setup. Check Assistant service."; + } } } @@ -334,7 +370,7 @@ void AssistantOptInFlowScreenHandler::HandleReadyScreenUserAction( const std::string& action) { if (action == kNextPressed) { RecordAssistantOptInStatus(READY_SCREEN_CONTINUED); - screen_->OnUserAction(kFlowFinished); + HandleFlowFinished(); } } @@ -354,8 +390,29 @@ void AssistantOptInFlowScreenHandler::HandleReadyScreenShown() { RecordAssistantOptInStatus(READY_SCREEN_SHOWN); } +void AssistantOptInFlowScreenHandler::HandleLoadingTimeout() { + ++loading_timeout_counter_; +} + +void AssistantOptInFlowScreenHandler::HandleHotwordResult(bool enable_hotword) { + enable_hotword_ = enable_hotword; + + if (!email_optin_needed_) { + // No need to send email optin result. Safe to update hotword pref and + // restart Assistant here. + PrefService* prefs = ProfileManager::GetActiveUserProfile()->GetPrefs(); + prefs->SetBoolean(arc::prefs::kVoiceInteractionHotwordEnabled, + enable_hotword); + } +} + void AssistantOptInFlowScreenHandler::HandleFlowFinished() { - screen_->OnUserAction(kFlowFinished); + UMA_HISTOGRAM_EXACT_LINEAR("Assistant.OptInFlow.LoadingTimeoutCount", + loading_timeout_counter_, 10); + if (screen_) + screen_->OnUserAction(kFlowFinished); + else + CallJS("closeDialog"); } void AssistantOptInFlowScreenHandler::HandleFlowInitialized() {} diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/assistant_optin_flow_screen_handler.h b/chromium/chrome/browser/ui/webui/chromeos/login/assistant_optin_flow_screen_handler.h index bcd0ff69667..6ddc11065a2 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/assistant_optin_flow_screen_handler.h +++ b/chromium/chrome/browser/ui/webui/chromeos/login/assistant_optin_flow_screen_handler.h @@ -36,6 +36,9 @@ class AssistantOptInFlowScreenHandler void Show() override; void Hide() override; + // Setup Assistant settings manager connection. + void SetupAssistantConnection(); + // Send messages to the page. void ShowNextScreen(); @@ -65,7 +68,6 @@ class AssistantOptInFlowScreenHandler void OnUpdateSettingsResponse(const std::string& settings); // Handler for JS WebUI message. - void HandleLoadingScreenUserAction(const std::string& action); void HandleValuePropScreenUserAction(const std::string& action); void HandleThirdPartyScreenUserAction(const std::string& action); void HandleGetMoreScreenUserAction(const bool screen_context, @@ -75,6 +77,7 @@ class AssistantOptInFlowScreenHandler void HandleThirdPartyScreenShown(); void HandleGetMoreScreenShown(); void HandleReadyScreenShown(); + void HandleLoadingTimeout(); void HandleHotwordResult(bool enable_hotword); void HandleFlowFinished(); void HandleFlowInitialized(); @@ -99,6 +102,12 @@ class AssistantOptInFlowScreenHandler // Whether user chose to enable hotword. bool enable_hotword_ = true; + // Time that get settings request is sent. + base::TimeTicks send_request_time_; + + // Counter for the number of loading timeout happens. + int loading_timeout_counter_ = 0; + assistant::mojom::AssistantSettingsManagerPtr settings_manager_; base::WeakPtrFactory<AssistantOptInFlowScreenHandler> weak_factory_; diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc b/chromium/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc index 6137e9ad4e4..d0842f5a8fc 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc @@ -16,6 +16,8 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/chromeos/accessibility/accessibility_manager.h" #include "chrome/browser/chromeos/accessibility/magnification_manager.h" +#include "chrome/browser/chromeos/login/configuration_keys.h" +#include "chrome/browser/chromeos/login/demo_mode/demo_session.h" #include "chrome/browser/chromeos/login/demo_mode/demo_setup_controller.h" #include "chrome/browser/chromeos/login/enrollment/auto_enrollment_controller.h" #include "chrome/browser/chromeos/login/helper.h" @@ -103,14 +105,13 @@ CoreOobeHandler::CoreOobeHandler(OobeUI* oobe_ui, TabletModeClient* tablet_mode_client = TabletModeClient::Get(); tablet_mode_client->AddObserver(this); - OobeConfiguration::Get()->AddObserver(this); - // |connector| may be null in tests. auto* connector = ash_util::GetServiceManagerConnector(); if (connector) { connector->BindInterface(ash::mojom::kServiceName, &cros_display_config_ptr_); } + OobeConfiguration::Get()->AddAndFireObserver(this); } CoreOobeHandler::~CoreOobeHandler() { @@ -177,7 +178,6 @@ void CoreOobeHandler::Initialize() { UpdateDeviceRequisition(); UpdateKeyboardState(); UpdateClientAreaSize(); - UpdateOobeConfiguration(); } void CoreOobeHandler::GetAdditionalParameters(base::DictionaryValue* dict) { @@ -226,6 +226,8 @@ void CoreOobeHandler::RegisterMessages() { AddRawCallback("getPrimaryDisplayNameForTesting", &CoreOobeHandler::HandleGetPrimaryDisplayNameForTesting); AddCallback("setupDemoMode", &CoreOobeHandler::HandleSetupDemoMode); + AddCallback("startDemoModeSetupForTesting", + &CoreOobeHandler::HandleStartDemoModeSetupForTesting); } void CoreOobeHandler::ShowSignInError( @@ -583,11 +585,9 @@ void CoreOobeHandler::UpdateKeyboardState() { // KeyboardController in the browser process under MASH. if (!features::IsUsingWindowService()) { auto* keyboard_controller = keyboard::KeyboardController::Get(); - if (keyboard_controller->enabled()) { - const bool is_keyboard_shown = keyboard_controller->IsKeyboardVisible(); - ShowControlBar(!is_keyboard_shown); - SetVirtualKeyboardShown(is_keyboard_shown); - } + const bool is_keyboard_shown = keyboard_controller->IsKeyboardVisible(); + ShowControlBar(!is_keyboard_shown); + SetVirtualKeyboardShown(is_keyboard_shown); } } @@ -602,14 +602,12 @@ void CoreOobeHandler::UpdateClientAreaSize() { } void CoreOobeHandler::OnOobeConfigurationChanged() { - UpdateOobeConfiguration(); -} - -void CoreOobeHandler::UpdateOobeConfiguration() { - if (OobeConfiguration::Get()) { - CallJSOrDefer("updateOobeConfiguration", - OobeConfiguration::Get()->GetConfiguration()); - } + base::Value configuration(base::Value::Type::DICTIONARY); + chromeos::configuration::FilterConfiguration( + OobeConfiguration::Get()->GetConfiguration(), + chromeos::configuration::ConfigurationHandlerSide::HANDLER_JS, + configuration); + CallJSOrDefer("updateOobeConfiguration", configuration); } void CoreOobeHandler::OnAccessibilityStatusChanged( @@ -686,6 +684,24 @@ void CoreOobeHandler::HandleSetupDemoMode() { } } +void CoreOobeHandler::HandleStartDemoModeSetupForTesting( + const std::string& demo_config) { + DemoSession::DemoModeConfig config; + if (demo_config == "online") { + config = DemoSession::DemoModeConfig::kOnline; + } else if (demo_config == "offline") { + config = DemoSession::DemoModeConfig::kOffline; + } else { + NOTREACHED() << "Unknown demo config passed for tests"; + } + + WizardController* wizard_controller = WizardController::default_controller(); + if (wizard_controller && !wizard_controller->login_screen_started()) { + wizard_controller->SimulateDemoModeSetupForTesting(config); + wizard_controller->AdvanceToScreen(OobeScreen::SCREEN_OOBE_DEMO_SETUP); + } +} + void CoreOobeHandler::InitDemoModeDetection() { demo_mode_detector_.InitDetection(); } diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h b/chromium/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h index 933dd72f91f..981e5cf5fa6 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h +++ b/chromium/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h @@ -149,6 +149,9 @@ class CoreOobeHandler : public BaseWebUIHandler, const base::Value& callback_id, std::vector<ash::mojom::DisplayUnitInfoPtr> info_list); void HandleSetupDemoMode(); + // Handles demo mode setup for tests. Accepts 'online' and 'offline' as + // |demo_config|. + void HandleStartDemoModeSetupForTesting(const std::string& demo_config); // When keyboard_utils.js arrow key down event is reached, raise it // to tab/shift-tab event. @@ -169,9 +172,6 @@ class CoreOobeHandler : public BaseWebUIHandler, // Updates client area size based on the primary screen size. void UpdateClientAreaSize(); - // Updates OOBE configuration. - void UpdateOobeConfiguration(); - // Notification of a change in the accessibility settings. void OnAccessibilityStatusChanged( const AccessibilityStatusEventDetails& details); diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/discover/discover_manager.cc b/chromium/chrome/browser/ui/webui/chromeos/login/discover/discover_manager.cc index 0a205aa2534..636546f33ad 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/discover/discover_manager.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/login/discover/discover_manager.cc @@ -7,8 +7,10 @@ #include <algorithm> #include "base/logging.h" +#include "chrome/browser/browser_process.h" #include "chrome/browser/ui/webui/chromeos/login/discover/discover_handler.h" #include "chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_launch_help_app.h" +#include "chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_pin_setup.h" #include "chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_redeem_offers.h" #include "chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_sync_files.h" #include "chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_welcome.h" @@ -21,6 +23,11 @@ DiscoverManager::DiscoverManager() { DiscoverManager::~DiscoverManager() = default; +// static +DiscoverManager* DiscoverManager::Get() { + return g_browser_process->platform_part()->GetDiscoverManager(); +} + bool DiscoverManager::IsCompleted() const { // Returns true if all of the modules are completed. return std::all_of(modules_.begin(), modules_.end(), @@ -38,6 +45,8 @@ void DiscoverManager::CreateModules() { std::make_unique<DiscoverModuleSyncFiles>(); modules_[DiscoverModuleWelcome::kModuleName] = std::make_unique<DiscoverModuleWelcome>(); + modules_[DiscoverModulePinSetup::kModuleName] = + std::make_unique<DiscoverModulePinSetup>(); } std::vector<std::unique_ptr<DiscoverHandler>> @@ -49,4 +58,10 @@ DiscoverManager::CreateWebUIHandlers() const { return handlers; } +DiscoverModule* DiscoverManager::GetModuleByName( + const std::string& module_name) const { + const auto it = modules_.find(module_name); + return it == modules_.end() ? nullptr : it->second.get(); +} + } // namespace chromeos diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/discover/discover_manager.h b/chromium/chrome/browser/ui/webui/chromeos/login/discover/discover_manager.h index bd0fa047ce8..8ac51beb854 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/discover/discover_manager.h +++ b/chromium/chrome/browser/ui/webui/chromeos/login/discover/discover_manager.h @@ -25,17 +25,29 @@ class DiscoverManager { DiscoverManager(); ~DiscoverManager(); + // Returns object instance from platform_parts. + static DiscoverManager* Get(); + // Returns true if there are no modules to be displayed. bool IsCompleted() const; // Returns vector of WebUI message handlers for visible modules. std::vector<std::unique_ptr<DiscoverHandler>> CreateWebUIHandlers() const; + template <typename T> + T* GetModule() { + return static_cast<T*>(GetModuleByName(T::kModuleName)); + } + const ModulesMap& get_modules() const { return modules_; } private: // Creates all needed modules. void CreateModules(); + + // Returns module by name. + DiscoverModule* GetModuleByName(const std::string& module_name) const; + ModulesMap modules_; DISALLOW_COPY_AND_ASSIGN(DiscoverManager); diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/discover/discover_module.h b/chromium/chrome/browser/ui/webui/chromeos/login/discover/discover_module.h index add727f7049..e97a5ad6811 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/discover/discover_module.h +++ b/chromium/chrome/browser/ui/webui/chromeos/login/discover/discover_module.h @@ -24,7 +24,7 @@ class DiscoverModule { virtual bool IsCompleted() const = 0; // Creates and returns WebUI handler for the module. - virtual std::unique_ptr<DiscoverHandler> CreateWebUIHandler() const = 0; + virtual std::unique_ptr<DiscoverHandler> CreateWebUIHandler() = 0; // Module is also expected to provide static method: // static const char* kModuleName; diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/discover/discover_ui.cc b/chromium/chrome/browser/ui/webui/chromeos/login/discover/discover_ui.cc index 553853e4189..426e67820a7 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/discover/discover_ui.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/login/discover/discover_ui.cc @@ -4,7 +4,6 @@ #include "chrome/browser/ui/webui/chromeos/login/discover/discover_ui.h" -#include "chrome/browser/browser_process.h" #include "chrome/browser/ui/webui/chromeos/login/discover/discover_handler.h" #include "chrome/browser/ui/webui/chromeos/login/discover/discover_manager.h" #include "content/public/browser/web_ui.h" @@ -17,9 +16,7 @@ DiscoverUI::~DiscoverUI() {} void DiscoverUI::RegisterMessages(content::WebUI* web_ui) { std::vector<std::unique_ptr<DiscoverHandler>> handlers = - g_browser_process->platform_part() - ->GetDiscoverManager() - ->CreateWebUIHandlers(); + DiscoverManager::Get()->CreateWebUIHandlers(); for (auto& handler : handlers) { handlers_.push_back(handler.get()); web_ui->AddMessageHandler(std::move(handler)); diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/discover/discover_window_manager.cc b/chromium/chrome/browser/ui/webui/chromeos/login/discover/discover_window_manager.cc index 8f8fcbf6a6b..986898a589b 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/discover/discover_window_manager.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/login/discover/discover_window_manager.cc @@ -4,7 +4,10 @@ #include "chrome/browser/ui/webui/chromeos/login/discover/discover_window_manager.h" +#include "ash/public/cpp/app_types.h" +#include "ash/public/cpp/resources/grit/ash_public_unscaled_resources.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/ash/window_properties.h" #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/browser_navigator.h" #include "chrome/browser/ui/browser_navigator_params.h" @@ -15,6 +18,7 @@ #include "chrome/common/webui_url_constants.h" #include "chrome/grit/generated_resources.h" #include "content/public/browser/web_contents.h" +#include "ui/aura/client/aura_constants.h" #include "ui/gfx/geometry/rect.h" #include "url/gurl.h" @@ -79,6 +83,11 @@ void DiscoverWindowManager::ShowChromeDiscoverPageForProfile(Profile* profile) { .first->second = params.browser->session_id(); DCHECK(params.browser->is_trusted_source()); + auto* window = params.browser->window()->GetNativeWindow(); + window->SetProperty(kOverrideWindowIconResourceIdKey, IDR_DISCOVER_APP_192); + window->SetProperty(aura::client::kAppType, + static_cast<int>(ash::AppType::CHROME_APP)); + for (DiscoverWindowManagerObserver& observer : observers_) observer.OnNewDiscoverWindow(params.browser); } diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_launch_help_app.cc b/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_launch_help_app.cc index cd3e89c41f8..37ea54dd760 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_launch_help_app.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_launch_help_app.cc @@ -70,7 +70,7 @@ bool DiscoverModuleLaunchHelpApp::IsCompleted() const { } std::unique_ptr<DiscoverHandler> -DiscoverModuleLaunchHelpApp::CreateWebUIHandler() const { +DiscoverModuleLaunchHelpApp::CreateWebUIHandler() { return std::make_unique<DiscoverModuleLaunchHelpAppHandler>(); } diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_launch_help_app.h b/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_launch_help_app.h index 7a386aba397..78774b34cdc 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_launch_help_app.h +++ b/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_launch_help_app.h @@ -19,7 +19,7 @@ class DiscoverModuleLaunchHelpApp : public DiscoverModule { // DiscoverModule: bool IsCompleted() const override; - std::unique_ptr<DiscoverHandler> CreateWebUIHandler() const override; + std::unique_ptr<DiscoverHandler> CreateWebUIHandler() override; // Module name. static const char kModuleName[]; diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_pin_setup.cc b/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_pin_setup.cc new file mode 100644 index 00000000000..35863208b57 --- /dev/null +++ b/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_pin_setup.cc @@ -0,0 +1,137 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_pin_setup.h" + +#include <vector> + +#include "base/i18n/number_formatting.h" +#include "base/values.h" +#include "chrome/browser/ui/webui/chromeos/login/discover/discover_handler.h" +#include "chrome/grit/browser_resources.h" +#include "chrome/grit/generated_resources.h" +#include "components/login/localized_values_builder.h" +#include "content/public/browser/web_contents.h" +#include "content/public/browser/web_ui.h" + +namespace chromeos { + +namespace { + +class DiscoverModulePinSetupHandler : public DiscoverHandler { + public: + explicit DiscoverModulePinSetupHandler( + base::WeakPtr<DiscoverModulePinSetup> module); + ~DiscoverModulePinSetupHandler() override = default; + + // BaseWebUIHandler + void DeclareLocalizedValues( + ::login::LocalizedValuesBuilder* builder) override; + void Initialize() override; + void RegisterMessages() override; + + private: + // Message handlers. + void HandleGetUserPassword(const std::string& callbackId); + + base::WeakPtr<DiscoverModulePinSetup> module_; + + DISALLOW_COPY_AND_ASSIGN(DiscoverModulePinSetupHandler); +}; + +DiscoverModulePinSetupHandler::DiscoverModulePinSetupHandler( + base::WeakPtr<DiscoverModulePinSetup> module) + : DiscoverHandler(DiscoverModulePinSetup::kModuleName), module_(module) {} + +void DiscoverModulePinSetupHandler::DeclareLocalizedValues( + ::login::LocalizedValuesBuilder* builder) { + builder->Add("discoverPinSetup", IDS_DISCOVER_PIN_SETUP); + + builder->Add("back", IDS_EULA_BACK_BUTTON); + builder->Add("next", IDS_EULA_NEXT_BUTTON); + builder->Add("discoverPinSetupDone", IDS_DISCOVER_PIN_SETUP_DONE); + + builder->Add("discoverPinSetupTitle1", IDS_DISCOVER_PIN_SETUP_TITLE1); + builder->Add("discoverPinSetupSubtitle1", IDS_DISCOVER_PIN_SETUP_SUBTITLE1); + builder->Add("discoverPinSetupSkip", IDS_DISCOVER_PIN_SETUP_SKIP); + builder->Add("discoverPinSetupTitle2", IDS_DISCOVER_PIN_SETUP_TITLE2); + builder->Add("discoverPinSetupTitle3", IDS_DISCOVER_PIN_SETUP_TITLE3); + builder->Add("discoverPinSetupSubtitle3", IDS_DISCOVER_PIN_SETUP_SUBTITLE3); + builder->Add("discoverPinSetupPasswordTitle", + IDS_DISCOVER_PIN_SETUP_PASSWORD_TITLE); + builder->Add("discoverPinSetupPasswordSubTitle", + IDS_DISCOVER_PIN_SETUP_PASSWORD_SUBTITLE); + + builder->Add("passwordPromptInvalidPassword", + IDS_SETTINGS_PEOPLE_PASSWORD_PROMPT_INVALID_PASSWORD); + builder->Add("passwordPromptPasswordLabel", + IDS_SETTINGS_PEOPLE_PASSWORD_PROMPT_PASSWORD_LABEL); + + // Format numbers to be used on the pin keyboard. + for (int j = 0; j <= 9; j++) { + builder->Add("pinKeyboard" + base::IntToString(j), + base::FormatNumber(int64_t{j})); + } + builder->Add("pinKeyboardPlaceholderPin", IDS_PIN_KEYBOARD_HINT_TEXT_PIN); + builder->Add("pinKeyboardPlaceholderPinPassword", + IDS_PIN_KEYBOARD_HINT_TEXT_PIN_PASSWORD); + builder->Add("pinKeyboardDeleteAccessibleName", + IDS_PIN_KEYBOARD_DELETE_ACCESSIBLE_NAME); + builder->Add("configurePinMismatched", + IDS_SETTINGS_PEOPLE_CONFIGURE_PIN_MISMATCHED); + builder->Add("configurePinTooShort", + IDS_SETTINGS_PEOPLE_CONFIGURE_PIN_TOO_SHORT); + builder->Add("configurePinTooLong", + IDS_SETTINGS_PEOPLE_CONFIGURE_PIN_TOO_LONG); + builder->Add("configurePinWeakPin", + IDS_SETTINGS_PEOPLE_CONFIGURE_PIN_WEAK_PIN); +} + +void DiscoverModulePinSetupHandler::Initialize() {} + +void DiscoverModulePinSetupHandler::RegisterMessages() { + AddCallback("discover.pinSetup.getUserPassword", + &DiscoverModulePinSetupHandler::HandleGetUserPassword); +} + +void DiscoverModulePinSetupHandler::HandleGetUserPassword( + const std::string& callbackId) { + web_ui()->CallJavascriptFunctionUnsafe( + "window.discoverReturn", base::Value(callbackId), + base::Value(module_->ConsumePrimaryUserPassword())); + return; +} + +} // anonymous namespace + +/* ***************************************************************** */ +/* Discover PinSetup module implementation below. */ + +const char DiscoverModulePinSetup::kModuleName[] = "pinSetup"; + +DiscoverModulePinSetup::DiscoverModulePinSetup() {} + +DiscoverModulePinSetup::~DiscoverModulePinSetup() = default; + +bool DiscoverModulePinSetup::IsCompleted() const { + return false; +} + +std::unique_ptr<DiscoverHandler> DiscoverModulePinSetup::CreateWebUIHandler() { + return std::make_unique<DiscoverModulePinSetupHandler>( + weak_ptr_factory_.GetWeakPtr()); +} + +std::string DiscoverModulePinSetup::ConsumePrimaryUserPassword() { + std::string result; + std::swap(primary_user_password_, result); + return result; +} + +void DiscoverModulePinSetup::SetPrimaryUserPassword( + const std::string& password) { + primary_user_password_ = password; +} + +} // namespace chromeos diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_pin_setup.h b/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_pin_setup.h new file mode 100644 index 00000000000..e0e942162c7 --- /dev/null +++ b/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_pin_setup.h @@ -0,0 +1,43 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_DISCOVER_MODULES_DISCOVER_MODULE_PIN_SETUP_H_ +#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_DISCOVER_MODULES_DISCOVER_MODULE_PIN_SETUP_H_ + +#include <memory> + +#include "base/containers/flat_map.h" +#include "base/macros.h" +#include "base/memory/weak_ptr.h" +#include "chrome/browser/ui/webui/chromeos/login/discover/discover_module.h" + +namespace chromeos { + +class DiscoverModulePinSetup : public DiscoverModule { + public: + // Module name. + static const char kModuleName[]; + + DiscoverModulePinSetup(); + ~DiscoverModulePinSetup() override; + + // Returns primary user password, or empty string if not known. + // Password is kept for newly created user only, and is returned only once. + // (Empty string will be returned for subsequent calls.) + std::string ConsumePrimaryUserPassword(); + void SetPrimaryUserPassword(const std::string& password); + + // DiscoverModule: + bool IsCompleted() const override; + std::unique_ptr<DiscoverHandler> CreateWebUIHandler() override; + + private: + std::string primary_user_password_; + + base::WeakPtrFactory<DiscoverModulePinSetup> weak_ptr_factory_{this}; + DISALLOW_COPY_AND_ASSIGN(DiscoverModulePinSetup); +}; + +} // namespace chromeos +#endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_DISCOVER_MODULES_DISCOVER_MODULE_PIN_SETUP_H_ diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_redeem_offers.cc b/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_redeem_offers.cc index 300586ee25d..cf44c2760b9 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_redeem_offers.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_redeem_offers.cc @@ -56,7 +56,7 @@ bool DiscoverModuleRedeemOffers::IsCompleted() const { } std::unique_ptr<DiscoverHandler> -DiscoverModuleRedeemOffers::CreateWebUIHandler() const { +DiscoverModuleRedeemOffers::CreateWebUIHandler() { return std::make_unique<DiscoverModuleRedeemOffersHandler>(); } diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_redeem_offers.h b/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_redeem_offers.h index ac4d91b82fb..7060b556434 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_redeem_offers.h +++ b/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_redeem_offers.h @@ -19,7 +19,7 @@ class DiscoverModuleRedeemOffers : public DiscoverModule { // DiscoverModule: bool IsCompleted() const override; - std::unique_ptr<DiscoverHandler> CreateWebUIHandler() const override; + std::unique_ptr<DiscoverHandler> CreateWebUIHandler() override; // Module name. static const char kModuleName[]; diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_sync_files.cc b/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_sync_files.cc index cb910b79fc2..00e8d236293 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_sync_files.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_sync_files.cc @@ -55,8 +55,7 @@ bool DiscoverModuleSyncFiles::IsCompleted() const { return false; } -std::unique_ptr<DiscoverHandler> DiscoverModuleSyncFiles::CreateWebUIHandler() - const { +std::unique_ptr<DiscoverHandler> DiscoverModuleSyncFiles::CreateWebUIHandler() { return std::make_unique<DiscoverModuleSyncFilesHandler>(); } diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_sync_files.h b/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_sync_files.h index 2eccb231799..d1efcc50934 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_sync_files.h +++ b/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_sync_files.h @@ -19,7 +19,7 @@ class DiscoverModuleSyncFiles : public DiscoverModule { // DiscoverModule: bool IsCompleted() const override; - std::unique_ptr<DiscoverHandler> CreateWebUIHandler() const override; + std::unique_ptr<DiscoverHandler> CreateWebUIHandler() override; // Module name. static const char kModuleName[]; diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_welcome.cc b/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_welcome.cc index c5c8cb6ec14..b5f75cdcd27 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_welcome.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_welcome.cc @@ -57,8 +57,7 @@ bool DiscoverModuleWelcome::IsCompleted() const { return false; } -std::unique_ptr<DiscoverHandler> DiscoverModuleWelcome::CreateWebUIHandler() - const { +std::unique_ptr<DiscoverHandler> DiscoverModuleWelcome::CreateWebUIHandler() { return std::make_unique<DiscoverModuleWelcomeHandler>(); } diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_welcome.h b/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_welcome.h index bdde6246ce2..dcb1d6680e3 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_welcome.h +++ b/chromium/chrome/browser/ui/webui/chromeos/login/discover/modules/discover_module_welcome.h @@ -19,7 +19,7 @@ class DiscoverModuleWelcome : public DiscoverModule { // DiscoverModule: bool IsCompleted() const override; - std::unique_ptr<DiscoverHandler> CreateWebUIHandler() const override; + std::unique_ptr<DiscoverHandler> CreateWebUIHandler() override; // Module name. static const char kModuleName[]; diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.cc b/chromium/chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.cc index 50ea95bae58..7fc1bc3d1ff 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.cc @@ -562,28 +562,32 @@ void EnrollmentScreenHandler::DeclareLocalizedValues( builder->Add("oauthEnrollWorking", IDS_ENTERPRISE_ENROLLMENT_WORKING_MESSAGE); // Do not use AddF for this string as it will be rendered by the JS code. builder->Add("oauthEnrollAbeSuccess", IDS_ENTERPRISE_ENROLLMENT_ABE_SUCCESS); + + /* Active Directory strings */ builder->Add("oauthEnrollAdMachineNameInput", IDS_AD_DEVICE_NAME_INPUT_LABEL); - builder->Add("oauthEnrollAdMachineNameInputRegex", - IDS_AD_DEVICE_NAME_REGEX_INPUT_LABEL); builder->Add("oauthEnrollAdDomainJoinWelcomeMessage", IDS_AD_DOMAIN_JOIN_WELCOME_MESSAGE); - builder->Add("adEnrollmentLoginUsername", IDS_AD_ENROLLMENT_LOGIN_USER); + builder->Add("adAuthLoginUsername", IDS_AD_AUTH_LOGIN_USER); builder->Add("adLoginInvalidUsername", IDS_AD_INVALID_USERNAME); builder->Add("adLoginPassword", IDS_AD_LOGIN_PASSWORD); builder->Add("adLoginInvalidPassword", IDS_AD_INVALID_PASSWORD); builder->Add("adJoinErrorMachineNameInvalid", IDS_AD_DEVICE_NAME_INVALID); builder->Add("adJoinErrorMachineNameTooLong", IDS_AD_DEVICE_NAME_TOO_LONG); - builder->Add("adJoinErrorMachineNameDoesntMatchRegex", - IDS_AD_DEVICE_NAME_DOESNT_MATCH_REGEX); + builder->Add("adJoinErrorMachineNameInvalidFormat", + IDS_AD_DEVICE_NAME_INVALID_FORMAT); builder->Add("adJoinMoreOptions", IDS_AD_MORE_OPTIONS_BUTTON); - builder->Add("adUnlockConfig", IDS_AD_UNLOCK_CONFIG); - builder->Add("adUnlockButton", IDS_AD_UNLOCK_CONFIG_UNLOCK_BUTTON); + builder->Add("adUnlockTitle", IDS_AD_UNLOCK_TITLE_MESSAGE); + builder->Add("adUnlockSubtitle", IDS_AD_UNLOCK_SUBTITLE_MESSAGE); builder->Add("adUnlockPassword", IDS_AD_UNLOCK_CONFIG_PASSWORD); builder->Add("adUnlockIncorrectPassword", IDS_AD_UNLOCK_INCORRECT_PASSWORD); builder->Add("adUnlockPasswordSkip", IDS_AD_UNLOCK_PASSWORD_SKIP); builder->Add("adJoinOrgUnit", IDS_AD_ORG_UNIT_HINT); builder->Add("adJoinCancel", IDS_AD_CANCEL_BUTTON); - builder->Add("adJoinConfirm", IDS_AD_CONFIRM_BUTTON); + builder->Add("adJoinSave", IDS_AD_SAVE_BUTTON); + builder->Add("selectEncryption", IDS_AD_ENCRYPTION_SELECTION_SELECT); + builder->Add("selectConfiguration", IDS_AD_CONFIG_SELECTION_SELECT); + /* End of Active Directory strings */ + builder->Add("licenseSelectionCardTitle", IDS_ENTERPRISE_ENROLLMENT_LICENSE_SELECTION); builder->Add("licenseSelectionCardExplanation", @@ -596,8 +600,6 @@ void EnrollmentScreenHandler::DeclareLocalizedValues( IDS_ENTERPRISE_ENROLLMENT_KIOSK_LICENSE_TYPE); builder->Add("licenseCountTemplate", IDS_ENTERPRISE_ENROLLMENT_LICENSES_REMAINING_TEMPLATE); - builder->Add("selectEncryption", IDS_AD_ENCRYPTION_SELECTION_SELECT); - builder->Add("selectConfiguration", IDS_AD_CONFIG_SELECTION_SELECT); } void EnrollmentScreenHandler::GetAdditionalParameters( diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/fingerprint_setup_screen_handler.cc b/chromium/chrome/browser/ui/webui/chromeos/login/fingerprint_setup_screen_handler.cc index 6b1a1887c5e..cd4fd7f4593 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/fingerprint_setup_screen_handler.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/login/fingerprint_setup_screen_handler.cc @@ -82,8 +82,6 @@ void FingerprintSetupScreenHandler::DeclareLocalizedValues( IDS_OOBE_FINGERPINT_SETUP_SCREEN_SENSOR_LOCATION_TITLE); builder->Add("enrollmentProgressScreenTitle", IDS_OOBE_FINGERPINT_SETUP_SCREEN_ENROLLMENT_PROGRESS_TITLE); - builder->Add("fingerprintSetupAddFingerprint", - IDS_OOBE_FINGERPINT_SETUP_SCREEN_BUTTON_ADD_FINGERPRINT); builder->Add("setupFingerprintEnrollmentSuccessTitle", IDS_OOBE_FINGERPINT_SETUP_SCREEN_ENROLLMENT_SUCCESS_TITLE); builder->Add("setupFingerprintEnrollmentSuccessDescription", diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc b/chromium/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc index e3c2649b0a2..951eb55889b 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc @@ -177,9 +177,8 @@ void UpdateAuthParams(base::DictionaryValue* params, CrosSettings* cros_settings = CrosSettings::Get(); bool allow_new_user = true; cros_settings->GetBoolean(kAccountsPrefAllowNewUser, &allow_new_user); - params->SetBoolean( - "guestSignin", - chrome_user_manager_util::IsGuestSessionAllowed(cros_settings)); + params->SetBoolean("guestSignin", + user_manager::UserManager::Get()->IsGuestSessionAllowed()); // nosignup flow if new users are not allowed. if (!allow_new_user || is_restrictive_proxy) diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/multidevice_setup_screen_handler.cc b/chromium/chrome/browser/ui/webui/chromeos/login/multidevice_setup_screen_handler.cc new file mode 100644 index 00000000000..fb86a45d1b3 --- /dev/null +++ b/chromium/chrome/browser/ui/webui/chromeos/login/multidevice_setup_screen_handler.cc @@ -0,0 +1,46 @@ +// Copyright 2017 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ui/webui/chromeos/login/multidevice_setup_screen_handler.h" + +#include "chrome/browser/chromeos/login/screens/multidevice_setup_screen.h" +#include "chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_localized_strings_provider.h" +#include "chrome/grit/generated_resources.h" +#include "components/login/localized_values_builder.h" + +namespace { + +const char kJsScreenPath[] = "login.MultiDeviceSetupScreen"; + +} // namespace + +namespace chromeos { + +MultiDeviceSetupScreenHandler::MultiDeviceSetupScreenHandler() + : BaseScreenHandler(kScreenId) { + set_call_js_prefix(kJsScreenPath); +} + +MultiDeviceSetupScreenHandler::~MultiDeviceSetupScreenHandler() = default; + +void MultiDeviceSetupScreenHandler::DeclareLocalizedValues( + ::login::LocalizedValuesBuilder* builder) { + multidevice_setup::AddLocalizedValuesToBuilder(builder); +} + +void MultiDeviceSetupScreenHandler::Bind(MultiDeviceSetupScreen* screen) { + BaseScreenHandler::SetBaseScreen(screen); +} + +void MultiDeviceSetupScreenHandler::Show() { + AllowJavascript(); + ShowScreen(kScreenId); + FireWebUIListener("multidevice_setup.initializeSetupFlow"); +} + +void MultiDeviceSetupScreenHandler::Hide() {} + +void MultiDeviceSetupScreenHandler::Initialize() {} + +} // namespace chromeos diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/multidevice_setup_screen_handler.h b/chromium/chrome/browser/ui/webui/chromeos/login/multidevice_setup_screen_handler.h new file mode 100644 index 00000000000..7df6c393032 --- /dev/null +++ b/chromium/chrome/browser/ui/webui/chromeos/login/multidevice_setup_screen_handler.h @@ -0,0 +1,41 @@ +// Copyright 2018 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_MULTIDEVICE_SETUP_SCREEN_HANDLER_H_ +#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_MULTIDEVICE_SETUP_SCREEN_HANDLER_H_ + +#include "base/macros.h" +#include "chrome/browser/chromeos/login/screens/multidevice_setup_screen_view.h" +#include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h" + +namespace chromeos { + +class MultiDeviceSetupScreen; + +// Concrete MultiDeviceSetupScreenView WebUI-based implementation. +class MultiDeviceSetupScreenHandler : public BaseScreenHandler, + public MultiDeviceSetupScreenView { + public: + MultiDeviceSetupScreenHandler(); + ~MultiDeviceSetupScreenHandler() override; + + // BaseScreenHandler: + void DeclareLocalizedValues( + ::login::LocalizedValuesBuilder* builder) override; + + // MultiDeviceSetupScreenView: + void Bind(MultiDeviceSetupScreen* screen) override; + void Show() override; + void Hide() override; + + private: + // BaseScreenHandler: + void Initialize() override; + + DISALLOW_COPY_AND_ASSIGN(MultiDeviceSetupScreenHandler); +}; + +} // namespace chromeos + +#endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_MULTIDEVICE_SETUP_SCREEN_HANDLER_H_ diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/oobe_display_chooser.cc b/chromium/chrome/browser/ui/webui/chromeos/login/oobe_display_chooser.cc index 939f64a69a9..fd7e20a72fc 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/oobe_display_chooser.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/login/oobe_display_chooser.cc @@ -8,7 +8,9 @@ #include "ash/public/interfaces/constants.mojom.h" #include "base/strings/string_number_conversions.h" +#include "base/task/post_task.h" #include "chrome/browser/ui/ash/ash_util.h" +#include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "content/public/common/service_manager_connection.h" #include "services/service_manager/public/cpp/connector.h" @@ -62,8 +64,8 @@ void OobeDisplayChooser::TryToPlaceUiOnTouchDisplay() { display::Screen::GetScreen()->GetPrimaryDisplay(); if (primary_display.is_valid() && !TouchSupportAvailable(primary_display)) { - BrowserThread::PostTask( - BrowserThread::UI, FROM_HERE, + base::PostTaskWithTraits( + FROM_HERE, {BrowserThread::UI}, base::BindOnce(&OobeDisplayChooser::MaybeMoveToTouchDisplay, weak_ptr_factory_.GetWeakPtr())); } diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/oobe_display_chooser_unittest.cc b/chromium/chrome/browser/ui/webui/chromeos/login/oobe_display_chooser_unittest.cc index eb08cdc2e10..01d482a0c47 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/oobe_display_chooser_unittest.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/login/oobe_display_chooser_unittest.cc @@ -121,7 +121,7 @@ TEST_F(OobeDisplayChooserTest, PreferTouchAsPrimary) { // Setup corresponding TouchscreenDevice object ui::TouchscreenDevice touchscreen = - ui::TouchscreenDevice(1, ui::InputDeviceType::INPUT_DEVICE_EXTERNAL, + ui::TouchscreenDevice(1, ui::InputDeviceType::INPUT_DEVICE_USB, "Touchscreen", gfx::Size(800, 600), 1); touchscreen.vendor_id = kWhitelistedId; ws::InputDeviceClientTestApi().SetTouchscreenDevices({touchscreen}); @@ -164,7 +164,7 @@ TEST_F(OobeDisplayChooserTest, DontSwitchFromTouch) { // Setup corresponding TouchscreenDevice object ui::TouchscreenDevice touchscreen = - ui::TouchscreenDevice(1, ui::InputDeviceType::INPUT_DEVICE_EXTERNAL, + ui::TouchscreenDevice(1, ui::InputDeviceType::INPUT_DEVICE_USB, "Touchscreen", gfx::Size(800, 600), 1); touchscreen.vendor_id = kWhitelistedId; ws::InputDeviceClientTestApi().SetTouchscreenDevices({touchscreen}); diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc b/chromium/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc index b3a45be6728..6d29d83b006 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc @@ -10,6 +10,7 @@ #include "ash/public/cpp/ash_features.h" #include "ash/public/cpp/ash_switches.h" +#include "base/bind.h" #include "base/command_line.h" #include "base/logging.h" #include "base/macros.h" @@ -32,6 +33,7 @@ #include "chrome/browser/extensions/signin/gaia_auth_extension_loader.h" #include "chrome/browser/extensions/tab_helper.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/ui/webui/about_ui.h" #include "chrome/browser/ui/webui/chromeos/login/active_directory_password_change_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/app_downloading_screen_handler.h" @@ -59,6 +61,7 @@ #include "chrome/browser/ui/webui/chromeos/login/kiosk_autolaunch_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/kiosk_enable_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/marketing_opt_in_screen_handler.h" +#include "chrome/browser/ui/webui/chromeos/login/multidevice_setup_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/network_dropdown_handler.h" #include "chrome/browser/ui/webui/chromeos/login/network_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/network_state_informer.h" @@ -66,7 +69,6 @@ #include "chrome/browser/ui/webui/chromeos/login/recommend_apps_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/reset_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h" -#include "chrome/browser/ui/webui/chromeos/login/supervised_user_creation_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/sync_consent_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/terms_of_service_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/update_required_screen_handler.h" @@ -78,6 +80,7 @@ #include "chrome/browser/ui/webui/chromeos/login/welcome_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/wrong_hwid_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/user_image_source.h" +#include "chrome/browser/ui/webui/chromeos/video_source.h" #include "chrome/browser/ui/webui/test_files_request_filter.h" #include "chrome/browser/ui/webui/theme_source.h" #include "chrome/common/chrome_constants.h" @@ -89,11 +92,14 @@ #include "chrome/grit/chrome_unscaled_resources.h" #include "chrome/grit/component_extension_resources.h" #include "chromeos/chromeos_switches.h" +#include "chromeos/services/multidevice_setup/public/mojom/constants.mojom.h" #include "components/policy/core/common/cloud/cloud_policy_constants.h" #include "components/prefs/pref_service.h" +#include "content/public/browser/browser_context.h" #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_data_source.h" #include "content/public/common/content_switches.h" +#include "services/service_manager/public/cpp/connector.h" #include "ui/base/resource/resource_bundle.h" #include "ui/base/ui_base_features.h" #include "ui/base/webui/web_ui_util.h" @@ -335,12 +341,6 @@ void OobeUI::ConfigureOobeDisplay() { AddScreenHandler(std::make_unique<KioskEnableScreenHandler>()); - auto supervised_user_creation_screen_handler = - std::make_unique<SupervisedUserCreationScreenHandler>(); - supervised_user_creation_screen_view_ = - supervised_user_creation_screen_handler.get(); - AddScreenHandler(std::move(supervised_user_creation_screen_handler)); - AddScreenHandler(std::make_unique<WrongHWIDScreenHandler>()); AddScreenHandler(std::make_unique<AutoEnrollmentCheckScreenHandler>()); @@ -426,6 +426,8 @@ void OobeUI::ConfigureOobeDisplay() { AddScreenHandler(std::make_unique<AssistantOptInFlowScreenHandler>()); + AddScreenHandler(std::make_unique<MultiDeviceSetupScreenHandler>()); + // Initialize KioskAppMenuHandler. Note that it is NOT a screen handler. auto kiosk_app_menu_handler = std::make_unique<KioskAppMenuHandler>(network_state_informer_); @@ -434,28 +436,51 @@ void OobeUI::ConfigureOobeDisplay() { Profile* profile = Profile::FromWebUI(web_ui()); // Set up the chrome://theme/ source, for Chrome logo. - ThemeSource* theme = new ThemeSource(profile); - content::URLDataSource::Add(profile, theme); + content::URLDataSource::Add(profile, std::make_unique<ThemeSource>(profile)); // Set up the chrome://terms/ data source, for EULA content. - AboutUIHTMLSource* about_source = - new AboutUIHTMLSource(chrome::kChromeUITermsHost, profile); - content::URLDataSource::Add(profile, about_source); + content::URLDataSource::Add( + profile, + std::make_unique<AboutUIHTMLSource>(chrome::kChromeUITermsHost, profile)); // Set up the chrome://userimage/ source. - UserImageSource* user_image_source = new UserImageSource(); - content::URLDataSource::Add(profile, user_image_source); + content::URLDataSource::Add(profile, std::make_unique<UserImageSource>()); // TabHelper is required for OOBE webui to make webview working on it. content::WebContents* contents = web_ui()->GetWebContents(); extensions::TabHelper::CreateForWebContents(contents); + // // Handler for the oobe video assets which will be shown if available. + content::URLDataSource::Add(profile, + std::make_unique<chromeos::VideoSource>()); + if (IsRemoraRequisitioned()) oobe_display_chooser_ = std::make_unique<OobeDisplayChooser>(); } +service_manager::Connector* OobeUI::GetLoggedInUserMojoConnector() { + // This function should only be called after the user has logged in. + DCHECK( + user_manager::UserManager::Get()->IsUserLoggedIn() && + user_manager::UserManager::Get()->GetActiveUser()->is_profile_created()); + return content::BrowserContext::GetConnectorFor( + ProfileManager::GetActiveUserProfile()); +} + +void OobeUI::BindMultiDeviceSetup( + multidevice_setup::mojom::MultiDeviceSetupRequest request) { + GetLoggedInUserMojoConnector()->BindInterface( + multidevice_setup::mojom::kServiceName, std::move(request)); +} + +void OobeUI::BindPrivilegedHostDeviceSetter( + multidevice_setup::mojom::PrivilegedHostDeviceSetterRequest request) { + GetLoggedInUserMojoConnector()->BindInterface( + multidevice_setup::mojom::kServiceName, std::move(request)); +} + OobeUI::OobeUI(content::WebUI* web_ui, const GURL& url) - : WebUIController(web_ui) { + : ui::MojoWebUIController(web_ui, true /* enable_chrome_send */) { display_type_ = GetDisplayType(url); js_calls_container = std::make_unique<JSCallsContainer>(); @@ -480,11 +505,15 @@ OobeUI::OobeUI(content::WebUI* web_ui, const GURL& url) content::WebUIDataSource* html_source = CreateOobeUIDataSource(localized_strings, display_type_); content::WebUIDataSource::Add(Profile::FromWebUI(web_ui), html_source); -} -OobeUI::~OobeUI() { + AddHandlerToRegistry(base::BindRepeating(&OobeUI::BindMultiDeviceSetup, + base::Unretained(this))); + AddHandlerToRegistry(base::BindRepeating( + &OobeUI::BindPrivilegedHostDeviceSetter, base::Unretained(this))); } +OobeUI::~OobeUI() {} + CoreOobeView* OobeUI::GetCoreOobeView() { return core_handler_; } @@ -602,6 +631,10 @@ AssistantOptInFlowScreenView* OobeUI::GetAssistantOptInFlowScreenView() { return GetView<AssistantOptInFlowScreenHandler>(); } +MultiDeviceSetupScreenView* OobeUI::GetMultiDeviceSetupScreenView() { + return GetView<MultiDeviceSetupScreenHandler>(); +} + UserImageView* OobeUI::GetUserImageView() { return GetView<UserImageScreenHandler>(); } @@ -610,11 +643,6 @@ ErrorScreen* OobeUI::GetErrorScreen() { return error_screen_.get(); } -SupervisedUserCreationScreenHandler* -OobeUI::GetSupervisedUserCreationScreenView() { - return supervised_user_creation_screen_view_; -} - GaiaView* OobeUI::GetGaiaScreenView() { return GetView<GaiaScreenHandler>(); } diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/oobe_ui.h b/chromium/chrome/browser/ui/webui/chromeos/login/oobe_ui.h index d40fbf186a4..6ae64eac3b9 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/oobe_ui.h +++ b/chromium/chrome/browser/ui/webui/chromeos/login/oobe_ui.h @@ -18,12 +18,17 @@ #include "chrome/browser/chromeos/settings/shutdown_policy_handler.h" #include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h" -#include "content/public/browser/web_ui_controller.h" +#include "chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom.h" +#include "ui/webui/mojo_web_ui_controller.h" namespace base { class DictionaryValue; } // namespace base +namespace service_manager { +class Connector; +} // namespace service_manager + namespace chromeos { class AppDownloadingScreenView; class AppLaunchSplashScreenView; @@ -52,6 +57,7 @@ class KioskAutolaunchScreenView; class KioskEnableScreenView; class LoginScreenContext; class MarketingOptInScreenView; +class MultiDeviceSetupScreenView; class NativeWindowDelegate; class NetworkScreenView; class NetworkStateInformer; @@ -60,7 +66,6 @@ class RecommendAppsScreenView; class ResetView; class SigninScreenHandler; class SigninScreenHandlerDelegate; -class SupervisedUserCreationScreenHandler; class SyncConsentScreenView; class TermsOfServiceScreenView; class UserBoardView; @@ -76,7 +81,7 @@ class WrongHWIDScreenView; // - welcome screen (setup language/keyboard/network). // - eula screen (CrOS (+ OEM) EULA content/TPM password/crash reporting). // - update screen. -class OobeUI : public content::WebUIController, +class OobeUI : public ui::MojoWebUIController, public ShutdownPolicyHandler::Delegate { public: // List of known types of OobeUI. Type added as path in chrome://oobe url, for @@ -127,7 +132,6 @@ class OobeUI : public content::WebUIController, ErrorScreen* GetErrorScreen(); WrongHWIDScreenView* GetWrongHWIDScreenView(); AutoEnrollmentCheckScreenView* GetAutoEnrollmentCheckScreenView(); - SupervisedUserCreationScreenHandler* GetSupervisedUserCreationScreenView(); AppLaunchSplashScreenView* GetAppLaunchSplashScreenView(); ArcKioskSplashScreenView* GetArcKioskSplashScreenView(); HIDDetectionView* GetHIDDetectionView(); @@ -139,6 +143,7 @@ class OobeUI : public content::WebUIController, WaitForContainerReadyScreenView* GetWaitForContainerReadyScreenView(); UpdateRequiredView* GetUpdateRequiredScreenView(); AssistantOptInFlowScreenView* GetAssistantOptInFlowScreenView(); + MultiDeviceSetupScreenView* GetMultiDeviceSetupScreenView(); GaiaView* GetGaiaScreenView(); UserBoardView* GetUserBoardView(); DiscoverScreenView* GetDiscoverScreenView(); @@ -228,6 +233,13 @@ class OobeUI : public content::WebUIController, // display type. void ConfigureOobeDisplay(); + // Adds Mojo bindings for this WebUIController. + service_manager::Connector* GetLoggedInUserMojoConnector(); + void BindMultiDeviceSetup( + multidevice_setup::mojom::MultiDeviceSetupRequest request); + void BindPrivilegedHostDeviceSetter( + multidevice_setup::mojom::PrivilegedHostDeviceSetterRequest request); + // Type of UI. std::string display_type_; @@ -238,8 +250,6 @@ class OobeUI : public content::WebUIController, // Reference to CoreOobeHandler that handles common requests of Oobe page. CoreOobeHandler* core_handler_ = nullptr; - SupervisedUserCreationScreenHandler* supervised_user_creation_screen_view_ = - nullptr; // Reference to SigninScreenHandler that handles sign-in screen requests and // forwards calls from native code to JS side. SigninScreenHandler* signin_screen_handler_ = nullptr; diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/recommend_apps_screen_handler.cc b/chromium/chrome/browser/ui/webui/chromeos/login/recommend_apps_screen_handler.cc index 75924f17d03..df7748287f1 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/recommend_apps_screen_handler.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/login/recommend_apps_screen_handler.cc @@ -4,6 +4,7 @@ #include "chrome/browser/ui/webui/chromeos/login/recommend_apps_screen_handler.h" +#include "base/metrics/histogram_macros.h" #include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/login/screens/recommend_apps_screen.h" #include "chrome/browser/profiles/profile.h" @@ -23,6 +24,51 @@ constexpr const char kUserActionSkip[] = "recommendAppsSkip"; constexpr const char kUserActionRetry[] = "recommendAppsRetry"; constexpr const char kUserActionInstall[] = "recommendAppsInstall"; +constexpr const int kMaxAppCount = 21; + +enum class RecommendAppsScreenState { + // These values are persisted to logs. Entries should not be renumbered and + // numeric values should never be reused. This should be kept in sync with + // RecommendAppsScreenState in enums.xml. + SHOW = 0, + NO_SHOW = 1, + ERROR = 2, + + kMaxValue = ERROR +}; + +enum class RecommendAppsScreenAction { + // These values are persisted to logs. Entries should not be renumbered and + // numeric values should never be reused. This should be kept in sync with + // RecommendAppsScreenAction in enums.xml. + SKIPPED = 0, + RETRIED = 1, + SELECTED_NONE = 2, + APP_SELECTED = 3, + + kMaxValue = APP_SELECTED +}; + +void RecordUmaUserSelectionAppCount(int app_count) { + UMA_HISTOGRAM_EXACT_LINEAR("OOBE.RecommendApps.Screen.SelectedAppCount", + app_count, kMaxAppCount); +} + +void RecordUmaSelectedRecommendedPercentage( + int selected_recommended_percentage) { + UMA_HISTOGRAM_PERCENTAGE( + "OOBE.RecommendApps.Screen.SelectedRecommendedPercentage", + selected_recommended_percentage); +} + +void RecordUmaScreenState(RecommendAppsScreenState state) { + UMA_HISTOGRAM_ENUMERATION("OOBE.RecommendApps.Screen.State", state); +} + +void RecordUmaScreenAction(RecommendAppsScreenAction action) { + UMA_HISTOGRAM_ENUMERATION("OOBE.RecommendApps.Screen.Action", action); +} + } // namespace namespace chromeos { @@ -52,7 +98,7 @@ void RecommendAppsScreenHandler::DeclareLocalizedValues( void RecommendAppsScreenHandler::RegisterMessages() { BaseScreenHandler::RegisterMessages(); - AddCallback(kUserActionSkip, &RecommendAppsScreenHandler::HandleSkip); + AddCallback(kUserActionSkip, &RecommendAppsScreenHandler::OnUserSkip); AddCallback(kUserActionRetry, &RecommendAppsScreenHandler::HandleRetry); AddRawCallback(kUserActionInstall, &RecommendAppsScreenHandler::HandleInstall); @@ -86,9 +132,12 @@ void RecommendAppsScreenHandler::Initialize() {} void RecommendAppsScreenHandler::LoadAppListInUI(const base::Value& app_list) { if (!page_is_ready()) { + RecordUmaScreenState(RecommendAppsScreenState::ERROR); CallJS("showError"); return; } + + RecordUmaScreenState(RecommendAppsScreenState::SHOW); const ui::ResourceBundle& resource_bundle = ui::ResourceBundle::GetSharedInstance(); base::StringPiece app_list_webview = resource_bundle.GetRawDataResource( @@ -98,35 +147,58 @@ void RecommendAppsScreenHandler::LoadAppListInUI(const base::Value& app_list) { } void RecommendAppsScreenHandler::OnLoadError() { + RecordUmaScreenState(RecommendAppsScreenState::ERROR); CallJS("showError"); } void RecommendAppsScreenHandler::OnLoadSuccess(const base::Value& app_list) { + recommended_app_count_ = static_cast<int>(app_list.GetList().size()); LoadAppListInUI(app_list); } void RecommendAppsScreenHandler::OnParseResponseError() { + RecordUmaScreenState(RecommendAppsScreenState::NO_SHOW); + HandleSkip(); +} +void RecommendAppsScreenHandler::OnUserSkip() { + RecordUmaScreenAction(RecommendAppsScreenAction::SKIPPED); HandleSkip(); } +// There are three scenarios that HandleSkip() is called: +// 1. The user clicks the Skip button. +// 2. The user doesn't select any apps and click the Install button. +// 3. The response from the fetcher cannot be parsed. +// Each case has its own entry point to be logged. void RecommendAppsScreenHandler::HandleSkip() { for (auto& observer : observer_list_) observer.OnSkip(); } void RecommendAppsScreenHandler::HandleRetry() { + RecordUmaScreenAction(RecommendAppsScreenAction::RETRIED); for (auto& observer : observer_list_) observer.OnRetry(); } void RecommendAppsScreenHandler::HandleInstall(const base::ListValue* args) { + if (recommended_app_count_ != 0) { + int selected_app_count = static_cast<int>(args->GetSize()); + int selected_recommended_percentage = + 100 * selected_app_count / recommended_app_count_; + RecordUmaUserSelectionAppCount(selected_app_count); + RecordUmaSelectedRecommendedPercentage(selected_recommended_percentage); + } + // If the user does not select any apps, we should skip the app downloading // screen. if (args->GetList().empty()) { + RecordUmaScreenAction(RecommendAppsScreenAction::SELECTED_NONE); HandleSkip(); return; } + RecordUmaScreenAction(RecommendAppsScreenAction::APP_SELECTED); pref_service_->Set(arc::prefs::kArcFastAppReinstallPackages, *args); arc::ArcFastAppReinstallStarter* fast_app_reinstall_starter = diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/recommend_apps_screen_handler.h b/chromium/chrome/browser/ui/webui/chromeos/login/recommend_apps_screen_handler.h index 723c44bfc42..f935f3cd83c 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/recommend_apps_screen_handler.h +++ b/chromium/chrome/browser/ui/webui/chromeos/login/recommend_apps_screen_handler.h @@ -43,6 +43,8 @@ class RecommendAppsScreenHandler : public BaseScreenHandler, void OnLoadSuccess(const base::Value& app_list) override; void OnParseResponseError() override; + void OnUserSkip(); + // Call the JS function to load the list of apps in the WebView. void LoadAppListInUI(const base::Value& app_list); @@ -57,6 +59,8 @@ class RecommendAppsScreenHandler : public BaseScreenHandler, base::ObserverList<RecommendAppsScreenViewObserver, true>::Unchecked observer_list_; + int recommended_app_count_ = 0; + DISALLOW_COPY_AND_ASSIGN(RecommendAppsScreenHandler); }; diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/screenlock_icon_source.h b/chromium/chrome/browser/ui/webui/chromeos/login/screenlock_icon_source.h index 98e86f8d8d2..d6715f1afa8 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/screenlock_icon_source.h +++ b/chromium/chrome/browser/ui/webui/chromeos/login/screenlock_icon_source.h @@ -18,6 +18,7 @@ class ScreenlockIconSource : public content::URLDataSource { public: explicit ScreenlockIconSource( base::WeakPtr<ScreenlockIconProvider> icon_provider); + ~ScreenlockIconSource() override; // content::URLDataSource implementation. std::string GetSource() const override; @@ -32,8 +33,6 @@ class ScreenlockIconSource : public content::URLDataSource { static std::string GetIconURLForUser(const std::string& username); private: - ~ScreenlockIconSource() override; - base::WeakPtr<ScreenlockIconProvider> icon_provider_; DISALLOW_COPY_AND_ASSIGN(ScreenlockIconSource); diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc b/chromium/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc index 3ba24b7fc48..e7d6e4c5de3 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc @@ -17,7 +17,6 @@ #include "ash/public/interfaces/shutdown.mojom.h" #include "ash/public/interfaces/tray_action.mojom.h" #include "ash/shell.h" -#include "ash/strings/grit/ash_strings.h" #include "base/bind.h" #include "base/i18n/number_formatting.h" #include "base/location.h" @@ -93,6 +92,7 @@ #include "chromeos/login/auth/user_context.h" #include "chromeos/network/network_state.h" #include "chromeos/network/network_state_handler.h" +#include "chromeos/strings/grit/chromeos_strings.h" #include "components/login/localized_values_builder.h" #include "components/prefs/pref_registry_simple.h" #include "components/prefs/pref_service.h" @@ -376,8 +376,6 @@ void SigninScreenHandler::DeclareLocalizedValues( builder->Add("addUser", IDS_ASH_ADD_USER_BUTTON); builder->Add("browseAsGuest", IDS_ASH_BROWSE_AS_GUEST_BUTTON); builder->Add("moreOptions", IDS_MORE_OPTIONS_BUTTON); - builder->Add("addSupervisedUser", - IDS_CREATE_LEGACY_SUPERVISED_USER_MENU_LABEL); builder->Add("cancel", IDS_ASH_SHELF_CANCEL_BUTTON); builder->Add("signOutUser", IDS_ASH_SHELF_SIGN_OUT_BUTTON); builder->Add("unlockUser", IDS_ASH_SHELF_UNLOCK_BUTTON); @@ -506,8 +504,6 @@ void SigninScreenHandler::RegisterMessages() { AddCallback("completeOfflineAuthentication", &SigninScreenHandler::HandleCompleteOfflineAuthentication); AddCallback("launchIncognito", &SigninScreenHandler::HandleLaunchIncognito); - AddCallback("showSupervisedUserCreationScreen", - &SigninScreenHandler::HandleShowSupervisedUserCreationScreen); AddCallback("launchPublicSession", &SigninScreenHandler::HandleLaunchPublicSession); AddRawCallback("offlineLogin", &SigninScreenHandler::HandleOfflineLogin); @@ -854,15 +850,15 @@ void SigninScreenHandler::SetupAndShowOfflineMessage( std::string()); } - const bool guest_signin_allowed = - chrome_user_manager_util::IsGuestSessionAllowed(CrosSettings::Get()) && - IsSigninScreenError(error_screen_->GetErrorState()); + bool guest_signin_allowed = false; + bool offline_login_allowed = false; + if (IsSigninScreenError(error_screen_->GetErrorState())) { + guest_signin_allowed = + user_manager::UserManager::Get()->IsGuestSessionAllowed(); + offline_login_allowed = error_screen_->GetErrorState() != + NetworkError::ERROR_STATE_AUTH_EXT_TIMEOUT; + } error_screen_->AllowGuestSignin(guest_signin_allowed); - - const bool offline_login_allowed = - IsSigninScreenError(error_screen_->GetErrorState()) && - error_screen_->GetErrorState() != - NetworkError::ERROR_STATE_AUTH_EXT_TIMEOUT; error_screen_->AllowOfflineLogin(offline_login_allowed); if (GetCurrentScreen() != OobeScreen::SCREEN_ERROR_MESSAGE) { @@ -1265,15 +1261,6 @@ void SigninScreenHandler::HandleLaunchIncognito() { delegate_->Login(context, SigninSpecifics()); } -void SigninScreenHandler::HandleShowSupervisedUserCreationScreen() { - if (!user_manager::UserManager::Get()->AreSupervisedUsersAllowed()) { - LOG(ERROR) << "Managed users not allowed."; - return; - } - LoginDisplayHost::default_host()->StartWizard( - OobeScreen::SCREEN_CREATE_SUPERVISED_USER_FLOW); -} - void SigninScreenHandler::HandleLaunchPublicSession( const AccountId& account_id, const std::string& locale, @@ -1629,6 +1616,11 @@ void SigninScreenHandler::HandleMaxIncorrectPasswordAttempts( } void SigninScreenHandler::HandleSendFeedback() { + if (!LoginFeedback::IsEnabled()) { + OnFeedbackFinished(); + return; + } + login_feedback_ = std::make_unique<LoginFeedback>(Profile::FromWebUI(web_ui())); login_feedback_->Request( @@ -1637,6 +1629,11 @@ void SigninScreenHandler::HandleSendFeedback() { } void SigninScreenHandler::HandleSendFeedbackAndResyncUserData() { + if (!LoginFeedback::IsEnabled()) { + OnUnrecoverableCryptohomeFeedbackFinished(); + return; + } + const std::string description = base::StringPrintf( "Auto generated feedback for http://crbug.com/547857.\n" "(uniquifier:%s)", diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h b/chromium/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h index 9c3a788ca45..c8e234bf48d 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h +++ b/chromium/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h @@ -73,7 +73,6 @@ class ErrorScreensHistogramHelper; class GaiaScreenHandler; class LoginFeedback; class NativeWindowDelegate; -class SupervisedUserCreationScreenHandler; class User; class UserContext; @@ -280,7 +279,6 @@ class SigninScreenHandler friend class GaiaScreenHandler; friend class ReportDnsCacheClearedOnUIThread; - friend class SupervisedUserCreationScreenHandler; friend class LoginDisplayHostMojo; void ShowImpl(); @@ -391,7 +389,6 @@ class SigninScreenHandler void HandleUnlockOnLoginSuccess(); void HandleLoginScreenUpdate(); void HandleShowLoadingTimeoutError(); - void HandleShowSupervisedUserCreationScreen(); void HandleFocusPod(const AccountId& account_id, bool is_large_pod); void HandleNoPodFocused(); void HandleHardlockPod(const std::string& user_id); diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/supervised_user_creation_screen_handler.cc b/chromium/chrome/browser/ui/webui/chromeos/login/supervised_user_creation_screen_handler.cc deleted file mode 100644 index a6e4906ac6c..00000000000 --- a/chromium/chrome/browser/ui/webui/chromeos/login/supervised_user_creation_screen_handler.cc +++ /dev/null @@ -1,461 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/ui/webui/chromeos/login/supervised_user_creation_screen_handler.h" - -#include <memory> -#include <utility> - -#include "base/strings/utf_string_conversions.h" -#include "base/values.h" -#include "chrome/browser/chromeos/accessibility/accessibility_manager.h" -#include "chrome/browser/chromeos/login/oobe_screen.h" -#include "chrome/browser/chromeos/login/screens/user_selection_screen.h" -#include "chrome/browser/chromeos/login/supervised/supervised_user_creation_flow.h" -#include "chrome/browser/chromeos/login/users/chrome_user_manager.h" -#include "chrome/browser/chromeos/login/users/supervised_user_manager.h" -#include "chrome/browser/chromeos/settings/cros_settings.h" -#include "chrome/browser/ui/ash/wallpaper_controller_client.h" -#include "chrome/common/url_constants.h" -#include "chrome/grit/browser_resources.h" -#include "chrome/grit/generated_resources.h" -#include "chromeos/audio/chromeos_sounds.h" -#include "components/account_id/account_id.h" -#include "components/login/localized_values_builder.h" -#include "components/user_manager/user_manager.h" -#include "components/user_manager/user_type.h" -#include "google_apis/gaia/gaia_auth_util.h" -#include "media/audio/sounds/sounds_manager.h" -#include "net/base/data_url.h" -#include "net/base/escape.h" -#include "ui/base/l10n/l10n_util.h" -#include "ui/base/resource/resource_bundle.h" - -const char kJsScreenPath[] = "login.SupervisedUserCreationScreen"; - -namespace chromeos { - -SupervisedUserCreationScreenHandler::SupervisedUserCreationScreenHandler() - : BaseScreenHandler(OobeScreen::SCREEN_CREATE_SUPERVISED_USER_FLOW) { - set_call_js_prefix(kJsScreenPath); - ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); - media::SoundsManager* manager = media::SoundsManager::Get(); - manager->Initialize(SOUND_OBJECT_DELETE, - bundle.GetRawDataResource(IDR_SOUND_OBJECT_DELETE_WAV)); - manager->Initialize(SOUND_CAMERA_SNAP, - bundle.GetRawDataResource(IDR_SOUND_CAMERA_SNAP_WAV)); -} - -SupervisedUserCreationScreenHandler::~SupervisedUserCreationScreenHandler() { - if (delegate_) { - delegate_->OnViewDestroyed(this); - } -} - -void SupervisedUserCreationScreenHandler::DeclareLocalizedValues( - ::login::LocalizedValuesBuilder* builder) { - builder->Add( - "supervisedUserCreationFlowRetryButtonTitle", - IDS_CREATE_SUPERVISED_USER_CREATION_ERROR_RETRY_BUTTON_TITLE); - builder->Add( - "supervisedUserCreationFlowCancelButtonTitle", - IDS_CREATE_SUPERVISED_USER_CREATION_ERROR_CANCEL_BUTTON_TITLE); - builder->Add( - "supervisedUserCreationFlowGotitButtonTitle", - IDS_CREATE_SUPERVISED_USER_CREATION_GOT_IT_BUTTON_TITLE); - - builder->Add("createSupervisedUserIntroTextTitle", - IDS_CREATE_SUPERVISED_INTRO_TEXT_TITLE); - builder->Add("createSupervisedUserIntroAlternateText", - IDS_CREATE_SUPERVISED_INTRO_ALTERNATE_TEXT); - builder->Add("createSupervisedUserIntroText1", - IDS_CREATE_SUPERVISED_INTRO_TEXT_1); - builder->Add("createSupervisedUserIntroManagerItem1", - IDS_CREATE_SUPERVISED_INTRO_MANAGER_ITEM_1); - builder->Add("createSupervisedUserIntroManagerItem2", - IDS_CREATE_SUPERVISED_INTRO_MANAGER_ITEM_2); - builder->Add("createSupervisedUserIntroManagerItem3", - IDS_CREATE_SUPERVISED_INTRO_MANAGER_ITEM_3); - builder->Add("createSupervisedUserIntroText2", - IDS_CREATE_SUPERVISED_INTRO_TEXT_2); - builder->AddF("createSupervisedUserIntroText3", - IDS_CREATE_SUPERVISED_INTRO_TEXT_3, - base::UTF8ToUTF16( - chrome::kLegacySupervisedUserManagementDisplayURL)); - - builder->Add("createSupervisedUserPickManagerTitle", - IDS_CREATE_SUPERVISED_USER_CREATE_PICK_MANAGER_TITLE); - builder->AddF("createSupervisedUserPickManagerTitleExplanation", - IDS_CREATE_SUPERVISED_USER_CREATE_PICK_MANAGER_EXPLANATION, - base::UTF8ToUTF16( - chrome::kLegacySupervisedUserManagementDisplayURL)); - builder->Add("createSupervisedUserManagerPasswordHint", - IDS_CREATE_SUPERVISED_USER_CREATE_MANAGER_PASSWORD_HINT); - builder->Add("createSupervisedUserWrongManagerPasswordText", - IDS_CREATE_SUPERVISED_USER_MANAGER_PASSWORD_ERROR); - - builder->Add("createSupervisedUserNameTitle", - IDS_CREATE_SUPERVISED_USER_CREATE_ACCOUNT_NAME_TITLE); - builder->Add("createSupervisedUserNameAccessibleTitle", - IDS_CREATE_SUPERVISED_USER_SETUP_ACCESSIBLE_TITLE); - builder->Add("createSupervisedUserNameExplanation", - IDS_CREATE_SUPERVISED_USER_CREATE_ACCOUNT_NAME_EXPLANATION); - builder->Add("createSupervisedUserNameHint", - IDS_CREATE_SUPERVISED_USER_CREATE_ACCOUNT_NAME_HINT); - builder->Add("createSupervisedUserPasswordTitle", - IDS_CREATE_SUPERVISED_USER_CREATE_PASSWORD_TITLE); - builder->Add("createSupervisedUserPasswordExplanation", - IDS_CREATE_SUPERVISED_USER_CREATE_PASSWORD_EXPLANATION); - builder->Add("createSupervisedUserPasswordHint", - IDS_CREATE_SUPERVISED_USER_CREATE_PASSWORD_HINT); - builder->Add("createSupervisedUserPasswordConfirmHint", - IDS_CREATE_SUPERVISED_USER_CREATE_PASSWORD_CONFIRM_HINT); - builder->Add("supervisedUserCreationFlowProceedButtonTitle", - IDS_CREATE_SUPERVISED_USER_CREATE_CONTINUE_BUTTON_TEXT); - builder->Add("supervisedUserCreationFlowStartButtonTitle", - IDS_CREATE_SUPERVISED_USER_CREATE_START_BUTTON_TEXT); - builder->Add("supervisedUserCreationFlowPrevButtonTitle", - IDS_CREATE_SUPERVISED_USER_CREATE_PREVIOUS_BUTTON_TEXT); - builder->Add("supervisedUserCreationFlowNextButtonTitle", - IDS_CREATE_SUPERVISED_USER_CREATE_NEXT_BUTTON_TEXT); - builder->Add("supervisedUserCreationFlowHandleErrorButtonTitle", - IDS_CREATE_SUPERVISED_USER_CREATE_HANDLE_ERROR_BUTTON_TEXT); - builder->Add("createSupervisedUserPasswordMismatchError", - IDS_CREATE_SUPERVISED_USER_CREATE_PASSWORD_MISMATCH_ERROR); - - builder->Add("createSupervisedUserCreatedText1", - IDS_CREATE_SUPERVISED_USER_CREATED_1_TEXT_1); - builder->Add("createSupervisedUserCreatedText2", - IDS_CREATE_SUPERVISED_USER_CREATED_1_TEXT_2); - builder->Add("createSupervisedUserCreatedText3", - IDS_CREATE_SUPERVISED_USER_CREATED_1_TEXT_3); - - builder->Add("importExistingSupervisedUserTitle", - IDS_IMPORT_EXISTING_LEGACY_SUPERVISED_USER_TITLE); - builder->Add("importSupervisedUserLink", - IDS_IMPORT_EXISTING_LEGACY_SUPERVISED_USER_TITLE); - builder->Add("importExistingSupervisedUserText", - IDS_IMPORT_EXISTING_LEGACY_SUPERVISED_USER_TEXT); - builder->Add("supervisedUserCreationFlowImportButtonTitle", - IDS_IMPORT_EXISTING_LEGACY_SUPERVISED_USER_OK); - builder->Add("createSupervisedUserLink", - IDS_CREATE_NEW_LEGACY_SUPERVISED_USER_LINK); - builder->Add("importBubbleText", - IDS_SUPERVISED_USER_IMPORT_BUBBLE_TEXT); - builder->Add("importUserExists", - IDS_SUPERVISED_USER_IMPORT_USER_EXIST); - builder->Add("importUsernameExists", - IDS_SUPERVISED_USER_IMPORT_USERNAME_EXIST); - - builder->Add("managementURL", - chrome::kLegacySupervisedUserManagementDisplayURL); - - // TODO(antrim) : this is an explicit code duplications with UserImageScreen. - // It should be removed by issue 251179. - builder->Add("takePhoto", IDS_OPTIONS_CHANGE_PICTURE_TAKE_PHOTO); - builder->Add("discardPhoto", IDS_OPTIONS_CHANGE_PICTURE_DISCARD_PHOTO); - builder->Add("photoCaptureAccessibleText", - IDS_OPTIONS_PHOTO_CAPTURE_ACCESSIBLE_TEXT); - builder->Add("photoDiscardAccessibleText", - IDS_OPTIONS_PHOTO_DISCARD_ACCESSIBLE_TEXT); -} - -void SupervisedUserCreationScreenHandler::Initialize() {} - -void SupervisedUserCreationScreenHandler::RegisterMessages() { - AddCallback("finishLocalSupervisedUserCreation", - &SupervisedUserCreationScreenHandler:: - HandleFinishLocalSupervisedUserCreation); - AddCallback("abortLocalSupervisedUserCreation", - &SupervisedUserCreationScreenHandler:: - HandleAbortLocalSupervisedUserCreation); - AddCallback("hideLocalSupervisedUserCreation", - &SupervisedUserCreationScreenHandler:: - HandleHideLocalSupervisedUserCreation); - AddCallback("checkSupervisedUserName", - &SupervisedUserCreationScreenHandler:: - HandleCheckSupervisedUserName); - AddCallback("authenticateManagerInSupervisedUserCreationFlow", - &SupervisedUserCreationScreenHandler:: - HandleAuthenticateManager); - AddCallback("specifySupervisedUserCreationFlowUserData", - &SupervisedUserCreationScreenHandler:: - HandleCreateSupervisedUser); - AddCallback("managerSelectedOnSupervisedUserCreationFlow", - &SupervisedUserCreationScreenHandler:: - HandleManagerSelected); - AddCallback("userSelectedForImportInSupervisedUserCreationFlow", - &SupervisedUserCreationScreenHandler:: - HandleImportUserSelected); - AddCallback("importSupervisedUser", - &SupervisedUserCreationScreenHandler:: - HandleImportSupervisedUser); - AddCallback("importSupervisedUserWithPassword", - &SupervisedUserCreationScreenHandler:: - HandleImportSupervisedUserWithPassword); - - - // TODO(antrim) : this is an explicit code duplications with UserImageScreen. - // It should be removed by issue 251179. - AddCallback("supervisedUserGetImages", - &SupervisedUserCreationScreenHandler::HandleGetImages); - - AddCallback("supervisedUserPhotoTaken", - &SupervisedUserCreationScreenHandler::HandlePhotoTaken); - AddCallback("supervisedUserTakePhoto", - &SupervisedUserCreationScreenHandler::HandleTakePhoto); - AddCallback("supervisedUserDiscardPhoto", - &SupervisedUserCreationScreenHandler::HandleDiscardPhoto); - AddCallback("supervisedUserSelectImage", - &SupervisedUserCreationScreenHandler::HandleSelectImage); - AddCallback("currentSupervisedUserPage", - &SupervisedUserCreationScreenHandler:: - HandleCurrentSupervisedUserPage); -} - -void SupervisedUserCreationScreenHandler::Show() { - std::unique_ptr<base::DictionaryValue> data(new base::DictionaryValue()); - std::unique_ptr<base::ListValue> users_list(new base::ListValue()); - const user_manager::UserList& users = - ChromeUserManager::Get()->GetUsersAllowedForSupervisedUsersCreation(); - std::string owner; - chromeos::CrosSettings::Get()->GetString(chromeos::kDeviceOwner, &owner); - - for (user_manager::UserList::const_iterator it = users.begin(); - it != users.end(); - ++it) { - bool is_owner = ((*it)->GetAccountId().GetUserEmail() == owner); - auto user_dict = std::make_unique<base::DictionaryValue>(); - UserSelectionScreen::FillUserDictionary( - *it, is_owner, false, /* is_signin_to_add */ - proximity_auth::mojom::AuthType::OFFLINE_PASSWORD, - NULL, /* public_session_recommended_locales */ - user_dict.get()); - users_list->Append(std::move(user_dict)); - } - data->Set("managers", std::move(users_list)); - ShowScreenWithData(OobeScreen::SCREEN_CREATE_SUPERVISED_USER_FLOW, - data.get()); - - if (!delegate_) - return; -} - -void SupervisedUserCreationScreenHandler::Hide() { -} - -void SupervisedUserCreationScreenHandler::ShowIntroPage() { - CallJS("showIntroPage"); -} - -void SupervisedUserCreationScreenHandler::ShowManagerPasswordError() { - CallJS("showManagerPasswordError"); -} - -void SupervisedUserCreationScreenHandler::ShowStatusMessage( - bool is_progress, - const base::string16& message) { - if (is_progress) - CallJS("showProgress", message); - else - CallJS("showStatusError", message); -} - -void SupervisedUserCreationScreenHandler::ShowUsernamePage() { - CallJS("showUsernamePage"); -} - -void SupervisedUserCreationScreenHandler::ShowTutorialPage() { - CallJS("showTutorialPage"); -} - -void SupervisedUserCreationScreenHandler::ShowErrorPage( - const base::string16& title, - const base::string16& message, - const base::string16& button_text) { - CallJS("showErrorPage", title, message, button_text); -} - -void SupervisedUserCreationScreenHandler::SetDelegate(Delegate* delegate) { - delegate_ = delegate; -} - -void SupervisedUserCreationScreenHandler:: - HandleFinishLocalSupervisedUserCreation() { - delegate_->FinishFlow(); -} - -void SupervisedUserCreationScreenHandler:: - HandleAbortLocalSupervisedUserCreation() { - delegate_->AbortFlow(); -} - -void SupervisedUserCreationScreenHandler:: - HandleHideLocalSupervisedUserCreation() { - delegate_->HideFlow(); -} - -void SupervisedUserCreationScreenHandler::HandleManagerSelected( - const AccountId& manager_id) { - if (!delegate_) - return; - WallpaperControllerClient::Get()->ShowUserWallpaper(manager_id); -} - -void SupervisedUserCreationScreenHandler::HandleImportUserSelected( - const AccountId& account_id) { - if (!delegate_) - return; -} - -void SupervisedUserCreationScreenHandler::HandleCheckSupervisedUserName( - const base::string16& name) { - std::string user_id; - if (NULL != - ChromeUserManager::Get()->GetSupervisedUserManager()->FindByDisplayName( - base::CollapseWhitespace(name, true))) { - CallJS("supervisedUserNameError", name, - l10n_util::GetStringUTF16( - IDS_CREATE_SUPERVISED_USER_CREATE_USERNAME_ALREADY_EXISTS)); - } else if (net::EscapeForHTML(name) != name) { - CallJS("supervisedUserNameError", name, - l10n_util::GetStringUTF16( - IDS_CREATE_SUPERVISED_USER_CREATE_ILLEGAL_USERNAME)); - } else if (delegate_ && delegate_->FindUserByDisplayName( - base::CollapseWhitespace(name, true), &user_id)) { - CallJS("supervisedUserSuggestImport", name, user_id); - } else { - CallJS("supervisedUserNameOk", name); - } -} - -void SupervisedUserCreationScreenHandler::HandleCreateSupervisedUser( - const base::string16& new_raw_user_name, - const std::string& new_user_password) { - if (!delegate_) - return; - const base::string16 new_user_name = - base::CollapseWhitespace(new_raw_user_name, true); - if (NULL != - ChromeUserManager::Get()->GetSupervisedUserManager()->FindByDisplayName( - new_user_name)) { - CallJS("supervisedUserNameError", new_user_name, - l10n_util::GetStringFUTF16( - IDS_CREATE_SUPERVISED_USER_CREATE_USERNAME_ALREADY_EXISTS, - new_user_name)); - return; - } - if (net::EscapeForHTML(new_user_name) != new_user_name) { - CallJS("supervisedUserNameError", new_user_name, - l10n_util::GetStringUTF16( - IDS_CREATE_SUPERVISED_USER_CREATE_ILLEGAL_USERNAME)); - return; - } - - if (new_user_password.length() == 0) { - CallJS("showPasswordError", - l10n_util::GetStringUTF16( - IDS_CREATE_SUPERVISED_USER_CREATE_PASSWORD_TOO_SHORT)); - return; - } - - ShowStatusMessage(true /* progress */, l10n_util::GetStringUTF16( - IDS_CREATE_SUPERVISED_USER_CREATION_CREATION_PROGRESS_MESSAGE)); - - delegate_->CreateSupervisedUser(new_user_name, new_user_password); -} - -void SupervisedUserCreationScreenHandler::HandleImportSupervisedUser( - const AccountId& account_id) { - if (!delegate_) - return; - - ShowStatusMessage(true /* progress */, l10n_util::GetStringUTF16( - IDS_CREATE_SUPERVISED_USER_CREATION_CREATION_PROGRESS_MESSAGE)); - - delegate_->ImportSupervisedUser(account_id.GetUserEmail()); -} - -void SupervisedUserCreationScreenHandler:: - HandleImportSupervisedUserWithPassword(const AccountId& account_id, - const std::string& password) { - if (!delegate_) - return; - - ShowStatusMessage(true /* progress */, l10n_util::GetStringUTF16( - IDS_CREATE_SUPERVISED_USER_CREATION_CREATION_PROGRESS_MESSAGE)); - - delegate_->ImportSupervisedUserWithPassword(account_id.GetUserEmail(), - password); -} - -void SupervisedUserCreationScreenHandler::HandleAuthenticateManager( - const AccountId& manager_raw_account_id, - const std::string& manager_password) { - const AccountId manager_account_id = AccountId::FromUserEmailGaiaId( - gaia::SanitizeEmail(manager_raw_account_id.GetUserEmail()), - manager_raw_account_id.GetGaiaId()); - delegate_->AuthenticateManager(manager_account_id, manager_password); -} - -// TODO(antrim) : this is an explicit code duplications with UserImageScreen. -// It should be removed by issue 251179. -void SupervisedUserCreationScreenHandler::HandleGetImages() { - base::DictionaryValue result; - result.SetInteger("first", default_user_image::GetFirstDefaultImage()); - std::unique_ptr<base::ListValue> default_images = - default_user_image::GetAsDictionary(true /* all */); - result.Set("images", std::move(default_images)); - CallJS("setDefaultImages", result); -} - -void SupervisedUserCreationScreenHandler::HandlePhotoTaken - (const std::string& image_url) { - std::string mime_type, charset, raw_data; - if (!net::DataURL::Parse(GURL(image_url), &mime_type, &charset, &raw_data)) - NOTREACHED(); - DCHECK_EQ("image/png", mime_type); - - if (delegate_) - delegate_->OnPhotoTaken(raw_data); -} - -void SupervisedUserCreationScreenHandler::HandleTakePhoto() { - AccessibilityManager::Get()->PlayEarcon( - SOUND_CAMERA_SNAP, PlaySoundOption::ONLY_IF_SPOKEN_FEEDBACK_ENABLED); -} - -void SupervisedUserCreationScreenHandler::HandleDiscardPhoto() { - AccessibilityManager::Get()->PlayEarcon( - SOUND_OBJECT_DELETE, PlaySoundOption::ONLY_IF_SPOKEN_FEEDBACK_ENABLED); -} - -void SupervisedUserCreationScreenHandler::HandleSelectImage( - const std::string& image_type, - const std::string& image_url) { - if (delegate_) - delegate_->OnImageSelected(image_type, image_url); -} - -void SupervisedUserCreationScreenHandler::HandleCurrentSupervisedUserPage( - const std::string& page) { - if (delegate_) - delegate_->OnPageSelected(page); -} - -void SupervisedUserCreationScreenHandler::ShowPage( - const std::string& page) { - CallJS("showPage", page); -} - -void SupervisedUserCreationScreenHandler::SetCameraPresent(bool present) { - CallJS("setCameraPresent", present); -} - -void SupervisedUserCreationScreenHandler::ShowExistingSupervisedUsers( - const base::ListValue* users) { - CallJS("setExistingSupervisedUsers", *users); -} - -} // namespace chromeos diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/supervised_user_creation_screen_handler.h b/chromium/chrome/browser/ui/webui/chromeos/login/supervised_user_creation_screen_handler.h deleted file mode 100644 index d81551add56..00000000000 --- a/chromium/chrome/browser/ui/webui/chromeos/login/supervised_user_creation_screen_handler.h +++ /dev/null @@ -1,141 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_SUPERVISED_USER_CREATION_SCREEN_HANDLER_H_ -#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_SUPERVISED_USER_CREATION_SCREEN_HANDLER_H_ - -#include <string> - -#include "base/compiler_specific.h" -#include "base/macros.h" -#include "base/strings/string16.h" -#include "chrome/browser/chromeos/login/users/default_user_image/default_user_images.h" -#include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h" -#include "content/public/browser/web_ui.h" - -namespace base { -class ListValue; -} - -namespace chromeos { - -class SupervisedUserCreationScreenHandler : public BaseScreenHandler { - public: - class Delegate { - public: - virtual ~Delegate() {} - - // This method is called, when view is being destroyed. Note, if Delegate - // is destroyed earlier then it has to call SetDelegate(nullptr). - virtual void OnViewDestroyed(SupervisedUserCreationScreenHandler* view) = 0; - - // Starts supervised user creation flow, with manager identified by - // |manager_id| and |manager_password|. - virtual void AuthenticateManager(const AccountId& manager_account_id, - const std::string& manager_password) = 0; - - // Starts supervised user creation flow, with supervised user that would - // have |display_name| and authenticated by the |supervised_user_password|. - virtual void CreateSupervisedUser( - const base::string16& display_name, - const std::string& supervised_user_password) = 0; - - // Look up if user with name |display_name| already exist and can be - // imported. Returns user ID in |out_id|. Returns true if user was found, - // false otherwise. - virtual bool FindUserByDisplayName(const base::string16& display_name, - std::string *out_id) const = 0; - - // Starts supervised user import flow for user identified with |user_id|. - virtual void ImportSupervisedUser(const std::string& user_id) = 0; - // Starts supervised user import flow for user identified with |user_id| and - // additional |password|. - virtual void ImportSupervisedUserWithPassword( - const std::string& user_id, const std::string& password) = 0; - - virtual void AbortFlow() = 0; - virtual void FinishFlow() = 0; - virtual void HideFlow() = 0; - - virtual void OnPhotoTaken(const std::string& raw_data) = 0; - virtual void OnImageSelected(const std::string& image_type, - const std::string& image_url) = 0; - virtual void OnImageAccepted() = 0; - virtual void OnPageSelected(const std::string& page) = 0; - }; - - SupervisedUserCreationScreenHandler(); - ~SupervisedUserCreationScreenHandler() override; - - virtual void Show(); - virtual void Hide(); - virtual void SetDelegate(Delegate* delegate); - - void ShowManagerPasswordError(); - - void ShowIntroPage(); - void ShowUsernamePage(); - - // Shows progress or error message close in the button area. |is_progress| is - // true for progress messages and false for error messages. - void ShowStatusMessage(bool is_progress, const base::string16& message); - void ShowTutorialPage(); - - void ShowErrorPage(const base::string16& title, - const base::string16& message, - const base::string16& button_text); - - // Navigates to specified page. - void ShowPage(const std::string& page); - - void SetCameraPresent(bool enabled); - - void ShowExistingSupervisedUsers(const base::ListValue* users); - - // BaseScreenHandler implementation: - void DeclareLocalizedValues( - ::login::LocalizedValuesBuilder* builder) override; - void Initialize() override; - - // WebUIMessageHandler implementation: - void RegisterMessages() override; - - private: - // WebUI message handlers. - void HandleCheckSupervisedUserName(const base::string16& name); - - void HandleManagerSelected(const AccountId& manager_id); - void HandleImportUserSelected(const AccountId& account_id); - - void HandleFinishLocalSupervisedUserCreation(); - void HandleAbortLocalSupervisedUserCreation(); - void HandleHideLocalSupervisedUserCreation(); - void HandleRetryLocalSupervisedUserCreation(const base::ListValue* args); - void HandleCurrentSupervisedUserPage(const std::string& current_page); - - void HandleAuthenticateManager(const AccountId& manager_account_id, - const std::string& manager_password); - void HandleCreateSupervisedUser(const base::string16& new_raw_user_name, - const std::string& new_user_password); - void HandleImportSupervisedUser(const AccountId& account_id); - void HandleImportSupervisedUserWithPassword(const AccountId& account_id, - const std::string& password); - - void HandleGetImages(); - void HandlePhotoTaken(const std::string& image_url); - void HandleTakePhoto(); - void HandleDiscardPhoto(); - void HandleSelectImage(const std::string& image_url, - const std::string& image_type); - - void UpdateText(const std::string& element_id, const base::string16& text); - - Delegate* delegate_ = nullptr; - - DISALLOW_COPY_AND_ASSIGN(SupervisedUserCreationScreenHandler); -}; - -} // namespace chromeos - -#endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_SUPERVISED_USER_CREATION_SCREEN_HANDLER_H_ diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/update_screen_handler.cc b/chromium/chrome/browser/ui/webui/chromeos/login/update_screen_handler.cc index cec38d8690f..973fea5dfa4 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/update_screen_handler.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/login/update_screen_handler.cc @@ -55,6 +55,11 @@ void UpdateScreenHandler::DeclareLocalizedValues( builder->Add("cancelledUpdateMessage", IDS_EMPTY_STRING); #endif + builder->Add("updateOverCellularPromptTitle", + IDS_UPDATE_OVER_CELLULAR_PROMPT_TITLE); + builder->Add("updateOverCellularPromptMessage", + IDS_UPDATE_OVER_CELLULAR_PROMPT_MESSAGE); + // For Material Design OOBE builder->Add("updatingScreenTitle", IDS_UPDATING_SCREEN_TITLE); } diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/welcome_screen_handler.cc b/chromium/chrome/browser/ui/webui/chromeos/login/welcome_screen_handler.cc index b5b0c3fa9fd..98e01775b7c 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/welcome_screen_handler.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/login/welcome_screen_handler.cc @@ -147,18 +147,11 @@ void WelcomeScreenHandler::DeclareLocalizedValues( builder->Add("keyboardDropdownTitle", IDS_KEYBOARD_DROPDOWN_TITLE); builder->Add("keyboardDropdownLabel", IDS_KEYBOARD_DROPDOWN_LABEL); - builder->Add("highContrastOptionOff", IDS_HIGH_CONTRAST_OPTION_OFF); - builder->Add("highContrastOptionOn", IDS_HIGH_CONTRAST_OPTION_ON); + builder->Add("a11ySettingToggleOptionOff", + IDS_A11Y_SETTING_TOGGLE_OPTION_OFF); + builder->Add("a11ySettingToggleOptionOn", IDS_A11Y_SETTING_TOGGLE_OPTION_ON); builder->Add("largeCursorOptionOff", IDS_LARGE_CURSOR_OPTION_OFF); builder->Add("largeCursorOptionOn", IDS_LARGE_CURSOR_OPTION_ON); - builder->Add("screenMagnifierOptionOff", IDS_SCREEN_MAGNIFIER_OPTION_OFF); - builder->Add("screenMagnifierOptionOn", IDS_SCREEN_MAGNIFIER_OPTION_ON); - builder->Add("spokenFeedbackOptionOff", IDS_SPOKEN_FEEDBACK_OPTION_OFF); - builder->Add("spokenFeedbackOptionOn", IDS_SPOKEN_FEEDBACK_OPTION_ON); - builder->Add("selectToSpeakOptionOff", IDS_SELECT_TO_SPEAK_OPTION_OFF); - builder->Add("selectToSpeakOptionOn", IDS_SELECT_TO_SPEAK_OPTION_ON); - builder->Add("virtualKeyboardOptionOff", IDS_VIRTUAL_KEYBOARD_OPTION_OFF); - builder->Add("virtualKeyboardOptionOn", IDS_VIRTUAL_KEYBOARD_OPTION_ON); builder->Add("timezoneDropdownTitle", IDS_TIMEZONE_DROPDOWN_TITLE); builder->Add("timezoneButtonText", IDS_TIMEZONE_BUTTON_TEXT); |