From c551f43206405019121bd2b2c93714319a0a3300 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Thu, 23 Jan 2020 17:21:03 +0100 Subject: BASELINE: Update Chromium to 79.0.3945.139 Change-Id: I336b7182fab9bca80b709682489c07db112eaca5 Reviewed-by: Allan Sandfeld Jensen --- chromium/chrome/browser/ui/webui/about_ui.cc | 5 +- .../dev_ui_loader/dev_ui_loader_message_handler.cc | 85 ----- .../dev_ui_loader/dev_ui_loader_message_handler.h | 65 ---- .../android/dev_ui_loader/dev_ui_loader_ui.cc | 30 -- .../webui/android/dev_ui_loader/dev_ui_loader_ui.h | 32 -- .../ui/webui/app_management/app_management.mojom | 3 +- .../app_management/app_management_page_handler.cc | 66 ++-- .../app_management/app_management_page_handler.h | 28 +- .../app_management_shelf_delegate_chromeos.cc | 94 ++++- .../ui/webui/app_management/app_management_ui.cc | 140 -------- .../ui/webui/app_management/app_management_ui.h | 41 --- .../browser/ui/webui/bluetooth_internals/BUILD.gn | 4 + .../bluetooth_internals/bluetooth_internals.mojom | 19 +- .../bluetooth_internals_handler.cc | 55 ++- .../bluetooth_internals_handler.h | 32 +- .../bluetooth_internals/bluetooth_internals_ui.cc | 13 +- .../bluetooth_internals/bluetooth_internals_ui.h | 3 +- .../ui/webui/browser_switch/browser_switch_ui.cc | 7 +- .../browser/ui/webui/certificate_viewer_webui.cc | 2 +- .../browser/ui/webui/certificates_handler.cc | 4 +- .../ui/webui/chrome_web_contents_handler.cc | 5 +- .../ui/webui/chrome_web_ui_controller_factory.cc | 80 +---- .../ui/webui/chromeos/account_manager_error_ui.cc | 54 +++ .../ui/webui/chromeos/account_manager_error_ui.h | 27 ++ .../add_supervision/add_supervision_handler.cc | 14 +- .../add_supervision/add_supervision_handler.h | 9 +- ...add_supervision_metrics_recorder_browsertest.cc | 5 +- .../chromeos/add_supervision/add_supervision_ui.cc | 91 +++-- .../chromeos/add_supervision/add_supervision_ui.h | 12 +- .../add_supervision_ui_browsertest.cc | 242 +++++++++++++ .../add_supervision/confirm_signout_dialog.cc | 35 +- .../add_supervision/confirm_signout_dialog.h | 7 +- .../arc_graphics_tracing_handler.cc | 18 +- .../arc_graphics_tracing_handler.h | 4 +- .../chromeos/assistant_optin/assistant_optin_ui.cc | 20 +- .../assistant_optin/assistant_optin_utils.cc | 8 +- .../browser/ui/webui/chromeos/camera/camera_ui.cc | 2 + .../ui/webui/chromeos/crostini_installer/BUILD.gn | 11 + .../ui/webui/chromeos/crostini_installer/OWNERS | 2 + .../crostini_installer/crostini_installer.mojom | 34 ++ .../crostini_installer_dialog.cc | 44 +++ .../crostini_installer/crostini_installer_dialog.h | 27 ++ .../crostini_installer_page_handler.cc | 64 ++++ .../crostini_installer_page_handler.h | 60 ++++ .../crostini_installer/crostini_installer_ui.cc | 78 ++++ .../crostini_installer/crostini_installer_ui.h | 51 +++ .../ui/webui/chromeos/drive_internals_ui.cc | 381 +------------------- .../webui/chromeos/first_run/first_run_handler.cc | 1 - .../ui/webui/chromeos/internet_config_dialog.cc | 14 +- .../ui/webui/chromeos/internet_config_dialog.h | 9 +- .../ui/webui/chromeos/internet_detail_dialog.cc | 7 +- .../ui/webui/chromeos/internet_detail_dialog.h | 6 +- .../chrome/browser/ui/webui/chromeos/login/OWNERS | 10 +- .../login/assistant_optin_flow_screen_handler.cc | 51 ++- .../login/assistant_optin_flow_screen_handler.h | 9 +- .../ui/webui/chromeos/login/core_oobe_handler.cc | 33 +- .../ui/webui/chromeos/login/core_oobe_handler.h | 18 +- .../login/enable_debugging_screen_handler.cc | 2 +- .../chromeos/login/enrollment_screen_handler.cc | 10 +- .../webui/chromeos/login/error_screen_handler.cc | 4 + .../ui/webui/chromeos/login/error_screen_handler.h | 4 + .../login/fake_update_required_screen_handler.cc | 14 + .../login/fake_update_required_screen_handler.h | 48 +++ .../login/fingerprint_setup_screen_handler.cc | 8 +- .../login/fingerprint_setup_screen_handler.h | 7 +- .../ui/webui/chromeos/login/gaia_screen_handler.cc | 139 +++++--- .../ui/webui/chromeos/login/gaia_screen_handler.h | 25 +- .../webui/chromeos/login/network_state_informer.cc | 1 + .../webui/chromeos/login/oobe_display_chooser.cc | 9 +- .../ui/webui/chromeos/login/oobe_display_chooser.h | 14 +- .../login/oobe_display_chooser_unittest.cc | 25 +- .../browser/ui/webui/chromeos/login/oobe_ui.cc | 22 +- .../browser/ui/webui/chromeos/login/oobe_ui.h | 14 +- .../login/recommend_apps_screen_handler.cc | 2 +- .../webui/chromeos/login/signin_screen_handler.cc | 9 + .../login/supervision_transition_screen_handler.cc | 2 +- .../login/update_required_screen_handler.cc | 65 ++++ .../login/update_required_screen_handler.h | 33 ++ .../machine_learning_internals_page_handler.cc | 16 +- .../machine_learning_internals_page_handler.h | 13 +- .../machine_learning_internals_page_handler.mojom | 7 +- .../machine_learning_internals_ui.cc | 7 +- .../machine_learning_internals_ui.h | 3 +- .../multidevice_setup/multidevice_setup_dialog.cc | 13 +- .../multidevice_setup/multidevice_setup_dialog.h | 6 +- .../network_element_localized_strings_provider.cc | 2 + .../chrome/browser/ui/webui/chromeos/network_ui.cc | 41 ++- .../chrome/browser/ui/webui/chromeos/network_ui.h | 5 +- .../browser/ui/webui/chromeos/set_time_ui.cc | 11 +- .../ui/webui/chromeos/smb_shares/smb_handler.cc | 2 +- .../smb_shares_localized_strings_provider.cc | 2 + .../sys_internals/sys_internals_message_handler.cc | 4 +- .../chromeos/system_web_dialog_browsertest.cc | 28 +- .../webui/chromeos/system_web_dialog_delegate.cc | 4 +- .../ui/webui/chromeos/terminal/terminal_source.cc | 17 +- .../ui/webui/chromeos/terminal/terminal_source.h | 7 + .../ui/webui/conflicts/conflicts_data_fetcher.cc | 1 + .../webui/constrained_web_dialog_delegate_base.cc | 2 +- chromium/chrome/browser/ui/webui/crashes_ui.cc | 33 +- .../browser/ui/webui/devtools_ui_data_source.cc | 101 +++--- .../browser/ui/webui/devtools_ui_data_source.h | 13 +- .../ui/webui/devtools_ui_data_source_unittest.cc | 45 ++- chromium/chrome/browser/ui/webui/discards/BUILD.gn | 3 +- chromium/chrome/browser/ui/webui/discards/DEPS | 10 - .../browser/ui/webui/discards/discards.mojom | 81 ++++- .../browser/ui/webui/discards/discards_ui.cc | 87 +++-- .../chrome/browser/ui/webui/discards/discards_ui.h | 10 +- .../browser/ui/webui/discards/graph_dump_impl.cc | 396 +++++++++++++++++++++ .../browser/ui/webui/discards/graph_dump_impl.h | 187 ++++++++++ .../ui/webui/discards/graph_dump_impl_unittest.cc | 224 ++++++++++++ .../ui/webui/domain_reliability_internals_ui.cc | 1 + .../download_internals_ui_message_handler.cc | 1 + chromium/chrome/browser/ui/webui/downloads/OWNERS | 1 - .../browser/ui/webui/downloads/downloads.mojom | 3 +- .../ui/webui/downloads/downloads_dom_handler.cc | 11 +- .../ui/webui/downloads/downloads_dom_handler.h | 17 +- .../downloads/downloads_dom_handler_unittest.cc | 22 +- .../ui/webui/downloads/downloads_list_tracker.cc | 18 +- .../ui/webui/downloads/downloads_list_tracker.h | 8 +- .../downloads/downloads_list_tracker_unittest.cc | 9 +- .../browser/ui/webui/downloads/downloads_ui.cc | 19 +- .../browser/ui/webui/downloads/downloads_ui.h | 14 +- .../ui/webui/downloads/mock_downloads_page.cc | 15 +- .../ui/webui/downloads/mock_downloads_page.h | 8 +- .../ui/webui/engagement/site_engagement_ui.cc | 15 +- .../ui/webui/engagement/site_engagement_ui.h | 3 +- .../explore_sites_internals_page_handler.cc | 8 +- .../explore_sites_internals_page_handler.h | 8 +- .../explore_sites_internals_ui.cc | 8 +- .../explore_sites_internals_ui.h | 4 +- .../ui/webui/extensions/extension_icon_source.cc | 7 +- .../extensions/extensions_internals_source.cc | 38 +- .../browser/ui/webui/extensions/extensions_ui.cc | 2 + .../feed_internals/feed_internals_page_handler.cc | 7 +- .../feed_internals/feed_internals_page_handler.h | 13 +- .../ui/webui/feed_internals/feed_internals_ui.cc | 6 +- .../ui/webui/feed_internals/feed_internals_ui.h | 4 +- .../browser/ui/webui/fileicon_source_unittest.cc | 1 + chromium/chrome/browser/ui/webui/flags_ui.cc | 14 +- .../chrome/browser/ui/webui/flags_ui_unittest.cc | 2 +- .../chrome/browser/ui/webui/help/version_updater.h | 8 +- .../ui/webui/help/version_updater_chromeos.cc | 70 ++-- .../ui/webui/help/version_updater_chromeos.h | 16 +- .../help/version_updater_chromeos_unittest.cc | 19 +- chromium/chrome/browser/ui/webui/history_ui.cc | 1 + chromium/chrome/browser/ui/webui/inspect_ui.cc | 19 +- chromium/chrome/browser/ui/webui/inspect_ui.h | 3 +- .../ui/webui/interstitials/interstitial_ui.cc | 14 +- .../interstitials/interstitial_ui_browsertest.cc | 2 +- .../interventions_internals.mojom | 2 +- .../interventions_internals_page_handler.cc | 13 +- .../interventions_internals_page_handler.h | 14 +- ...nterventions_internals_page_handler_unittest.cc | 30 +- .../interventions_internals_ui.cc | 7 +- .../interventions_internals_ui.h | 3 +- .../local_discovery_ui_browsertest.cc | 1 + chromium/chrome/browser/ui/webui/management_ui.cc | 7 +- .../browser/ui/webui/management_ui_browsertest.cc | 2 +- .../browser/ui/webui/management_ui_handler.cc | 48 +-- .../browser/ui/webui/management_ui_handler.h | 2 +- .../ui/webui/management_ui_handler_unittest.cc | 50 ++- .../browser/ui/webui/media/media_engagement_ui.cc | 18 +- .../browser/ui/webui/media/media_engagement_ui.h | 6 +- ...media_router_internals_webui_message_handler.cc | 10 +- .../media_router_internals_webui_message_handler.h | 2 +- .../chrome/browser/ui/webui/memory_internals_ui.cc | 7 +- chromium/chrome/browser/ui/webui/net_export_ui.cc | 2 +- .../ui/webui/net_internals/net_internals_ui.cc | 3 +- .../net_internals/net_internals_ui_browsertest.cc | 21 +- .../notifications_internals_ui_message_handler.cc | 1 + .../browser/ui/webui/ntp/app_launcher_handler.cc | 51 +-- .../ui/webui/ntp/cookie_controls_handler.cc | 117 ++++++ .../browser/ui/webui/ntp/cookie_controls_handler.h | 65 ++++ .../webui/ntp/cookie_controls_handler_unittest.cc | 51 +++ chromium/chrome/browser/ui/webui/ntp/new_tab_ui.cc | 5 +- .../browser/ui/webui/ntp/ntp_resource_cache.cc | 19 +- .../browser/ui/webui/ntp/ntp_resource_cache.h | 8 +- .../offline_internals_ui_message_handler.cc | 3 +- .../chrome/browser/ui/webui/omnibox/omnibox.mojom | 5 +- .../ui/webui/omnibox/omnibox_page_handler.cc | 44 ++- .../ui/webui/omnibox/omnibox_page_handler.h | 15 +- .../chrome/browser/ui/webui/omnibox/omnibox_ui.cc | 8 +- .../chrome/browser/ui/webui/omnibox/omnibox_ui.h | 4 +- .../browser/ui/webui/policy_ui_browsertest.cc | 3 +- .../chrome/browser/ui/webui/policy_ui_handler.cc | 4 +- .../local_printer_handler_chromeos.cc | 8 +- .../local_printer_handler_chromeos_unittest.cc | 6 + .../ui/webui/print_preview/pdf_printer_handler.cc | 29 +- .../ui/webui/print_preview/policy_settings.cc | 3 + .../webui/print_preview/print_preview_handler.cc | 56 ++- .../ui/webui/print_preview/print_preview_handler.h | 10 - .../print_preview_handler_unittest.cc | 140 ++++---- .../ui/webui/print_preview/print_preview_ui.cc | 80 ++--- .../ui/webui/print_preview/print_preview_ui.h | 5 + .../ui/webui/print_preview/print_preview_utils.cc | 7 +- .../print_preview/print_preview_utils_unittest.cc | 3 +- .../browser/ui/webui/profile_helper_browsertest.cc | 39 +- .../chrome/browser/ui/webui/quota_internals/OWNERS | 4 +- .../ui/webui/reset_password/reset_password_ui.cc | 17 +- .../ui/webui/reset_password/reset_password_ui.h | 4 +- chromium/chrome/browser/ui/webui/sandbox/OWNERS | 3 + .../browser/ui/webui/sandbox/sandbox_handler.cc | 134 +++++++ .../browser/ui/webui/sandbox/sandbox_handler.h | 52 +++ .../ui/webui/sandbox/sandbox_internals_ui.cc | 104 ++++++ .../ui/webui/sandbox/sandbox_internals_ui.h | 31 ++ .../browser/ui/webui/sandbox_internals_ui.cc | 96 ----- .../chrome/browser/ui/webui/sandbox_internals_ui.h | 31 -- .../browser/ui/webui/settings/about_handler.cc | 90 ++--- .../browser/ui/webui/settings/about_handler.h | 23 +- .../ui/webui/settings/browser_lifetime_handler.cc | 2 +- .../settings/chromeos/account_manager_handler.cc | 2 +- .../webui/settings/chromeos/android_apps_handler.h | 2 +- .../app_management_page_handler_factory.cc | 29 +- .../app_management_page_handler_factory.h | 19 +- .../chromeos/app_management/app_management_uma.h | 31 ++ .../settings/chromeos/change_picture_handler.cc | 31 +- .../settings/chromeos/change_picture_handler.h | 15 +- .../ui/webui/settings/chromeos/crostini_handler.cc | 2 +- .../settings/chromeos/cups_printers_handler.cc | 22 +- .../chromeos/cups_printers_handler_unittest.cc | 2 +- .../webui/settings/chromeos/date_time_handler.cc | 1 + .../settings/chromeos/device_keyboard_handler.cc | 4 +- .../settings/chromeos/device_keyboard_handler.h | 8 +- .../settings/chromeos/device_power_handler.cc | 3 +- .../webui/settings/chromeos/device_power_handler.h | 4 +- .../settings/chromeos/device_storage_handler.cc | 48 +-- .../settings/chromeos/device_storage_handler.h | 13 +- .../settings/chromeos/device_stylus_handler.cc | 4 +- .../settings/chromeos/device_stylus_handler.h | 10 +- .../webui/settings/chromeos/fingerprint_handler.cc | 14 +- .../webui/settings/chromeos/fingerprint_handler.h | 14 +- .../ui/webui/settings/chromeos/internet_handler.cc | 2 +- .../settings/chromeos/kerberos_accounts_handler.cc | 6 +- .../settings/chromeos/kerberos_accounts_handler.h | 2 +- .../ui/webui/settings/chromeos/os_settings_ui.cc | 22 +- .../ui/webui/settings/chromeos/os_settings_ui.h | 6 +- .../browser/ui/webui/settings/font_handler.cc | 7 +- .../browser/ui/webui/settings/font_handler.h | 4 +- .../incompatible_applications_handler_win.cc | 2 +- .../browser/ui/webui/settings/people_handler.cc | 42 +-- .../browser/ui/webui/settings/people_handler.h | 9 +- .../ui/webui/settings/people_handler_unittest.cc | 44 +-- .../ui/webui/settings/profile_info_handler.cc | 12 +- .../ui/webui/settings/profile_info_handler.h | 8 +- .../ui/webui/settings/search_engines_handler.cc | 13 +- .../settings/settings_cookies_view_handler.cc | 64 ++-- .../webui/settings/settings_cookies_view_handler.h | 4 + .../settings_cookies_view_handler_unittest.cc | 65 ++++ .../settings_localized_strings_provider.cc | 193 ++++++---- .../settings/settings_localized_strings_provider.h | 4 +- .../settings/settings_manage_profile_handler.cc | 2 +- .../settings/settings_manage_profile_handler.h | 3 +- .../settings/settings_security_key_handler.cc | 94 ++++- .../webui/settings/settings_security_key_handler.h | 13 +- .../browser/ui/webui/settings/settings_ui.cc | 45 +-- .../chrome/browser/ui/webui/settings/settings_ui.h | 6 +- .../ui/webui/settings/site_settings_handler.cc | 12 +- .../ui/webui/settings/site_settings_handler.h | 7 +- .../settings/site_settings_handler_unittest.cc | 24 +- .../browser/ui/webui/settings/tts_handler.cc | 8 +- .../ui/webui/signin/dice_turn_sync_on_helper.cc | 49 ++- .../ui/webui/signin/dice_turn_sync_on_helper.h | 13 +- .../dice_turn_sync_on_helper_delegate_impl.cc | 11 +- .../dice_turn_sync_on_helper_delegate_impl.h | 5 +- .../signin/dice_turn_sync_on_helper_unittest.cc | 74 ++-- .../ui/webui/signin/inline_login_handler.cc | 7 +- .../webui/signin/inline_login_handler_chromeos.cc | 1 + .../signin/inline_login_handler_dialog_chromeos.cc | 29 +- .../ui/webui/signin/inline_login_handler_impl.cc | 2 +- .../browser/ui/webui/signin/login_ui_test_utils.cc | 2 +- .../webui/signin/signin_email_confirmation_ui.cc | 3 +- .../browser/ui/webui/signin/signin_error_ui.cc | 6 +- .../ui/webui/signin/signin_utils_desktop.cc | 3 + .../ui/webui/signin/sync_confirmation_handler.cc | 6 +- .../signin/sync_confirmation_handler_unittest.cc | 26 +- .../ui/webui/signin/sync_confirmation_ui.cc | 22 +- .../ui/webui/signin/user_manager_screen_handler.h | 1 - .../browser/ui/webui/site_settings_helper.cc | 6 +- .../snippets_internals/snippets_internals.mojom | 3 +- .../snippets_internals_page_handler.cc | 7 +- .../snippets_internals_page_handler.h | 15 +- .../snippets_internals/snippets_internals_ui.cc | 21 +- .../snippets_internals/snippets_internals_ui.h | 16 +- .../supervised_user_internals_message_handler.cc | 11 +- .../supervised_user_internals_message_handler.h | 5 +- .../extension_statuses_handler.cc | 2 +- .../ui/webui/sync_internals_message_handler.cc | 3 +- .../chrome/browser/ui/webui/sync_internals_ui.cc | 2 +- .../browser/ui/webui/tab_strip/tab_strip_ui.cc | 334 +++++++++++++++-- .../browser/ui/webui/tab_strip/tab_strip_ui.h | 33 +- .../ui/webui/tab_strip/tab_strip_ui_browsertest.cc | 118 ++++++ .../ui/webui/tab_strip/thumbnail_tracker.cc | 17 +- .../browser/ui/webui/tab_strip/thumbnail_tracker.h | 11 +- .../webui/tab_strip/thumbnail_tracker_unittest.cc | 4 +- .../chrome/browser/ui/webui/test_data_source.cc | 42 ++- .../chrome/browser/ui/webui/test_data_source.h | 4 +- chromium/chrome/browser/ui/webui/theme_handler.cc | 8 +- chromium/chrome/browser/ui/webui/theme_handler.h | 4 +- chromium/chrome/browser/ui/webui/theme_source.cc | 15 + chromium/chrome/browser/ui/webui/theme_source.h | 2 + .../browser/ui/webui/theme_source_unittest.cc | 12 + .../ui/webui/usb_internals/usb_internals_ui.cc | 1 + .../chrome/browser/ui/webui/web_ui_test_handler.cc | 3 +- .../chrome/browser/ui/webui/webapks_handler.cc | 4 +- .../chrome/browser/ui/webui/webui_load_timer.cc | 2 +- .../chrome/browser/ui/webui/webui_load_timer.h | 5 +- .../chrome/browser/ui/webui/welcome/helpers.cc | 24 +- chromium/chrome/browser/ui/webui/welcome/helpers.h | 3 +- .../ui/webui/welcome/ntp_background_fetcher.cc | 1 + .../chrome/browser/ui/webui/welcome/welcome_ui.cc | 17 +- 310 files changed, 5504 insertions(+), 2688 deletions(-) delete mode 100644 chromium/chrome/browser/ui/webui/android/dev_ui_loader/dev_ui_loader_message_handler.cc delete mode 100644 chromium/chrome/browser/ui/webui/android/dev_ui_loader/dev_ui_loader_message_handler.h delete mode 100644 chromium/chrome/browser/ui/webui/android/dev_ui_loader/dev_ui_loader_ui.cc delete mode 100644 chromium/chrome/browser/ui/webui/android/dev_ui_loader/dev_ui_loader_ui.h delete mode 100644 chromium/chrome/browser/ui/webui/app_management/app_management_ui.cc delete mode 100644 chromium/chrome/browser/ui/webui/app_management/app_management_ui.h create mode 100644 chromium/chrome/browser/ui/webui/chromeos/account_manager_error_ui.cc create mode 100644 chromium/chrome/browser/ui/webui/chromeos/account_manager_error_ui.h create mode 100644 chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui_browsertest.cc create mode 100644 chromium/chrome/browser/ui/webui/chromeos/crostini_installer/BUILD.gn create mode 100644 chromium/chrome/browser/ui/webui/chromeos/crostini_installer/OWNERS create mode 100644 chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer.mojom create mode 100644 chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_dialog.cc create mode 100644 chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_dialog.h create mode 100644 chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_page_handler.cc create mode 100644 chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_page_handler.h create mode 100644 chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_ui.cc create mode 100644 chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_ui.h create mode 100644 chromium/chrome/browser/ui/webui/chromeos/login/fake_update_required_screen_handler.cc create mode 100644 chromium/chrome/browser/ui/webui/chromeos/login/fake_update_required_screen_handler.h delete mode 100644 chromium/chrome/browser/ui/webui/discards/DEPS create mode 100644 chromium/chrome/browser/ui/webui/discards/graph_dump_impl.cc create mode 100644 chromium/chrome/browser/ui/webui/discards/graph_dump_impl.h create mode 100644 chromium/chrome/browser/ui/webui/discards/graph_dump_impl_unittest.cc create mode 100644 chromium/chrome/browser/ui/webui/ntp/cookie_controls_handler.cc create mode 100644 chromium/chrome/browser/ui/webui/ntp/cookie_controls_handler.h create mode 100644 chromium/chrome/browser/ui/webui/ntp/cookie_controls_handler_unittest.cc create mode 100644 chromium/chrome/browser/ui/webui/sandbox/OWNERS create mode 100644 chromium/chrome/browser/ui/webui/sandbox/sandbox_handler.cc create mode 100644 chromium/chrome/browser/ui/webui/sandbox/sandbox_handler.h create mode 100644 chromium/chrome/browser/ui/webui/sandbox/sandbox_internals_ui.cc create mode 100644 chromium/chrome/browser/ui/webui/sandbox/sandbox_internals_ui.h delete mode 100644 chromium/chrome/browser/ui/webui/sandbox_internals_ui.cc delete mode 100644 chromium/chrome/browser/ui/webui/sandbox_internals_ui.h create mode 100644 chromium/chrome/browser/ui/webui/settings/chromeos/app_management/app_management_uma.h create mode 100644 chromium/chrome/browser/ui/webui/settings/settings_cookies_view_handler_unittest.cc create mode 100644 chromium/chrome/browser/ui/webui/tab_strip/tab_strip_ui_browsertest.cc (limited to 'chromium/chrome/browser/ui/webui') diff --git a/chromium/chrome/browser/ui/webui/about_ui.cc b/chromium/chrome/browser/ui/webui/about_ui.cc index 8637fe302a0..560b170d090 100644 --- a/chromium/chrome/browser/ui/webui/about_ui.cc +++ b/chromium/chrome/browser/ui/webui/about_ui.cc @@ -613,9 +613,8 @@ void AboutUIHTMLSource::StartDataRequest( if (idr == IDR_ABOUT_UI_CREDITS_HTML) { response = about_ui::GetCredits(true /*include_scripts*/); } else { - response = ui::ResourceBundle::GetSharedInstance() - .GetRawDataResource(idr) - .as_string(); + response = + ui::ResourceBundle::GetSharedInstance().DecompressDataResource(idr); } #if defined(OS_LINUX) || defined(OS_OPENBSD) } else if (source_name_ == chrome::kChromeUILinuxProxyConfigHost) { diff --git a/chromium/chrome/browser/ui/webui/android/dev_ui_loader/dev_ui_loader_message_handler.cc b/chromium/chrome/browser/ui/webui/android/dev_ui_loader/dev_ui_loader_message_handler.cc deleted file mode 100644 index 9fd69a5ea1e..00000000000 --- a/chromium/chrome/browser/ui/webui/android/dev_ui_loader/dev_ui_loader_message_handler.cc +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2019 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/android/dev_ui_loader/dev_ui_loader_message_handler.h" - -#include "base/bind.h" -#include "base/logging.h" -#include "base/values.h" -#include "chrome/browser/android/dev_ui/dev_ui_module_provider.h" - -DevUiLoaderMessageHandler::DevUiLoaderMessageHandler() = default; - -DevUiLoaderMessageHandler::~DevUiLoaderMessageHandler() = default; - -void DevUiLoaderMessageHandler::RegisterMessages() { - web_ui()->RegisterMessageCallback( - "getDevUiDfmState", - base::BindRepeating(&DevUiLoaderMessageHandler::HandleGetDevUiDfmState, - weak_ptr_factory_.GetWeakPtr())); - web_ui()->RegisterMessageCallback( - "installAndLoadDevUiDfm", - base::BindRepeating( - &DevUiLoaderMessageHandler::HandleInstallAndLoadDevUiDfm, - weak_ptr_factory_.GetWeakPtr())); -} - -void DevUiLoaderMessageHandler::HandleGetDevUiDfmState( - const base::ListValue* args) { - const base::Value* callback_id = nullptr; - CHECK(args->Get(0, &callback_id)); - const char* response = "ready"; - if (!dev_ui::DevUiModuleProvider::GetInstance().ModuleInstalled()) - response = "not-installed"; - else if (!dev_ui::DevUiModuleProvider::GetInstance().ModuleLoaded()) - response = "not-loaded"; - AllowJavascript(); - ResolveJavascriptCallback(*callback_id, base::Value(response)); -} - -void DevUiLoaderMessageHandler::ReplyToJavaScript( - const base::Value& callback_id, - const char* return_value) { - AllowJavascript(); - base::ListValue response; - response.GetList().emplace_back(base::Value(return_value)); - ResolveJavascriptCallback(callback_id, response); -} - -void DevUiLoaderMessageHandler::HandleInstallAndLoadDevUiDfm( - const base::ListValue* args) { - const base::Value* callback_id = nullptr; - CHECK(args->Get(0, &callback_id)); - - if (!dev_ui::DevUiModuleProvider::GetInstance().ModuleInstalled()) { - dev_ui::DevUiModuleProvider::GetInstance().InstallModule(base::BindOnce( - &DevUiLoaderMessageHandler::OnDevUiDfmInstallWithStatus, - weak_ptr_factory_.GetWeakPtr(), callback_id->GetString())); - - } else if (!dev_ui::DevUiModuleProvider::GetInstance().ModuleLoaded()) { - dev_ui::DevUiModuleProvider::GetInstance().LoadModule(base::BindOnce( - &DevUiLoaderMessageHandler::OnDevUiResourceLoaded, - weak_ptr_factory_.GetWeakPtr(), callback_id->GetString())); - - } else { - ReplyToJavaScript(*callback_id, "noop"); - } -} - -void DevUiLoaderMessageHandler::OnDevUiDfmInstallWithStatus( - std::string callback_id_string, - bool success) { - if (success) { - dev_ui::DevUiModuleProvider::GetInstance().LoadModule( - base::BindOnce(&DevUiLoaderMessageHandler::OnDevUiResourceLoaded, - weak_ptr_factory_.GetWeakPtr(), callback_id_string)); - } else { - ReplyToJavaScript(base::Value(callback_id_string), "failure"); - } -} - -void DevUiLoaderMessageHandler::OnDevUiResourceLoaded( - std::string callback_id_string) { - ReplyToJavaScript(base::Value(callback_id_string), "success"); -} diff --git a/chromium/chrome/browser/ui/webui/android/dev_ui_loader/dev_ui_loader_message_handler.h b/chromium/chrome/browser/ui/webui/android/dev_ui_loader/dev_ui_loader_message_handler.h deleted file mode 100644 index 04921022d9a..00000000000 --- a/chromium/chrome/browser/ui/webui/android/dev_ui_loader/dev_ui_loader_message_handler.h +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2019 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_ANDROID_DEV_UI_LOADER_DEV_UI_LOADER_MESSAGE_HANDLER_H_ -#define CHROME_BROWSER_UI_WEBUI_ANDROID_DEV_UI_LOADER_DEV_UI_LOADER_MESSAGE_HANDLER_H_ - -#include - -#include "base/memory/weak_ptr.h" -#include "build/build_config.h" -#include "chrome/android/features/dev_ui/buildflags.h" -#include "content/public/browser/web_ui_message_handler.h" - -#if !defined(OS_ANDROID) || !BUILDFLAG(DFMIFY_DEV_UI) -#error Unsupported platform. -#endif - -namespace base { -class ListValue; -class Value; -} // namespace base - -class DevUiLoaderMessageHandler : public content::WebUIMessageHandler { - public: - DevUiLoaderMessageHandler(); - ~DevUiLoaderMessageHandler() override; - - private: - DevUiLoaderMessageHandler(const DevUiLoaderMessageHandler&) = delete; - void operator=(const DevUiLoaderMessageHandler&) = delete; - - // WebUIMessageHandler - void RegisterMessages() override; - - // Called from JavaScript. |args| specifies id for callback, which receives - // one of the following responses: - // * "not-installed" if the DevUI DFM is not installed. - // * "not-loaded" if the DevUI DFM is installed, but not loaded. - // * "ready" if the DevUI DFM is installed and loaded. - void HandleGetDevUiDfmState(const base::ListValue* args); - - // Helper for HandleInstallAndLoadDevUiDfm(). - void ReplyToJavaScript(const base::Value& callback_id, - const char* return_value); - - // Called from JavaScript. |args| specifies id for callback, which receives - // one of the following responses: - // * "noop" if the DevUI DFM is already installed and loaded. - // * "success" if DevUI DFM install / load takes place, and succeeds. - // * "failure" if DevUI DFM install / load takes place, but fails. - void HandleInstallAndLoadDevUiDfm(const base::ListValue* args); - - // Callback for dev_ui::DevUiModuleProvider::InstallModule(). - void OnDevUiDfmInstallWithStatus(std::string callback_id_string, - bool success); - - // Callback for dev_ui::DevUiModuleProvider::LoadModule(). - void OnDevUiResourceLoaded(std::string callback_id_string); - - // Factory for creating references in callbacks. - base::WeakPtrFactory weak_ptr_factory_{this}; -}; - -#endif // CHROME_BROWSER_UI_WEBUI_ANDROID_DEV_UI_LOADER_DEV_UI_LOADER_MESSAGE_HANDLER_H_ diff --git a/chromium/chrome/browser/ui/webui/android/dev_ui_loader/dev_ui_loader_ui.cc b/chromium/chrome/browser/ui/webui/android/dev_ui_loader/dev_ui_loader_ui.cc deleted file mode 100644 index 52622ee0b68..00000000000 --- a/chromium/chrome/browser/ui/webui/android/dev_ui_loader/dev_ui_loader_ui.cc +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2019 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/android/dev_ui_loader/dev_ui_loader_ui.h" - -#include -#include - -#include "chrome/browser/profiles/profile.h" -#include "chrome/browser/ui/webui/android/dev_ui_loader/dev_ui_loader_message_handler.h" -#include "chrome/grit/browser_resources.h" -#include "content/public/browser/web_ui_data_source.h" -#include "url/gurl.h" - -DevUiLoaderUI::DevUiLoaderUI(content::WebUI* web_ui_in, const GURL& url) - : WebUIController(web_ui_in) { - std::unique_ptr html_source; - html_source.reset(content::WebUIDataSource::Create(url.host())); - html_source->SetDefaultResource(IDR_DEV_UI_LOADER_HTML); - html_source->AddResourcePath("dev_ui_loader.html", IDR_DEV_UI_LOADER_HTML); - html_source->AddResourcePath("dev_ui_loader.js", IDR_DEV_UI_LOADER_JS); - html_source->AddResourcePath("dev_ui_loader.css", IDR_DEV_UI_LOADER_CSS); - - Profile* profile = Profile::FromWebUI(web_ui()); - content::WebUIDataSource::Add(profile, html_source.release()); - web_ui()->AddMessageHandler(std::make_unique()); -} - -DevUiLoaderUI::~DevUiLoaderUI() = default; diff --git a/chromium/chrome/browser/ui/webui/android/dev_ui_loader/dev_ui_loader_ui.h b/chromium/chrome/browser/ui/webui/android/dev_ui_loader/dev_ui_loader_ui.h deleted file mode 100644 index d8b70e71615..00000000000 --- a/chromium/chrome/browser/ui/webui/android/dev_ui_loader/dev_ui_loader_ui.h +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2019 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_ANDROID_DEV_UI_LOADER_DEV_UI_LOADER_UI_H_ -#define CHROME_BROWSER_UI_WEBUI_ANDROID_DEV_UI_LOADER_DEV_UI_LOADER_UI_H_ - -#include "base/memory/weak_ptr.h" -#include "build/build_config.h" -#include "chrome/android/features/dev_ui/buildflags.h" -#include "content/public/browser/web_ui_controller.h" - -#if !defined(OS_ANDROID) || !BUILDFLAG(DFMIFY_DEV_UI) -#error Unsupported platform. -#endif - -class GURL; - -class DevUiLoaderUI : public content::WebUIController { - public: - DevUiLoaderUI(content::WebUI* web_ui_in, const GURL& url); - ~DevUiLoaderUI() override; - - private: - DevUiLoaderUI(const DevUiLoaderUI&) = delete; - void operator=(const DevUiLoaderUI&) = delete; - - // Factory for creating references in callbacks. - base::WeakPtrFactory weak_ptr_factory_{this}; -}; - -#endif // CHROME_BROWSER_UI_WEBUI_ANDROID_DEV_UI_LOADER_DEV_UI_LOADER_UI_H_ diff --git a/chromium/chrome/browser/ui/webui/app_management/app_management.mojom b/chromium/chrome/browser/ui/webui/app_management/app_management.mojom index c62180bf2b0..512730e3142 100644 --- a/chromium/chrome/browser/ui/webui/app_management/app_management.mojom +++ b/chromium/chrome/browser/ui/webui/app_management/app_management.mojom @@ -35,7 +35,8 @@ struct ExtensionAppPermissionMessage { }; interface PageHandlerFactory { - CreatePageHandler(Page page, PageHandler& handler); + CreatePageHandler(pending_remote page, + pending_receiver handler); }; // Browser interface. diff --git a/chromium/chrome/browser/ui/webui/app_management/app_management_page_handler.cc b/chromium/chrome/browser/ui/webui/app_management/app_management_page_handler.cc index 35c327bb3b8..227c34962ac 100644 --- a/chromium/chrome/browser/ui/webui/app_management/app_management_page_handler.cc +++ b/chromium/chrome/browser/ui/webui/app_management/app_management_page_handler.cc @@ -14,6 +14,7 @@ #include "chrome/browser/apps/app_service/app_service_proxy_factory.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/webui/app_management/app_management.mojom.h" #include "chrome/services/app_service/public/cpp/app_registry_cache.h" #include "chrome/services/app_service/public/mojom/types.mojom.h" #include "extensions/browser/extension_registry.h" @@ -21,9 +22,14 @@ #include "extensions/common/extension.h" #include "extensions/common/permissions/permission_message.h" #include "extensions/common/permissions/permissions_data.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/remote.h" #if defined(OS_CHROMEOS) #include "chrome/browser/chromeos/arc/arc_util.h" +#include "chrome/browser/ui/app_list/arc/arc_app_utils.h" #include "components/arc/arc_prefs.h" #endif @@ -37,14 +43,21 @@ constexpr int kMinAndroidFrameworkVersion = 28; // Android P #endif constexpr char const* kAppIdsWithHiddenMoreSettings[] = { - extension_misc::kFilesManagerAppId, extensions::kWebStoreAppId, + extension_misc::kFilesManagerAppId, + extension_misc::kGeniusAppId, }; constexpr char const* kAppIdsWithHiddenPinToShelf[] = { extension_misc::kChromeAppId, }; +#if defined(OS_CHROMEOS) +constexpr char const* kAppIdsWithHiddenStoragePermission[] = { + arc::kPlayStoreAppId, +}; +#endif // OS_CHROMEOS + app_management::mojom::ExtensionAppPermissionMessagePtr CreateExtensionAppPermissionMessage( const extensions::PermissionMessage& message) { @@ -64,22 +77,23 @@ bool ShouldHidePinToShelf(const std::string app_id) { return base::Contains(kAppIdsWithHiddenPinToShelf, app_id); } +bool ShouldHideStoragePermission(const std::string app_id) { +#if defined(OS_CHROMEOS) + return base::Contains(kAppIdsWithHiddenStoragePermission, app_id); +#else + return false; +#endif +} } // namespace AppManagementPageHandler::AppManagementPageHandler( - app_management::mojom::PageHandlerRequest request, - app_management::mojom::PagePtr page, + mojo::PendingReceiver receiver, + mojo::PendingRemote page, Profile* profile) - : binding_(this, std::move(request)), + : receiver_(this, std::move(receiver)), page_(std::move(page)), - profile_(profile) -#if defined(OS_CHROMEOS) - , - arc_app_list_prefs_observer_(this), - shelf_delegate_(this) -#endif -{ + profile_(profile) { apps::AppServiceProxy* proxy = apps::AppServiceProxyFactory::GetForProfile(profile_); @@ -138,7 +152,8 @@ void AppManagementPageHandler::GetApps(GetAppsCallback callback) { std::vector apps; proxy->AppRegistryCache().ForEachApp( [this, &apps](const apps::AppUpdate& update) { - if (update.ShowInManagement() == apps::mojom::OptionalBool::kTrue) { + if (update.ShowInManagement() == apps::mojom::OptionalBool::kTrue && + update.Readiness() != apps::mojom::Readiness::kUninstalledByUser) { apps.push_back(CreateUIAppPtr(update)); } }); @@ -216,6 +231,12 @@ app_management::mojom::AppPtr AppManagementPageHandler::CreateUIAppPtr( const apps::AppUpdate& update) { base::flat_map permissions; for (const auto& permission : update.Permissions()) { + if (static_cast( + permission->permission_id) == + app_management::mojom::ArcPermissionType::STORAGE && + ShouldHideStoragePermission(update.AppId())) { + continue; + } permissions[permission->permission_id] = permission->Clone(); } @@ -246,19 +267,16 @@ app_management::mojom::AppPtr AppManagementPageHandler::CreateUIAppPtr( } void AppManagementPageHandler::OnAppUpdate(const apps::AppUpdate& update) { - if (update.ReadinessChanged() && - update.Readiness() == apps::mojom::Readiness::kUninstalledByUser) { - page_->OnAppRemoved(update.AppId()); - return; - } - - if (update.ShowInManagement() != apps::mojom::OptionalBool::kTrue) { - return; - } + if (update.ShowInManagementChanged() || update.ReadinessChanged()) { + if (update.ShowInManagement() == apps::mojom::OptionalBool::kTrue && + update.Readiness() == apps::mojom::Readiness::kReady) { + page_->OnAppAdded(CreateUIAppPtr(update)); + } - if (update.ReadinessChanged() && - update.Readiness() == apps::mojom::Readiness::kReady) { - page_->OnAppAdded(CreateUIAppPtr(update)); + if (update.ShowInManagement() == apps::mojom::OptionalBool::kFalse || + update.Readiness() == apps::mojom::Readiness::kUninstalledByUser) { + page_->OnAppRemoved(update.AppId()); + } } else { page_->OnAppChanged(CreateUIAppPtr(update)); } diff --git a/chromium/chrome/browser/ui/webui/app_management/app_management_page_handler.h b/chromium/chrome/browser/ui/webui/app_management/app_management_page_handler.h index baeef297ebd..6bc45d49536 100644 --- a/chromium/chrome/browser/ui/webui/app_management/app_management_page_handler.h +++ b/chromium/chrome/browser/ui/webui/app_management/app_management_page_handler.h @@ -10,7 +10,10 @@ #include "chrome/browser/ui/webui/app_management/app_management.mojom.h" #include "chrome/browser/ui/webui/app_management/app_management_shelf_delegate_chromeos.h" #include "chrome/services/app_service/public/cpp/app_registry_cache.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/remote.h" #if defined(OS_CHROMEOS) #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h" @@ -19,16 +22,15 @@ class Profile; class AppManagementPageHandler : public app_management::mojom::PageHandler, - public apps::AppRegistryCache::Observer #if defined(OS_CHROMEOS) - , - public ArcAppListPrefs::Observer + public ArcAppListPrefs::Observer, #endif // OS_CHROMEOS -{ + public apps::AppRegistryCache::Observer { public: - AppManagementPageHandler(app_management::mojom::PageHandlerRequest request, - app_management::mojom::PagePtr page, - Profile* profile); + AppManagementPageHandler( + mojo::PendingReceiver receiver, + mojo::PendingRemote page, + Profile* profile); ~AppManagementPageHandler() override; #if defined(OS_CHROMEOS) @@ -68,16 +70,16 @@ class AppManagementPageHandler : public app_management::mojom::PageHandler, const arc::mojom::ArcPackageInfo& package_info) override; #endif // OS_CHROMEOS - mojo::Binding binding_; + mojo::Receiver receiver_; - app_management::mojom::PagePtr page_; + mojo::Remote page_; Profile* profile_; #if defined(OS_CHROMEOS) - ScopedObserver - arc_app_list_prefs_observer_; - AppManagementShelfDelegate shelf_delegate_; + ScopedObserver + arc_app_list_prefs_observer_{this}; + AppManagementShelfDelegate shelf_delegate_{this}; #endif // OS_CHROMEOS DISALLOW_COPY_AND_ASSIGN(AppManagementPageHandler); diff --git a/chromium/chrome/browser/ui/webui/app_management/app_management_shelf_delegate_chromeos.cc b/chromium/chrome/browser/ui/webui/app_management/app_management_shelf_delegate_chromeos.cc index 0a3d90a6dfd..5ea8f88ffef 100644 --- a/chromium/chrome/browser/ui/webui/app_management/app_management_shelf_delegate_chromeos.cc +++ b/chromium/chrome/browser/ui/webui/app_management/app_management_shelf_delegate_chromeos.cc @@ -17,21 +17,51 @@ using apps::mojom::OptionalBool; AppManagementShelfDelegate::AppManagementShelfDelegate( AppManagementPageHandler* page_handler) : page_handler_(page_handler) { - ChromeLauncherController::instance()->shelf_model()->AddObserver(this); + auto* launcher_controller = ChromeLauncherController::instance(); + if (!launcher_controller) { + return; + } + + auto* shelf_model = launcher_controller->shelf_model(); + if (!shelf_model) { + return; + } + + shelf_model->AddObserver(this); } AppManagementShelfDelegate::~AppManagementShelfDelegate() { - ChromeLauncherController::instance()->shelf_model()->RemoveObserver(this); + auto* launcher_controller = ChromeLauncherController::instance(); + if (!launcher_controller) { + return; + } + + auto* shelf_model = launcher_controller->shelf_model(); + if (!shelf_model) { + return; + } + + shelf_model->RemoveObserver(this); } bool AppManagementShelfDelegate::IsPinned(const std::string& app_id) { - return ChromeLauncherController::instance()->IsAppPinned(app_id); + auto* launcher_controller = ChromeLauncherController::instance(); + if (!launcher_controller) { + return false; + } + return launcher_controller->IsAppPinned(app_id); } bool AppManagementShelfDelegate::IsPolicyPinned( const std::string& app_id) const { - auto* shelf_item = - ChromeLauncherController::instance()->GetItem(ash::ShelfID(app_id)); + auto* launcher_controller = ChromeLauncherController::instance(); + + if (!launcher_controller) { + return false; + } + + auto* shelf_item = launcher_controller->GetItem(ash::ShelfID(app_id)); + // If the app does not exist on the launcher, it has not been pinned by // policy. return shelf_item && shelf_item->pinned_by_policy; @@ -39,21 +69,39 @@ bool AppManagementShelfDelegate::IsPolicyPinned( void AppManagementShelfDelegate::SetPinned(const std::string& app_id, OptionalBool pinned) { + auto* launcher_controller = ChromeLauncherController::instance(); + + if (!launcher_controller) { + return; + } + if (pinned == OptionalBool::kTrue) { - ChromeLauncherController::instance()->PinAppWithID(app_id); + launcher_controller->PinAppWithID(app_id); } else if (pinned == OptionalBool::kFalse) { - ChromeLauncherController::instance()->UnpinAppWithID(app_id); + launcher_controller->UnpinAppWithID(app_id); } else { NOTREACHED(); } } void AppManagementShelfDelegate::ShelfItemAdded(int index) { - const std::string& app_id = ChromeLauncherController::instance() - ->shelf_model() - ->items()[index] - .id.app_id; - bool is_pinned = ChromeLauncherController::instance()->IsAppPinned(app_id); + auto* launcher_controller = ChromeLauncherController::instance(); + if (!launcher_controller) { + return; + } + + auto* shelf_model = launcher_controller->shelf_model(); + if (!shelf_model) { + return; + } + + if (index >= shelf_model->item_count()) { + // index out of bounds. + return; + } + + const std::string& app_id = shelf_model->items()[index].id.app_id; + bool is_pinned = launcher_controller->IsAppPinned(app_id); page_handler_->OnPinnedChanged(app_id, is_pinned); } @@ -68,11 +116,23 @@ void AppManagementShelfDelegate::ShelfItemRemoved( void AppManagementShelfDelegate::ShelfItemChanged( int index, const ash::ShelfItem& old_item) { - const std::string& app_id = ChromeLauncherController::instance() - ->shelf_model() - ->items()[index] - .id.app_id; - bool is_pinned = ChromeLauncherController::instance()->IsAppPinned(app_id); + auto* launcher_controller = ChromeLauncherController::instance(); + if (!launcher_controller) { + return; + } + + auto* shelf_model = launcher_controller->shelf_model(); + if (!shelf_model) { + return; + } + + if (index >= shelf_model->item_count()) { + // index out of bounds. + return; + } + + const std::string& app_id = shelf_model->items()[index].id.app_id; + bool is_pinned = launcher_controller->IsAppPinned(app_id); page_handler_->OnPinnedChanged(app_id, is_pinned); } diff --git a/chromium/chrome/browser/ui/webui/app_management/app_management_ui.cc b/chromium/chrome/browser/ui/webui/app_management/app_management_ui.cc deleted file mode 100644 index 5d3ce3e4657..00000000000 --- a/chromium/chrome/browser/ui/webui/app_management/app_management_ui.cc +++ /dev/null @@ -1,140 +0,0 @@ -// 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/app_management/app_management_ui.h" - -#include -#include - -#include "base/bind.h" -#include "base/feature_list.h" -#include "chrome/browser/profiles/profile.h" -#include "chrome/browser/ui/webui/app_management/app_management_page_handler.h" -#include "chrome/browser/ui/webui/localized_string.h" -#include "chrome/browser/ui/webui/plural_string_handler.h" -#include "chrome/common/chrome_features.h" -#include "chrome/common/url_constants.h" -#include "chrome/grit/browser_resources.h" -#include "chrome/grit/chromium_strings.h" -#include "chrome/grit/generated_resources.h" -#include "components/prefs/pref_service.h" -#include "content/public/browser/web_ui.h" -#include "content/public/browser/web_ui_data_source.h" -#include "ui/base/resource/resource_bundle.h" - -namespace { - -content::WebUIDataSource* CreateAppManagementUIHTMLSource(Profile* profile) { - content::WebUIDataSource* source = - content::WebUIDataSource::Create(chrome::kChromeUIAppManagementHost); - - static constexpr LocalizedString kStrings[] = { - {"appListTitle", IDS_APP_MANAGEMENT_APP_LIST_TITLE}, - {"appNoPermission", IDS_APPLICATION_INFO_APP_NO_PERMISSIONS_TEXT}, - {"back", IDS_APP_MANAGEMENT_BACK}, - {"camera", IDS_APP_MANAGEMENT_CAMERA}, - {"contacts", IDS_APP_MANAGEMENT_CONTACTS}, - {"controlledByPolicy", IDS_CONTROLLED_SETTING_POLICY}, - {"lessApps", IDS_APP_MANAGEMENT_LESS_APPS}, - {"location", IDS_APP_MANAGEMENT_LOCATION}, - {"microphone", IDS_APP_MANAGEMENT_MICROPHONE}, - {"moreApps", IDS_APP_MANAGEMENT_MORE_APPS}, - {"moreSettings", IDS_APP_MANAGEMENT_MORE_SETTINGS}, - {"noSearchResults", IDS_APP_MANAGEMENT_NO_RESULTS}, - {"notifications", IDS_APP_MANAGEMENT_NOTIFICATIONS}, - {"notificationSublabel", IDS_APP_MANAGEMENT_NOTIFICATIONS_SUBLABEL}, - {"openAndroidSettings", IDS_APP_MANAGEMENT_ANDROID_SETTINGS}, - {"openExtensionsSettings", IDS_APP_MANAGEMENT_EXTENSIONS_SETTINGS}, - {"openSiteSettings", IDS_APP_MANAGEMENT_SITE_SETTING}, - {"permissions", IDS_APP_MANAGEMENT_PERMISSIONS}, - {"pinControlledByPolicy", IDS_APP_MANAGEMENT_PIN_ENFORCED_BY_POLICY}, - {"pinToShelf", IDS_APP_MANAGEMENT_PIN_TO_SHELF}, - {"searchPrompt", IDS_APP_MANAGEMENT_SEARCH_PROMPT}, - {"size", IDS_APP_MANAGEMENT_SIZE}, - {"storage", IDS_APP_MANAGEMENT_STORAGE}, - {"thisAppCan", IDS_APP_MANAGEMENT_THIS_APP_CAN}, - {"title", IDS_APP_MANAGEMENT_TITLE}, - {"uninstall", IDS_APP_MANAGEMENT_UNINSTALL_APP}, - {"version", IDS_APP_MANAGEMENT_VERSION}, - }; - AddLocalizedStringsBulk(source, kStrings, base::size(kStrings)); - -#if defined(OS_CHROMEOS) - source->AddBoolean( - "isSupportedArcVersion", - AppManagementPageHandler::IsCurrentArcVersionSupported(profile)); -#endif // OS_CHROMEOS - - source->AddResourcePath("app_management.mojom-lite.js", - IDR_APP_MANAGEMENT_MOJO_LITE_JS); - source->AddResourcePath("types.mojom-lite.js", - IDR_APP_MANAGEMENT_TYPES_MOJO_LITE_JS); - source->AddResourcePath("bitmap.mojom-lite.js", - IDR_APP_MANAGEMENT_BITMAP_MOJO_LITE_JS); - source->AddResourcePath("image.mojom-lite.js", - IDR_APP_MANAGEMENT_IMAGE_MOJO_LITE_JS); - source->AddResourcePath("image_info.mojom-lite.js", - IDR_APP_MANAGEMENT_IMAGE_INFO_MOJO_LITE_JS); - - source->AddResourcePath("app.html", IDR_APP_MANAGEMENT_APP_HTML); - source->AddResourcePath("app.js", IDR_APP_MANAGEMENT_APP_JS); - source->AddResourcePath("expandable_app_list.html", - IDR_APP_MANAGEMENT_EXPANDABLE_APP_LIST_HTML); - source->AddResourcePath("expandable_app_list.js", - IDR_APP_MANAGEMENT_EXPANDABLE_APP_LIST_JS); - - source->SetDefaultResource(IDR_APP_MANAGEMENT_INDEX_HTML); - source->UseStringsJs(); - - return source; -} - -} // namespace - -/////////////////////////////////////////////////////////////////////////////// -// -// AppManagementUI -// -/////////////////////////////////////////////////////////////////////////////// - -AppManagementUI::AppManagementUI(content::WebUI* web_ui) - : ui::MojoWebUIController(web_ui, true), page_factory_binding_(this) { - Profile* profile = Profile::FromWebUI(web_ui); - - // Set up the data source. - content::WebUIDataSource* source = CreateAppManagementUIHTMLSource(profile); - content::WebUIDataSource::Add(profile, source); - - AddHandlerToRegistry(base::BindRepeating( - &AppManagementUI::BindPageHandlerFactory, base::Unretained(this))); - - auto plural_string_handler = std::make_unique(); - plural_string_handler->AddLocalizedString( - "appListPreview", IDS_APP_MANAGEMENT_APP_LIST_PREVIEW); - web_ui->AddMessageHandler(std::move(plural_string_handler)); -} - -AppManagementUI::~AppManagementUI() = default; - -bool AppManagementUI::IsEnabled() { - return base::FeatureList::IsEnabled(features::kAppManagement); -} - -void AppManagementUI::BindPageHandlerFactory( - app_management::mojom::PageHandlerFactoryRequest request) { - if (page_factory_binding_.is_bound()) { - page_factory_binding_.Unbind(); - } - - page_factory_binding_.Bind(std::move(request)); -} - -void AppManagementUI::CreatePageHandler( - app_management::mojom::PagePtr page, - app_management::mojom::PageHandlerRequest request) { - DCHECK(page); - - page_handler_ = std::make_unique( - std::move(request), std::move(page), Profile::FromWebUI(web_ui())); -} diff --git a/chromium/chrome/browser/ui/webui/app_management/app_management_ui.h b/chromium/chrome/browser/ui/webui/app_management/app_management_ui.h deleted file mode 100644 index a0187ee104e..00000000000 --- a/chromium/chrome/browser/ui/webui/app_management/app_management_ui.h +++ /dev/null @@ -1,41 +0,0 @@ -// 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_APP_MANAGEMENT_APP_MANAGEMENT_UI_H_ -#define CHROME_BROWSER_UI_WEBUI_APP_MANAGEMENT_APP_MANAGEMENT_UI_H_ - -#include - -#include "base/macros.h" -#include "chrome/browser/ui/webui/app_management/app_management.mojom.h" -#include "mojo/public/cpp/bindings/binding.h" -#include "ui/webui/mojo_web_ui_controller.h" - -class AppManagementPageHandler; - -class AppManagementUI : public ui::MojoWebUIController, - public app_management::mojom::PageHandlerFactory { - public: - explicit AppManagementUI(content::WebUI* web_ui); - ~AppManagementUI() override; - - static bool IsEnabled(); - - private: - void BindPageHandlerFactory( - app_management::mojom::PageHandlerFactoryRequest request); - - // app_management::mojom::PageHandlerFactory: - void CreatePageHandler( - app_management::mojom::PagePtr page, - app_management::mojom::PageHandlerRequest request) override; - - std::unique_ptr page_handler_; - mojo::Binding - page_factory_binding_; - - DISALLOW_COPY_AND_ASSIGN(AppManagementUI); -}; - -#endif // CHROME_BROWSER_UI_WEBUI_APP_MANAGEMENT_APP_MANAGEMENT_UI_H_ diff --git a/chromium/chrome/browser/ui/webui/bluetooth_internals/BUILD.gn b/chromium/chrome/browser/ui/webui/bluetooth_internals/BUILD.gn index 0f0f0aaad80..210d8f365ed 100644 --- a/chromium/chrome/browser/ui/webui/bluetooth_internals/BUILD.gn +++ b/chromium/chrome/browser/ui/webui/bluetooth_internals/BUILD.gn @@ -24,6 +24,10 @@ source_set("bluetooth_internals") { "//device/bluetooth", "//ui/webui", ] + + if (is_chromeos) { + deps += [ "//chrome/browser/chromeos" ] + } } mojom("mojo_bindings") { diff --git a/chromium/chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals.mojom b/chromium/chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals.mojom index e5b8e22777b..ed3c332629c 100644 --- a/chromium/chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals.mojom +++ b/chromium/chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals.mojom @@ -6,7 +6,24 @@ module mojom; import "device/bluetooth/public/mojom/adapter.mojom"; +// Handles requests from chrome://bluetooth-internals to enable or disable the +// usage of Bluetooth debug logs. The debug logs to be enabled reside in the +// kernel as well within BlueZ/NewBlue. Note that these logs are text-only and +// do not include captured packets from btmon. +interface DebugLogsChangeHandler { + // Enables or disables debug logs, depending on the value of + // |should_debug_logs_be_enabled|. + ChangeDebugLogsState(bool should_debug_logs_be_enabled); +}; + interface BluetoothInternalsHandler { // Gets an Adapter interface. Returns null if Bluetooth is not supported. - GetAdapter() => (bluetooth.mojom.Adapter? adapter); + GetAdapter() => (pending_remote? adapter); + + // Retrieves a handler for changing the state of debug logs. If debug logs are + // not supported (e.g., the required flags are disabled or the logged-in user + // is not eligible), null is returned. When a valid handler is returned, an + // extra boolean is provided which represents the initial state of the toggle. + GetDebugLogsChangeHandler() => (DebugLogsChangeHandler? handler, + bool initial_toggle_value); }; diff --git a/chromium/chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals_handler.cc b/chromium/chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals_handler.cc index a65ef86a115..b88be86ef08 100644 --- a/chromium/chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals_handler.cc +++ b/chromium/chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals_handler.cc @@ -7,17 +7,25 @@ #include "base/bind.h" #include "base/macros.h" #include "base/strings/string16.h" +#include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" +#include "chrome/browser/chromeos/bluetooth/debug_logs_manager.h" #include "device/bluetooth/adapter.h" #include "device/bluetooth/bluetooth_adapter_factory.h" -#include "mojo/public/cpp/bindings/strong_binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/self_owned_receiver.h" #include "url/gurl.h" +#if defined(OS_CHROMEOS) +#include "chrome/browser/chromeos/bluetooth/debug_logs_manager.h" +#endif + BluetoothInternalsHandler::BluetoothInternalsHandler( - mojom::BluetoothInternalsHandlerRequest request) - : binding_(this, std::move(request)) {} + mojo::PendingReceiver receiver) + : receiver_(this, std::move(receiver)) {} -BluetoothInternalsHandler::~BluetoothInternalsHandler() {} +BluetoothInternalsHandler::~BluetoothInternalsHandler() = default; void BluetoothInternalsHandler::GetAdapter(GetAdapterCallback callback) { if (device::BluetoothAdapterFactory::IsBluetoothSupported()) { @@ -25,15 +33,44 @@ void BluetoothInternalsHandler::GetAdapter(GetAdapterCallback callback) { base::BindOnce(&BluetoothInternalsHandler::OnGetAdapter, weak_ptr_factory_.GetWeakPtr(), std::move(callback))); } else { - std::move(callback).Run(nullptr /* AdapterPtr */); + std::move(callback).Run(mojo::NullRemote() /* adapter */); + } +} + +void BluetoothInternalsHandler::GetDebugLogsChangeHandler( + GetDebugLogsChangeHandlerCallback callback) { + mojom::DebugLogsChangeHandlerPtr handler_ptr; + bool initial_toggle_value = false; + +#if defined(OS_CHROMEOS) + using chromeos::bluetooth::DebugLogsManager; + + // If no logs manager exists for this user, debug logs are not supported. + DebugLogsManager::DebugLogsState state = + debug_logs_manager_ ? debug_logs_manager_->GetDebugLogsState() + : DebugLogsManager::DebugLogsState::kNotSupported; + + switch (state) { + case DebugLogsManager::DebugLogsState::kNotSupported: + // Leave |handler_ptr| null and |initial_toggle_value| false. + break; + case DebugLogsManager::DebugLogsState::kSupportedAndEnabled: + initial_toggle_value = true; + FALLTHROUGH; + case DebugLogsManager::DebugLogsState::kSupportedButDisabled: + handler_ptr = debug_logs_manager_->GenerateInterfacePtr(); + break; } +#endif + + std::move(callback).Run(std::move(handler_ptr), initial_toggle_value); } void BluetoothInternalsHandler::OnGetAdapter( GetAdapterCallback callback, scoped_refptr adapter) { - bluetooth::mojom::AdapterPtr adapter_ptr; - mojo::MakeStrongBinding(std::make_unique(adapter), - mojo::MakeRequest(&adapter_ptr)); - std::move(callback).Run(std::move(adapter_ptr)); + mojo::PendingRemote pending_adapter; + mojo::MakeSelfOwnedReceiver(std::make_unique(adapter), + pending_adapter.InitWithNewPipeAndPassReceiver()); + std::move(callback).Run(std::move(pending_adapter)); } diff --git a/chromium/chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals_handler.h b/chromium/chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals_handler.h index 3de443d2c5b..5c1cd3544e2 100644 --- a/chromium/chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals_handler.h +++ b/chromium/chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals_handler.h @@ -8,24 +8,48 @@ #include "base/macros.h" #include "chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals.mojom.h" #include "device/bluetooth/bluetooth_adapter.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/binding_set.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/receiver.h" + +#if defined(OS_CHROMEOS) +namespace chromeos { +namespace bluetooth { +class DebugLogsManager; +} // namespace bluetooth +} // namespace chromeos +#endif // Handles API requests from chrome://bluetooth-internals page by implementing // mojom::BluetoothInternalsHandler. class BluetoothInternalsHandler : public mojom::BluetoothInternalsHandler { public: explicit BluetoothInternalsHandler( - mojom::BluetoothInternalsHandlerRequest request); + mojo::PendingReceiver receiver); ~BluetoothInternalsHandler() override; - // mojom::BluetoothInternalsHandler overrides: +#if defined(OS_CHROMEOS) + void set_debug_logs_manager( + chromeos::bluetooth::DebugLogsManager* debug_logs_manager) { + debug_logs_manager_ = debug_logs_manager; + } +#endif + + // mojom::BluetoothInternalsHandler: void GetAdapter(GetAdapterCallback callback) override; + void GetDebugLogsChangeHandler( + GetDebugLogsChangeHandlerCallback callback) override; private: void OnGetAdapter(GetAdapterCallback callback, scoped_refptr adapter); - mojo::Binding binding_; + mojo::Receiver receiver_; + +#if defined(OS_CHROMEOS) + chromeos::bluetooth::DebugLogsManager* debug_logs_manager_ = nullptr; +#endif + base::WeakPtrFactory weak_ptr_factory_{this}; DISALLOW_COPY_AND_ASSIGN(BluetoothInternalsHandler); diff --git a/chromium/chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals_ui.cc b/chromium/chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals_ui.cc index d51387baaee..6f8ab24a1e9 100644 --- a/chromium/chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals_ui.cc +++ b/chromium/chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals_ui.cc @@ -12,6 +12,10 @@ #include "chrome/grit/bluetooth_internals_resources_map.h" #include "content/public/browser/web_ui_data_source.h" +#if defined(OS_CHROMEOS) +#include "chrome/browser/chromeos/bluetooth/debug_logs_manager_factory.h" +#endif + BluetoothInternalsUI::BluetoothInternalsUI(content::WebUI* web_ui) : ui::MojoWebUIController(web_ui) { // Set up the chrome://bluetooth-internals source. @@ -43,7 +47,12 @@ BluetoothInternalsUI::BluetoothInternalsUI(content::WebUI* web_ui) BluetoothInternalsUI::~BluetoothInternalsUI() {} void BluetoothInternalsUI::BindBluetoothInternalsHandler( - mojom::BluetoothInternalsHandlerRequest request) { + mojo::PendingReceiver receiver) { page_handler_ = - std::make_unique(std::move(request)); + std::make_unique(std::move(receiver)); +#if defined(OS_CHROMEOS) + page_handler_->set_debug_logs_manager( + chromeos::bluetooth::DebugLogsManagerFactory::GetForProfile( + Profile::FromWebUI(web_ui()))); +#endif } diff --git a/chromium/chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals_ui.h b/chromium/chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals_ui.h index 628df1f6ab7..2a69c29cc58 100644 --- a/chromium/chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals_ui.h +++ b/chromium/chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals_ui.h @@ -7,6 +7,7 @@ #include "base/macros.h" #include "chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals.mojom.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "ui/webui/mojo_web_ui_controller.h" class BluetoothInternalsHandler; @@ -19,7 +20,7 @@ class BluetoothInternalsUI : public ui::MojoWebUIController { private: void BindBluetoothInternalsHandler( - mojom::BluetoothInternalsHandlerRequest request); + mojo::PendingReceiver receiver); std::unique_ptr page_handler_; diff --git a/chromium/chrome/browser/ui/webui/browser_switch/browser_switch_ui.cc b/chromium/chrome/browser/ui/webui/browser_switch/browser_switch_ui.cc index f21dc8923c5..f7db04bc6d5 100644 --- a/chromium/chrome/browser/ui/webui/browser_switch/browser_switch_ui.cc +++ b/chromium/chrome/browser/ui/webui/browser_switch/browser_switch_ui.cc @@ -68,11 +68,11 @@ std::unique_ptr RuleSetToDict( const browser_switcher::RuleSet& ruleset) { auto sitelist = std::make_unique(); for (const std::string& rule : ruleset.sitelist) - sitelist->GetList().emplace_back(rule); + sitelist->Append(rule); auto greylist = std::make_unique(); for (const std::string& rule : ruleset.greylist) - greylist->GetList().emplace_back(rule); + greylist->Append(rule); auto dict = std::make_unique(); dict->Set("sitelist", std::move(sitelist)); @@ -131,11 +131,8 @@ content::WebUIDataSource* CreateBrowserSwitchUIHTMLSource( IDS_ABOUT_BROWSER_SWITCH_PROTOCOL_ERROR); source->AddLocalizedString("title", IDS_ABOUT_BROWSER_SWITCH_TITLE); - source->AddResourcePath("app.html", IDR_BROWSER_SWITCH_APP_HTML); source->AddResourcePath("app.js", IDR_BROWSER_SWITCH_APP_JS); source->AddResourcePath("browser_switch.html", IDR_BROWSER_SWITCH_HTML); - source->AddResourcePath("browser_switch_proxy.html", - IDR_BROWSER_SWITCH_PROXY_HTML); source->AddResourcePath("browser_switch_proxy.js", IDR_BROWSER_SWITCH_PROXY_JS); source->SetDefaultResource(IDR_BROWSER_SWITCH_HTML); diff --git a/chromium/chrome/browser/ui/webui/certificate_viewer_webui.cc b/chromium/chrome/browser/ui/webui/certificate_viewer_webui.cc index 923fa172e43..7f7d4392278 100644 --- a/chromium/chrome/browser/ui/webui/certificate_viewer_webui.cc +++ b/chromium/chrome/browser/ui/webui/certificate_viewer_webui.cc @@ -267,7 +267,7 @@ std::string CertificateViewerDialog::GetDialogArgs() const { // Add this node to the children list for the next iteration. children = base::Value(base::Value::Type::LIST); - children.GetList().push_back(std::move(cert_node)); + children.Append(std::move(cert_node)); ++index; } // Set the last node as the top of the certificate hierarchy. diff --git a/chromium/chrome/browser/ui/webui/certificates_handler.cc b/chromium/chrome/browser/ui/webui/certificates_handler.cc index 02077494954..8342599150d 100644 --- a/chromium/chrome/browser/ui/webui/certificates_handler.cc +++ b/chromium/chrome/browser/ui/webui/certificates_handler.cc @@ -1054,7 +1054,7 @@ void CertificatesHandler::PopulateTree(const std::string& tab_name, cert_dict.SetKey(kCertificatesHandlerExtractableField, base::Value(!cert_info->hardware_backed())); // TODO(mattm): Other columns. - subnodes.GetList().push_back(std::move(cert_dict)); + subnodes.Append(std::move(cert_dict)); contains_policy_certs |= cert_info->source() == @@ -1065,7 +1065,7 @@ void CertificatesHandler::PopulateTree(const std::string& tab_name, org_dict.SetKey(kCertificatesHandlerContainsPolicyCertsField, base::Value(contains_policy_certs)); org_dict.SetKey(kCertificatesHandlerSubnodesField, std::move(subnodes)); - nodes.GetList().push_back(std::move(org_dict)); + nodes.Append(std::move(org_dict)); } std::sort(nodes.GetList().begin(), nodes.GetList().end(), comparator); diff --git a/chromium/chrome/browser/ui/webui/chrome_web_contents_handler.cc b/chromium/chrome/browser/ui/webui/chrome_web_contents_handler.cc index 1b97ae66d5b..73aa8494ac6 100644 --- a/chromium/chrome/browser/ui/webui/chrome_web_contents_handler.cc +++ b/chromium/chrome/browser/ui/webui/chrome_web_contents_handler.cc @@ -4,6 +4,8 @@ #include "chrome/browser/ui/webui/chrome_web_contents_handler.h" +#include + #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_finder.h" @@ -46,7 +48,7 @@ WebContents* ChromeWebContentsHandler::OpenURLFromTab( new Browser(Browser::CreateParams(Browser::TYPE_NORMAL, profile, true)); } NavigateParams nav_params(browser, params.url, params.transition); - nav_params.referrer = params.referrer; + nav_params.FillNavigateParamsFromOpenURLParams(params); if (source && source->IsCrashed() && params.disposition == WindowOpenDisposition::CURRENT_TAB && ui::PageTransitionCoreTypeIs(params.transition, @@ -56,7 +58,6 @@ WebContents* ChromeWebContentsHandler::OpenURLFromTab( nav_params.disposition = params.disposition; } nav_params.window_action = NavigateParams::SHOW_WINDOW; - nav_params.user_gesture = true; Navigate(&nav_params); // Close the browser if chrome::Navigate created a new one. diff --git a/chromium/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chromium/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc index afb648955a1..49a65a4d7ab 100644 --- a/chromium/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc +++ b/chromium/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc @@ -16,7 +16,6 @@ #include "chrome/browser/about_flags.h" #include "chrome/browser/accessibility/accessibility_ui.h" #include "chrome/browser/devtools/devtools_ui_bindings.h" -#include "chrome/browser/dom_distiller/dom_distiller_service_factory.h" #include "chrome/browser/engagement/site_engagement_service.h" #include "chrome/browser/media/media_engagement_service.h" #include "chrome/browser/profiles/profile.h" @@ -26,6 +25,7 @@ #include "chrome/browser/ui/webui/autofill_and_password_manager_internals/autofill_internals_ui.h" #include "chrome/browser/ui/webui/autofill_and_password_manager_internals/password_manager_internals_ui.h" #include "chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals_ui.h" +#include "chrome/browser/ui/webui/chromeos/account_manager_error_ui.h" #include "chrome/browser/ui/webui/chromeos/account_manager_welcome_ui.h" #include "chrome/browser/ui/webui/chromeos/account_migration_welcome_ui.h" #include "chrome/browser/ui/webui/chromeos/camera/camera_ui.h" @@ -70,11 +70,6 @@ #include "chrome/common/pref_names.h" #include "chrome/common/url_constants.h" #include "chrome/common/webui_url_constants.h" -#include "components/dom_distiller/core/dom_distiller_constants.h" -#include "components/dom_distiller/core/dom_distiller_features.h" -#include "components/dom_distiller/core/dom_distiller_service.h" -#include "components/dom_distiller/core/url_constants.h" -#include "components/dom_distiller/webui/dom_distiller_ui.h" #include "components/favicon/core/favicon_service.h" #include "components/favicon_base/favicon_util.h" #include "components/favicon_base/select_favicon_frames.h" @@ -114,7 +109,6 @@ #if !defined(OS_ANDROID) #include "chrome/browser/media/router/media_router_feature.h" -#include "chrome/browser/ui/webui/app_management/app_management_ui.h" #include "chrome/browser/ui/webui/management_ui.h" #include "chrome/browser/ui/webui/media_router/media_router_internals_ui.h" #include "chrome/browser/ui/webui/web_footer_experiment_ui.h" @@ -124,7 +118,6 @@ #endif #if defined(OS_ANDROID) -#include "chrome/android/features/dev_ui/buildflags.h" #include "chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_ui.h" #include "chrome/browser/ui/webui/offline/offline_internals_ui.h" #include "chrome/browser/ui/webui/snippets_internals/snippets_internals_ui.h" @@ -134,9 +127,6 @@ #if BUILDFLAG(ENABLE_FEED_IN_CHROME) #include "chrome/browser/ui/webui/feed_internals/feed_internals_ui.h" #endif // BUILDFLAG(ENABLE_FEED_IN_CHROME) -#if BUILDFLAG(DFMIFY_DEV_UI) -#include "chrome/browser/ui/webui/android/dev_ui_loader/dev_ui_loader_ui.h" -#endif // BUILDFLAG(DFMIFY_DEV_UI) #else // defined(OS_ANDROID) #include "chrome/browser/ui/webui/bookmarks/bookmarks_ui.h" #include "chrome/browser/ui/webui/devtools_ui.h" @@ -163,6 +153,7 @@ #include "chrome/browser/ui/webui/chromeos/cellular_setup/cellular_setup_dialog.h" #include "chrome/browser/ui/webui/chromeos/cellular_setup/mobile_setup_ui.h" #include "chrome/browser/ui/webui/chromeos/certificate_manager_dialog_ui.h" +#include "chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_ui.h" #include "chrome/browser/ui/webui/chromeos/cryptohome_ui.h" #include "chrome/browser/ui/webui/chromeos/drive_internals_ui.h" #include "chrome/browser/ui/webui/chromeos/first_run/first_run_ui.h" @@ -182,6 +173,9 @@ #include "chrome/browser/ui/webui/chromeos/terminal/terminal_ui.h" #include "chrome/browser/ui/webui/settings/chromeos/os_settings_ui.h" #include "chrome/browser/ui/webui/signin/inline_login_ui.h" +#include "chromeos/components/media_app_ui/media_app_guest_ui.h" +#include "chromeos/components/media_app_ui/media_app_ui.h" +#include "chromeos/components/media_app_ui/url_constants.h" #include "chromeos/components/multidevice/debug_webui/proximity_auth_ui.h" #include "chromeos/components/multidevice/debug_webui/url_constants.h" #include "chromeos/constants/chromeos_features.h" @@ -216,8 +210,8 @@ #include "chrome/browser/ui/webui/discards/discards_ui.h" #endif -#if defined(OS_LINUX) || defined(OS_ANDROID) -#include "chrome/browser/ui/webui/sandbox_internals_ui.h" +#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_ANDROID) +#include "chrome/browser/ui/webui/sandbox/sandbox_internals_ui.h" #endif #if defined(USE_NSS_CERTS) && defined(USE_AURA) @@ -265,15 +259,6 @@ WebUIController* NewWebUI(WebUI* web_ui, const GURL& url) { return new T(web_ui); } -#if defined(OS_ANDROID) -#if BUILDFLAG(DFMIFY_DEV_UI) -template <> -WebUIController* NewWebUI(WebUI* web_ui, const GURL& url) { - return new DevUiLoaderUI(web_ui, url); -} -#endif // BUILDFLAG(DFMIFY_DEV_UI) -#endif // defined(OS_ANDROID) - #if !defined(OS_ANDROID) template <> WebUIController* NewWebUI(WebUI* web_ui, @@ -310,21 +295,6 @@ WebUIController* NewWebUI( } #endif -// Special cases for DOM distiller. -template <> -WebUIController* NewWebUI(WebUI* web_ui, - const GURL& url) { - // The DomDistillerUi can not depend on components/dom_distiller/content, - // so inject the correct DomDistillerService from chrome/. - content::BrowserContext* browser_context = - web_ui->GetWebContents()->GetBrowserContext(); - dom_distiller::DomDistillerService* service = - dom_distiller::DomDistillerServiceFactory::GetForBrowserContext( - browser_context); - return new dom_distiller::DomDistillerUi(web_ui, service, - dom_distiller::kDomDistillerScheme); -} - #if !defined(OS_ANDROID) && !defined(OS_CHROMEOS) template <> WebUIController* NewWebUI(WebUI* web_ui, const GURL& url) { @@ -361,13 +331,6 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, return nullptr; } -#if defined(OS_ANDROID) -#if BUILDFLAG(DFMIFY_DEV_UI) - if (url.host_piece() == chrome::kChromeUIDevUiLoaderHost) - return &NewWebUI; -#endif // BUILDFLAG(DFMIFY_DEV_UI) -#endif // defined(OS_ANDROID) - // Please keep this in alphabetical order. If #ifs or special logics are // required, add it below in the appropriate section. // @@ -449,12 +412,6 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, return &NewWebUI; #if !defined(OS_ANDROID) - if (AppManagementUI::IsEnabled() && - url.host_piece() == chrome::kChromeUIAppManagementHost && profile && - !profile->IsGuestSession()) { - return &NewWebUI; - } - #if !defined(OS_CHROMEOS) // AppLauncherPage is not needed on Android or ChromeOS. if (url.host_piece() == chrome::kChromeUIAppLauncherPageHost && profile && @@ -465,7 +422,6 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, #endif // !defined(OS_CHROMEOS) if (profile->IsGuestSession() && (url.host_piece() == chrome::kChromeUIAppLauncherPageHost || - url.host_piece() == chrome::kChromeUIAppManagementHost || url.host_piece() == chrome::kChromeUIBookmarksHost || url.host_piece() == chrome::kChromeUIHistoryHost || url.host_piece() == chrome::kChromeUIExtensionsHost)) { @@ -526,6 +482,8 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, } return &NewWebUI; } + if (url.host_piece() == chrome::kChromeUIAccountManagerErrorHost) + return &NewWebUI; if (url.host_piece() == chrome::kChromeUIAccountManagerWelcomeHost) return &NewWebUI; if (url.host_piece() == chrome::kChromeUIAccountMigrationWelcomeHost) @@ -540,6 +498,9 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, return &NewWebUI; if (url.host_piece() == chrome::kChromeUICertificateManagerHost) return &NewWebUI; + if (chromeos::CrostiniInstallerUI::IsEnabled() && + url.host_piece() == chrome::kChromeUICrostiniInstallerHost) + return &NewWebUI; if (url.host_piece() == chrome::kChromeUICryptohomeHost) return &NewWebUI; if (url.host_piece() == chrome::kChromeUIDriveInternalsHost) @@ -560,6 +521,12 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, return &NewWebUI; if (url.host_piece() == chrome::kChromeUIPowerHost) return &NewWebUI; + if (base::FeatureList::IsEnabled(chromeos::features::kMediaApp)) { + if (url.host_piece() == chromeos::kChromeUIMediaAppHost) + return &NewWebUI; + if (url.host_piece() == chromeos::kChromeUIMediaAppGuestHost) + return &NewWebUI; + } if (url.host_piece() == chromeos::multidevice::kChromeUIProximityAuthHost) return &NewWebUI; if (url.host_piece() == chrome::kChromeUIInternetConfigDialogHost) @@ -702,7 +669,7 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, return &NewWebUI; } #endif -#if defined(OS_LINUX) || defined(OS_ANDROID) +#if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_ANDROID) if (url.host_piece() == chrome::kChromeUISandboxHost) { return &NewWebUI; } @@ -724,11 +691,6 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui, return &NewWebUI; } - if (dom_distiller::IsDomDistillerEnabled() && - url.host_piece() == dom_distiller::kChromeUIDomDistillerHost) { - return &NewWebUI; - } - if (SiteEngagementService::IsEnabled() && url.host_piece() == chrome::kChromeUISiteEngagementHost) { return &NewWebUI; @@ -936,10 +898,6 @@ base::RefCountedMemory* ChromeWebUIControllerFactory::GetFaviconResourceBytes( if (page_url.host_piece() == chrome::kChromeUIManagementHost) return ManagementUI::GetFaviconResourceBytes(scale_factor); - // Android doesn't use the App Management page. - if (page_url.host_piece() == chrome::kChromeUIAppManagementHost) - return settings_utils::GetFaviconResourceBytes(scale_factor); - #if BUILDFLAG(ENABLE_EXTENSIONS) if (page_url.host_piece() == chrome::kChromeUIExtensionsHost) { return extensions::ExtensionsUI::GetFaviconResourceBytes(scale_factor); diff --git a/chromium/chrome/browser/ui/webui/chromeos/account_manager_error_ui.cc b/chromium/chrome/browser/ui/webui/chromeos/account_manager_error_ui.cc new file mode 100644 index 00000000000..ed686a24eec --- /dev/null +++ b/chromium/chrome/browser/ui/webui/chromeos/account_manager_error_ui.cc @@ -0,0 +1,54 @@ +// Copyright 2019 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/account_manager_error_ui.h" + +#include "base/bind.h" +#include "build/branding_buildflags.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/common/url_constants.h" +#include "chrome/common/webui_url_constants.h" +#include "chrome/grit/browser_resources.h" +#include "chrome/grit/generated_resources.h" +#include "content/public/browser/web_ui_data_source.h" +#include "ui/strings/grit/ui_strings.h" + +namespace chromeos { + +AccountManagerErrorUI::AccountManagerErrorUI(content::WebUI* web_ui) + : ui::WebDialogUI(web_ui), weak_factory_(this) { + content::WebUIDataSource* html_source = content::WebUIDataSource::Create( + chrome::kChromeUIAccountManagerErrorHost); + + web_ui->RegisterMessageCallback( + "closeDialog", base::BindRepeating(&WebDialogUI::CloseDialog, + weak_factory_.GetWeakPtr())); + + html_source->UseStringsJs(); + + html_source->AddLocalizedString( + "errorTitle", IDS_ACCOUNT_MANAGER_SECONDARY_ACCOUNTS_DISABLED_TITLE); + html_source->AddLocalizedString( + "errorMessage", IDS_ACCOUNT_MANAGER_SECONDARY_ACCOUNTS_DISABLED_TEXT); + html_source->AddLocalizedString("okButton", IDS_APP_OK); +#if BUILDFLAG(GOOGLE_CHROME_BRANDING) + html_source->AddResourcePath("googleg.svg", + IDR_ACCOUNT_MANAGER_WELCOME_GOOGLE_LOGO_SVG); +#endif + + // Add required resources. + html_source->AddResourcePath("account_manager_shared.css", + IDR_ACCOUNT_MANAGER_SHARED_CSS); + html_source->AddResourcePath("account_manager_error.js", + IDR_ACCOUNT_MANAGER_ERROR_JS); + + html_source->SetDefaultResource(IDR_ACCOUNT_MANAGER_ERROR_HTML); + + Profile* profile = Profile::FromWebUI(web_ui); + content::WebUIDataSource::Add(profile, html_source); +} + +AccountManagerErrorUI::~AccountManagerErrorUI() = default; + +} // namespace chromeos diff --git a/chromium/chrome/browser/ui/webui/chromeos/account_manager_error_ui.h b/chromium/chrome/browser/ui/webui/chromeos/account_manager_error_ui.h new file mode 100644 index 00000000000..60396df2316 --- /dev/null +++ b/chromium/chrome/browser/ui/webui/chromeos/account_manager_error_ui.h @@ -0,0 +1,27 @@ +// Copyright 2019 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_ACCOUNT_MANAGER_ERROR_UI_H_ +#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_ACCOUNT_MANAGER_ERROR_UI_H_ + +#include "base/macros.h" +#include "base/memory/weak_ptr.h" +#include "ui/web_dialogs/web_dialog_ui.h" + +namespace chromeos { + +// For chrome:://account-manager-error +class AccountManagerErrorUI : public ui::WebDialogUI { + public: + explicit AccountManagerErrorUI(content::WebUI* web_ui); + ~AccountManagerErrorUI() override; + + private: + base::WeakPtrFactory weak_factory_; + DISALLOW_COPY_AND_ASSIGN(AccountManagerErrorUI); +}; + +} // namespace chromeos + +#endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_ACCOUNT_MANAGER_ERROR_UI_H_ diff --git a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.cc b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.cc index e418a046414..626b2d4cc9a 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.cc @@ -11,12 +11,13 @@ #include "base/stl_util.h" #include "chrome/browser/apps/app_service/app_service_proxy.h" #include "chrome/browser/apps/app_service/app_service_proxy_factory.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/browser/supervised_user/supervised_user_service.h" #include "chrome/browser/supervised_user/supervised_user_service_factory.h" #include "chrome/browser/ui/app_list/arc/arc_app_utils.h" +#include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision.mojom.h" #include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler_utils.h" #include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_metrics_recorder.h" #include "chrome/services/app_service/public/cpp/app_registry_cache.h" @@ -26,17 +27,20 @@ #include "components/user_manager/user_manager.h" #include "content/public/browser/web_ui.h" #include "google_apis/gaia/gaia_constants.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/receiver.h" namespace chromeos { AddSupervisionHandler::AddSupervisionHandler( - add_supervision::mojom::AddSupervisionHandlerRequest request, + mojo::PendingReceiver + receiver, content::WebUI* web_ui, + signin::IdentityManager* identity_manager, Delegate* delegate) : web_ui_(web_ui), - identity_manager_( - IdentityManagerFactory::GetForProfile(Profile::FromWebUI(web_ui))), - binding_(this, std::move(request)), + identity_manager_(identity_manager), + receiver_(this, std::move(receiver)), delegate_(delegate) {} AddSupervisionHandler::~AddSupervisionHandler() = default; diff --git a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.h b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.h index 63db8d65ecd..8310d5bda98 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.h +++ b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.h @@ -9,7 +9,8 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision.mojom.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/receiver.h" namespace content { class WebUI; @@ -39,8 +40,10 @@ class AddSupervisionHandler // |delegate| is owned by the caller and its lifetime must outlive |this|. AddSupervisionHandler( - add_supervision::mojom::AddSupervisionHandlerRequest request, + mojo::PendingReceiver + receiver, content::WebUI* web_ui, + signin::IdentityManager* identity_manager, Delegate* delegate); ~AddSupervisionHandler() override; @@ -63,7 +66,7 @@ class AddSupervisionHandler signin::IdentityManager* identity_manager_; std::unique_ptr oauth2_access_token_fetcher_; - mojo::Binding binding_; + mojo::Receiver receiver_; Delegate* delegate_; diff --git a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_metrics_recorder_browsertest.cc b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_metrics_recorder_browsertest.cc index 3071dacac19..72e41559d58 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_metrics_recorder_browsertest.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_metrics_recorder_browsertest.cc @@ -14,6 +14,7 @@ #include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.h" #include "chrome/test/base/in_process_browser_test.h" #include "chromeos/constants/chromeos_features.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" #include "content/public/test/test_web_ui.h" namespace chromeos { @@ -55,10 +56,12 @@ class AddSupervisionMetricsRecorderTest : public InProcessBrowserTest { } void NotifySupervisionEnabled() { + signin::IdentityTestEnvironment identity_test_env; add_supervision::mojom::AddSupervisionHandlerRequest request; AddSupervisionUI add_supervision_ui(&test_web_ui_); AddSupervisionHandler add_supervision_handler( - std::move(request), &test_web_ui_, &add_supervision_ui); + std::move(request), &test_web_ui_, identity_test_env.identity_manager(), + &add_supervision_ui); add_supervision_handler.NotifySupervisionEnabled(); } diff --git a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.cc b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.cc index c0c3fb9b98f..6579db46102 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.cc @@ -12,7 +12,10 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/signin/identity_manager_factory.h" +#include "chrome/browser/supervised_user/supervised_user_service.h" +#include "chrome/browser/supervised_user/supervised_user_service_factory.h" #include "chrome/browser/ui/views/chrome_web_dialog_view.h" +#include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision.mojom.h" #include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler_utils.h" #include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_metrics_recorder.h" #include "chrome/browser/ui/webui/chromeos/add_supervision/confirm_signout_dialog.h" @@ -22,7 +25,7 @@ #include "components/google/core/common/google_util.h" #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_data_source.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "ui/base/resource/resource_bundle.h" #include "ui/resources/grit/ui_resources.h" #include "ui/web_dialogs/web_dialog_delegate.h" @@ -50,22 +53,6 @@ const char kAddSupervisionDefaultURL[] = const char kAddSupervisionFlowType[] = "1"; const char kAddSupervisionSwitch[] = "add-supervision-url"; -// Returns the URL of the Add Supervision flow from the command-line switch, -// or the default value if it's not defined. -GURL GetAddSupervisionURL() { - std::string url; - base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); - if (command_line->HasSwitch(kAddSupervisionSwitch)) { - url = command_line->GetSwitchValueASCII(kAddSupervisionSwitch); - } else { - url = kAddSupervisionDefaultURL; - } - const GURL result(url); - DCHECK(result.is_valid()) << "Invalid URL \"" << url << "\" for switch \"" - << kAddSupervisionSwitch << "\""; - return result; -} - } // namespace // AddSupervisionDialog implementations. @@ -144,6 +131,9 @@ AddSupervisionDialog::~AddSupervisionDialog() = default; // AddSupervisionUI implementations. +// static +signin::IdentityManager* AddSupervisionUI::test_identity_manager_ = nullptr; + AddSupervisionUI::AddSupervisionUI(content::WebUI* web_ui) : ui::MojoWebUIController(web_ui) { // Register the Mojo API handler. @@ -151,17 +141,47 @@ AddSupervisionUI::AddSupervisionUI(content::WebUI* web_ui) &AddSupervisionUI::BindAddSupervisionHandler, base::Unretained(this))); // Set up the basic page framework. - SetupResources(); + SetUpResources(); +} + +AddSupervisionUI::~AddSupervisionUI() = default; + +bool AddSupervisionUI::CloseDialog() { + bool showing_confirm_dialog = MaybeShowConfirmSignoutDialog(); + if (!showing_confirm_dialog) { + // We aren't showing the confirm dialog, so close the AddSupervisionDialog. + AddSupervisionDialog::Close(); + } + return !showing_confirm_dialog; +} + +// static +void AddSupervisionUI::SetUpForTest(signin::IdentityManager* identity_manager) { + test_identity_manager_ = identity_manager; } -void AddSupervisionUI::SetupResources() { +void AddSupervisionUI::BindAddSupervisionHandler( + mojo::PendingReceiver + receiver) { + signin::IdentityManager* identity_manager = + test_identity_manager_ + ? test_identity_manager_ + : IdentityManagerFactory::GetForProfile(Profile::FromWebUI(web_ui())); + + mojo_api_handler_ = std::make_unique( + std::move(receiver), web_ui(), identity_manager, this); +} + +void AddSupervisionUI::SetUpResources() { Profile* profile = Profile::FromWebUI(web_ui()); std::unique_ptr source( content::WebUIDataSource::Create(chrome::kChromeUIAddSupervisionHost)); // Initialize supervision URL from the command-line arguments (if provided). supervision_url_ = GetAddSupervisionURL(); - DCHECK(supervision_url_.DomainIs("google.com")); + if (!allow_non_google_url_for_tests_) { + DCHECK(supervision_url_.DomainIs("google.com")); + } // Forward data to the WebUI. source->AddResourcePath("post_message_api.js", @@ -201,21 +221,24 @@ void AddSupervisionUI::SetupResources() { content::WebUIDataSource::Add(profile, source.release()); } -AddSupervisionUI::~AddSupervisionUI() = default; - -bool AddSupervisionUI::CloseDialog() { - bool showing_confirm_dialog = MaybeShowConfirmSignoutDialog(); - if (!showing_confirm_dialog) { - // We aren't showing the confirm dialog, so close the AddSupervisionDialog. - AddSupervisionDialog::Close(); +// Returns the URL of the Add Supervision flow from the command-line switch, +// or the default value if it's not defined. +GURL AddSupervisionUI::GetAddSupervisionURL() { + std::string url; + base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); + if (command_line->HasSwitch(kAddSupervisionSwitch)) { + url = command_line->GetSwitchValueASCII(kAddSupervisionSwitch); + // The URL should only be set on the command line for testing purposes, + // which may include pointing to a non-google URL (i.e. http://localhost/). + // Therefore, we allow non-Google URLs in this instance. + allow_non_google_url_for_tests_ = true; + } else { + url = kAddSupervisionDefaultURL; } - return !showing_confirm_dialog; -} - -void AddSupervisionUI::BindAddSupervisionHandler( - add_supervision::mojom::AddSupervisionHandlerRequest request) { - mojo_api_handler_ = std::make_unique( - std::move(request), web_ui(), this); + const GURL result(url); + DCHECK(result.is_valid()) << "Invalid URL \"" << url << "\" for switch \"" + << kAddSupervisionSwitch << "\""; + return result; } } // namespace chromeos diff --git a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.h b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.h index 02afc8e1d8e..a05b13f8b31 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.h +++ b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.h @@ -11,6 +11,7 @@ #include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision.mojom.h" #include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.h" #include "chrome/browser/ui/webui/chromeos/system_web_dialog_delegate.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "ui/base/ui_base_types.h" #include "ui/gfx/native_widget_types.h" #include "ui/views/controls/label.h" @@ -64,16 +65,23 @@ class AddSupervisionUI : public ui::MojoWebUIController, // AddSupervisionHandler::Delegate: bool CloseDialog() override; + static void SetUpForTest(signin::IdentityManager* identity_manager); + private: void BindAddSupervisionHandler( - add_supervision::mojom::AddSupervisionHandlerRequest request); - void SetupResources(); + mojo::PendingReceiver + receiver); + void SetUpResources(); + GURL GetAddSupervisionURL(); std::unique_ptr mojo_api_handler_; GURL supervision_url_; + static signin::IdentityManager* test_identity_manager_; + bool allow_non_google_url_for_tests_ = false; + DISALLOW_COPY_AND_ASSIGN(AddSupervisionUI); }; diff --git a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui_browsertest.cc b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui_browsertest.cc new file mode 100644 index 00000000000..f0995d1b6d7 --- /dev/null +++ b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui_browsertest.cc @@ -0,0 +1,242 @@ +// Copyright 2019 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 + +#include "base/macros.h" +#include "base/test/metrics/histogram_tester.h" +#include "base/test/metrics/user_action_tester.h" +#include "base/test/scoped_feature_list.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_metrics_recorder.h" +#include "chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.h" +#include "chrome/browser/ui/webui/chromeos/add_supervision/confirm_signout_dialog.h" +#include "chrome/common/webui_url_constants.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "chrome/test/base/ui_test_utils.h" +#include "chromeos/constants/chromeos_features.h" +#include "components/signin/public/identity_manager/identity_test_environment.h" +#include "content/public/browser/web_contents.h" +#include "content/public/test/browser_test_utils.h" +#include "content/public/test/network_connection_change_simulator.h" +#include "third_party/cros_system_api/dbus/service_constants.h" + +namespace chromeos { + +// NOTE: This test is flaky and therefore disabled under MSAN: +// https://crbug.com/1002560 +#if !defined(MEMORY_SANITIZER) + +namespace { + +const char kGetAddSupervisionUIElementJS[] = + "document.querySelector('add-supervision-ui')"; +} + +// Base class for AddSupervision tests. +class AddSupervisionBrowserTest : public InProcessBrowserTest { + public: + AddSupervisionBrowserTest() { + scoped_feature_list_.InitWithFeatures( + {chromeos::features::kParentalControlsSettings}, {}); + } + ~AddSupervisionBrowserTest() override = default; + + void SetUpOnMainThread() override { + // TODO(danan): See if this is possible to do this instead using + // FakeGaia.IssueOAuthToken(). + identity_test_env_ = std::make_unique(); + identity_test_env_->MakePrimaryAccountAvailable("example@gmail.com"); + // This makes the identity manager return the string "access_token" for the + // access token. + identity_test_env_->SetAutomaticIssueOfAccessTokens(true); + AddSupervisionUI::SetUpForTest(identity_test_env_->identity_manager()); + + // Set start_time_ so that the DCHECK(!start_time_.is_null()) in + // AddSupervisionMetricsRecorder::RecordUserTime() doesn't throw. + AddSupervisionMetricsRecorder::GetInstance() + ->RecordAddSupervisionEnrollment( + AddSupervisionMetricsRecorder::EnrollmentState::kInitiated); + } + + chromeos::AddSupervisionUI* GetAddSupervisionUI() { + return static_cast( + contents()->GetWebUI()->GetController()); + } + + content::WebContents* contents() { + return browser()->tab_strip_model()->GetActiveWebContents(); + } + + GURL settings_webui_url() { return GURL(chrome::kChromeUISettingsURL); } + + GURL add_supervision_webui_url() { + return GURL(chrome::kChromeUIAddSupervisionURL); + } + + bool IsElementVisible(const std::string& element_selector) { + bool found; + bool hidden; + std::string script = std::string("domAutomationController.send(") + + element_selector + ".hidden);"; + LOG(ERROR) << "Script: " << script; + found = content::ExecuteScriptAndExtractBool(contents(), script, &hidden); + return found && !hidden; + } + + private: + base::test::ScopedFeatureList scoped_feature_list_; + std::unique_ptr identity_test_env_; + + DISALLOW_COPY_AND_ASSIGN(AddSupervisionBrowserTest); +}; + +// Disabled on ASan and LSAn builds, because it's very flaky. See +// crbug.com/1004237 +#if defined(ADDRESS_SANITIZER) || defined(LEAK_SANITIZER) +#define MAYBE_URLParameters DISABLED_URLParameters +#else +#define MAYBE_URLParameters URLParameters +#endif +IN_PROC_BROWSER_TEST_F(AddSupervisionBrowserTest, MAYBE_URLParameters) { + // Open the Add Supervision URL. + ui_test_utils::NavigateToURL(browser(), add_supervision_webui_url()); + content::WaitForLoadStop(contents()); + + // Get the URL from the embedded webview. + std::string webview_url; + ASSERT_TRUE(content::ExecuteScriptAndExtractString( + contents(), + std::string("domAutomationController.send(") + + std::string(kGetAddSupervisionUIElementJS) + + ".shadowRoot.querySelector('#webview').getAttribute('src')" + + std::string(");"), + &webview_url)); + + GURL webview_gurl(webview_url); + ASSERT_TRUE(webview_gurl.has_query()); + + // Split the query string into a map of keys to values. + std::string query_str = webview_gurl.query(); + url::Component query(0, query_str.length()); + url::Component key; + url::Component value; + std::map query_parts; + while (url::ExtractQueryKeyValue(query_str.c_str(), &query, &key, &value)) { + query_parts[query_str.substr(key.begin, key.len)] = + query_str.substr(value.begin, value.len); + } + + // Validate the query parameters. + ASSERT_EQ(query_parts.at("flow_type"), "1"); + ASSERT_EQ(query_parts.at("platform_version"), + base::SysInfo::OperatingSystemVersion()); + ASSERT_EQ(query_parts.at("access_token"), "access_token"); + ASSERT_EQ(query_parts.at("hl"), "en-US"); +} + +IN_PROC_BROWSER_TEST_F(AddSupervisionBrowserTest, ShowOfflineScreen) { + // Open the Add Supervision URL. + ui_test_utils::NavigateToURL(browser(), add_supervision_webui_url()); + content::WaitForLoadStop(contents()); + + // Webview div should be initially visible. + ASSERT_TRUE(IsElementVisible(std::string(kGetAddSupervisionUIElementJS) + + std::string(".webviewDiv"))); + + // Simulate going offline. + ASSERT_TRUE(content::ExecuteScript( + contents(), "window.dispatchEvent(new CustomEvent('offline'));")); + + // Ensure the offline content view is shown. + ASSERT_TRUE(IsElementVisible(std::string(kGetAddSupervisionUIElementJS) + + std::string(".offlineContentDiv"))); + + // Ensure the online webview content content is hidden. + ASSERT_FALSE(IsElementVisible(std::string(kGetAddSupervisionUIElementJS) + + std::string(".webviewDiv"))); + + // Simulate going online. + ASSERT_TRUE(content::ExecuteScript( + contents(), "window.dispatchEvent(new CustomEvent('online'));")); + + // Offline div should be hidden. + ASSERT_FALSE(IsElementVisible(std::string(kGetAddSupervisionUIElementJS) + + std::string(".offlineContentDiv"))); + + // Webview div should be shown. + ASSERT_TRUE(IsElementVisible(std::string(kGetAddSupervisionUIElementJS) + + std::string(".webviewDiv"))); +} + +// Disabled on ASan and LSAn builds, because it's very flaky. See +// crbug.com/1004237 +#if defined(ADDRESS_SANITIZER) || defined(LEAK_SANITIZER) +#define MAYBE_ShowConfirmSignoutDialog DISABLED_ShowConfirmSignoutDialog +#else +#define MAYBE_ShowConfirmSignoutDialog ShowConfirmSignoutDialog +#endif +IN_PROC_BROWSER_TEST_F(AddSupervisionBrowserTest, + MAYBE_ShowConfirmSignoutDialog) { + // Open the Add Supervision URL. + ui_test_utils::NavigateToURL(browser(), add_supervision_webui_url()); + content::WaitForLoadStop(contents()); + + // Request that the dialog close before supervision has been enabled. + ASSERT_TRUE(content::ExecuteScript( + contents(), std::string(kGetAddSupervisionUIElementJS) + + std::string(".server.requestClose()"))); + // Confirm that the signout dialog isn't showing + ASSERT_FALSE(ConfirmSignoutDialog::IsShowing()); + + // Simulate supervision being enabled. + ASSERT_TRUE(content::ExecuteScript( + contents(), std::string(kGetAddSupervisionUIElementJS) + + std::string(".server.notifySupervisionEnabled()"))); + + // Request that the dialog is closed again. + ASSERT_TRUE(content::ExecuteScript( + contents(), std::string(kGetAddSupervisionUIElementJS) + + std::string(".server.requestClose()"))); + + // Confirm that the dialog is showing. + ASSERT_TRUE(ConfirmSignoutDialog::IsShowing()); +} + +IN_PROC_BROWSER_TEST_F(AddSupervisionBrowserTest, UMATest) { + base::HistogramTester histogram_tester; + base::UserActionTester user_action_tester; + + // Should see 0 Add Supervision enrollment metrics at first. + histogram_tester.ExpectTotalCount("AddSupervisionDialog.Enrollment", 0); + + // Should see 0 user actions at first. + EXPECT_EQ(user_action_tester.GetActionCount( + "AddSupervisionDialog_AttemptedSignoutAfterEnrollment"), + 0); + + // Open the Add Supervision URL. + ui_test_utils::NavigateToURL(browser(), add_supervision_webui_url()); + content::WaitForLoadStop(contents()); + + // Simulate supervision being enabled. + ASSERT_TRUE(content::ExecuteScript( + contents(), std::string(kGetAddSupervisionUIElementJS) + + std::string(".server.notifySupervisionEnabled()"))); + + // Should see 1 Add Supervision process completed. + histogram_tester.ExpectUniqueSample( + "AddSupervisionDialog.Enrollment", + AddSupervisionMetricsRecorder::EnrollmentState::kCompleted, 1); + histogram_tester.ExpectTotalCount("AddSupervisionDialog.Enrollment", 1); + + // Should see 1 EnrollmentCompleted action. + EXPECT_EQ(user_action_tester.GetActionCount( + "AddSupervisionDialog_EnrollmentCompleted"), + 1); +} + +#endif // !defined(MEMORY_SANITIZER) + +} // namespace chromeos diff --git a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/confirm_signout_dialog.cc b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/confirm_signout_dialog.cc index b0754f4a57b..f9594134ec5 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/confirm_signout_dialog.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/confirm_signout_dialog.cc @@ -29,6 +29,14 @@ const int kDialogBodyTextWidth = 250; } // namespace ConfirmSignoutDialog::ConfirmSignoutDialog() { + DialogDelegate::set_button_label( + ui::DIALOG_BUTTON_OK, + l10n_util::GetStringUTF16( + IDS_ADD_SUPERVISION_EXIT_DIALOG_SIGNOUT_BUTTON_LABEL)); + DialogDelegate::set_button_label( + ui::DIALOG_BUTTON_CANCEL, + l10n_util::GetStringUTF16( + IDS_ADD_SUPERVISION_EXIT_DIALOG_CANCEL_BUTTON_LABEL)); SetLayoutManager(std::make_unique()); SetBorder(views::CreateEmptyBorder( views::LayoutProvider::Get()->GetDialogInsetsForContentType( @@ -44,7 +52,9 @@ ConfirmSignoutDialog::ConfirmSignoutDialog() { AddChildView(body); } -ConfirmSignoutDialog::~ConfirmSignoutDialog() = default; +ConfirmSignoutDialog::~ConfirmSignoutDialog() { + ConfirmSignoutDialog::current_instance_ = nullptr; +} ui::ModalType ConfirmSignoutDialog::GetModalType() const { return ui::ModalType::MODAL_TYPE_SYSTEM; @@ -64,23 +74,22 @@ int ConfirmSignoutDialog::GetDialogButtons() const { ui::DialogButton::DIALOG_BUTTON_CANCEL; } -base::string16 ConfirmSignoutDialog::GetDialogButtonLabel( - ui::DialogButton button) const { - if (button == ui::DialogButton::DIALOG_BUTTON_OK) { - return l10n_util::GetStringUTF16( - IDS_ADD_SUPERVISION_EXIT_DIALOG_SIGNOUT_BUTTON_LABEL); - } - return l10n_util::GetStringUTF16( - IDS_ADD_SUPERVISION_EXIT_DIALOG_CANCEL_BUTTON_LABEL); -} +// static +views::Widget* ConfirmSignoutDialog::current_instance_ = nullptr; // static void ConfirmSignoutDialog::Show() { // Ownership of the ConfirmSignoutDialog is passed to the views system. // Dialog is system-modal, so no parent window is needed. - constrained_window::CreateBrowserModalDialogViews(new ConfirmSignoutDialog(), - nullptr /* parent window */) - ->Show(); + ConfirmSignoutDialog::current_instance_ = + constrained_window::CreateBrowserModalDialogViews( + new ConfirmSignoutDialog(), nullptr /* parent window */); + current_instance_->Show(); +} + +// static +bool ConfirmSignoutDialog::IsShowing() { + return ConfirmSignoutDialog::current_instance_ != nullptr; } } // namespace chromeos diff --git a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/confirm_signout_dialog.h b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/confirm_signout_dialog.h index 6e7bff69d73..c8d7a820a6b 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/add_supervision/confirm_signout_dialog.h +++ b/chromium/chrome/browser/ui/webui/chromeos/add_supervision/confirm_signout_dialog.h @@ -9,6 +9,10 @@ #include "ui/base/ui_base_types.h" #include "ui/views/window/dialog_delegate.h" +namespace views { +class Widget; +} + namespace chromeos { // Dialog shown when the user tries to close the flow when account has already @@ -25,12 +29,13 @@ class ConfirmSignoutDialog : public views::DialogDelegateView { // views::DialogDelegate: bool Accept() override; int GetDialogButtons() const override; - base::string16 GetDialogButtonLabel(ui::DialogButton button) const override; static void Show(); + static bool IsShowing(); private: ConfirmSignoutDialog(); + static views::Widget* current_instance_; DISALLOW_COPY_AND_ASSIGN(ConfirmSignoutDialog); }; diff --git a/chromium/chrome/browser/ui/webui/chromeos/arc_graphics_tracing/arc_graphics_tracing_handler.cc b/chromium/chrome/browser/ui/webui/chromeos/arc_graphics_tracing/arc_graphics_tracing_handler.cc index 3c918789930..56515216033 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/arc_graphics_tracing/arc_graphics_tracing_handler.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/arc_graphics_tracing/arc_graphics_tracing_handler.cc @@ -404,9 +404,16 @@ void ArcGraphicsTracingHandler::StartTracing() { base::trace_event::TraceConfig config( "-*,exo,viz,toplevel,gpu,cc,blink,disabled-by-default-android " - "gfx,disabled-by-default-android hal,disabled-by-default-android view", + "gfx,disabled-by-default-android view", base::trace_event::RECORD_CONTINUOUSLY); config.EnableSystrace(); + // By default, systracing starts pre-defined set of categories with predefined + // set of events in each category. Limit events to what we actually analyze in + // ArcTracingModel. + config.EnableSystraceEvent("i915:intel_gpu_freq_change"); + config.EnableSystraceEvent("power:cpu_idle"); + config.EnableSystraceEvent("sched:sched_wakeup"); + config.EnableSystraceEvent("sched:sched_switch"); tracing_active_ = true; if (jank_detector_) jank_detector_->Reset(); @@ -434,8 +441,8 @@ void ArcGraphicsTracingHandler::StopTracing() { return; controller->StopTracing(content::TracingController::CreateStringEndpoint( - base::BindRepeating(&ArcGraphicsTracingHandler::OnTracingStopped, - weak_ptr_factory_.GetWeakPtr()))); + base::BindOnce(&ArcGraphicsTracingHandler::OnTracingStopped, + weak_ptr_factory_.GetWeakPtr()))); } void ArcGraphicsTracingHandler::SetStatus(const std::string& status) { @@ -452,10 +459,9 @@ void ArcGraphicsTracingHandler::OnTracingStarted() { } void ArcGraphicsTracingHandler::OnTracingStopped( - std::unique_ptr metadata, - base::RefCountedString* trace_data) { + std::unique_ptr trace_data) { std::string string_data; - string_data.swap(trace_data->data()); + string_data.swap(*trace_data); base::PostTaskAndReplyWithResult( FROM_HERE, {base::ThreadPool(), base::MayBlock(), base::TaskPriority::BEST_EFFORT}, diff --git a/chromium/chrome/browser/ui/webui/chromeos/arc_graphics_tracing/arc_graphics_tracing_handler.h b/chromium/chrome/browser/ui/webui/chromeos/arc_graphics_tracing/arc_graphics_tracing_handler.h index bd774e39149..63849de5602 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/arc_graphics_tracing/arc_graphics_tracing_handler.h +++ b/chromium/chrome/browser/ui/webui/chromeos/arc_graphics_tracing/arc_graphics_tracing_handler.h @@ -24,7 +24,6 @@ class ArcSystemStatCollector; namespace base { class ListValue; -class RefCountedString; } // namespace base namespace exo { @@ -71,8 +70,7 @@ class ArcGraphicsTracingHandler : public content::WebUIMessageHandler, void SetStatus(const std::string& status); void OnTracingStarted(); - void OnTracingStopped(std::unique_ptr metadata, - base::RefCountedString* trace_data); + void OnTracingStopped(std::unique_ptr trace_data); // Called when graphics model is built or load. Extra string parameter // contains a status. In case model cannot be built/load empty |base::Value| diff --git a/chromium/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_ui.cc b/chromium/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_ui.cc index 03a052c6863..72e6a511441 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_ui.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_ui.cc @@ -8,10 +8,11 @@ #include #include -#include "ash/public/mojom/voice_interaction_controller.mojom.h" #include "base/bind.h" #include "base/macros.h" #include "base/strings/string_number_conversions.h" +#include "build/buildflag.h" +#include "chrome/browser/chromeos/assistant/assistant_util.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/ui/ash/ash_util.h" @@ -19,7 +20,9 @@ #include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h" #include "chrome/common/url_constants.h" #include "chrome/grit/browser_resources.h" +#include "chromeos/assistant/buildflags.h" #include "chromeos/services/assistant/public/cpp/assistant_prefs.h" +#include "chromeos/services/assistant/public/features.h" #include "components/prefs/pref_service.h" #include "components/session_manager/core/session_manager.h" #include "content/public/browser/host_zoom_map.h" @@ -80,7 +83,6 @@ AssistantOptInUI::AssistantOptInUI(content::WebUI* web_ui) source->UseStringsJs(); source->AddResourcePath("assistant_optin.js", IDR_ASSISTANT_OPTIN_JS); source->AddResourcePath("assistant_logo.png", IDR_ASSISTANT_LOGO_PNG); - source->AddBoolean("hotwordDspAvailable", chromeos::IsHotwordDspAvailable()); source->SetDefaultResource(IDR_ASSISTANT_OPTIN_HTML); source->AddResourcePath("voice_match_animation.json", IDR_ASSISTANT_VOICE_MATCH_ANIMATION); @@ -123,10 +125,24 @@ void AssistantOptInUI::Initialize() { void AssistantOptInDialog::Show( ash::FlowType type, ash::AssistantSetup::StartAssistantOptInFlowCallback callback) { +#if !BUILDFLAG(ENABLE_CROS_LIBASSISTANT) + std::move(callback).Run(false); + return; +#endif + + // Check Assistant allowed state. + if (::assistant::IsAssistantAllowedForProfile( + ProfileManager::GetActiveUserProfile()) != + ash::mojom::AssistantAllowedState::ALLOWED) { + std::move(callback).Run(false); + return; + } + // Check session state here to prevent timing issue -- session state might // have changed during the mojom calls to launch the opt-in dalog. if (session_manager::SessionManager::Get()->session_state() != session_manager::SessionState::ACTIVE) { + std::move(callback).Run(false); return; } if (g_dialog) { diff --git a/chromium/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_utils.cc b/chromium/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_utils.cc index 96f8106a00d..802664295d6 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_utils.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_utils.cc @@ -111,7 +111,7 @@ base::Value CreateZippyData(const SettingZippyList& zippy_list) { data.SetKey("iconUri", base::Value(setting_zippy.icon_uri())); data.SetKey("popupLink", base::Value(l10n_util::GetStringUTF16( IDS_ASSISTANT_ACTIVITY_CONTROL_POPUP_LINK))); - zippy_data.GetList().push_back(std::move(data)); + zippy_data.Append(std::move(data)); } return zippy_data; } @@ -131,7 +131,7 @@ base::Value CreateDisclosureData(const SettingZippyList& disclosure_list) { base::Value(disclosure.additional_info_paragraph(0))); } data.SetKey("iconUri", base::Value(disclosure.icon_uri())); - disclosure_data.GetList().push_back(std::move(data)); + disclosure_data.Append(std::move(data)); } return disclosure_data; } @@ -157,7 +157,7 @@ base::Value CreateGetMoreData(bool email_optin_needed, "iconUri", base::Value("https://www.gstatic.com/images/icons/material/system/" "2x/screen_search_desktop_grey600_24dp.png")); - get_more_data.GetList().push_back(std::move(context_data)); + get_more_data.Append(std::move(context_data)); // Process email optin data. if (email_optin_needed) { @@ -169,7 +169,7 @@ base::Value CreateGetMoreData(bool email_optin_needed, base::Value(email_optin_ui.default_enabled())); data.SetKey("iconUri", base::Value(email_optin_ui.icon_uri())); data.SetKey("legalText", base::Value(email_optin_ui.legal_text())); - get_more_data.GetList().push_back(std::move(data)); + get_more_data.Append(std::move(data)); } return get_more_data; diff --git a/chromium/chrome/browser/ui/webui/chromeos/camera/camera_ui.cc b/chromium/chrome/browser/ui/webui/chromeos/camera/camera_ui.cc index 8a40f0cbdba..7a9dfa6bb52 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/camera/camera_ui.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/camera/camera_ui.cc @@ -37,6 +37,8 @@ content::WebUIDataSource* CreateCameraUIHTMLSource() { IDR_CAMERA_WEBUI_BROWSER_PROXY); // Add mojom-lite files under expected paths. + source->AddResourcePath("src/js/mojo/camera_intent.mojom-lite.js", + IDR_CAMERA_CAMERA_INTENT_MOJOM_LITE_JS); source->AddResourcePath("src/js/mojo/image_capture.mojom-lite.js", IDR_CAMERA_IMAGE_CAPTURE_MOJOM_LITE_JS); source->AddResourcePath("src/js/mojo/camera_common.mojom-lite.js", diff --git a/chromium/chrome/browser/ui/webui/chromeos/crostini_installer/BUILD.gn b/chromium/chrome/browser/ui/webui/chromeos/crostini_installer/BUILD.gn new file mode 100644 index 00000000000..998e86183ac --- /dev/null +++ b/chromium/chrome/browser/ui/webui/chromeos/crostini_installer/BUILD.gn @@ -0,0 +1,11 @@ +# Copyright 2019 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. + +import("//mojo/public/tools/bindings/mojom.gni") + +mojom("mojo_bindings") { + sources = [ + "crostini_installer.mojom", + ] +} diff --git a/chromium/chrome/browser/ui/webui/chromeos/crostini_installer/OWNERS b/chromium/chrome/browser/ui/webui/chromeos/crostini_installer/OWNERS new file mode 100644 index 00000000000..08850f42120 --- /dev/null +++ b/chromium/chrome/browser/ui/webui/chromeos/crostini_installer/OWNERS @@ -0,0 +1,2 @@ +per-file *.mojom=set noparent +per-file *.mojom=file://ipc/SECURITY_OWNERS diff --git a/chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer.mojom b/chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer.mojom new file mode 100644 index 00000000000..0091ecbc389 --- /dev/null +++ b/chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer.mojom @@ -0,0 +1,34 @@ +// Copyright 2019 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. + +module chromeos.crostini_installer.mojom; + +// Lives in the browser process. A renderer uses this to create a page handler +// for controlling Crostini installation. +interface PageHandlerFactory { + // Create a page handler to control Crostini installation. + CreatePageHandler(pending_remote page, + pending_receiver handler); +}; + +// Lives in the browser process. A renderer use this to control Crostini +// installation. +interface PageHandler { + // Start installation + Install(); + // Cancel an on-going installation + Cancel(); + // If a user cancels the installation without starting it at all, this should + // be called so that metrics can be recorded. + CancelBeforeStart(); + // The page normally is displayed in a dialog. Call this to close the dialog. + // chrome.send('dialogClose') should not be used, which could kill the page + // handler before previous mojom calls have been run. + Close(); +}; + +// Lives in the renderer process. The browser uses this to sends installation +// updates to the web page in the render. +interface Page { +}; diff --git a/chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_dialog.cc b/chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_dialog.cc new file mode 100644 index 00000000000..77020c743d1 --- /dev/null +++ b/chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_dialog.cc @@ -0,0 +1,44 @@ +// Copyright 2019 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/crostini_installer/crostini_installer_dialog.h" + +#include "chrome/browser/chromeos/crostini/crostini_manager.h" +#include "chrome/common/webui_url_constants.h" + +namespace { +GURL GetUrl() { + return GURL{chrome::kChromeUICrostiniInstallerUrl}; +} +} // namespace + +namespace chromeos { + +void CrostiniInstallerDialog::Show(Profile* profile) { + DCHECK(crostini::IsCrostiniUIAllowedForProfile(profile)); + auto* instance = SystemWebDialogDelegate::FindInstance(GetUrl().spec()); + if (instance) { + instance->Focus(); + return; + } + + // TODO(lxj): Move installer status tracking into the CrostiniInstaller. + DCHECK(!crostini::CrostiniManager::GetForProfile(profile) + ->GetInstallerViewStatus()); + crostini::CrostiniManager::GetForProfile(profile)->SetInstallerViewStatus( + true); + + instance = new CrostiniInstallerDialog(profile); + instance->ShowSystemDialog(); +} + +CrostiniInstallerDialog::CrostiniInstallerDialog(Profile* profile) + : SystemWebDialogDelegate{GetUrl(), /*title=*/{}}, profile_{profile} {} + +CrostiniInstallerDialog::~CrostiniInstallerDialog() { + crostini::CrostiniManager::GetForProfile(profile_)->SetInstallerViewStatus( + false); +} + +} // namespace chromeos diff --git a/chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_dialog.h b/chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_dialog.h new file mode 100644 index 00000000000..5c56ffaba34 --- /dev/null +++ b/chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_dialog.h @@ -0,0 +1,27 @@ +// Copyright 2019 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_CROSTINI_INSTALLER_CROSTINI_INSTALLER_DIALOG_H_ +#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_CROSTINI_INSTALLER_CROSTINI_INSTALLER_DIALOG_H_ + +#include "chrome/browser/ui/webui/chromeos/system_web_dialog_delegate.h" + +class Profile; + +namespace chromeos { + +class CrostiniInstallerDialog : public SystemWebDialogDelegate { + public: + static void Show(Profile* profile); + + private: + explicit CrostiniInstallerDialog(Profile* profile); + ~CrostiniInstallerDialog() override; + + Profile* profile_; +}; + +} // namespace chromeos + +#endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_CROSTINI_INSTALLER_CROSTINI_INSTALLER_DIALOG_H_ diff --git a/chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_page_handler.cc b/chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_page_handler.cc new file mode 100644 index 00000000000..8b971423ec4 --- /dev/null +++ b/chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_page_handler.cc @@ -0,0 +1,64 @@ +// Copyright 2019 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/crostini_installer/crostini_installer_page_handler.h" + +#include + +#include "base/bind.h" +#include "chrome/browser/chromeos/crostini/crostini_installer_ui_delegate.h" + +namespace chromeos { + +CrostiniInstallerPageHandler::CrostiniInstallerPageHandler( + crostini::CrostiniInstallerUIDelegate* installer_ui_delegate, + mojo::PendingReceiver + pending_page_handler, + mojo::PendingRemote pending_page, + base::OnceClosure close_dialog_callback) + : installer_ui_delegate_{installer_ui_delegate}, + receiver_{this, std::move(pending_page_handler)}, + page_{std::move(pending_page)}, + close_dialog_callback_{std::move(close_dialog_callback)} {} + +CrostiniInstallerPageHandler::~CrostiniInstallerPageHandler() = default; + +void CrostiniInstallerPageHandler::Install() { + installer_ui_delegate_->Install( + base::BindRepeating(&CrostiniInstallerPageHandler::OnProgressUpdate, + weak_ptr_factory_.GetWeakPtr()), + base::BindOnce(&CrostiniInstallerPageHandler::OnInstallFinished, + weak_ptr_factory_.GetWeakPtr())); +} + +void CrostiniInstallerPageHandler::Cancel() { + installer_ui_delegate_->Cancel( + base::BindOnce(&CrostiniInstallerPageHandler::OnCanceled, + weak_ptr_factory_.GetWeakPtr())); +} + +void CrostiniInstallerPageHandler::CancelBeforeStart() { + installer_ui_delegate_->CancelBeforeStart(); +} + +void CrostiniInstallerPageHandler::Close() { + std::move(close_dialog_callback_).Run(); +} + +void CrostiniInstallerPageHandler::OnProgressUpdate( + crostini::mojom::InstallerState installer_state, + double progress_fraction) { + // TODO(lxj) +} + +void CrostiniInstallerPageHandler::OnInstallFinished( + crostini::mojom::InstallerError error) { + // TODO(lxj) +} + +void CrostiniInstallerPageHandler::OnCanceled() { + // TODO(lxj) +} + +} // namespace chromeos diff --git a/chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_page_handler.h b/chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_page_handler.h new file mode 100644 index 00000000000..9060a95057b --- /dev/null +++ b/chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_page_handler.h @@ -0,0 +1,60 @@ +// Copyright 2019 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_CROSTINI_INSTALLER_CROSTINI_INSTALLER_PAGE_HANDLER_H_ +#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_CROSTINI_INSTALLER_CROSTINI_INSTALLER_PAGE_HANDLER_H_ + +#include "base/callback.h" +#include "base/macros.h" +#include "base/memory/weak_ptr.h" +#include "chrome/browser/chromeos/crostini/crostini_installer_types.mojom-forward.h" +#include "chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer.mojom.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/remote.h" + +namespace crostini { +class CrostiniInstallerUIDelegate; +} // namespace crostini + +namespace chromeos { + +class CrostiniInstallerPageHandler + : public chromeos::crostini_installer::mojom::PageHandler { + public: + CrostiniInstallerPageHandler( + crostini::CrostiniInstallerUIDelegate* installer_ui_delegate, + mojo::PendingReceiver + pending_page_handler, + mojo::PendingRemote + pending_page, + base::OnceClosure close_dialog_callback); + ~CrostiniInstallerPageHandler() override; + + // chromeos::crostini_installer::mojom::PageHandler: + void Install() override; + void Cancel() override; + void CancelBeforeStart() override; + void Close() override; + + private: + void OnProgressUpdate(crostini::mojom::InstallerState installer_state, + double progress_fraction); + void OnInstallFinished(crostini::mojom::InstallerError error); + void OnCanceled(); + + crostini::CrostiniInstallerUIDelegate* installer_ui_delegate_; + mojo::Receiver receiver_; + mojo::Remote page_; + base::OnceClosure close_dialog_callback_; + + base::WeakPtrFactory weak_ptr_factory_{this}; + + DISALLOW_COPY_AND_ASSIGN(CrostiniInstallerPageHandler); +}; + +} // namespace chromeos + +#endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_CROSTINI_INSTALLER_CROSTINI_INSTALLER_PAGE_HANDLER_H_ diff --git a/chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_ui.cc b/chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_ui.cc new file mode 100644 index 00000000000..02fe92c3d9a --- /dev/null +++ b/chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_ui.cc @@ -0,0 +1,78 @@ +// Copyright 2019 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/crostini_installer/crostini_installer_ui.h" + +#include + +#include "base/bind.h" +#include "chrome/browser/chromeos/crostini/crostini_installer.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_page_handler.h" +#include "chrome/common/webui_url_constants.h" +#include "chrome/grit/browser_resources.h" +#include "chromeos/constants/chromeos_features.h" +#include "content/public/browser/web_ui_data_source.h" +#include "ui/web_dialogs/web_dialog_ui.h" +#include "ui/webui/mojo_web_ui_controller.h" + +namespace chromeos { + +bool CrostiniInstallerUI::IsEnabled() { + return base::FeatureList::IsEnabled( + chromeos::features::kCrostiniWebUIInstaller); +} + +CrostiniInstallerUI::CrostiniInstallerUI(content::WebUI* web_ui) + : ui::MojoWebDialogUI{web_ui} { + // TODO(lxj): We might want to make sure there is only one instance of this + // class. + + content::WebUIDataSource* source = + content::WebUIDataSource::Create(chrome::kChromeUICrostiniInstallerHost); + + source->AddResourcePath("app.js", IDR_CROSTINI_INSTALLER_APP_JS); + source->AddResourcePath("browser_proxy.js", + IDR_CROSTINI_INSTALLER_BROWSER_PROXY_JS); + source->AddResourcePath("crostini_installer.mojom-lite.js", + IDR_CROSTINI_INSTALLER_MOJO_LITE_JS); + source->SetDefaultResource(IDR_CROSTINI_INSTALLER_INDEX_HTML); + content::WebUIDataSource::Add(Profile::FromWebUI(web_ui), source); + + AddHandlerToRegistry(base::BindRepeating( + &CrostiniInstallerUI::BindPageHandlerFactory, base::Unretained(this))); +} + +CrostiniInstallerUI::~CrostiniInstallerUI() = default; + +void CrostiniInstallerUI::BindPageHandlerFactory( + mojo::PendingReceiver< + chromeos::crostini_installer::mojom::PageHandlerFactory> + pending_receiver) { + if (page_factory_receiver_.is_bound()) { + page_factory_receiver_.reset(); + } + + page_factory_receiver_.Bind(std::move(pending_receiver)); +} + +void CrostiniInstallerUI::CreatePageHandler( + mojo::PendingRemote pending_page, + mojo::PendingReceiver + pending_page_handler) { + DCHECK(pending_page.is_valid()); + + page_handler_ = std::make_unique( + crostini::CrostiniInstaller::GetForProfile(Profile::FromWebUI(web_ui())), + std::move(pending_page_handler), std::move(pending_page), + // Using Unretained(this) because |page_handler_| will not out-live + // |this|. + // + // CloseDialog() is a no-op if we are not in a dialog (e.g. user + // access the page using the URL directly, which is not supported). + base::BindOnce(&CrostiniInstallerUI::CloseDialog, base::Unretained(this), + nullptr)); +} + +} // namespace chromeos diff --git a/chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_ui.h b/chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_ui.h new file mode 100644 index 00000000000..2e5d81d5dd9 --- /dev/null +++ b/chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_ui.h @@ -0,0 +1,51 @@ +// Copyright 2019 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_CROSTINI_INSTALLER_CROSTINI_INSTALLER_UI_H_ +#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_CROSTINI_INSTALLER_CROSTINI_INSTALLER_UI_H_ + +#include "base/macros.h" +#include "chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer.mojom.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" +#include "ui/web_dialogs/web_dialog_ui.h" + +namespace chromeos { + +class CrostiniInstallerPageHandler; + +// The WebUI for chrome://crostini-installer +class CrostiniInstallerUI + : public ui::MojoWebDialogUI, + public chromeos::crostini_installer::mojom::PageHandlerFactory { + public: + static bool IsEnabled(); + + explicit CrostiniInstallerUI(content::WebUI* web_ui); + ~CrostiniInstallerUI() override; + + private: + void BindPageHandlerFactory( + mojo::PendingReceiver< + chromeos::crostini_installer::mojom::PageHandlerFactory> + pending_receiver); + + // chromeos::crostini_installer::mojom::PageHandlerFactory: + void CreatePageHandler( + mojo::PendingRemote + pending_page, + mojo::PendingReceiver + pending_page_handler) override; + + std::unique_ptr page_handler_; + mojo::Receiver + page_factory_receiver_{this}; + + DISALLOW_COPY_AND_ASSIGN(CrostiniInstallerUI); +}; + +} // namespace chromeos + +#endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_CROSTINI_INSTALLER_CROSTINI_INSTALLER_UI_H_ diff --git a/chromium/chrome/browser/ui/webui/chromeos/drive_internals_ui.cc b/chromium/chrome/browser/ui/webui/chromeos/drive_internals_ui.cc index 686d55faf55..857d5816fdf 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/drive_internals_ui.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/drive_internals_ui.cc @@ -29,7 +29,6 @@ #include "base/task/post_task.h" #include "base/task/task_traits.h" #include "base/threading/sequenced_task_runner_handle.h" -#include "chrome/browser/chromeos/drive/debug_info_collector.h" #include "chrome/browser/chromeos/drive/drive_integration_service.h" #include "chrome/browser/chromeos/drive/file_system_util.h" #include "chrome/browser/chromeos/file_manager/path_util.h" @@ -43,13 +42,9 @@ #include "chromeos/constants/chromeos_features.h" #include "components/download/content/public/all_download_item_notifier.h" #include "components/download/public/common/download_item.h" -#include "components/drive/drive.pb.h" -#include "components/drive/drive_api_util.h" #include "components/drive/drive_notification_manager.h" #include "components/drive/drive_pref_names.h" #include "components/drive/event_logger.h" -#include "components/drive/job_list.h" -#include "components/drive/service/drive_service_interface.h" #include "components/prefs/pref_service.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" @@ -152,74 +147,6 @@ std::pair GetGCacheContents( return result; } -// Formats |entry| into text. -std::string FormatEntry(const base::FilePath& path, - const drive::ResourceEntry& entry) { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - - using base::StringAppendF; - - std::string out; - StringAppendF(&out, "%s\n", path.AsUTF8Unsafe().c_str()); - StringAppendF(&out, " title: %s\n", entry.title().c_str()); - StringAppendF(&out, " local_id: %s\n", entry.local_id().c_str()); - StringAppendF(&out, " resource_id: %s\n", entry.resource_id().c_str()); - StringAppendF(&out, " parent_local_id: %s\n", - entry.parent_local_id().c_str()); - StringAppendF(&out, " shared: %s\n", entry.shared() ? "true" : "false"); - StringAppendF(&out, " shared_with_me: %s\n", - entry.shared_with_me() ? "true" : "false"); - StringAppendF(&out, " alternate_url: %s\n", entry.alternate_url().c_str()); - - const drive::PlatformFileInfoProto& file_info = entry.file_info(); - StringAppendF(&out, " file_info\n"); - StringAppendF(&out, " size: %" PRId64 "\n", file_info.size()); - StringAppendF(&out, " is_directory: %d\n", file_info.is_directory()); - StringAppendF(&out, " is_symbolic_link: %d\n", - file_info.is_symbolic_link()); - - const base::Time last_modified = base::Time::FromInternalValue( - file_info.last_modified()); - const base::Time last_modified_by_me = - base::Time::FromInternalValue(entry.last_modified_by_me()); - const base::Time last_accessed = base::Time::FromInternalValue( - file_info.last_accessed()); - const base::Time creation_time = base::Time::FromInternalValue( - file_info.creation_time()); - StringAppendF(&out, " last_modified: %s\n", - google_apis::util::FormatTimeAsString(last_modified).c_str()); - StringAppendF( - &out, " last_modified_by_me: %s\n", - google_apis::util::FormatTimeAsString(last_modified_by_me).c_str()); - StringAppendF(&out, " last_accessed: %s\n", - google_apis::util::FormatTimeAsString(last_accessed).c_str()); - StringAppendF(&out, " creation_time: %s\n", - google_apis::util::FormatTimeAsString(creation_time).c_str()); - - if (entry.has_file_specific_info()) { - const drive::FileSpecificInfo& file_specific_info = - entry.file_specific_info(); - StringAppendF(&out, " content_mime_type: %s\n", - file_specific_info.content_mime_type().c_str()); - StringAppendF(&out, " file_md5: %s\n", - file_specific_info.md5().c_str()); - StringAppendF(&out, " document_extension: %s\n", - file_specific_info.document_extension().c_str()); - StringAppendF(&out, " is_hosted_document: %d\n", - file_specific_info.is_hosted_document()); - } - - if (entry.has_directory_specific_info()) { - StringAppendF(&out, " directory_info\n"); - const drive::DirectorySpecificInfo& directory_specific_info = - entry.directory_specific_info(); - StringAppendF(&out, " changestamp: %" PRId64 "\n", - directory_specific_info.changestamp()); - } - - return out; -} - // Appends {'key': key, 'value': value, 'class': clazz} dictionary to the // |list|. void AppendKeyValue(base::ListValue* list, @@ -231,7 +158,7 @@ void AppendKeyValue(base::ListValue* list, dict->SetKey(kValue, base::Value(std::move(value))); if (!clazz.empty()) dict->SetKey(kClass, base::Value(std::move(clazz))); - list->GetList().push_back(std::move(*dict)); + list->Append(std::move(*dict)); } ino_t GetInodeValue(const base::FilePath& path) { @@ -334,22 +261,10 @@ class DriveInternalsWebUIHandler : public content::WebUIMessageHandler { "periodicUpdate", base::BindRepeating(&DriveInternalsWebUIHandler::OnPeriodicUpdate, weak_ptr_factory_.GetWeakPtr())); - web_ui()->RegisterMessageCallback( - "clearAccessToken", - base::BindRepeating(&DriveInternalsWebUIHandler::ClearAccessToken, - weak_ptr_factory_.GetWeakPtr())); - web_ui()->RegisterMessageCallback( - "clearRefreshToken", - base::BindRepeating(&DriveInternalsWebUIHandler::ClearRefreshToken, - weak_ptr_factory_.GetWeakPtr())); web_ui()->RegisterMessageCallback( "resetDriveFileSystem", base::BindRepeating(&DriveInternalsWebUIHandler::ResetDriveFileSystem, weak_ptr_factory_.GetWeakPtr())); - web_ui()->RegisterMessageCallback( - "listFileEntries", - base::BindRepeating(&DriveInternalsWebUIHandler::ListFileEntries, - weak_ptr_factory_.GetWeakPtr())); web_ui()->RegisterMessageCallback( "zipLogs", base::BindRepeating(&DriveInternalsWebUIHandler::ZipDriveFsLogs, @@ -441,224 +356,23 @@ class DriveInternalsWebUIHandler : public content::WebUIMessageHandler { drive_notification_manager ? drive_notification_manager->push_notification_enabled() : false); - auto* drive_service = GetDriveService(); - if (drive_service) { - connection_status.SetBoolean("has-refresh-token", - drive_service->HasRefreshToken()); - connection_status.SetBoolean("has-access-token", - drive_service->HasAccessToken()); - } MaybeCallJavascript("updateConnectionStatus", std::move(connection_status)); } void UpdateAboutResourceSection() { - if (IsDriveFsEnabled()) { - // TODO(crbug.com/896123): Maybe worth implementing. - SetSectionEnabled("account-information-section", false); - return; - } - - SetSectionEnabled("account-information-section", true); - auto* drive_service = GetDriveService(); - if (drive_service) { - drive_service->GetAboutResource( - base::Bind(&DriveInternalsWebUIHandler::OnGetAboutResource, - weak_ptr_factory_.GetWeakPtr())); - } - } - - // Called when GetAboutResource() call to DriveService is complete. - void OnGetAboutResource( - google_apis::DriveApiErrorCode status, - std::unique_ptr about_resource) { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - - if (status != google_apis::HTTP_SUCCESS) { - LOG(ERROR) << "Failed to get about resource"; - return; - } - DCHECK(about_resource); - - base::DictionaryValue data; - data.SetDouble("account-quota-total", about_resource->quota_bytes_total()); - data.SetDouble("account-quota-used", - about_resource->quota_bytes_used_aggregate()); - data.SetDouble("account-largest-changestamp-remote", - about_resource->largest_change_id()); - data.SetString("root-resource-id", about_resource->root_folder_id()); - - MaybeCallJavascript("updateAboutResource", std::move(data)); + // TODO(crbug.com/896123): Maybe worth implementing. + SetSectionEnabled("account-information-section", false); } void UpdateDeltaUpdateStatusSection() { - if (IsDriveFsEnabled()) { - // TODO(crbug.com/896123): Maybe worth implementing. - SetSectionEnabled("delta-update-status-section", false); - return; - } - - SetSectionEnabled("delta-update-status-section", true); - auto* debug_info_collector = GetDebugInfoCollector(); - if (debug_info_collector) { - debug_info_collector->GetMetadata(base::Bind( - &DriveInternalsWebUIHandler::OnGetFilesystemMetadataForDeltaUpdate, - weak_ptr_factory_.GetWeakPtr())); - } - } - - // Callback for DebugInfoCollector::GetMetadata for delta update. - void OnGetFilesystemMetadataForDeltaUpdate( - const drive::FileSystemMetadata& metadata, - const std::map& - team_drive_metadata) { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - - auto items = std::make_unique(); - // Users default corpus first. - auto app_data = std::make_unique(); - app_data->SetString("id", "default corpus"); - app_data->SetString("root_entry_path", metadata.path); - app_data->SetString("start_page_token", metadata.start_page_token); - app_data->SetString("last_check_time", - google_apis::util::FormatTimeAsStringLocaltime( - metadata.last_update_check_time)); - app_data->SetString( - "last_check_result", - drive::FileErrorToString(metadata.last_update_check_error)); - app_data->SetString("refreshing", metadata.refreshing ? "Yes" : "No"); - - items->Append(std::move(app_data)); - - for (const auto& team_drive : team_drive_metadata) { - app_data = std::make_unique(); - app_data->SetString("id", team_drive.first); - app_data->SetString("root_entry_path", team_drive.second.path); - app_data->SetString("start_page_token", - team_drive.second.start_page_token); - app_data->SetString("last_check_time", - google_apis::util::FormatTimeAsStringLocaltime( - team_drive.second.last_update_check_time)); - app_data->SetString( - "last_check_result", - drive::FileErrorToString(team_drive.second.last_update_check_error)); - app_data->SetString("refreshing", - team_drive.second.refreshing ? "Yes" : "No"); - items->Append(std::move(app_data)); - } - - base::DictionaryValue delta_update_status; - delta_update_status.Set("items", std::move(items)); - - MaybeCallJavascript("updateDeltaUpdateStatus", - std::move(delta_update_status)); + // TODO(crbug.com/896123): Maybe worth implementing. + SetSectionEnabled("delta-update-status-section", false); } void UpdateInFlightOperationsSection() { - if (IsDriveFsEnabled()) { - // TODO(crbug.com/896123): Maybe worth implementing. - SetSectionEnabled("in-flight-operations-section", false); - return; - } - - SetSectionEnabled("in-flight-operations-section", true); - auto* integration_service = GetIntegrationService(); - if (!integration_service) - return; - drive::JobListInterface* job_list = integration_service->job_list(); - if (!job_list) - return; - std::vector info_list = job_list->GetJobInfoList(); - - base::ListValue in_flight_operations; - for (size_t i = 0; i < info_list.size(); ++i) { - const drive::JobInfo& info = info_list[i]; - - auto dict = std::make_unique(); - dict->SetInteger("id", info.job_id); - dict->SetString("type", drive::JobTypeToString(info.job_type)); - dict->SetString("file_path", info.file_path.AsUTF8Unsafe()); - dict->SetString("state", drive::JobStateToString(info.state)); - dict->SetDouble("progress_current", info.num_completed_bytes); - dict->SetDouble("progress_total", info.num_total_bytes); - in_flight_operations.Append(std::move(dict)); - } - - MaybeCallJavascript("updateInFlightOperations", - std::move(in_flight_operations)); - } - - void UpdateFileSystemContentsSection() { - if (IsDriveFsEnabled()) { - SetSectionEnabled("file-system-contents-section", false); - return; - } - - SetSectionEnabled("file-system-contents-section", true); - drive::DebugInfoCollector* debug_info_collector = GetDebugInfoCollector(); - if (!debug_info_collector) - return; - - // Start rendering the file system tree as text. - const base::FilePath root_path = drive::util::GetDriveGrandRootPath(); - - debug_info_collector->GetResourceEntry( - root_path, - base::BindOnce(&DriveInternalsWebUIHandler::OnGetResourceEntryByPath, - weak_ptr_factory_.GetWeakPtr(), root_path)); - - debug_info_collector->ReadDirectory( - root_path, - base::Bind(&DriveInternalsWebUIHandler::OnReadDirectoryByPath, - weak_ptr_factory_.GetWeakPtr(), root_path)); - } - - // Called when GetResourceEntryByPath() is complete. - void OnGetResourceEntryByPath(const base::FilePath& path, - drive::FileError error, - std::unique_ptr entry) { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - - if (error == drive::FILE_ERROR_OK) { - DCHECK(entry.get()); - MaybeCallJavascript("updateFileSystemContents", - base::Value(FormatEntry(path, *entry) + "\n")); - } - } - - // Called when ReadDirectoryByPath() is complete. - void OnReadDirectoryByPath( - const base::FilePath& parent_path, - drive::FileError error, - std::unique_ptr entries) { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - - if (error == drive::FILE_ERROR_OK) { - DCHECK(entries.get()); - - drive::DebugInfoCollector* debug_info_collector = GetDebugInfoCollector(); - std::string file_system_as_text; - for (size_t i = 0; i < entries->size(); ++i) { - const drive::ResourceEntry& entry = (*entries)[i]; - const base::FilePath current_path = parent_path.Append( - base::FilePath::FromUTF8Unsafe(entry.base_name())); - - file_system_as_text.append(FormatEntry(current_path, entry) + "\n"); - - if (entry.file_info().is_directory()) { - debug_info_collector->ReadDirectory( - current_path, - base::Bind(&DriveInternalsWebUIHandler::OnReadDirectoryByPath, - weak_ptr_factory_.GetWeakPtr(), current_path)); - } - } - - // There may be pending ReadDirectoryByPath() calls, but we can update - // the page with what we have now. This results in progressive - // updates, which is good for a large file system. - MaybeCallJavascript("updateFileSystemContents", - base::Value(file_system_as_text)); - } + // TODO(crbug.com/896123): Maybe worth implementing. + SetSectionEnabled("in-flight-operations-section", false); } void UpdatePathConfigurationsSection() { @@ -727,8 +441,6 @@ class DriveInternalsWebUIHandler : public content::WebUIMessageHandler { PrefService* pref_service = profile()->GetPrefs(); base::ListValue preferences; - AppendKeyValue(&preferences, "DriveFS", - IsDriveFsEnabled() ? "true" : "false"); for (size_t i = 0; i < base::size(kDriveRelatedPreferences); ++i) { const std::string key = kDriveRelatedPreferences[i]; // As of now, all preferences are boolean. @@ -772,10 +484,6 @@ class DriveInternalsWebUIHandler : public content::WebUIMessageHandler { } void UpdateServiceLogSection() { - if (!IsDriveFsEnabled()) { - SetSectionEnabled("service-log-section", false); - return; - } SetSectionEnabled("service-log-section", true); if (service_log_file_is_processing_) @@ -818,36 +526,8 @@ class DriveInternalsWebUIHandler : public content::WebUIMessageHandler { } void UpdateCacheContentsSection() { - if (IsDriveFsEnabled()) { - // TODO(crbug.com/896123): Maybe worth implementing. - SetSectionEnabled("cache-contents-section", false); - return; - } - SetSectionEnabled("cache-contents-section", true); - - auto* debug_info_collector = GetDebugInfoCollector(); - if (debug_info_collector) { - debug_info_collector->IterateFileCache( - base::Bind(&DriveInternalsWebUIHandler::OnUpdateCacheEntry, - weak_ptr_factory_.GetWeakPtr()), - base::DoNothing()); - } - } - - // Called as the iterator for DebugInfoCollector::IterateFileCache(). - void OnUpdateCacheEntry(const std::string& local_id, - const drive::FileCacheEntry& cache_entry) { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - - // Convert |cache_entry| into a dictionary. - base::DictionaryValue value; - value.SetString("local_id", local_id); - value.SetString("md5", cache_entry.md5()); - value.SetBoolean("is_present", cache_entry.is_present()); - value.SetBoolean("is_pinned", cache_entry.is_pinned()); - value.SetBoolean("is_dirty", cache_entry.is_dirty()); - - MaybeCallJavascript("updateCacheContents", std::move(value)); + // TODO(crbug.com/896123): Maybe worth implementing. + SetSectionEnabled("cache-contents-section", false); } void UpdateGCacheContentsSection() { @@ -872,24 +552,6 @@ class DriveInternalsWebUIHandler : public content::WebUIMessageHandler { std::move(response.second)); } - // Called when the corresponding button on the page is pressed. - void ClearAccessToken(const base::ListValue* args) { - AllowJavascript(); - - drive::DriveServiceInterface* drive_service = GetDriveService(); - if (drive_service) - drive_service->ClearAccessToken(); - } - - // Called when the corresponding button on the page is pressed. - void ClearRefreshToken(const base::ListValue* args) { - AllowJavascript(); - - drive::DriveServiceInterface* drive_service = GetDriveService(); - if (drive_service) - drive_service->ClearRefreshToken(); - } - // Called when the corresponding button on the page is pressed. void ResetDriveFileSystem(const base::ListValue* args) { AllowJavascript(); @@ -903,13 +565,6 @@ class DriveInternalsWebUIHandler : public content::WebUIMessageHandler { } } - // Called when the corresponding button on the page is pressed. - void ListFileEntries(const base::ListValue* args) { - AllowJavascript(); - - UpdateFileSystemContentsSection(); - } - void ZipDriveFsLogs(const base::ListValue* args) { AllowJavascript(); @@ -941,24 +596,6 @@ class DriveInternalsWebUIHandler : public content::WebUIMessageHandler { return service; } - // Returns a DriveService instance. - drive::DriveServiceInterface* GetDriveService() { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - return drive::util::GetDriveServiceByProfile(profile()); - } - - // Returns a DebugInfoCollector instance. - drive::DebugInfoCollector* GetDebugInfoCollector() { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - drive::DriveIntegrationService* service = GetIntegrationService(); - return service ? service->debug_info_collector() : NULL; - } - - // Whether DriveFS is enabled. - bool IsDriveFsEnabled() { - return base::FeatureList::IsEnabled(chromeos::features::kDriveFs); - } - // The last event sent to the JavaScript side. int last_sent_event_id_; diff --git a/chromium/chrome/browser/ui/webui/chromeos/first_run/first_run_handler.cc b/chromium/chrome/browser/ui/webui/chromeos/first_run/first_run_handler.cc index 46afde2fa0d..92020cd21ff 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/first_run/first_run_handler.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/first_run/first_run_handler.cc @@ -6,7 +6,6 @@ #include -#include "ash/public/mojom/voice_interaction_controller.mojom.h" #include "base/bind.h" #include "base/values.h" #include "chrome/browser/chromeos/assistant/assistant_util.h" diff --git a/chromium/chrome/browser/ui/webui/chromeos/internet_config_dialog.cc b/chromium/chrome/browser/ui/webui/chromeos/internet_config_dialog.cc index 4d8cca34874..d341aac11e6 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/internet_config_dialog.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/internet_config_dialog.cc @@ -4,6 +4,7 @@ #include "chrome/browser/ui/webui/chromeos/internet_config_dialog.h" +#include "ash/public/cpp/network_config_service.h" #include "base/json/json_writer.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/webui/chromeos/network_element_localized_strings_provider.h" @@ -14,6 +15,7 @@ #include "chromeos/network/network_state.h" #include "chromeos/network/network_state_handler.h" #include "chromeos/network/network_util.h" +#include "chromeos/services/network_config/public/mojom/cros_network_config.mojom.h" // nogncheck #include "components/strings/grit/components_strings.h" #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_data_source.h" @@ -136,7 +138,7 @@ std::string InternetConfigDialog::GetDialogArgs() const { // InternetConfigDialogUI InternetConfigDialogUI::InternetConfigDialogUI(content::WebUI* web_ui) - : ui::WebDialogUI(web_ui) { + : ui::MojoWebDialogUI(web_ui) { content::WebUIDataSource* source = content::WebUIDataSource::Create( chrome::kChromeUIInternetConfigDialogHost); @@ -153,8 +155,18 @@ InternetConfigDialogUI::InternetConfigDialogUI(content::WebUI* web_ui) #endif content::WebUIDataSource::Add(Profile::FromWebUI(web_ui), source); + + // Add Mojo bindings to this WebUI so that Mojo calls can occur in JavaScript. + AddHandlerToRegistry(base::BindRepeating( + &InternetConfigDialogUI::BindCrosNetworkConfig, base::Unretained(this))); } InternetConfigDialogUI::~InternetConfigDialogUI() {} +void InternetConfigDialogUI::BindCrosNetworkConfig( + mojo::PendingReceiver + receiver) { + ash::GetNetworkConfigService(std::move(receiver)); +} + } // namespace chromeos diff --git a/chromium/chrome/browser/ui/webui/chromeos/internet_config_dialog.h b/chromium/chrome/browser/ui/webui/chromeos/internet_config_dialog.h index 848254eba3c..a95f0f75897 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/internet_config_dialog.h +++ b/chromium/chrome/browser/ui/webui/chromeos/internet_config_dialog.h @@ -8,8 +8,9 @@ #include #include "base/macros.h" -#include "base/strings/string16.h" #include "chrome/browser/ui/webui/chromeos/system_web_dialog_delegate.h" +#include "chromeos/services/network_config/public/mojom/cros_network_config.mojom-forward.h" // nogncheck +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "ui/web_dialogs/web_dialog_ui.h" namespace chromeos { @@ -49,12 +50,16 @@ class InternetConfigDialog : public SystemWebDialogDelegate { // A WebUI to host the network configuration UI in a dialog, used in the // login screen and when a new network is configured from the system tray. -class InternetConfigDialogUI : public ui::WebDialogUI { +class InternetConfigDialogUI : public ui::MojoWebDialogUI { public: explicit InternetConfigDialogUI(content::WebUI* web_ui); ~InternetConfigDialogUI() override; private: + void BindCrosNetworkConfig( + mojo::PendingReceiver + receiver); + DISALLOW_COPY_AND_ASSIGN(InternetConfigDialogUI); }; diff --git a/chromium/chrome/browser/ui/webui/chromeos/internet_detail_dialog.cc b/chromium/chrome/browser/ui/webui/chromeos/internet_detail_dialog.cc index 2489cb2e124..02ea2ac9977 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/internet_detail_dialog.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/internet_detail_dialog.cc @@ -17,6 +17,7 @@ #include "chromeos/network/network_state.h" #include "chromeos/network/network_state_handler.h" #include "chromeos/network/network_util.h" +#include "chromeos/services/network_config/public/mojom/cros_network_config.mojom.h" // nogncheck #include "components/strings/grit/components_strings.h" #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_data_source.h" @@ -45,6 +46,7 @@ void AddInternetStrings(content::WebUIDataSource* html_source) { {"close", IDS_CLOSE}, {"networkButtonConnect", IDS_SETTINGS_INTERNET_BUTTON_CONNECT}, {"networkButtonDisconnect", IDS_SETTINGS_INTERNET_BUTTON_DISCONNECT}, + {"networkButtonForget", IDS_SETTINGS_INTERNET_BUTTON_FORGET}, {"networkIPAddress", IDS_SETTINGS_INTERNET_NETWORK_IP_ADDRESS}, {"networkSectionNetwork", IDS_SETTINGS_INTERNET_NETWORK_SECTION_NETWORK}, {"networkSectionProxy", IDS_SETTINGS_INTERNET_NETWORK_SECTION_PROXY}, @@ -160,8 +162,9 @@ InternetDetailDialogUI::InternetDetailDialogUI(content::WebUI* web_ui) InternetDetailDialogUI::~InternetDetailDialogUI() {} void InternetDetailDialogUI::BindCrosNetworkConfig( - chromeos::network_config::mojom::CrosNetworkConfigRequest request) { - ash::GetNetworkConfigService(std::move(request)); + mojo::PendingReceiver + receiver) { + ash::GetNetworkConfigService(std::move(receiver)); } } // namespace chromeos diff --git a/chromium/chrome/browser/ui/webui/chromeos/internet_detail_dialog.h b/chromium/chrome/browser/ui/webui/chromeos/internet_detail_dialog.h index eec6c4d9a98..fe91980b879 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/internet_detail_dialog.h +++ b/chromium/chrome/browser/ui/webui/chromeos/internet_detail_dialog.h @@ -7,7 +7,8 @@ #include "base/macros.h" #include "chrome/browser/ui/webui/chromeos/system_web_dialog_delegate.h" -#include "chromeos/services/network_config/public/mojom/cros_network_config.mojom.h" // nogncheck +#include "chromeos/services/network_config/public/mojom/cros_network_config.mojom-forward.h" // nogncheck +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "ui/web_dialogs/web_dialog_ui.h" namespace chromeos { @@ -51,7 +52,8 @@ class InternetDetailDialogUI : public ui::MojoWebDialogUI { private: void BindCrosNetworkConfig( - chromeos::network_config::mojom::CrosNetworkConfigRequest request); + mojo::PendingReceiver + receiver); DISALLOW_COPY_AND_ASSIGN(InternetDetailDialogUI); }; diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/OWNERS b/chromium/chrome/browser/ui/webui/chromeos/login/OWNERS index a18954dc038..5dbb46f035d 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/OWNERS +++ b/chromium/chrome/browser/ui/webui/chromeos/login/OWNERS @@ -1,10 +1,10 @@ -# (in PST) +# primary (in CET) +antrim@chromium.org +rsorokin@chromium.org + +# secondary (in PST) achuith@chromium.org alemate@chromium.org tbarzic@chromium.org -# (in CET) -antrim@chromium.org -per-file *active_directory*=rsorokin@chromium.org - # COMPONENT: UI>Shell>OOBE 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 f53cede13a4..6979bd6f555 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 @@ -56,28 +56,25 @@ AssistantOptInFlowScreenHandler::AssistantOptInFlowScreenHandler( AssistantOptInFlowScreenHandler::~AssistantOptInFlowScreenHandler() { if (client_binding_) StopSpeakerIdEnrollment(); - if (arc::VoiceInteractionControllerClient::Get()) { - arc::VoiceInteractionControllerClient::Get()->RemoveObserver(this); - } - if (screen_) { + if (ash::AssistantState::Get()) + ash::AssistantState::Get()->RemoveObserver(this); + if (screen_) screen_->OnViewDestroyed(this); - } } void AssistantOptInFlowScreenHandler::DeclareLocalizedValues( ::login::LocalizedValuesBuilder* builder) { builder->Add("locale", g_browser_process->GetApplicationLocale()); - builder->Add("assistantLogo", IDS_VOICE_INTERACTION_LOGO); - builder->Add("assistantOptinLoading", - IDS_VOICE_INTERACTION_VALUE_PROP_LOADING); + builder->Add("assistantLogo", IDS_ASSISTANT_LOGO); + builder->Add("assistantOptinLoading", IDS_ASSISTANT_VALUE_PROP_LOADING); builder->Add("assistantOptinLoadErrorTitle", - IDS_VOICE_INTERACTION_VALUE_PROP_LOAD_ERROR_TITLE); + IDS_ASSISTANT_VALUE_PROP_LOAD_ERROR_TITLE); builder->Add("assistantOptinLoadErrorMessage", - IDS_VOICE_INTERACTION_VALUE_PROP_LOAD_ERROR_MESSAGE); + IDS_ASSISTANT_VALUE_PROP_LOAD_ERROR_MESSAGE); builder->Add("assistantOptinSkipButton", - IDS_VOICE_INTERACTION_VALUE_PROP_SKIP_BUTTON); + IDS_ASSISTANT_VALUE_PROP_SKIP_BUTTON); builder->Add("assistantOptinRetryButton", - IDS_VOICE_INTERACTION_VALUE_PROP_RETRY_BUTTON); + IDS_ASSISTANT_VALUE_PROP_RETRY_BUTTON); builder->Add("assistantVoiceMatchTitle", IDS_ASSISTANT_VOICE_MATCH_TITLE); builder->Add("assistantVoiceMatchMessage", IDS_ASSISTANT_VOICE_MATCH_MESSAGE); builder->Add("assistantVoiceMatchNoDspMessage", @@ -149,6 +146,14 @@ void AssistantOptInFlowScreenHandler::RegisterMessages() { &AssistantOptInFlowScreenHandler::HandleFlowInitialized); } +void AssistantOptInFlowScreenHandler::GetAdditionalParameters( + base::DictionaryValue* dict) { + dict->SetBoolean("hotwordDspAvailable", chromeos::IsHotwordDspAvailable()); + dict->SetBoolean("voiceMatchDisabled", + chromeos::assistant::features::IsVoiceMatchDisabled()); + BaseScreenHandler::GetAdditionalParameters(dict); +} + void AssistantOptInFlowScreenHandler::Bind(AssistantOptInFlowScreen* screen) { BaseScreenHandler::SetBaseScreen(screen); screen_ = screen; @@ -218,9 +223,9 @@ void AssistantOptInFlowScreenHandler::SetupAssistantConnection() { // Make sure enable Assistant service since we need it during the flow. prefs->SetBoolean(chromeos::assistant::prefs::kAssistantEnabled, true); - if (arc::VoiceInteractionControllerClient::Get()->voice_interaction_state() == - ash::mojom::VoiceInteractionState::NOT_READY) { - arc::VoiceInteractionControllerClient::Get()->AddObserver(this); + if (ash::AssistantState::Get()->assistant_state() == + ash::mojom::AssistantState::NOT_READY) { + ash::AssistantState::Get()->AddObserver(this); } else { BindAssistantSettingsManager(); } @@ -272,11 +277,11 @@ void AssistantOptInFlowScreenHandler::OnDialogClosed() { } } -void AssistantOptInFlowScreenHandler::OnStateChanged( - ash::mojom::VoiceInteractionState state) { - if (state != ash::mojom::VoiceInteractionState::NOT_READY) { +void AssistantOptInFlowScreenHandler::OnAssistantStatusChanged( + ash::mojom::AssistantState state) { + if (state != ash::mojom::AssistantState::NOT_READY) { BindAssistantSettingsManager(); - arc::VoiceInteractionControllerClient::Get()->RemoveObserver(this); + ash::AssistantState::Get()->RemoveObserver(this); } } @@ -326,6 +331,14 @@ void AssistantOptInFlowScreenHandler::OnGetSettingsResponse( UMA_HISTOGRAM_TIMES("Assistant.OptInFlow.GetSettingsRequestTime", time_since_request_sent); + if (ProfileManager::GetActiveUserProfile()->GetPrefs()->GetBoolean( + assistant::prefs::kAssistantDisabledByPolicy)) { + DVLOG(1) << "Assistant is disabled by domain policy. Skip Assistant " + "opt-in flow."; + HandleFlowFinished(); + return; + } + assistant::SettingsUi settings_ui; if (!settings_ui.ParseFromString(settings)) { LOG(ERROR) << "Failed to parse get settings response."; 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 9810c088aea..a04c19835e1 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 @@ -9,8 +9,8 @@ #include #include "ash/public/cpp/assistant/assistant_setup.h" +#include "ash/public/cpp/assistant/assistant_state.h" #include "base/macros.h" -#include "chrome/browser/chromeos/arc/voice_interaction/voice_interaction_controller_client.h" #include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h" #include "chromeos/services/assistant/public/mojom/settings.mojom.h" #include "mojo/public/cpp/bindings/binding.h" @@ -43,7 +43,7 @@ class AssistantOptInFlowScreenView { class AssistantOptInFlowScreenHandler : public BaseScreenHandler, public AssistantOptInFlowScreenView, - public arc::VoiceInteractionControllerClient::Observer, + public ash::AssistantStateObserver, assistant::mojom::SpeakerIdEnrollmentClient { public: using TView = AssistantOptInFlowScreenView; @@ -63,6 +63,7 @@ class AssistantOptInFlowScreenHandler void DeclareLocalizedValues( ::login::LocalizedValuesBuilder* builder) override; void RegisterMessages() override; + void GetAdditionalParameters(base::DictionaryValue* dict) override; // AssistantOptInFlowScreenView: void Bind(AssistantOptInFlowScreen* screen) override; @@ -93,8 +94,8 @@ class AssistantOptInFlowScreenHandler // BaseScreenHandler: void Initialize() override; - // arc::VoiceInteractionControllerClient::Observer overrides - void OnStateChanged(ash::mojom::VoiceInteractionState state) override; + // ash::AssistantStateObserver: + void OnAssistantStatusChanged(ash::mojom::AssistantState state) override; // Connect to assistant settings manager. void BindAssistantSettingsManager(); 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 5474107730b..63c4d1cc21c 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 @@ -8,6 +8,7 @@ #include "ash/public/cpp/ash_features.h" #include "ash/public/cpp/event_rewriter_controller.h" +#include "ash/public/cpp/shelf_config.h" #include "ash/public/cpp/tablet_mode.h" #include "ash/public/mojom/constants.mojom.h" #include "ash/shell.h" @@ -16,6 +17,7 @@ #include "base/strings/utf_string_conversions.h" #include "base/values.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/browser_process_platform_part.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" @@ -44,6 +46,7 @@ #include "chrome/grit/chromium_strings.h" #include "chrome/grit/generated_resources.h" #include "chromeos/constants/chromeos_constants.h" +#include "chromeos/constants/chromeos_features.h" #include "chromeos/constants/chromeos_switches.h" #include "components/login/base_screen_handler_utils.h" #include "components/login/localized_values_builder.h" @@ -101,8 +104,8 @@ CoreOobeHandler::CoreOobeHandler(JSCallsContainer* js_calls_container) // |connector| may be null in tests. auto* connector = content::GetSystemConnector(); if (connector) { - connector->BindInterface(ash::mojom::kServiceName, - &cros_display_config_ptr_); + connector->Connect(ash::mojom::kServiceName, + cros_display_config_.BindNewPipeAndPassReceiver()); } OobeConfiguration::Get()->AddAndFireObserver(this); } @@ -305,6 +308,10 @@ void CoreOobeHandler::SetClientAreaSize(int width, int height) { CallJS("cr.ui.Oobe.setClientAreaSize", width, height); } +void CoreOobeHandler::SetShelfHeight(int height) { + CallJS("cr.ui.Oobe.setShelfHeight", height); +} + void CoreOobeHandler::HandleInitialized() { GetOobeUI()->InitializeHandlers(); AllowJavascript(); @@ -546,6 +553,26 @@ void CoreOobeHandler::UpdateClientAreaSize() { const gfx::Size size = display::Screen::GetScreen()->GetPrimaryDisplay().size(); SetClientAreaSize(size.width(), size.height()); + SetShelfHeight(ash::ShelfConfig::Get()->shelf_size()); +} + +void CoreOobeHandler::SetDialogPaddingMode( + CoreOobeView::DialogPaddingMode mode) { + std::string padding; + switch (mode) { + case CoreOobeView::DialogPaddingMode::MODE_AUTO: + padding = "auto"; + break; + case CoreOobeView::DialogPaddingMode::MODE_NARROW: + padding = "narrow"; + break; + case CoreOobeView::DialogPaddingMode::MODE_WIDE: + padding = "wide"; + break; + default: + NOTREACHED(); + } + CallJS("cr.ui.Oobe.setDialogPaddingMode", padding); } void CoreOobeHandler::OnOobeConfigurationChanged() { @@ -586,7 +613,7 @@ void CoreOobeHandler::HandleGetPrimaryDisplayNameForTesting( const base::Value* callback_id; CHECK(args->Get(0, &callback_id)); - cros_display_config_ptr_->GetDisplayUnitInfoList( + cros_display_config_->GetDisplayUnitInfoList( false /* single_unified */, base::BindOnce(&CoreOobeHandler::GetPrimaryDisplayNameCallback, weak_ptr_factory_.GetWeakPtr(), callback_id->Clone())); 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 8e30d2b5363..0687932d4c3 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 @@ -23,6 +23,7 @@ #include "chrome/browser/chromeos/login/version_info_updater.h" #include "chrome/browser/chromeos/tpm_firmware_update.h" #include "chrome/browser/ui/webui/chromeos/login/base_webui_handler.h" +#include "mojo/public/cpp/bindings/remote.h" #include "ui/events/event_source.h" namespace base { @@ -38,6 +39,17 @@ namespace chromeos { class CoreOobeView { public: + // Enum that specifies how inner padding of OOBE dialog should be calculated. + enum class DialogPaddingMode { + // Oobe dialog is displayed full screen, padding will be calculated + // via css depending on media size. + MODE_AUTO, + // Oobe dialog have enough free space around and should use wide padding. + MODE_WIDE, + // Oobe dialog is positioned in limited space and should use narrow padding. + MODE_NARROW, + }; + virtual ~CoreOobeView() {} virtual void ShowSignInError(int login_attempts, @@ -58,6 +70,8 @@ class CoreOobeView { virtual void ReloadEulaContent(const base::DictionaryValue& dictionary) = 0; virtual void SetVirtualKeyboardShown(bool shown) = 0; virtual void SetClientAreaSize(int width, int height) = 0; + virtual void SetShelfHeight(int height) = 0; + virtual void SetDialogPaddingMode(DialogPaddingMode mode) = 0; virtual void ShowDeviceResetScreen() = 0; virtual void ShowEnableDebuggingScreen() = 0; virtual void InitDemoModeDetection() = 0; @@ -137,6 +151,8 @@ class CoreOobeHandler : public BaseWebUIHandler, void ReloadEulaContent(const base::DictionaryValue& dictionary) override; void SetVirtualKeyboardShown(bool displayed) override; void SetClientAreaSize(int width, int height) override; + void SetShelfHeight(int height) override; + void SetDialogPaddingMode(CoreOobeView::DialogPaddingMode mode) override; void ShowDeviceResetScreen() override; void ShowEnableDebuggingScreen() override; void ShowActiveDirectoryPasswordChangeScreen( @@ -222,7 +238,7 @@ class CoreOobeHandler : public BaseWebUIHandler, DemoModeDetector demo_mode_detector_; - ash::mojom::CrosDisplayConfigControllerPtr cros_display_config_ptr_; + mojo::Remote cros_display_config_; base::WeakPtrFactory weak_ptr_factory_{this}; diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/enable_debugging_screen_handler.cc b/chromium/chrome/browser/ui/webui/chromeos/login/enable_debugging_screen_handler.cc index 35e15951f2a..49edf06dc4d 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/enable_debugging_screen_handler.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/login/enable_debugging_screen_handler.cc @@ -21,7 +21,7 @@ #include "chromeos/constants/chromeos_switches.h" #include "chromeos/dbus/cryptohome/cryptohome_client.h" #include "chromeos/dbus/dbus_thread_manager.h" -#include "chromeos/dbus/debug_daemon_client.h" +#include "chromeos/dbus/debug_daemon/debug_daemon_client.h" #include "chromeos/dbus/power/power_manager_client.h" #include "components/login/localized_values_builder.h" #include "components/prefs/pref_registry_simple.h" 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 d0fa17ef808..6d632c707cf 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 @@ -42,6 +42,7 @@ #include "google_apis/gaia/gaia_auth_util.h" #include "google_apis/gaia/gaia_urls.h" #include "google_apis/gaia/google_service_auth_error.h" +#include "services/network/public/mojom/cookie_manager.mojom.h" #include "ui/base/l10n/l10n_util.h" #include "ui/chromeos/devicetype_utils.h" @@ -154,7 +155,7 @@ base::ListValue GetEncryptionTypesList() { enc_option.SetKey("value", base::Value(enc_types.id)); enc_option.SetKey("selected", base::Value(default_types == enc_types.encryption_types)); - encryption_list.GetList().emplace_back(std::move(enc_option)); + encryption_list.Append(std::move(enc_option)); } return encryption_list; } @@ -649,7 +650,7 @@ void EnrollmentScreenHandler::OnAdConfigurationUnlocked( custom.SetKey( "name", base::Value(l10n_util::GetStringUTF8(IDS_AD_CONFIG_SELECTION_CUSTOM))); - options->GetList().push_back(std::move(custom)); + options->Append(std::move(custom)); active_directory_join_type_ = ActiveDirectoryDomainJoinType::USING_CONFIGURATION; CallJS("login.OAuthEnrollmentScreen.setAdJoinConfiguration", *options); @@ -788,11 +789,10 @@ void EnrollmentScreenHandler::HandleCompleteLogin(const std::string& user) { Profile::FromWebUI(web_ui())); content::StoragePartition* partition = signin_partition_manager->GetCurrentStoragePartition(); - net::CookieOptions cookie_options; - cookie_options.set_include_httponly(); partition->GetCookieManagerForBrowserProcess()->GetCookieList( - GaiaUrls::GetInstance()->gaia_url(), cookie_options, + GaiaUrls::GetInstance()->gaia_url(), + net::CookieOptions::MakeAllInclusive(), base::BindOnce(&EnrollmentScreenHandler::OnGetCookiesForCompleteLogin, weak_ptr_factory_.GetWeakPtr(), user)); } diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/error_screen_handler.cc b/chromium/chrome/browser/ui/webui/chromeos/login/error_screen_handler.cc index e15b2103638..bb367ef3de4 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/error_screen_handler.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/login/error_screen_handler.cc @@ -80,6 +80,10 @@ void ErrorScreenHandler::SetShowConnectingIndicator(bool value) { CallJS("login.ErrorMessageScreen.showConnectingIndicator", value); } +void ErrorScreenHandler::SetIsPersistentError(bool is_persistent) { + CallJS("login.ErrorMessageScreen.setIsPersistentError", is_persistent); +} + void ErrorScreenHandler::SetUIState(NetworkError::UIState ui_state) { CallJS("login.ErrorMessageScreen.setUIState", static_cast(ui_state)); } diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/error_screen_handler.h b/chromium/chrome/browser/ui/webui/chromeos/login/error_screen_handler.h index 67a26958e75..acc425a0bf8 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/error_screen_handler.h +++ b/chromium/chrome/browser/ui/webui/chromeos/login/error_screen_handler.h @@ -51,6 +51,9 @@ class ErrorScreenView { // Updates visibility of the label indicating we're reconnecting. virtual void SetShowConnectingIndicator(bool value) = 0; + // Makes error persistent (e.g. non-closable). + virtual void SetIsPersistentError(bool is_persistent) = 0; + // Sets current UI state of the screen. virtual void SetUIState(NetworkError::UIState ui_state) = 0; }; @@ -75,6 +78,7 @@ class ErrorScreenHandler : public BaseScreenHandler, public ErrorScreenView { void SetGuestSigninAllowed(bool value) override; void SetOfflineSigninAllowed(bool value) override; void SetShowConnectingIndicator(bool value) override; + void SetIsPersistentError(bool is_persistent) override; void SetUIState(NetworkError::UIState ui_state) override; // WebUIMessageHandler: diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/fake_update_required_screen_handler.cc b/chromium/chrome/browser/ui/webui/chromeos/login/fake_update_required_screen_handler.cc new file mode 100644 index 00000000000..ffbed8d3645 --- /dev/null +++ b/chromium/chrome/browser/ui/webui/chromeos/login/fake_update_required_screen_handler.cc @@ -0,0 +1,14 @@ +// Copyright 2019 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/fake_update_required_screen_handler.h" + +namespace chromeos { + +void FakeUpdateRequiredScreenHandler::SetUIState( + UpdateRequiredView::UIState ui_state) { + ui_state_ = ui_state; +} + +} // namespace chromeos diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/fake_update_required_screen_handler.h b/chromium/chrome/browser/ui/webui/chromeos/login/fake_update_required_screen_handler.h new file mode 100644 index 00000000000..7a36649adf7 --- /dev/null +++ b/chromium/chrome/browser/ui/webui/chromeos/login/fake_update_required_screen_handler.h @@ -0,0 +1,48 @@ +// Copyright 2019 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_FAKE_UPDATE_REQUIRED_SCREEN_HANDLER_H_ +#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_FAKE_UPDATE_REQUIRED_SCREEN_HANDLER_H_ + +#include + +#include "base/compiler_specific.h" +#include "base/macros.h" +#include "chrome/browser/chromeos/login/screens/update_required_screen.h" +#include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h" +#include "chrome/browser/ui/webui/chromeos/login/update_required_screen_handler.h" + +namespace chromeos { + +class UpdateRequiredScreen; + +class FakeUpdateRequiredScreenHandler : public UpdateRequiredView { + public: + FakeUpdateRequiredScreenHandler() = default; + ~FakeUpdateRequiredScreenHandler() override {} + + UpdateRequiredView::UIState ui_state() { return ui_state_; } + + private: + void Show() override {} + void Hide() override {} + void Bind(UpdateRequiredScreen* screen) override {} + void Unbind() override {} + + void SetIsConnected(bool connected) override {} + void SetUpdateProgressUnavailable(bool unavailable) override {} + void SetUpdateProgressValue(int progress) override {} + void SetUpdateProgressMessage(const base::string16& message) override {} + void SetEstimatedTimeLeftVisible(bool visible) override {} + void SetEstimatedTimeLeft(int seconds_left) override {} + void SetUIState(UpdateRequiredView::UIState ui_state) override; + + UpdateRequiredView::UIState ui_state_; + + DISALLOW_COPY_AND_ASSIGN(FakeUpdateRequiredScreenHandler); +}; + +} // namespace chromeos + +#endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_FAKE_UPDATE_REQUIRED_SCREEN_HANDLER_H_ 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 bf674ae60fb..4d4380b17b7 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 @@ -55,11 +55,9 @@ FingerprintSetupScreenHandler::FingerprintSetupScreenHandler( : BaseScreenHandler(kScreenId, js_calls_container) { set_user_acted_method_path("login.FingerprintSetupScreen.userActed"); - content::GetSystemConnector()->BindInterface(device::mojom::kServiceName, - &fp_service_); - device::mojom::FingerprintObserverPtr observer; - binding_.Bind(mojo::MakeRequest(&observer)); - fp_service_->AddFingerprintObserver(std::move(observer)); + content::GetSystemConnector()->Connect( + device::mojom::kServiceName, fp_service_.BindNewPipeAndPassReceiver()); + fp_service_->AddFingerprintObserver(receiver_.BindNewPipeAndPassRemote()); } FingerprintSetupScreenHandler::~FingerprintSetupScreenHandler() = default; diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/fingerprint_setup_screen_handler.h b/chromium/chrome/browser/ui/webui/chromeos/login/fingerprint_setup_screen_handler.h index 8eef6b9764e..8e752278477 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/fingerprint_setup_screen_handler.h +++ b/chromium/chrome/browser/ui/webui/chromeos/login/fingerprint_setup_screen_handler.h @@ -7,7 +7,8 @@ #include "base/macros.h" #include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/remote.h" #include "services/device/public/mojom/fingerprint.mojom.h" namespace chromeos { @@ -75,8 +76,8 @@ class FingerprintSetupScreenHandler FingerprintSetupScreen* screen_ = nullptr; - device::mojom::FingerprintPtr fp_service_; - mojo::Binding binding_{this}; + mojo::Remote fp_service_; + mojo::Receiver receiver_{this}; int enrolled_finger_count_ = 0; bool enroll_session_started_ = false; 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 ee389c1f193..da7467ea754 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 @@ -17,6 +17,7 @@ #include "base/json/json_reader.h" #include "base/logging.h" #include "base/memory/ref_counted.h" +#include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_macros.h" #include "base/optional.h" #include "base/stl_util.h" @@ -26,6 +27,7 @@ #include "base/task/post_task.h" #include "base/values.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/browser_process_platform_part.h" #include "chrome/browser/chromeos/authpolicy/authpolicy_helper.h" #include "chrome/browser/chromeos/certificate_provider/certificate_provider_service.h" #include "chrome/browser/chromeos/certificate_provider/certificate_provider_service_factory.h" @@ -33,6 +35,7 @@ #include "chrome/browser/chromeos/language_preferences.h" #include "chrome/browser/chromeos/login/lock_screen_utils.h" #include "chrome/browser/chromeos/login/reauth_stats.h" +#include "chrome/browser/chromeos/login/saml/public_saml_url_fetcher.h" #include "chrome/browser/chromeos/login/screens/network_error.h" #include "chrome/browser/chromeos/login/signin_partition_manager.h" #include "chrome/browser/chromeos/login/ui/login_display_host.h" @@ -108,6 +111,28 @@ const char kEndpointGen[] = "1.0"; const char kOAUTHCodeCookie[] = "oauth_code"; const char kGAPSCookie[] = "GAPS"; +// Must be kept consistent with ChromeOSSamlApiUsed in enums.xml +// These values are persisted to logs. Entries should not be renumbered and +// numeric values should never be reused +enum class ChromeOSSamlApiUsed { + kNotSamlLogin = 0, + kSamlApiUsed = 1, + kSamlApiNotUsed = 2, + kMaxValue = kSamlApiNotUsed, +}; + +void RecordAPILogin(bool is_third_party_idp, bool is_api_used) { + ChromeOSSamlApiUsed login_type; + if (!is_third_party_idp) { + login_type = ChromeOSSamlApiUsed::kNotSamlLogin; + } else if (is_api_used) { + login_type = ChromeOSSamlApiUsed::kSamlApiUsed; + } else { + login_type = ChromeOSSamlApiUsed::kSamlApiNotUsed; + } + base::UmaHistogramEnumeration("ChromeOS.SAML.APILogin", login_type); +} + policy::DeviceMode GetDeviceMode() { policy::BrowserPolicyConnectorChromeOS* connector = g_browser_process->platform_part()->browser_policy_connector_chromeos(); @@ -365,10 +390,29 @@ void GaiaScreenHandler::LoadGaia(const GaiaContext& context) { login::SigninPartitionManager* signin_partition_manager = login::SigninPartitionManager::Factory::GetForBrowserContext( Profile::FromWebUI(web_ui())); - signin_partition_manager->StartSigninSession( - web_ui()->GetWebContents(), + + auto partition_call = base::BindOnce( + &login::SigninPartitionManager::StartSigninSession, + base::Unretained(signin_partition_manager), web_ui()->GetWebContents(), base::BindOnce(&GaiaScreenHandler::LoadGaiaWithPartition, weak_factory_.GetWeakPtr(), context)); + + if (!context.email.empty()) { + const AccountId account_id = GetAccountId( + context.email, std::string() /* id */, AccountType::UNKNOWN); + const user_manager::User* const user = + user_manager::UserManager::Get()->FindUser(account_id); + + if (user && user->using_saml() && + user->GetType() == user_manager::USER_TYPE_PUBLIC_ACCOUNT) { + public_saml_url_fetcher_ = + std::make_unique(account_id); + public_saml_url_fetcher_->Fetch(std::move(partition_call)); + return; + } + } + public_saml_url_fetcher_.reset(); + std::move(partition_call).Run(); } void GaiaScreenHandler::LoadGaiaWithPartition( @@ -399,11 +443,7 @@ void GaiaScreenHandler::LoadGaiaWithPartition( GaiaUrls::GetInstance()->gaia_url(), gaps_cookie_value, base::Time::Now(), base::nullopt /* server_time */)); - net::CookieOptions options; - options.set_include_httponly(); - // Permit it to set a SameSite cookie if it wants to. - options.set_same_site_cookie_context( - net::CookieOptions::SameSiteCookieContext::SAME_SITE_STRICT); + const net::CookieOptions options = net::CookieOptions::MakeAllInclusive(); partition->GetCookieManagerForBrowserProcess()->SetCanonicalCookie( *cc.get(), "https", options, std::move(callback)); } @@ -444,30 +484,6 @@ void GaiaScreenHandler::LoadGaiaWithPartitionAndVersionAndConsent( screen_mode_ = GetGaiaScreenMode(context.email, context.use_offline); params.SetInteger("screenMode", screen_mode_); - if (!context.email.empty()) { - const AccountId account_id = GetAccountId( - context.email, std::string() /* id */, AccountType::UNKNOWN); - const user_manager::User* const user = - user_manager::UserManager::Get()->FindUser(account_id); - if (user && user->using_saml() && - user->GetType() == user_manager::USER_TYPE_PUBLIC_ACCOUNT && - base::CommandLine::ForCurrentProcess()->HasSwitch( - switches::kPublicAccountsSamlUrl)) { - std::string saml_url = - base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( - switches::kPublicAccountsSamlUrl); - params.SetBoolean("startsOnSamlPage", true); - params.SetString("frameUrl", saml_url); - params.SetString("email", account_id.GetUserEmail()); - CHECK(base::CommandLine::ForCurrentProcess()->HasSwitch( - switches::kPublicAccountsSamlAclUrl)); - std::string saml_acl_url = - base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( - switches::kPublicAccountsSamlAclUrl); - params.SetString("samlAclUrl", saml_acl_url); - } - } - if (screen_mode_ == GAIA_SCREEN_MODE_AD && !authpolicy_login_helper_) authpolicy_login_helper_ = std::make_unique(); @@ -538,6 +554,26 @@ void GaiaScreenHandler::LoadGaiaWithPartitionAndVersionAndConsent( ExtractSamlPasswordAttributesEnabled()); params.SetBoolean("enableGaiaActionButtons", GaiaActionButtonsEnabled()); + if (public_saml_url_fetcher_) { + params.SetBoolean("startsOnSamlPage", true); + DCHECK(base::CommandLine::ForCurrentProcess()->HasSwitch( + switches::kPublicAccountsSamlAclUrl)); + std::string saml_acl_url = + base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( + switches::kPublicAccountsSamlAclUrl); + params.SetString("samlAclUrl", saml_acl_url); + if (public_saml_url_fetcher_->FetchSucceeded()) { + params.SetString("frameUrl", public_saml_url_fetcher_->GetRedirectUrl()); + } else { + // TODO: make the string localized. + std::string msg = "Failed to fetch the SAML redirect URL from the server"; + core_oobe_view_->ShowSignInError( + 0, msg, std::string(), HelpAppLauncher::HELP_CANT_ACCESS_ACCOUNT); + return; + } + } + public_saml_url_fetcher_.reset(); + frame_state_ = FRAME_STATE_LOADING; CallJS("login.GaiaSigninScreen.loadAuthExtension", params); } @@ -676,8 +712,6 @@ void GaiaScreenHandler::RegisterMessages() { AddRawCallback("showAddUser", &GaiaScreenHandler::HandleShowAddUser); AddCallback("getIsSamlUserPasswordless", &GaiaScreenHandler::HandleGetIsSamlUserPasswordless); - AddCallback("updateOobeDialogSize", - &GaiaScreenHandler::HandleUpdateOobeDialogSize); AddCallback("hideOobeDialog", &GaiaScreenHandler::HandleHideOobeDialog); AddCallback("updateSigninUIState", &GaiaScreenHandler::HandleUpdateSigninUIState); @@ -732,6 +766,14 @@ void GaiaScreenHandler::HandleWebviewLoadAborted(int error_code) { << net::ErrorToShortString(error_code); return; } + if (error_code == net::ERR_TIMED_OUT && + is_security_token_pin_dialog_running()) { + // Timeout errors are expected when the security token PIN is not entered by + // the user on time. In that case, return the user back to the first sign-in + // step instead of showing the network error screen. + ReloadGaia(/*force_reload=*/true); + return; + } frame_error_ = static_cast(error_code); LOG(ERROR) << "Gaia webview error: " << net::ErrorToShortString(error_code); @@ -848,9 +890,8 @@ void GaiaScreenHandler::HandleCompleteAuthentication( if (!partition) return; - net::CookieOptions cookie_options; - cookie_options.set_include_httponly(); - + const net::CookieOptions cookie_options = + net::CookieOptions::MakeAllInclusive(); partition->GetCookieManagerForBrowserProcess()->GetCookieList( GaiaUrls::GetInstance()->gaia_url(), cookie_options, base::BindOnce(&GaiaScreenHandler::OnGetCookiesForCompleteAuthentication, @@ -911,15 +952,17 @@ void GaiaScreenHandler::HandleCompleteLogin(const std::string& gaia_id, SamlPasswordAttributes()); } -void GaiaScreenHandler::HandleUsingSAMLAPI() { - SetSAMLPrincipalsAPIUsed(true); +void GaiaScreenHandler::HandleUsingSAMLAPI(bool is_third_party_idp) { + SetSAMLPrincipalsAPIUsed(is_third_party_idp, /*is_api_used=*/true); } void GaiaScreenHandler::HandleScrapedPasswordCount(int password_count) { - SetSAMLPrincipalsAPIUsed(false); + // We are handling scraped passwords here so this is SAML flow without + // Chrome Credentials Passing API + SetSAMLPrincipalsAPIUsed(/*is_third_party_idp=*/true, /*is_api_used=*/false); // Use a histogram that has 11 buckets, one for each of the values in [0, 9] // and an overflow bucket at the end. - UMA_HISTOGRAM_ENUMERATION("ChromeOS.SAML.Scraping.PasswordCount", + UMA_HISTOGRAM_ENUMERATION("ChromeOS.SAML.Scraping.PasswordCountAll", std::min(password_count, 10), 11); if (password_count == 0) HandleScrapedPasswordVerificationFailed(); @@ -954,11 +997,6 @@ void GaiaScreenHandler::HandleGaiaUIReady() { } } -void GaiaScreenHandler::HandleUpdateOobeDialogSize(int width, int height) { - if (LoginDisplayHost::default_host()) - LoginDisplayHost::default_host()->UpdateOobeDialogSize(width, height); -} - void GaiaScreenHandler::HandleHideOobeDialog() { if (LoginDisplayHost::default_host()) LoginDisplayHost::default_host()->HideOobeDialog(); @@ -1028,7 +1066,7 @@ void GaiaScreenHandler::HandleSecurityTokenPinEntered( DCHECK(!security_token_pin_entered_callback_ || security_token_pin_dialog_closed_callback_); - if (!security_token_pin_dialog_closed_callback_) { + if (!is_security_token_pin_dialog_running()) { // The PIN request has already been canceled on the handler side. return; } @@ -1178,9 +1216,12 @@ void GaiaScreenHandler::SubmitLoginFormForTest() { // if they are cleared here. } -void GaiaScreenHandler::SetSAMLPrincipalsAPIUsed(bool api_used) { - using_saml_api_ = api_used; - UMA_HISTOGRAM_BOOLEAN("ChromeOS.SAML.APIUsed", api_used); +void GaiaScreenHandler::SetSAMLPrincipalsAPIUsed(bool is_third_party_idp, + bool is_api_used) { + using_saml_api_ = is_api_used; + // This correctly records the standard GAIA login and SAML flow + // with Chrome Credentials Passing API used/not used + RecordAPILogin(is_third_party_idp, is_api_used); } void GaiaScreenHandler::ShowGaiaAsync(const AccountId& account_id) { diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h b/chromium/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h index 9cba09d99ff..a1e7df1b651 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h +++ b/chromium/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h @@ -39,6 +39,7 @@ class Key; class SamlPasswordAttributes; class SigninScreenHandler; class UserContext; +class PublicSamlUrlFetcher; class GaiaView { public: @@ -212,7 +213,9 @@ class GaiaScreenHandler : public BaseScreenHandler, void HandleCancelActiveDirectoryAuth(); - void HandleUsingSAMLAPI(); + // Handles SAML/GAIA login flow metrics + // is_third_party_idp == false means GAIA-based authentication + void HandleUsingSAMLAPI(bool is_third_party_idp); void HandleScrapedPasswordCount(int password_count); void HandleScrapedPasswordVerificationFailed(); @@ -221,7 +224,6 @@ class GaiaScreenHandler : public BaseScreenHandler, void HandleIdentifierEntered(const std::string& account_identifier); void HandleAuthExtensionLoaded(); - void HandleUpdateOobeDialogSize(int width, int height); void HandleHideOobeDialog(); void HandleShowAddUser(const base::ListValue* args); void HandleGetIsSamlUserPasswordless(const std::string& callback_id, @@ -271,8 +273,8 @@ class GaiaScreenHandler : public BaseScreenHandler, void SubmitLoginFormForTest(); // Updates the member variable and UMA histogram indicating whether the - // principals API was used during SAML login. - void SetSAMLPrincipalsAPIUsed(bool api_used); + // Chrome Credentials Passing API was used during SAML login. + void SetSAMLPrincipalsAPIUsed(bool is_third_party_idp, bool is_api_used); // Cancels the request to show the sign-in screen while the asynchronous // clean-up process that precedes the screen showing is in progress. @@ -326,6 +328,10 @@ class GaiaScreenHandler : public BaseScreenHandler, UserContext* user_context, std::string* error_message); + bool is_security_token_pin_dialog_running() const { + return !security_token_pin_dialog_closed_callback_.is_null(); + } + // Current state of Gaia frame. FrameState frame_state_ = FRAME_STATE_UNKNOWN; @@ -365,12 +371,9 @@ class GaiaScreenHandler : public BaseScreenHandler, // The active network at the moment when Gaia page was preloaded. std::string gaia_silent_load_network_; - // If the user authenticated via SAML, this indicates whether the principals - // API was used. - // TODO(emaxx): This is also currently set when the user authenticated via - // Gaia, since Gaia uses the same API for passing the password to Chrome. - // Either fix this behavior, or change the naming and the comments to reflect - // it. + // This flag is set when user authenticated using the Chrome Credentials + // Passing API (the login could happen via SAML or, with the current + // server-side implementation, via Gaia). bool using_saml_api_ = false; // Test credentials. @@ -414,6 +417,8 @@ class GaiaScreenHandler : public BaseScreenHandler, std::unique_ptr extension_provided_client_cert_usage_observer_; + std::unique_ptr public_saml_url_fetcher_; + // State of the security token PIN dialogs: // Whether this instance is currently registered as a host for showing the diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/network_state_informer.cc b/chromium/chrome/browser/ui/webui/chromeos/login/network_state_informer.cc index e990f0f0868..d26b46a9c28 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/network_state_informer.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/login/network_state_informer.cc @@ -7,6 +7,7 @@ #include "base/bind.h" #include "base/logging.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/browser_process_platform_part.h" #include "chrome/browser/chromeos/login/screens/network_error.h" #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" #include "chromeos/network/network_state.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 0b45e2d2f8f..818c818751e 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 @@ -18,7 +18,6 @@ #include "services/service_manager/public/cpp/connector.h" #include "ui/display/display.h" #include "ui/display/screen.h" -#include "ui/events/devices/device_data_manager.h" #include "ui/events/devices/touchscreen_device.h" using content::BrowserThread; @@ -42,12 +41,12 @@ bool IsWhiteListedVendorId(uint16_t vendor_id) { } // namespace -OobeDisplayChooser::OobeDisplayChooser() : scoped_observer_(this) { +OobeDisplayChooser::OobeDisplayChooser() { // |connector| may be null in tests. auto* connector = content::GetSystemConnector(); if (connector) { - connector->BindInterface(ash::mojom::kServiceName, - &cros_display_config_ptr_); + connector->Connect(ash::mojom::kServiceName, + cros_display_config_.BindNewPipeAndPassReceiver()); } } @@ -95,7 +94,7 @@ void OobeDisplayChooser::MoveToTouchDisplay() { device.target_display_id != display::kInvalidDisplayId) { auto config_properties = ash::mojom::DisplayConfigProperties::New(); config_properties->set_primary = true; - cros_display_config_ptr_->SetDisplayProperties( + cros_display_config_->SetDisplayProperties( base::NumberToString(device.target_display_id), std::move(config_properties), ash::mojom::DisplayConfigSource::kUser, base::DoNothing()); diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/oobe_display_chooser.h b/chromium/chrome/browser/ui/webui/chromeos/login/oobe_display_chooser.h index 555050c7f87..fc9cf2a9e22 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/oobe_display_chooser.h +++ b/chromium/chrome/browser/ui/webui/chromeos/login/oobe_display_chooser.h @@ -9,6 +9,9 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "base/scoped_observer.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/remote.h" +#include "ui/events/devices/device_data_manager.h" #include "ui/events/devices/input_device_event_observer.h" namespace ui { @@ -26,9 +29,10 @@ class OobeDisplayChooser : public ui::InputDeviceEventObserver { // Must be called on the BrowserThread::UI thread. void TryToPlaceUiOnTouchDisplay(); - void set_cros_display_config_ptr_for_test( - ash::mojom::CrosDisplayConfigControllerPtr cros_display_config_ptr) { - cros_display_config_ptr_ = std::move(cros_display_config_ptr); + void set_cros_display_config_for_test( + mojo::PendingRemote + cros_display_config) { + cros_display_config_.Bind(std::move(cros_display_config)); } private: @@ -44,8 +48,8 @@ class OobeDisplayChooser : public ui::InputDeviceEventObserver { void OnDeviceListsComplete() override; ScopedObserver - scoped_observer_; - ash::mojom::CrosDisplayConfigControllerPtr cros_display_config_ptr_; + scoped_observer_{this}; + mojo::Remote cros_display_config_; base::WeakPtrFactory weak_ptr_factory_{this}; 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 2fd04181e8a..407ca745758 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 @@ -8,11 +8,14 @@ #include #include "ash/display/display_configuration_controller.h" +#include "ash/public/mojom/cros_display_config.mojom.h" #include "ash/shell.h" #include "base/run_loop.h" #include "base/strings/string_number_conversions.h" #include "chrome/test/base/chrome_ash_test_base.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_associated_remote.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/display/display.h" #include "ui/display/display_observer.h" @@ -29,17 +32,17 @@ namespace { class TestCrosDisplayConfig : public ash::mojom::CrosDisplayConfigController { public: - TestCrosDisplayConfig() : binding_(this) {} + TestCrosDisplayConfig() = default; - ash::mojom::CrosDisplayConfigControllerPtr CreateInterfacePtrAndBind() { - ash::mojom::CrosDisplayConfigControllerPtr ptr; - binding_.Bind(mojo::MakeRequest(&ptr)); - return ptr; + mojo::PendingRemote + CreateRemoteAndBind() { + return receiver_.BindNewPipeAndPassRemote(); } // ash::mojom::CrosDisplayConfigController: - void AddObserver(ash::mojom::CrosDisplayConfigObserverAssociatedPtrInfo - observer) override {} + void AddObserver( + mojo::PendingAssociatedRemote + observer) override {} void GetDisplayLayoutInfo(GetDisplayLayoutInfoCallback callback) override {} void SetDisplayLayoutInfo(ash::mojom::DisplayLayoutInfoPtr info, SetDisplayLayoutInfoCallback callback) override {} @@ -69,7 +72,7 @@ class TestCrosDisplayConfig : public ash::mojom::CrosDisplayConfigController { TouchCalibrationCallback callback) override {} private: - mojo::Binding binding_; + mojo::Receiver receiver_{this}; DISALLOW_COPY_AND_ASSIGN(TestCrosDisplayConfig); }; @@ -88,8 +91,8 @@ class OobeDisplayChooserTest : public ChromeAshTestBase { cros_display_config_ = std::make_unique(); display_chooser_ = std::make_unique(); - display_chooser_->set_cros_display_config_ptr_for_test( - cros_display_config_->CreateInterfacePtrAndBind()); + display_chooser_->set_cros_display_config_for_test( + cros_display_config_->CreateRemoteAndBind()); ui::DeviceDataManagerTestApi().OnDeviceListsComplete(); } 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 67f444cbacd..6d8e7ade583 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc @@ -90,6 +90,7 @@ #include "chrome/grit/component_extension_resources.h" #include "chromeos/constants/chromeos_switches.h" #include "chromeos/services/multidevice_setup/public/mojom/constants.mojom.h" +#include "chromeos/services/network_config/public/mojom/cros_network_config.mojom.h" // nogncheck #include "components/policy/core/common/cloud/cloud_policy_constants.h" #include "components/prefs/pref_service.h" #include "content/public/browser/browser_context.h" @@ -490,20 +491,23 @@ service_manager::Connector* OobeUI::GetLoggedInUserMojoConnector() { } void OobeUI::BindMultiDeviceSetup( - multidevice_setup::mojom::MultiDeviceSetupRequest request) { - GetLoggedInUserMojoConnector()->BindInterface( - multidevice_setup::mojom::kServiceName, std::move(request)); + mojo::PendingReceiver + receiver) { + GetLoggedInUserMojoConnector()->Connect( + multidevice_setup::mojom::kServiceName, std::move(receiver)); } void OobeUI::BindPrivilegedHostDeviceSetter( - multidevice_setup::mojom::PrivilegedHostDeviceSetterRequest request) { - GetLoggedInUserMojoConnector()->BindInterface( - multidevice_setup::mojom::kServiceName, std::move(request)); + mojo::PendingReceiver + receiver) { + GetLoggedInUserMojoConnector()->Connect( + multidevice_setup::mojom::kServiceName, std::move(receiver)); } void OobeUI::BindCrosNetworkConfig( - chromeos::network_config::mojom::CrosNetworkConfigRequest request) { - ash::GetNetworkConfigService(std::move(request)); + mojo::PendingReceiver + receiver) { + ash::GetNetworkConfigService(std::move(receiver)); } OobeUI::OobeUI(content::WebUI* web_ui, const GURL& url) @@ -622,7 +626,7 @@ void OobeUI::CurrentScreenChanged(OobeScreenId new_screen) { current_screen_ = new_screen; for (Observer& observer : observer_list_) - observer.OnCurrentScreenChanged(current_screen_, new_screen); + observer.OnCurrentScreenChanged(previous_screen_, new_screen); } bool OobeUI::IsScreenInitialized(OobeScreenId screen) { 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 84dc0d2d4ca..cb1f0565315 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/oobe_ui.h +++ b/chromium/chrome/browser/ui/webui/chromeos/login/oobe_ui.h @@ -18,7 +18,8 @@ #include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h" #include "chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom.h" -#include "chromeos/services/network_config/public/mojom/cros_network_config.mojom.h" // nogncheck +#include "chromeos/services/network_config/public/mojom/cros_network_config.mojom-forward.h" // nogncheck +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "ui/webui/mojo_web_ui_controller.h" namespace base { @@ -156,14 +157,17 @@ class OobeUI : public ui::MojoWebUIController { // display type. void ConfigureOobeDisplay(); - // Adds Mojo bindings for this WebUIController. + // Adds Mojo receivers for this WebUIController. service_manager::Connector* GetLoggedInUserMojoConnector(); void BindMultiDeviceSetup( - multidevice_setup::mojom::MultiDeviceSetupRequest request); + mojo::PendingReceiver + receiver); void BindPrivilegedHostDeviceSetter( - multidevice_setup::mojom::PrivilegedHostDeviceSetterRequest request); + mojo::PendingReceiver< + multidevice_setup::mojom::PrivilegedHostDeviceSetter> receiver); void BindCrosNetworkConfig( - chromeos::network_config::mojom::CrosNetworkConfigRequest request); + mojo::PendingReceiver + receiver); // Type of UI. std::string display_type_; 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 d8a5fa15e43..c88297b01a0 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 @@ -5,7 +5,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/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/login/screens/recommend_apps_screen.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" 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 aa0e6206df5..2e34b2bb0c8 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 @@ -101,6 +101,8 @@ #include "content/public/browser/notification_source.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents.h" +#include "extensions/browser/api/extensions_api_client.h" +#include "extensions/browser/api/feedback_private/feedback_private_delegate.h" #include "google_apis/gaia/gaia_auth_util.h" #include "third_party/cros_system_api/dbus/service_constants.h" #include "ui/base/ime/chromeos/ime_keyboard.h" @@ -296,6 +298,13 @@ SigninScreenHandler::~SigninScreenHandler() { network_state_informer_->RemoveObserver(this); proximity_auth::ScreenlockBridge::Get()->SetLockHandler(nullptr); proximity_auth::ScreenlockBridge::Get()->SetFocusedUser(EmptyAccountId()); + // TODO(https://crbug.com/1033572) Quick fix to close feedback form when login + // was performed. + login_feedback_.reset(); + extensions::FeedbackPrivateDelegate* feedback_private_delegate = + extensions::ExtensionsAPIClient::Get()->GetFeedbackPrivateDelegate(); + feedback_private_delegate->UnloadFeedbackExtension( + Profile::FromWebUI(web_ui())); } void SigninScreenHandler::DeclareLocalizedValues( diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/supervision_transition_screen_handler.cc b/chromium/chrome/browser/ui/webui/chromeos/login/supervision_transition_screen_handler.cc index 3542f432e78..311bd578880 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/supervision_transition_screen_handler.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/login/supervision_transition_screen_handler.cc @@ -9,8 +9,8 @@ #include "base/logging.h" #include "base/metrics/histogram_macros.h" #include "chrome/browser/browser_process.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" #include "chrome/browser/chromeos/arc/arc_util.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/login/oobe_screen.h" #include "chrome/browser/chromeos/login/screens/supervision_transition_screen.h" #include "chrome/browser/profiles/profile_manager.h" diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/update_required_screen_handler.cc b/chromium/chrome/browser/ui/webui/chromeos/login/update_required_screen_handler.cc index 1a557a318c5..d02af35140b 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/update_required_screen_handler.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/login/update_required_screen_handler.cc @@ -12,6 +12,9 @@ #include "chrome/grit/chromium_strings.h" #include "chrome/grit/generated_resources.h" #include "components/login/localized_values_builder.h" +#include "ui/base/l10n/l10n_util.h" +#include "ui/chromeos/devicetype_utils.h" +#include "ui/strings/grit/ui_strings.h" namespace chromeos { @@ -20,6 +23,7 @@ constexpr StaticOobeScreenId UpdateRequiredView::kScreenId; UpdateRequiredScreenHandler::UpdateRequiredScreenHandler( JSCallsContainer* js_calls_container) : BaseScreenHandler(kScreenId, js_calls_container) { + set_user_acted_method_path("login.UpdateRequiredScreen.userActed"); } UpdateRequiredScreenHandler::~UpdateRequiredScreenHandler() { @@ -31,6 +35,35 @@ void UpdateRequiredScreenHandler::DeclareLocalizedValues( ::login::LocalizedValuesBuilder* builder) { builder->Add("updateRequiredMessage", IDS_UPDATE_REQUIRED_LOGIN_SCREEN_MESSAGE); + builder->Add("errorMessage", + IDS_BROWSER_SHARING_ERROR_DIALOG_TEXT_INTERNAL_ERROR); + builder->Add("eolMessage", + ui::SubstituteChromeOSDeviceType(IDS_EOL_NOTIFICATION_EOL)); + builder->Add("selectNetworkButtonCaption", IDS_APP_START_CONFIGURE_NETWORK); + builder->Add("updateButtonCaption", + IDS_SETTINGS_ABOUT_PAGE_CHECK_FOR_UPDATES); + builder->Add("rebootNeededMessage", IDS_UPDATE_COMPLETED); + + builder->Add("checkingForUpdatesTitle", IDS_CHECKING_FOR_UPDATES); + builder->Add("updatingTitle", IDS_UPDATING_SCREEN_TITLE); + + builder->Add("downloading", IDS_DOWNLOADING); + builder->Add("downloadingTimeLeftLong", IDS_DOWNLOADING_TIME_LEFT_LONG); + builder->Add("downloadingTimeLeftStatusOneHour", + IDS_DOWNLOADING_TIME_LEFT_STATUS_ONE_HOUR); + builder->Add("downloadingTimeLeftStatusMinutes", + IDS_DOWNLOADING_TIME_LEFT_STATUS_MINUTES); + builder->Add("downloadingTimeLeftSmall", IDS_DOWNLOADING_TIME_LEFT_SMALL); + + builder->Add( + "updateOverCellularPromptTitle", + ui::SubstituteChromeOSDeviceType(IDS_UPDATE_OVER_CELLULAR_PROMPT_TITLE)); + builder->Add("updateOverCellularPromptMessage", + IDS_UPDATE_OVER_CELLULAR_PROMPT_MESSAGE); + builder->Add("AcceptUpdateOverCellularButton", + IDS_OFFERS_CONSENT_INFOBAR_ENABLE_BUTTON); + builder->Add("RejectUpdateOverCellularButton", + IDS_OFFERS_CONSENT_INFOBAR_DISABLE_BUTTON); } void UpdateRequiredScreenHandler::Initialize() { @@ -60,4 +93,36 @@ void UpdateRequiredScreenHandler::Unbind() { BaseScreenHandler::SetBaseScreen(nullptr); } +void UpdateRequiredScreenHandler::SetIsConnected(bool connected) { + CallJS("login.UpdateRequiredScreen.setIsConnected", connected); +} + +void UpdateRequiredScreenHandler::SetUpdateProgressUnavailable( + bool unavailable) { + CallJS("login.UpdateRequiredScreen.setUpdateProgressUnavailable", + unavailable); +} + +void UpdateRequiredScreenHandler::SetUpdateProgressValue(int progress) { + CallJS("login.UpdateRequiredScreen.setUpdateProgressValue", progress); +} + +void UpdateRequiredScreenHandler::SetUpdateProgressMessage( + const base::string16& message) { + CallJS("login.UpdateRequiredScreen.setUpdateProgressMessage", message); +} + +void UpdateRequiredScreenHandler::SetEstimatedTimeLeftVisible(bool visible) { + CallJS("login.UpdateRequiredScreen.setEstimatedTimeLeftVisible", visible); +} + +void UpdateRequiredScreenHandler::SetEstimatedTimeLeft(int seconds_left) { + CallJS("login.UpdateRequiredScreen.setEstimatedTimeLeft", seconds_left); +} + +void UpdateRequiredScreenHandler::SetUIState( + UpdateRequiredView::UIState ui_state) { + CallJS("login.UpdateRequiredScreen.setUIState", static_cast(ui_state)); +} + } // namespace chromeos diff --git a/chromium/chrome/browser/ui/webui/chromeos/login/update_required_screen_handler.h b/chromium/chrome/browser/ui/webui/chromeos/login/update_required_screen_handler.h index 7a194338521..cd52e9f012d 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/login/update_required_screen_handler.h +++ b/chromium/chrome/browser/ui/webui/chromeos/login/update_required_screen_handler.h @@ -21,6 +21,16 @@ class UpdateRequiredScreen; class UpdateRequiredView { public: + enum UIState { + UPDATE_REQUIRED_MESSAGE = 0, // 'System update required' message. + UPDATE_PROCESS, // Update is going on. + UPDATE_NEED_PERMISSION, // Need user's permission to proceed. + UPDATE_COMPLETED_NEED_REBOOT, // Update successful, manual reboot is + // needed. + UPDATE_ERROR, // An error has occurred. + EOL // End of Life message. + }; + constexpr static StaticOobeScreenId kScreenId{"update-required"}; virtual ~UpdateRequiredView() {} @@ -36,6 +46,21 @@ class UpdateRequiredView { // Unbinds the screen from the view. virtual void Unbind() = 0; + + // Is device connected to some network? + virtual void SetIsConnected(bool connected) = 0; + // Is progress unavailable (e.g. we are checking for updates)? + virtual void SetUpdateProgressUnavailable(bool unavailable) = 0; + // Set progress percentage. + virtual void SetUpdateProgressValue(int progress) = 0; + // Set progress message (like "Verifying"). + virtual void SetUpdateProgressMessage(const base::string16& message) = 0; + // Set the visibility of the estimated time left. + virtual void SetEstimatedTimeLeftVisible(bool visible) = 0; + // Set the estimated time left, in seconds. + virtual void SetEstimatedTimeLeft(int seconds_left) = 0; + // Set the UI state of the screen. + virtual void SetUIState(UpdateRequiredView::UIState ui_state) = 0; }; class UpdateRequiredScreenHandler : public UpdateRequiredView, @@ -52,6 +77,14 @@ class UpdateRequiredScreenHandler : public UpdateRequiredView, void Bind(UpdateRequiredScreen* screen) override; void Unbind() override; + void SetIsConnected(bool connected) override; + void SetUpdateProgressUnavailable(bool unavailable) override; + void SetUpdateProgressValue(int progress) override; + void SetUpdateProgressMessage(const base::string16& message) override; + void SetEstimatedTimeLeftVisible(bool visible) override; + void SetEstimatedTimeLeft(int seconds_left) override; + void SetUIState(UpdateRequiredView::UIState ui_state) override; + // BaseScreenHandler: void DeclareLocalizedValues( ::login::LocalizedValuesBuilder* builder) override; diff --git a/chromium/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.cc b/chromium/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.cc index f648d2f70a1..673d8f6352a 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.cc @@ -14,18 +14,18 @@ namespace chromeos { namespace machine_learning { MachineLearningInternalsPageHandler::MachineLearningInternalsPageHandler( - mojom::PageHandlerRequest request) - : binding_(this, std::move(request)) {} + mojo::PendingReceiver receiver) + : receiver_(this, std::move(receiver)) {} MachineLearningInternalsPageHandler::~MachineLearningInternalsPageHandler() = default; -void MachineLearningInternalsPageHandler::LoadModel( - mojom::ModelSpecPtr spec, - mojom::ModelRequest request, - LoadModelCallback callback) { - ServiceConnection::GetInstance()->LoadModel( - std::move(spec), std::move(request), std::move(callback)); +void MachineLearningInternalsPageHandler::LoadBuiltinModel( + mojom::BuiltinModelSpecPtr spec, + mojo::PendingReceiver receiver, + LoadBuiltinModelCallback callback) { + ServiceConnection::GetInstance()->LoadBuiltinModel( + std::move(spec), std::move(receiver), std::move(callback)); } } // namespace machine_learning diff --git a/chromium/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.h b/chromium/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.h index afa6d61da03..70c4e963839 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.h +++ b/chromium/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.h @@ -9,7 +9,8 @@ #include "chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.mojom.h" #include "chromeos/services/machine_learning/public/mojom/machine_learning_service.mojom.h" #include "chromeos/services/machine_learning/public/mojom/model.mojom.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/receiver.h" namespace chromeos { namespace machine_learning { @@ -19,16 +20,16 @@ namespace machine_learning { class MachineLearningInternalsPageHandler : public mojom::PageHandler { public: explicit MachineLearningInternalsPageHandler( - mojom::PageHandlerRequest request); + mojo::PendingReceiver receiver); ~MachineLearningInternalsPageHandler() override; private: // mojom::PageHandler: - void LoadModel(mojom::ModelSpecPtr spec, - mojom::ModelRequest request, - LoadModelCallback callback) override; + void LoadBuiltinModel(mojom::BuiltinModelSpecPtr spec, + mojo::PendingReceiver receiver, + LoadBuiltinModelCallback callback) override; - mojo::Binding binding_; + mojo::Receiver receiver_; DISALLOW_COPY_AND_ASSIGN(MachineLearningInternalsPageHandler); }; diff --git a/chromium/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.mojom b/chromium/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.mojom index 3e56bc185cf..84a76d05dc2 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.mojom +++ b/chromium/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.mojom @@ -9,7 +9,8 @@ import "chromeos/services/machine_learning/public/mojom/model.mojom"; import "chromeos/services/machine_learning/public/mojom/graph_executor.mojom"; interface PageHandler { - // Loads the specified model by forwarding it to Chrome OS ML Service. - LoadModel(ModelSpec spec, Model& request) => (LoadModelResult result); + // Loads the specified builtin model by forwarding it to Chrome OS ML + // Service. + LoadBuiltinModel(BuiltinModelSpec spec, pending_receiver receiver) + => (LoadModelResult result); }; - diff --git a/chromium/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_ui.cc b/chromium/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_ui.cc index 09f00e14b09..18ff22fb323 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_ui.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_ui.cc @@ -4,6 +4,7 @@ #include "chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_ui.h" +#include #include #include "chrome/browser/profiles/profile.h" @@ -56,9 +57,9 @@ MachineLearningInternalsUI::MachineLearningInternalsUI( MachineLearningInternalsUI::~MachineLearningInternalsUI() = default; void MachineLearningInternalsUI::BindMachineLearningInternalsPageHandler( - mojom::PageHandlerRequest request) { - page_handler_.reset( - new MachineLearningInternalsPageHandler(std::move(request))); + mojo::PendingReceiver receiver) { + page_handler_ = std::make_unique( + std::move(receiver)); } } // namespace machine_learning diff --git a/chromium/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_ui.h b/chromium/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_ui.h index 38517641176..da44a735e5f 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_ui.h +++ b/chromium/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_ui.h @@ -9,6 +9,7 @@ #include "base/macros.h" #include "chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.mojom.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "ui/webui/mojo_web_ui_controller.h" namespace chromeos { @@ -24,7 +25,7 @@ class MachineLearningInternalsUI : public ui::MojoWebUIController { private: void BindMachineLearningInternalsPageHandler( - mojom::PageHandlerRequest request); + mojo::PendingReceiver receiver); std::unique_ptr page_handler_; diff --git a/chromium/chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_dialog.cc b/chromium/chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_dialog.cc index dc4915027ca..b01dc8a5e36 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_dialog.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_dialog.cc @@ -59,6 +59,12 @@ MultiDeviceSetupDialog* MultiDeviceSetupDialog::Get() { return current_instance_; } +// static +void MultiDeviceSetupDialog::SetInstanceForTesting( + MultiDeviceSetupDialog* instance) { + current_instance_ = instance; +} + void MultiDeviceSetupDialog::AddOnCloseCallback(base::OnceClosure callback) { on_close_callbacks_.push_back(std::move(callback)); } @@ -115,14 +121,15 @@ MultiDeviceSetupDialogUI::MultiDeviceSetupDialogUI(content::WebUI* web_ui) MultiDeviceSetupDialogUI::~MultiDeviceSetupDialogUI() = default; void MultiDeviceSetupDialogUI::BindMultiDeviceSetup( - chromeos::multidevice_setup::mojom::MultiDeviceSetupRequest request) { + mojo::PendingReceiver + receiver) { service_manager::Connector* connector = content::BrowserContext::GetConnectorFor( web_ui()->GetWebContents()->GetBrowserContext()); DCHECK(connector); - connector->BindInterface(chromeos::multidevice_setup::mojom::kServiceName, - std::move(request)); + connector->Connect(chromeos::multidevice_setup::mojom::kServiceName, + std::move(receiver)); } } // namespace multidevice_setup diff --git a/chromium/chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_dialog.h b/chromium/chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_dialog.h index 422b8feeeac..e4671891542 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_dialog.h +++ b/chromium/chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_dialog.h @@ -12,6 +12,7 @@ #include "base/macros.h" #include "chrome/browser/ui/webui/chromeos/system_web_dialog_delegate.h" #include "chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "ui/web_dialogs/web_dialog_ui.h" namespace chromeos { @@ -31,6 +32,8 @@ class MultiDeviceSetupDialog : public SystemWebDialogDelegate { // nullptr. static MultiDeviceSetupDialog* Get(); + static void SetInstanceForTesting(MultiDeviceSetupDialog* instance); + // Registers a callback which will be called when the dialog is closed. void AddOnCloseCallback(base::OnceClosure callback); @@ -59,7 +62,8 @@ class MultiDeviceSetupDialogUI : public ui::MojoWebDialogUI { private: void BindMultiDeviceSetup( - chromeos::multidevice_setup::mojom::MultiDeviceSetupRequest request); + mojo::PendingReceiver< + chromeos::multidevice_setup::mojom::MultiDeviceSetup> receiver); DISALLOW_COPY_AND_ASSIGN(MultiDeviceSetupDialogUI); }; diff --git a/chromium/chrome/browser/ui/webui/chromeos/network_element_localized_strings_provider.cc b/chromium/chrome/browser/ui/webui/chromeos/network_element_localized_strings_provider.cc index 2bea1501801..99c9df466f6 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/network_element_localized_strings_provider.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/network_element_localized_strings_provider.cc @@ -36,7 +36,9 @@ constexpr LocalizedString kElementLocalizedStrings[] = { {"networkListItemConnecting", IDS_STATUSBAR_NETWORK_DEVICE_CONNECTING}, {"networkListItemConnectingTo", IDS_NETWORK_LIST_CONNECTING_TO}, {"networkListItemInitializing", IDS_NETWORK_LIST_INITIALIZING}, + {"networkListItemNotAvailable", IDS_NETWORK_LIST_NOT_AVAILABLE}, {"networkListItemScanning", IDS_SETTINGS_INTERNET_MOBILE_SEARCH}, + {"networkListItemSimCardLocked", IDS_NETWORK_LIST_SIM_CARD_LOCKED}, {"networkListItemNotConnected", IDS_NETWORK_LIST_NOT_CONNECTED}, {"networkListItemNoNetwork", IDS_NETWORK_LIST_NO_NETWORK}, {"vpnNameTemplate", IDS_NETWORK_LIST_THIRD_PARTY_VPN_NAME_TEMPLATE}, diff --git a/chromium/chrome/browser/ui/webui/chromeos/network_ui.cc b/chromium/chrome/browser/ui/webui/chromeos/network_ui.cc index 6e1c9d1f886..53c1cfdcb95 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/network_ui.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/network_ui.cc @@ -28,6 +28,7 @@ #include "chromeos/network/network_state.h" #include "chromeos/network/network_state_handler.h" #include "chromeos/network/onc/onc_utils.h" +#include "chromeos/services/network_config/public/mojom/cros_network_config.mojom.h" #include "components/device_event_log/device_event_log.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/web_contents.h" @@ -44,6 +45,7 @@ namespace { constexpr char kAddNetwork[] = "addNetwork"; constexpr char kGetNetworkProperties[] = "getShillNetworkProperties"; constexpr char kGetDeviceProperties[] = "getShillDeviceProperties"; +constexpr char kGetEthernetEAP[] = "getShillEthernetEAP"; constexpr char kOpenCellularActivationUi[] = "openCellularActivationUi"; constexpr char kShowNetworkDetails[] = "showNetworkDetails"; constexpr char kShowNetworkConfig[] = "showNetworkConfig"; @@ -106,6 +108,10 @@ class NetworkConfigMessageHandler : public content::WebUIMessageHandler { base::BindRepeating( &NetworkConfigMessageHandler::GetShillDeviceProperties, base::Unretained(this))); + web_ui()->RegisterMessageCallback( + kGetEthernetEAP, + base::BindRepeating(&NetworkConfigMessageHandler::GetShillEthernetEAP, + base::Unretained(this))); web_ui()->RegisterMessageCallback( kOpenCellularActivationUi, base::BindRepeating( @@ -191,6 +197,28 @@ class NetworkConfigMessageHandler : public content::WebUIMessageHandler { weak_ptr_factory_.GetWeakPtr(), type, kGetDeviceProperties)); } + void GetShillEthernetEAP(const base::ListValue* arg_list) { + NetworkStateHandler::NetworkStateList list; + NetworkHandler::Get()->network_state_handler()->GetNetworkListByType( + NetworkTypePattern::Primitive(shill::kTypeEthernetEap), + true /* configured_only */, false /* visible_only */, 1 /* limit */, + &list); + + AllowJavascript(); + if (list.empty()) { + CallJavascriptFunction( + base::StringPrintf("NetworkUI.%sResult", kGetEthernetEAP)); + return; + } + const NetworkState* eap = list.front(); + base::Value properties(base::Value::Type::DICTIONARY); + properties.SetStringKey("guid", eap->guid()); + properties.SetStringKey("name", eap->name()); + properties.SetStringKey("type", eap->type()); + CallJavascriptFunction( + base::StringPrintf("NetworkUI.%sResult", kGetEthernetEAP), properties); + } + void OpenCellularActivationUi(const base::ListValue* arg_list) { const NetworkState* cellular_network = NetworkHandler::Get()->network_state_handler()->FirstNetworkByType( @@ -252,12 +280,12 @@ class NetworkConfigMessageHandler : public content::WebUIMessageHandler { std::unique_ptr /* error_data */) { NET_LOG(ERROR) << "Shill Error: " << error_name << " id=" << guid_or_type; base::ListValue return_arg_list; - std::unique_ptr dictionary; + base::Value dictionary(base::Value::Type::DICTIONARY); std::string key = function_name == kGetDeviceProperties ? shill::kTypeProperty : shill::kGuidProperty; - dictionary->SetKey(key, base::Value(guid_or_type)); - dictionary->SetKey("ShillError", base::Value(error_name)); + dictionary.SetKey(key, base::Value(guid_or_type)); + dictionary.SetKey("ShillError", base::Value(error_name)); return_arg_list.Append(std::move(dictionary)); AllowJavascript(); @@ -324,6 +352,9 @@ void NetworkUI::GetLocalizedStrings(base::DictionaryValue* localized_strings) { localized_strings->SetString( "favoriteNetworksLabel", l10n_util::GetStringUTF16(IDS_NETWORK_UI_FAVORITE_NETWORKS)); + localized_strings->SetString( + "ethernetEapNetworkLabel", + l10n_util::GetStringUTF16(IDS_NETWORK_UI_ETHERNET_EAP)); localized_strings->SetString( "devicesLabel", l10n_util::GetStringUTF16(IDS_NETWORK_UI_DEVICES)); @@ -376,8 +407,8 @@ NetworkUI::NetworkUI(content::WebUI* web_ui) NetworkUI::~NetworkUI() {} void NetworkUI::BindCrosNetworkConfig( - network_config::mojom::CrosNetworkConfigRequest request) { - ash::GetNetworkConfigService(std::move(request)); + mojo::PendingReceiver receiver) { + ash::GetNetworkConfigService(std::move(receiver)); } } // namespace chromeos diff --git a/chromium/chrome/browser/ui/webui/chromeos/network_ui.h b/chromium/chrome/browser/ui/webui/chromeos/network_ui.h index 4ed87901d96..a9eb0ab1919 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/network_ui.h +++ b/chromium/chrome/browser/ui/webui/chromeos/network_ui.h @@ -6,7 +6,8 @@ #define CHROME_BROWSER_UI_WEBUI_CHROMEOS_NETWORK_UI_H_ #include "base/macros.h" -#include "chromeos/services/network_config/public/mojom/cros_network_config.mojom.h" +#include "chromeos/services/network_config/public/mojom/cros_network_config.mojom-forward.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "ui/webui/mojo_web_ui_controller.h" namespace base { @@ -25,7 +26,7 @@ class NetworkUI : public ui::MojoWebUIController { private: void BindCrosNetworkConfig( - network_config::mojom::CrosNetworkConfigRequest request); + mojo::PendingReceiver receiver); DISALLOW_COPY_AND_ASSIGN(NetworkUI); }; diff --git a/chromium/chrome/browser/ui/webui/chromeos/set_time_ui.cc b/chromium/chrome/browser/ui/webui/chromeos/set_time_ui.cc index 1376878c1d8..f5ec12c71a5 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/set_time_ui.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/set_time_ui.cc @@ -33,6 +33,7 @@ #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_data_source.h" #include "content/public/browser/web_ui_message_handler.h" +#include "ui/resources/grit/webui_resources.h" namespace chromeos { @@ -171,6 +172,8 @@ SetTimeUI::SetTimeUI(content::WebUI* web_ui) : WebDialogUI(web_ui) { // Set up the chrome://set-time source. content::WebUIDataSource* source = content::WebUIDataSource::Create(chrome::kChromeUISetTimeHost); + source->OverrideContentSecurityPolicyScriptSrc( + "script-src chrome://resources chrome://test 'self';"); static constexpr LocalizedString kStrings[] = { {"setTimeTitle", IDS_SET_TIME_TITLE}, @@ -196,13 +199,15 @@ SetTimeUI::SetTimeUI(content::WebUI* web_ui) : WebDialogUI(web_ui) { source->AddLocalizedStrings(values); source->UseStringsJs(); + source->EnableReplaceI18nInJS(); - source->AddResourcePath("set_time_browser_proxy.html", - IDR_SET_TIME_BROWSER_PROXY_HTML); source->AddResourcePath("set_time_browser_proxy.js", IDR_SET_TIME_BROWSER_PROXY_JS); source->AddResourcePath("set_time_dialog.js", IDR_SET_TIME_DIALOG_JS); - source->SetDefaultResource(IDR_SET_TIME_DIALOG_HTML); + source->SetDefaultResource(IDR_SET_TIME_HTML); + + source->AddResourcePath("test_loader.js", IDR_WEBUI_JS_TEST_LOADER); + source->AddResourcePath("test_loader.html", IDR_WEBUI_HTML_TEST_LOADER); content::WebUIDataSource::Add(Profile::FromWebUI(web_ui), source); } diff --git a/chromium/chrome/browser/ui/webui/chromeos/smb_shares/smb_handler.cc b/chromium/chrome/browser/ui/webui/chromeos/smb_shares/smb_handler.cc index 819e4fb6cf7..791c7954a88 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/smb_shares/smb_handler.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/smb_shares/smb_handler.cc @@ -25,7 +25,7 @@ smb_client::SmbService* GetSmbService(Profile* profile) { base::Value BuildShareList(const std::vector& shares) { base::Value shares_list(base::Value::Type::LIST); for (const auto& share : shares) { - shares_list.GetList().push_back(base::Value(share.GetWindowsUNCString())); + shares_list.Append(base::Value(share.GetWindowsUNCString())); } return shares_list; } diff --git a/chromium/chrome/browser/ui/webui/chromeos/smb_shares/smb_shares_localized_strings_provider.cc b/chromium/chrome/browser/ui/webui/chromeos/smb_shares/smb_shares_localized_strings_provider.cc index 4a50ff51a44..7270b116329 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/smb_shares/smb_shares_localized_strings_provider.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/smb_shares/smb_shares_localized_strings_provider.cc @@ -44,6 +44,8 @@ void AddLocalizedStrings(content::WebUIDataSource* html_source) { IDS_SETTINGS_DOWNLOADS_SHARE_ADDED_MOUNT_INVALID_URL_MESSAGE}, {"smbShareAddedInvalidSSOURLMessage", IDS_SETTINGS_DOWNLOADS_SHARE_ADDED_MOUNT_INVALID_SSO_URL_MESSAGE}, + {"smbShareDiscoveryMessage", + IDS_SETTINGS_DOWNLOADS_ADD_SHARE_DISCOVERY_MESSAGE}, }; AddLocalizedStringsBulk(html_source, kLocalizedStrings, base::size(kLocalizedStrings)); diff --git a/chromium/chrome/browser/ui/webui/chromeos/sys_internals/sys_internals_message_handler.cc b/chromium/chrome/browser/ui/webui/chromeos/sys_internals/sys_internals_message_handler.cc index 23d28d7e47f..a5376d48f85 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/sys_internals/sys_internals_message_handler.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/sys_internals/sys_internals_message_handler.cc @@ -115,7 +115,7 @@ void SetCpusValue(const std::vector& infos, base::Value* result) { cpu_result.SetKey("kernel", base::Value(cpu.kernel)); cpu_result.SetKey("idle", base::Value(cpu.idle)); cpu_result.SetKey("total", base::Value(cpu.total)); - cpu_results.GetList().push_back(std::move(cpu_result)); + cpu_results.Append(std::move(cpu_result)); } result->SetKey("cpus", std::move(cpu_results)); } @@ -214,7 +214,7 @@ void SysInternalsMessageHandler::HandleGetSysInfo(const base::ListValue* args) { DCHECK(args); AllowJavascript(); - const base::Value::ListStorage& list = args->GetList(); + base::span list = args->GetList(); if (list.size() != 1 || !list[0].is_string()) { NOTREACHED(); return; diff --git a/chromium/chrome/browser/ui/webui/chromeos/system_web_dialog_browsertest.cc b/chromium/chrome/browser/ui/webui/chromeos/system_web_dialog_browsertest.cc index ce3b17a3858..c23cac4ef3a 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/system_web_dialog_browsertest.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/system_web_dialog_browsertest.cc @@ -18,10 +18,10 @@ #include "components/account_id/account_id.h" #include "components/prefs/pref_service.h" #include "content/public/browser/render_view_host.h" -#include "content/public/common/page_zoom.h" #include "content/public/common/service_manager_connection.h" #include "content/public/common/web_preferences.h" #include "services/service_manager/public/cpp/connector.h" +#include "third_party/blink/public/common/page/page_zoom.h" #include "ui/aura/client/aura_constants.h" #include "url/gurl.h" @@ -99,14 +99,21 @@ IN_PROC_BROWSER_TEST_F(SystemWebDialogTest, InstanceTest) { // https://crbug.com/855344. } -IN_PROC_BROWSER_TEST_F(SystemWebDialogTest, FontSize) { +class SystemWebDialogTestWithSplitSettings : public SystemWebDialogTest { + public: + SystemWebDialogTestWithSplitSettings() { + feature_list_.InitAndEnableFeature(chromeos::features::kSplitSettings); + } + + private: + base::test::ScopedFeatureList feature_list_; +}; + +IN_PROC_BROWSER_TEST_F(SystemWebDialogTestWithSplitSettings, FontSize) { const content::WebPreferences kDefaultPrefs; const int kDefaultFontSize = kDefaultPrefs.default_font_size; const int kDefaultFixedFontSize = kDefaultPrefs.default_fixed_font_size; - base::test::ScopedFeatureList features; - features.InitAndEnableFeature(features::kSplitSettings); - // Set the browser font sizes to non-default values. PrefService* profile_prefs = browser()->profile()->GetPrefs(); profile_prefs->SetInteger(prefs::kWebKitDefaultFontSize, @@ -127,12 +134,9 @@ IN_PROC_BROWSER_TEST_F(SystemWebDialogTest, FontSize) { EXPECT_EQ(kDefaultFixedFontSize, dialog_prefs.default_fixed_font_size); } -IN_PROC_BROWSER_TEST_F(SystemWebDialogTest, PageZoom) { - base::test::ScopedFeatureList features; - features.InitAndEnableFeature(features::kSplitSettings); - +IN_PROC_BROWSER_TEST_F(SystemWebDialogTestWithSplitSettings, PageZoom) { // Set the default browser page zoom to 150%. - double level = content::ZoomFactorToZoomLevel(1.5); + double level = blink::PageZoomFactorToZoomLevel(1.5); browser()->profile()->GetZoomLevelPrefs()->SetDefaultZoomLevelPref(level); // Open a system dialog. @@ -142,8 +146,8 @@ IN_PROC_BROWSER_TEST_F(SystemWebDialogTest, PageZoom) { // Dialog page zoom is still 100%. auto* web_contents = dialog->GetWebUIForTest()->GetWebContents(); double dialog_level = content::HostZoomMap::GetZoomLevel(web_contents); - EXPECT_TRUE(content::ZoomValuesEqual(dialog_level, - content::ZoomFactorToZoomLevel(1.0))) + EXPECT_TRUE(blink::PageZoomValuesEqual(dialog_level, + blink::PageZoomFactorToZoomLevel(1.0))) << dialog_level; } diff --git a/chromium/chrome/browser/ui/webui/chromeos/system_web_dialog_delegate.cc b/chromium/chrome/browser/ui/webui/chromeos/system_web_dialog_delegate.cc index ce6790a8ec3..23267bce02b 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/system_web_dialog_delegate.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/system_web_dialog_delegate.cc @@ -19,7 +19,7 @@ #include "content/public/browser/render_view_host.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_ui.h" -#include "content/public/common/page_zoom.h" +#include "third_party/blink/public/common/page/page_zoom.h" #include "ui/aura/window.h" namespace chromeos { @@ -137,7 +137,7 @@ void SystemWebDialogDelegate::OnDialogShown( // Temporary means the lifetime of the WebContents. zoom_map->SetTemporaryZoomLevel(rvh->GetProcess()->GetID(), rvh->GetRoutingID(), - content::ZoomFactorToZoomLevel(1.0)); + blink::PageZoomFactorToZoomLevel(1.0)); } } diff --git a/chromium/chrome/browser/ui/webui/chromeos/terminal/terminal_source.cc b/chromium/chrome/browser/ui/webui/chromeos/terminal/terminal_source.cc index 2609acbbbde..1bc97a1d760 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/terminal/terminal_source.cc +++ b/chromium/chrome/browser/ui/webui/chromeos/terminal/terminal_source.cc @@ -27,7 +27,11 @@ void ReadFile(const base::FilePath& path, const content::URLDataSource::GotDataCallback& callback) { std::string content; bool result = base::ReadFileToString(path, &content); - DCHECK(result) << path; + // Allow missing files in /_locales only. + DCHECK(result || base::FilePath(kTerminalRoot) + .Append("_locales") + .AppendRelativePath(path, nullptr)) + << path; scoped_refptr response = base::RefCountedString::TakeString(&content); callback.Run(response.get()); @@ -38,6 +42,12 @@ std::string TerminalSource::GetSource() { return chrome::kChromeUITerminalHost; } +#if !BUILDFLAG(OPTIMIZE_WEBUI) +bool TerminalSource::AllowCaching() { + return false; +} +#endif + void TerminalSource::StartDataRequest( const std::string& path, const content::WebContents::Getter& wc_getter, @@ -61,3 +71,8 @@ std::string TerminalSource::GetMimeType(const std::string& path) { net::GetWellKnownMimeTypeFromExtension(ext.substr(1), &mime_type); return mime_type; } + +bool TerminalSource::ShouldServeMimeTypeAsContentTypeHeader() { + // TerminalSource pages include js modules which require an explicit MimeType. + return true; +} diff --git a/chromium/chrome/browser/ui/webui/chromeos/terminal/terminal_source.h b/chromium/chrome/browser/ui/webui/chromeos/terminal/terminal_source.h index b5acfdeb435..28e1fb9a1fc 100644 --- a/chromium/chrome/browser/ui/webui/chromeos/terminal/terminal_source.h +++ b/chromium/chrome/browser/ui/webui/chromeos/terminal/terminal_source.h @@ -8,6 +8,8 @@ #include #include "base/macros.h" +#include "build/buildflag.h" +#include "chrome/common/buildflags.h" #include "content/public/browser/url_data_source.h" #include "content/public/browser/web_contents.h" @@ -18,6 +20,9 @@ class TerminalSource : public content::URLDataSource { private: std::string GetSource() override; +#if !BUILDFLAG(OPTIMIZE_WEBUI) + bool AllowCaching() override; +#endif void StartDataRequest( const std::string& path, @@ -26,6 +31,8 @@ class TerminalSource : public content::URLDataSource { std::string GetMimeType(const std::string& path) override; + bool ShouldServeMimeTypeAsContentTypeHeader() override; + DISALLOW_COPY_AND_ASSIGN(TerminalSource); }; diff --git a/chromium/chrome/browser/ui/webui/conflicts/conflicts_data_fetcher.cc b/chromium/chrome/browser/ui/webui/conflicts/conflicts_data_fetcher.cc index caf0202c54d..fdf7d29f1cb 100644 --- a/chromium/chrome/browser/ui/webui/conflicts/conflicts_data_fetcher.cc +++ b/chromium/chrome/browser/ui/webui/conflicts/conflicts_data_fetcher.cc @@ -8,6 +8,7 @@ #include #include "base/task/post_task.h" +#include "base/values.h" #include "base/win/windows_version.h" #include "chrome/browser/win/conflicts/module_database.h" #include "content/public/browser/browser_task_traits.h" diff --git a/chromium/chrome/browser/ui/webui/constrained_web_dialog_delegate_base.cc b/chromium/chrome/browser/ui/webui/constrained_web_dialog_delegate_base.cc index d38705dac04..0fd891b5ef1 100644 --- a/chromium/chrome/browser/ui/webui/constrained_web_dialog_delegate_base.cc +++ b/chromium/chrome/browser/ui/webui/constrained_web_dialog_delegate_base.cc @@ -49,7 +49,7 @@ ConstrainedWebDialogDelegateBase::ConstrainedWebDialogDelegateBase( renderer_preferences_util::UpdateFromSystemSettings( prefs, Profile::FromBrowserContext(browser_context)); - web_contents_->GetRenderViewHost()->SyncRendererPrefs(); + web_contents_->SyncRendererPrefs(); // Set |this| as a delegate so the ConstrainedWebDialogUI can retrieve it. ConstrainedWebDialogUI::SetConstrainedDelegate(web_contents_, this); diff --git a/chromium/chrome/browser/ui/webui/crashes_ui.cc b/chromium/chrome/browser/ui/webui/crashes_ui.cc index d150c2cc8d5..08075f51e4d 100644 --- a/chromium/chrome/browser/ui/webui/crashes_ui.cc +++ b/chromium/chrome/browser/ui/webui/crashes_ui.cc @@ -34,7 +34,11 @@ #if defined(OS_CHROMEOS) #include "chromeos/dbus/dbus_thread_manager.h" -#include "chromeos/dbus/debug_daemon_client.h" +#include "chromeos/dbus/debug_daemon/debug_daemon_client.h" +#endif + +#if defined(OS_LINUX) +#include "components/crash/content/app/crashpad.h" #endif using content::WebContents; @@ -168,20 +172,25 @@ void CrashesDOMHandler::UpdateUI() { system_crash_reporter = true; #endif - bool upload_list = crash_reporting_enabled; - bool support_manual_uploads = false; - + bool using_crashpad = false; #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_ANDROID) - // Maunal uploads currently are supported only for Crashpad-using platforms - // and Android, and only if crash uploads are not disabled by policy. - support_manual_uploads = - crash_reporting_enabled || !IsMetricsReportingPolicyManaged(); - - // Show crash reports regardless of |crash_reporting_enabled| so that users - // can manually upload those reports. - upload_list = true; + using_crashpad = true; +#elif defined(OS_LINUX) && !defined(OS_CHROMEOS) + // ChromeOS uses crash_sender instead of Crashpad for uploads even when + // Crashpad is enabled for dump generation. + using_crashpad = crash_reporter::IsCrashpadEnabled(); #endif + // Manual uploads currently are supported only for Crashpad-using platforms + // and only if crash uploads are not disabled by policy. + bool support_manual_uploads = + using_crashpad && + (crash_reporting_enabled || !IsMetricsReportingPolicyManaged()); + + // Show crash reports regardless of |crash_reporting_enabled| when using + // Crashpad so that users can manually upload those reports. + bool upload_list = using_crashpad || crash_reporting_enabled; + base::ListValue crash_list; if (upload_list) crash_reporter::UploadListToValue(upload_list_.get(), &crash_list); diff --git a/chromium/chrome/browser/ui/webui/devtools_ui_data_source.cc b/chromium/chrome/browser/ui/webui/devtools_ui_data_source.cc index 95e73c57300..53b632a539a 100644 --- a/chromium/chrome/browser/ui/webui/devtools_ui_data_source.cc +++ b/chromium/chrome/browser/ui/webui/devtools_ui_data_source.cc @@ -84,11 +84,21 @@ std::string DevToolsDataSource::GetSource() { return chrome::kChromeUIDevToolsHost; } +// static +GURL GetCustomDevToolsFrontendURL() { + base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); + if (command_line->HasSwitch(switches::kCustomDevtoolsFrontend)) { + return GURL(base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( + switches::kCustomDevtoolsFrontend)); + } + return GURL(); +} + void DevToolsDataSource::StartDataRequest( const std::string& path, const content::WebContents::Getter& wc_getter, const GotDataCallback& callback) { - // Serve request from local bundle. + // Serve request to devtools://bundled/ from local bundle. std::string bundled_path_prefix(chrome::kChromeUIDevToolsBundledPath); bundled_path_prefix += "/"; if (base::StartsWith(path, bundled_path_prefix, @@ -99,15 +109,19 @@ void DevToolsDataSource::StartDataRequest( base::CompareCase::INSENSITIVE_ASCII)); std::string path_under_bundled = path_without_params.substr(bundled_path_prefix.length()); -#if BUILDFLAG(DEBUG_DEVTOOLS) - StartFileRequestForDebugDevtools(path_under_bundled, callback); -#else - StartBundledDataRequest(path_under_bundled, callback); +#if !BUILDFLAG(DEBUG_DEVTOOLS) + if (!GetCustomDevToolsFrontendURL().SchemeIsFile()) { + // Fetch from packaged resources. + StartBundledDataRequest(path_under_bundled, callback); + return; + } #endif + // Fetch from file system. + StartFileRequest(path_under_bundled, callback); return; } - // Serve empty page. + // Serve request to devtools://blank as empty page. std::string empty_path_prefix(chrome::kChromeUIDevToolsBlankPath); if (base::StartsWith(path, empty_path_prefix, base::CompareCase::INSENSITIVE_ASCII)) { @@ -115,7 +129,7 @@ void DevToolsDataSource::StartDataRequest( return; } - // Serve request from remote location. + // Serve request to devtools://remote from remote location. std::string remote_path_prefix(chrome::kChromeUIDevToolsRemotePath); remote_path_prefix += "/"; if (base::StartsWith(path, remote_path_prefix, @@ -132,29 +146,22 @@ void DevToolsDataSource::StartDataRequest( return; } - std::string custom_frontend_url = - base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( - switches::kCustomDevtoolsFrontend); - - if (custom_frontend_url.empty()) { - callback.Run(nullptr); - return; - } - - // Serve request from custom location. + // Serve request to devtools://custom from custom URL. std::string custom_path_prefix(chrome::kChromeUIDevToolsCustomPath); custom_path_prefix += "/"; - if (base::StartsWith(path, custom_path_prefix, base::CompareCase::INSENSITIVE_ASCII)) { - GURL url = - GURL(custom_frontend_url + path.substr(custom_path_prefix.length())); - DCHECK(url.is_valid()); - StartCustomDataRequest(url, callback); - return; + GURL custom_devtools_frontend = GetCustomDevToolsFrontendURL(); + if (!custom_devtools_frontend.is_empty()) { + GURL url = GURL(custom_devtools_frontend.spec() + + path.substr(custom_path_prefix.length())); + DCHECK(url.is_valid()); + StartCustomDataRequest(url, callback); + return; + } } - callback.Run(nullptr); + callback.Run(CreateNotFoundResponse()); } std::string DevToolsDataSource::GetMimeType(const std::string& path) { @@ -279,8 +286,7 @@ void DevToolsDataSource::StartNetworkRequest( base::Unretained(this), request_iter)); } -#if BUILDFLAG(DEBUG_DEVTOOLS) -scoped_refptr ReadFileForDebugDevTools( +scoped_refptr ReadFileForDevTools( const base::FilePath& path) { std::string buffer; if (!base::ReadFileToString(path, &buffer)) { @@ -290,29 +296,26 @@ scoped_refptr ReadFileForDebugDevTools( return base::RefCountedString::TakeString(&buffer); } -void DevToolsDataSource::StartFileRequestForDebugDevtools( - const std::string& path, - const GotDataCallback& callback) { - base::FilePath inspector_debug_dir; - base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); - if (command_line->HasSwitch(switches::kCustomDevtoolsFrontend)) { - inspector_debug_dir = - command_line->GetSwitchValuePath(switches::kCustomDevtoolsFrontend); - // --custom-devtools-frontend may already be used to specify an URL. - // In that case, fall back to the default debug-devtools bundle. - if (!base::PathExists(inspector_debug_dir)) - inspector_debug_dir.clear(); - } - if (inspector_debug_dir.empty() && - !base::PathService::Get(chrome::DIR_INSPECTOR_DEBUG, - &inspector_debug_dir)) { - callback.Run(CreateNotFoundResponse()); - return; +void DevToolsDataSource::StartFileRequest(const std::string& path, + const GotDataCallback& callback) { + base::FilePath base_path; + GURL custom_devtools_frontend = GetCustomDevToolsFrontendURL(); + if (custom_devtools_frontend.SchemeIsFile()) { + base_path = base_path.AppendASCII(custom_devtools_frontend.GetContent()); + } else { +#if BUILDFLAG(DEBUG_DEVTOOLS) + // Use default path for unbundled files when debug_devtools=true + if (!base::PathService::Get(chrome::DIR_INSPECTOR_DEBUG, &base_path)) { + callback.Run(CreateNotFoundResponse()); + return; + } +#else + NOTREACHED(); +#endif } - DCHECK(!inspector_debug_dir.empty()); - - base::FilePath full_path = inspector_debug_dir.AppendASCII(path); + base::FilePath full_path = base_path.AppendASCII(path); + CHECK(base_path.IsParent(full_path)); base::PostTaskAndReplyWithResult( FROM_HERE, @@ -322,10 +325,8 @@ void DevToolsDataSource::StartFileRequestForDebugDevtools( // The usage of BindRepeating below is only because the type of // task callback needs to match that of response callback, which // is currently a repeating callback. - base::BindRepeating(ReadFileForDebugDevTools, std::move(full_path)), - callback); + base::BindRepeating(ReadFileForDevTools, std::move(full_path)), callback); } -#endif // BUILDFLAG(DEBUG_DEVTOOLS) void DevToolsDataSource::OnLoadComplete( std::list::iterator request_iter, diff --git a/chromium/chrome/browser/ui/webui/devtools_ui_data_source.h b/chromium/chrome/browser/ui/webui/devtools_ui_data_source.h index dddecbcd1ba..6ee0377aa0d 100644 --- a/chromium/chrome/browser/ui/webui/devtools_ui_data_source.h +++ b/chromium/chrome/browser/ui/webui/devtools_ui_data_source.h @@ -23,12 +23,11 @@ struct NetworkTrafficAnnotationTag; // An URLDataSource implementation that handles devtools://devtools/ // requests. Three types of requests could be handled based on the URL path: -// 1. /bundled/: bundled DevTools frontend is served. -// when built with debug_devtools=true, the path can be provided via -// --custom-devtools-frontend. +// 1. /bundled/: bundled DevTools frontend is served. The path can be provided +// via --custom-devtools-frontend as file:// URL. // 2. /remote/: remote DevTools frontend is served from App Engine. // 3. /custom/: custom DevTools frontend is served from the server as specified -// by the --custom-devtools-frontend flag. +// via --custom-devtools-frontend as http:// URL. class DevToolsDataSource : public content::URLDataSource { public: using GotDataCallback = content::URLDataSource::GotDataCallback; @@ -75,10 +74,8 @@ class DevToolsDataSource : public content::URLDataSource { int load_flags, const GotDataCallback& callback); -#if BUILDFLAG(DEBUG_DEVTOOLS) - void StartFileRequestForDebugDevtools(const std::string& path, - const GotDataCallback& callback); -#endif + virtual void StartFileRequest(const std::string& path, + const GotDataCallback& callback); struct PendingRequest { PendingRequest(); diff --git a/chromium/chrome/browser/ui/webui/devtools_ui_data_source_unittest.cc b/chromium/chrome/browser/ui/webui/devtools_ui_data_source_unittest.cc index 323ce84efc3..f756944b477 100644 --- a/chromium/chrome/browser/ui/webui/devtools_ui_data_source_unittest.cc +++ b/chromium/chrome/browser/ui/webui/devtools_ui_data_source_unittest.cc @@ -50,8 +50,14 @@ class TestDevToolsDataSource : public DevToolsDataSource { const net::NetworkTrafficAnnotationTag& traffic_annotation, int load_flags, const GotDataCallback& callback) override { - std::string copy_of_url = url.spec(); - callback.Run(base::RefCountedString::TakeString(©_of_url)); + std::string result = "url: " + url.spec(); + callback.Run(base::RefCountedString::TakeString(&result)); + } + + void StartFileRequest(const std::string& path, + const GotDataCallback& callback) override { + std::string result = "file: " + path; + callback.Run(base::RefCountedString::TakeString(&result)); } }; @@ -120,12 +126,23 @@ TEST_F(DevToolsUIDataSourceTest, TestDevToolsBundledURLWithQueryParam) { EXPECT_FALSE(data().empty()); } +TEST_F(DevToolsUIDataSourceTest, TestDevToolsBundledURLWithSwitch) { + base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( + switches::kCustomDevtoolsFrontend, "file://tmp/"); + const GURL path = + DevToolsUrl().Resolve(DevToolsBundledPath(kDevToolsUITestFrontEndUrl)); + StartRequest(path.path()); + EXPECT_TRUE(data_received()); + EXPECT_EQ(data(), "file: devtools_app.html"); +} + TEST_F(DevToolsUIDataSourceTest, TestDevToolsInvalidBundledURL) { const GURL path = DevToolsUrl().Resolve(DevToolsBundledPath("invalid_devtools_app.html")); StartRequest(path.path()); EXPECT_TRUE(data_received()); - EXPECT_TRUE(data().empty()); + ASSERT_TRUE(base::StartsWith(data(), kDevToolsUITest404Response, + base::CompareCase::SENSITIVE)); } TEST_F(DevToolsUIDataSourceTest, TestDevToolsInvalidBundledURLWithQueryParam) { @@ -133,7 +150,8 @@ TEST_F(DevToolsUIDataSourceTest, TestDevToolsInvalidBundledURLWithQueryParam) { DevToolsUrl().Resolve(DevToolsBundledPath("invalid_devtools_app.html")); StartRequest(path.path() + "?foo"); EXPECT_TRUE(data_received()); - EXPECT_TRUE(data().empty()); + ASSERT_TRUE(base::StartsWith(data(), kDevToolsUITest404Response, + base::CompareCase::SENSITIVE)); } // devtools/blank path @@ -159,8 +177,9 @@ TEST_F(DevToolsUIDataSourceTest, TestDevToolsRemoteURL) { DevToolsUrl().Resolve(DevToolsRemotePath(kDevToolsUITestFrontEndUrl)); StartRequest(path.path()); EXPECT_TRUE(data_received()); - EXPECT_EQ(data(), - "https://chrome-devtools-frontend.appspot.com/devtools_app.html"); + EXPECT_EQ( + data(), + "url: https://chrome-devtools-frontend.appspot.com/devtools_app.html"); } TEST_F(DevToolsUIDataSourceTest, TestDevToolsRemoteURLWithQueryParam) { @@ -179,7 +198,8 @@ TEST_F(DevToolsUIDataSourceTest, TestDevToolsCustomURLWithNoSwitch) { DevToolsUrl().Resolve(DevToolsCustomPath(kDevToolsUITestFrontEndUrl)); StartRequest(path.path()); EXPECT_TRUE(data_received()); - EXPECT_TRUE(data().empty()); + ASSERT_TRUE(base::StartsWith(data(), kDevToolsUITest404Response, + base::CompareCase::SENSITIVE)); } TEST_F(DevToolsUIDataSourceTest, TestDevToolsCustomURLWithSwitch) { @@ -189,7 +209,7 @@ TEST_F(DevToolsUIDataSourceTest, TestDevToolsCustomURLWithSwitch) { DevToolsUrl().Resolve(DevToolsCustomPath(kDevToolsUITestFrontEndUrl)); StartRequest(path.path()); EXPECT_TRUE(data_received()); - EXPECT_EQ(data(), "http://localhost:8090/front_end/devtools_app.html"); + EXPECT_EQ(data(), "url: http://localhost:8090/front_end/devtools_app.html"); } TEST_F(DevToolsUIDataSourceTest, TestDevToolsCustomURLWithSwitchAndQueryParam) { @@ -199,7 +219,8 @@ TEST_F(DevToolsUIDataSourceTest, TestDevToolsCustomURLWithSwitchAndQueryParam) { DevToolsUrl().Resolve(DevToolsCustomPath(kDevToolsUITestFrontEndUrl)); StartRequest(path.path() + "?foo"); EXPECT_TRUE(data_received()); - EXPECT_EQ(data(), "http://localhost:8090/front_end/devtools_app.html?foo"); + EXPECT_EQ(data(), + "url: http://localhost:8090/front_end/devtools_app.html?foo"); } #if !DCHECK_IS_ON() @@ -222,7 +243,8 @@ TEST_F(DevToolsUIDataSourceTest, TestDevToolsNoRoute) { const GURL path = DevToolsUrl().Resolve(kDevToolsUITestFrontEndUrl); StartRequest(path.path()); EXPECT_TRUE(data_received()); - EXPECT_TRUE(data().empty()); + ASSERT_TRUE(base::StartsWith(data(), kDevToolsUITest404Response, + base::CompareCase::SENSITIVE)); } TEST_F(DevToolsUIDataSourceTest, TestDevToolsNoRouteWithSwitch) { @@ -231,5 +253,6 @@ TEST_F(DevToolsUIDataSourceTest, TestDevToolsNoRouteWithSwitch) { const GURL path = DevToolsUrl().Resolve(kDevToolsUITestFrontEndUrl); StartRequest(path.path()); EXPECT_TRUE(data_received()); - EXPECT_TRUE(data().empty()); + ASSERT_TRUE(base::StartsWith(data(), kDevToolsUITest404Response, + base::CompareCase::SENSITIVE)); } diff --git a/chromium/chrome/browser/ui/webui/discards/BUILD.gn b/chromium/chrome/browser/ui/webui/discards/BUILD.gn index 83e8fb4a145..cf71fc8ea10 100644 --- a/chromium/chrome/browser/ui/webui/discards/BUILD.gn +++ b/chromium/chrome/browser/ui/webui/discards/BUILD.gn @@ -11,8 +11,9 @@ if (is_win || is_mac || is_desktop_linux || is_chromeos) { ] public_deps = [ - "//chrome/browser/performance_manager:mojo_bindings", "//chrome/browser/resource_coordinator:mojo_bindings", + "//mojo/public/mojom/base", + "//url/mojom:url_mojom_gurl", ] } } diff --git a/chromium/chrome/browser/ui/webui/discards/DEPS b/chromium/chrome/browser/ui/webui/discards/DEPS deleted file mode 100644 index b6e5e564456..00000000000 --- a/chromium/chrome/browser/ui/webui/discards/DEPS +++ /dev/null @@ -1,10 +0,0 @@ -specific_include_rules = { - # TODO(siggi): Move WebUIGraphDumpImpl into this directory and kill these - # include rules. - "discards_ui.h": [ - "+chrome/browser/performance_manager/webui_graph_dump.mojom.h", - ], - "discards_ui.cc": [ - "+chrome/browser/performance_manager/webui_graph_dump_impl.h", - ], -} diff --git a/chromium/chrome/browser/ui/webui/discards/discards.mojom b/chromium/chrome/browser/ui/webui/discards/discards.mojom index 61d5f81d1cc..ca07b071130 100644 --- a/chromium/chrome/browser/ui/webui/discards/discards.mojom +++ b/chromium/chrome/browser/ui/webui/discards/discards.mojom @@ -2,10 +2,12 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -module mojom; +module discards.mojom; import "chrome/browser/resource_coordinator/lifecycle_unit_state.mojom"; +import "mojo/public/mojom/base/process_id.mojom"; import "mojo/public/mojom/base/time.mojom"; +import "url/mojom/url.mojom"; // Identical to content::Visibility. enum LifecycleUnitVisibility { @@ -91,9 +93,9 @@ struct TabDiscardsInfo { // The visibility of the LifecycleUnit. LifecycleUnitVisibility visibility; // The loading state of the LifecycleUnit. - LifecycleUnitLoadingState loading_state; + mojom.LifecycleUnitLoadingState loading_state; // The state of the LifecycleUnit. - LifecycleUnitState state; + mojom.LifecycleUnitState state; // Whether the tab can be frozen. bool can_freeze; // List of human-readable reasons why a tab can't be frozen. @@ -106,7 +108,7 @@ struct TabDiscardsInfo { // session. int32 discard_count; // If the tab is currently discarded, the discard reason. - LifecycleUnitDiscardReason discard_reason; + mojom.LifecycleUnitDiscardReason discard_reason; // The rank of the tab in the "importance to user" list. The tab with 1 is the // most important, the tab with N is the least important. int32 utility_rank; @@ -135,7 +137,7 @@ struct TabDiscardsInfo { // Interface for providing information about discards. Lives in the browser // process and is invoked in the renderer process via Javascript code running in // the chrome://discards WebUI. -interface DiscardsDetailsProvider { +interface DetailsProvider { // Returns an array of TabDiscardsInfo containing discard information about // each tab currently open in the browser, across all profiles. GetTabDiscardsInfo() => (array infos); @@ -177,3 +179,72 @@ interface DiscardsDetailsProvider { // if the decision was made not to discard. Discard(bool urgent) => (); }; + +// Represents the momentary state of a Page CU. +struct PageInfo { + int64 id; + + url.mojom.Url main_frame_url; + + // TODO(siggi): Estimate data. +}; + +// Represents the momentary state of a Frame CU. +struct FrameInfo { + int64 id; + + url.mojom.Url url; + int64 page_id; + int64 parent_frame_id; + int64 process_id; +}; + +// Represents the momentary state of a Process CU. +struct ProcessInfo { + int64 id; + + mojo_base.mojom.ProcessId pid; + mojo_base.mojom.TimeDelta cumulative_cpu_usage; + uint64 private_footprint_kb; +}; + +// Used to transport favicon data. +struct FavIconInfo { + int64 node_id; + + // Contains the base64-encoded icon data, suitable for inclusion in a + // data URL. + string icon_data; +}; + +// Implement to receive a stream of notifications when performance manager +// graph nodes are created, changed or deleted. +interface GraphChangeStream { + // The |frame| was created. + FrameCreated(FrameInfo frame); + // The |page| was created. + PageCreated(PageInfo pages); + // The |process| was created. + ProcessCreated(ProcessInfo process); + + // The |frame| changed. + FrameChanged(FrameInfo frame); + // The |page| changed. + PageChanged(PageInfo page); + // The |process| changed. + ProcessChanged(ProcessInfo process); + + // A |favicon| became available, whether because the associated page changed + // its favicon, or because an initial lookup completed. + FavIconDataAvailable(FavIconInfo favicon); + + // The node with |node_id| was deleted. + NodeDeleted(int64 node_id); +}; + +// This interface allows subscribing to a stream of events that track the state +// of the performance manager graph. +interface GraphDump { + // Subscribes |change_subscriber| to a graph change stream. + SubscribeToChanges(pending_remote change_subscriber); +}; diff --git a/chromium/chrome/browser/ui/webui/discards/discards_ui.cc b/chromium/chrome/browser/ui/webui/discards/discards_ui.cc index 04bc887b3d3..e37e9dfd219 100644 --- a/chromium/chrome/browser/ui/webui/discards/discards_ui.cc +++ b/chromium/chrome/browser/ui/webui/discards/discards_ui.cc @@ -14,8 +14,6 @@ #include "build/build_config.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/engagement/site_engagement_service.h" -#include "chrome/browser/performance_manager/performance_manager.h" -#include "chrome/browser/performance_manager/webui_graph_dump_impl.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/resource_coordinator/lifecycle_unit.h" #include "chrome/browser/resource_coordinator/lifecycle_unit_state.mojom.h" @@ -27,10 +25,12 @@ #include "chrome/browser/resource_coordinator/tab_manager.h" #include "chrome/browser/resource_coordinator/time.h" #include "chrome/browser/ui/webui/discards/discards.mojom.h" +#include "chrome/browser/ui/webui/discards/graph_dump_impl.h" #include "chrome/browser/ui/webui/favicon_source.h" #include "chrome/common/webui_url_constants.h" #include "chrome/grit/browser_resources.h" #include "components/favicon_base/favicon_url_parser.h" +#include "components/performance_manager/public/performance_manager.h" #include "content/public/browser/navigation_controller.h" #include "content/public/browser/navigation_entry.h" #include "content/public/browser/url_data_source.h" @@ -38,8 +38,8 @@ #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_data_source.h" #include "content/public/browser/web_ui_message_handler.h" -#include "mojo/public/cpp/bindings/binding.h" -#include "services/resource_coordinator/public/mojom/service_constants.mojom.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/receiver.h" #include "ui/resources/grit/ui_resources.h" #include "url/gurl.h" #include "url/origin.h" @@ -51,19 +51,19 @@ mojom::LifecycleUnitDiscardReason GetDiscardReason(bool urgent) { : mojom::LifecycleUnitDiscardReason::PROACTIVE; } -mojom::LifecycleUnitVisibility GetLifecycleUnitVisibility( +discards::mojom::LifecycleUnitVisibility GetLifecycleUnitVisibility( content::Visibility visibility) { switch (visibility) { case content::Visibility::HIDDEN: - return mojom::LifecycleUnitVisibility::HIDDEN; + return discards::mojom::LifecycleUnitVisibility::HIDDEN; case content::Visibility::OCCLUDED: - return mojom::LifecycleUnitVisibility::OCCLUDED; + return discards::mojom::LifecycleUnitVisibility::OCCLUDED; case content::Visibility::VISIBLE: - return mojom::LifecycleUnitVisibility::VISIBLE; + return discards::mojom::LifecycleUnitVisibility::VISIBLE; } #if defined(COMPILER_MSVC) NOTREACHED(); - return mojom::LifecycleUnitVisibility::VISIBLE; + return discards::mojom::LifecycleUnitVisibility::VISIBLE; #endif } @@ -93,10 +93,10 @@ double GetSiteEngagementScore(content::WebContents* contents) { return engagement_svc->GetDetails(nav_entry->GetURL()).total_score; } -mojom::SiteCharacteristicsFeaturePtr ConvertFeatureFromProto( +discards::mojom::SiteCharacteristicsFeaturePtr ConvertFeatureFromProto( const SiteDataFeatureProto& proto) { - mojom::SiteCharacteristicsFeaturePtr feature = - mojom::SiteCharacteristicsFeature::New(); + discards::mojom::SiteCharacteristicsFeaturePtr feature = + discards::mojom::SiteCharacteristicsFeature::New(); if (proto.has_observation_duration()) { feature->observation_duration = proto.observation_duration(); @@ -113,10 +113,10 @@ mojom::SiteCharacteristicsFeaturePtr ConvertFeatureFromProto( return feature; } -mojom::SiteCharacteristicsDatabaseEntryPtr ConvertEntryFromProto( +discards::mojom::SiteCharacteristicsDatabaseEntryPtr ConvertEntryFromProto( SiteDataProto* proto) { - mojom::SiteCharacteristicsDatabaseValuePtr value = - mojom::SiteCharacteristicsDatabaseValue::New(); + discards::mojom::SiteCharacteristicsDatabaseValuePtr value = + discards::mojom::SiteCharacteristicsDatabaseValue::New(); if (proto->has_last_loaded()) { value->last_loaded = proto->last_loaded(); @@ -137,8 +137,9 @@ mojom::SiteCharacteristicsDatabaseEntryPtr ConvertEntryFromProto( DCHECK(load_time_estimates_proto.has_avg_cpu_usage_us()); DCHECK(load_time_estimates_proto.has_avg_footprint_kb()); - mojom::SiteCharacteristicsPerformanceMeasurementPtr load_time_estimates = - mojom::SiteCharacteristicsPerformanceMeasurement::New(); + discards::mojom::SiteCharacteristicsPerformanceMeasurementPtr + load_time_estimates = + discards::mojom::SiteCharacteristicsPerformanceMeasurement::New(); if (load_time_estimates_proto.has_avg_cpu_usage_us()) { load_time_estimates->avg_cpu_usage_us = load_time_estimates_proto.avg_cpu_usage_us(); @@ -155,32 +156,32 @@ mojom::SiteCharacteristicsDatabaseEntryPtr ConvertEntryFromProto( value->load_time_estimates = std::move(load_time_estimates); } - mojom::SiteCharacteristicsDatabaseEntryPtr entry = - mojom::SiteCharacteristicsDatabaseEntry::New(); + discards::mojom::SiteCharacteristicsDatabaseEntryPtr entry = + discards::mojom::SiteCharacteristicsDatabaseEntry::New(); entry->value = std::move(value); return entry; } -class DiscardsDetailsProviderImpl : public mojom::DiscardsDetailsProvider { +class DiscardsDetailsProviderImpl : public discards::mojom::DetailsProvider { public: // This instance is deleted when the supplied pipe is destroyed. DiscardsDetailsProviderImpl( resource_coordinator::LocalSiteCharacteristicsDataStoreInspector* data_store_inspector, - mojo::InterfaceRequest request) + mojo::PendingReceiver receiver) : data_store_inspector_(data_store_inspector), - binding_(this, std::move(request)) {} + receiver_(this, std::move(receiver)) {} ~DiscardsDetailsProviderImpl() override {} - // mojom::DiscardsDetailsProvider overrides: + // discards::mojom::DetailsProvider overrides: void GetTabDiscardsInfo(GetTabDiscardsInfoCallback callback) override { resource_coordinator::TabManager* tab_manager = g_browser_process->GetTabManager(); const resource_coordinator::LifecycleUnitVector lifecycle_units = tab_manager->GetSortedLifecycleUnits(); - std::vector infos; + std::vector infos; infos.reserve(lifecycle_units.size()); const base::TimeTicks now = resource_coordinator::NowTicks(); @@ -188,7 +189,8 @@ class DiscardsDetailsProviderImpl : public mojom::DiscardsDetailsProvider { // Convert the LifecycleUnits to a vector of TabDiscardsInfos. size_t rank = 1; for (auto* lifecycle_unit : lifecycle_units) { - mojom::TabDiscardsInfoPtr info(mojom::TabDiscardsInfo::New()); + discards::mojom::TabDiscardsInfoPtr info( + discards::mojom::TabDiscardsInfo::New()); resource_coordinator::TabLifecycleUnitExternal* tab_lifecycle_unit_external = @@ -308,7 +310,7 @@ class DiscardsDetailsProviderImpl : public mojom::DiscardsDetailsProvider { OriginToReaderMap requested_origins_; LocalSiteCharacteristicsDataStoreInspector* data_store_inspector_; - mojo::Binding binding_; + mojo::Receiver receiver_; DISALLOW_COPY_AND_ASSIGN(DiscardsDetailsProviderImpl); }; @@ -344,8 +346,8 @@ void DiscardsDetailsProviderImpl::GetSiteCharacteristicsDatabase( } } - mojom::SiteCharacteristicsDatabasePtr result = - mojom::SiteCharacteristicsDatabase::New(); + discards::mojom::SiteCharacteristicsDatabasePtr result = + discards::mojom::SiteCharacteristicsDatabase::New(); std::vector in_memory_origins = data_store_inspector_->GetAllInMemoryOrigins(); for (const url::Origin& origin : in_memory_origins) { @@ -378,8 +380,8 @@ void DiscardsDetailsProviderImpl::GetSiteCharacteristicsDatabaseSize( [](GetSiteCharacteristicsDatabaseSizeCallback callback, base::Optional num_rows, base::Optional on_disk_size_kb) { - mojom::SiteCharacteristicsDatabaseSizePtr result = - mojom::SiteCharacteristicsDatabaseSize::New(); + discards::mojom::SiteCharacteristicsDatabaseSizePtr result = + discards::mojom::SiteCharacteristicsDatabaseSize::New(); result->num_rows = num_rows.has_value() ? num_rows.value() : -1; result->on_disk_size_kb = on_disk_size_kb.has_value() ? on_disk_size_kb.value() : -1; @@ -425,8 +427,6 @@ DiscardsUI::DiscardsUI(content::WebUI* web_ui) source->AddResourcePath( "chrome/browser/resource_coordinator/lifecycle_unit_state.mojom-lite.js", IDR_DISCARDS_LIFECYCLE_UNIT_STATE_MOJOM_LITE_JS); - source->AddResourcePath("mojom/webui_graph_dump.mojom-lite.js", - IDR_DISCARDS_WEBUI_GRAPH_DUMP_MOJOM_LITE_JS); // Add the mojo base dependency for the WebUI Graph Dump. source->AddResourcePath( @@ -445,7 +445,7 @@ DiscardsUI::DiscardsUI(content::WebUI* web_ui) AddHandlerToRegistry(base::BindRepeating( &DiscardsUI::BindDiscardsDetailsProvider, base::Unretained(this))); AddHandlerToRegistry(base::BindRepeating( - &DiscardsUI::BindWebUIGraphDumpProvider, base::Unretained(this))); + &DiscardsUI::BindDiscardsGraphDumpProvider, base::Unretained(this))); data_store_inspector_ = resource_coordinator:: LocalSiteCharacteristicsDataStoreInspector::GetForProfile(profile); @@ -454,20 +454,17 @@ DiscardsUI::DiscardsUI(content::WebUI* web_ui) DiscardsUI::~DiscardsUI() {} void DiscardsUI::BindDiscardsDetailsProvider( - mojom::DiscardsDetailsProviderRequest request) { + mojo::PendingReceiver receiver) { ui_handler_ = std::make_unique( - data_store_inspector_, std::move(request)); + data_store_inspector_, std::move(receiver)); } -void DiscardsUI::BindWebUIGraphDumpProvider( - performance_manager::mojom::WebUIGraphDumpRequest request) { - performance_manager::PerformanceManager* performance_manager = - performance_manager::PerformanceManager::GetInstance(); - if (performance_manager) { - // Forward the interface request directly to the service. - performance_manager->CallOnGraph( - FROM_HERE, - base::BindOnce(&performance_manager::WebUIGraphDumpImpl::CreateAndBind, - std::move(request))); +void DiscardsUI::BindDiscardsGraphDumpProvider( + mojo::PendingReceiver receiver) { + if (performance_manager::PerformanceManager::IsAvailable()) { + // Forward the interface receiver directly to the service. + performance_manager::PerformanceManager::CallOnGraph( + FROM_HERE, base::BindOnce(&DiscardsGraphDumpImpl::CreateAndBind, + std::move(receiver))); } } diff --git a/chromium/chrome/browser/ui/webui/discards/discards_ui.h b/chromium/chrome/browser/ui/webui/discards/discards_ui.h index 1ec8c1c6657..fa360e2f090 100644 --- a/chromium/chrome/browser/ui/webui/discards/discards_ui.h +++ b/chromium/chrome/browser/ui/webui/discards/discards_ui.h @@ -8,8 +8,8 @@ #include #include "base/macros.h" -#include "chrome/browser/performance_manager/webui_graph_dump.mojom.h" #include "chrome/browser/ui/webui/discards/discards.mojom.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "ui/webui/mojo_web_ui_controller.h" namespace resource_coordinator { @@ -25,11 +25,11 @@ class DiscardsUI : public ui::MojoWebUIController { private: void BindDiscardsDetailsProvider( - mojom::DiscardsDetailsProviderRequest request); - void BindWebUIGraphDumpProvider( - performance_manager::mojom::WebUIGraphDumpRequest request); + mojo::PendingReceiver receiver); + void BindDiscardsGraphDumpProvider( + mojo::PendingReceiver receiver); - std::unique_ptr ui_handler_; + std::unique_ptr ui_handler_; resource_coordinator::LocalSiteCharacteristicsDataStoreInspector* data_store_inspector_; diff --git a/chromium/chrome/browser/ui/webui/discards/graph_dump_impl.cc b/chromium/chrome/browser/ui/webui/discards/graph_dump_impl.cc new file mode 100644 index 00000000000..76662a2a199 --- /dev/null +++ b/chromium/chrome/browser/ui/webui/discards/graph_dump_impl.cc @@ -0,0 +1,396 @@ +// 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/discards/graph_dump_impl.h" + +#include +#include + +#include "base/base64.h" +#include "base/bind.h" +#include "base/macros.h" +#include "base/task/cancelable_task_tracker.h" +#include "base/task/post_task.h" +#include "base/threading/sequenced_task_runner_handle.h" +#include "chrome/browser/favicon/favicon_service_factory.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/webui/discards/discards.mojom.h" +#include "components/favicon/core/favicon_service.h" +#include "components/favicon_base/favicon_callback.h" +#include "components/performance_manager/public/graph/graph.h" +#include "components/performance_manager/public/performance_manager.h" +#include "components/performance_manager/public/web_contents_proxy.h" +#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" +#include "content/public/browser/web_contents.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/remote.h" + +namespace { + +int64_t GetSerializationId(const performance_manager::Node* node) { + return performance_manager::Node::GetSerializationId(node); +} + +} // namespace + +class DiscardsGraphDumpImpl::FaviconRequestHelper { + public: + FaviconRequestHelper(base::WeakPtr graph_dump, + scoped_refptr task_runner); + + void RequestFavicon(GURL page_url, + performance_manager::WebContentsProxy contents_proxy, + int64_t serialization_id); + void FaviconDataAvailable(int64_t serialization_id, + const favicon_base::FaviconRawBitmapResult& result); + + private: + std::unique_ptr cancelable_task_tracker_; + + base::WeakPtr graph_dump_; + scoped_refptr task_runner_; + + SEQUENCE_CHECKER(sequence_checker_); + + DISALLOW_COPY_AND_ASSIGN(FaviconRequestHelper); +}; + +DiscardsGraphDumpImpl::FaviconRequestHelper::FaviconRequestHelper( + base::WeakPtr graph_dump, + scoped_refptr task_runner) + : graph_dump_(graph_dump), task_runner_(task_runner) { + DETACH_FROM_SEQUENCE(sequence_checker_); +} + +void DiscardsGraphDumpImpl::FaviconRequestHelper::RequestFavicon( + GURL page_url, + performance_manager::WebContentsProxy contents_proxy, + int64_t serialization_id) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + content::WebContents* web_contents = contents_proxy.Get(); + if (!web_contents) + return; + + Profile* profile = + Profile::FromBrowserContext(web_contents->GetBrowserContext()); + if (!profile) + return; + + favicon::FaviconService* favicon_service = + FaviconServiceFactory::GetForProfile(profile, + ServiceAccessType::EXPLICIT_ACCESS); + if (!favicon_service) + return; + + if (!cancelable_task_tracker_) + cancelable_task_tracker_ = std::make_unique(); + + constexpr size_t kIconSize = 16; + constexpr bool kFallbackToHost = true; + // It's safe to pass this unretained here, as the tasks are cancelled + // on deletion of the cancelable task tracker. + favicon_service->GetRawFaviconForPageURL( + page_url, {favicon_base::IconType::kFavicon}, kIconSize, kFallbackToHost, + base::BindRepeating(&FaviconRequestHelper::FaviconDataAvailable, + base::Unretained(this), serialization_id), + cancelable_task_tracker_.get()); +} + +void DiscardsGraphDumpImpl::FaviconRequestHelper::FaviconDataAvailable( + int64_t serialization_id, + const favicon_base::FaviconRawBitmapResult& result) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + if (!result.is_valid()) + return; + + task_runner_->PostTask( + FROM_HERE, + base::BindOnce(&DiscardsGraphDumpImpl::SendFaviconNotification, + graph_dump_, serialization_id, result.bitmap_data)); +} + +DiscardsGraphDumpImpl::DiscardsGraphDumpImpl() {} + +DiscardsGraphDumpImpl::~DiscardsGraphDumpImpl() { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK(!graph_); + DCHECK(!change_subscriber_); + DCHECK(!favicon_request_helper_); +} + +// static +void DiscardsGraphDumpImpl::CreateAndBind( + mojo::PendingReceiver receiver, + performance_manager::Graph* graph) { + std::unique_ptr dump = + std::make_unique(); + + dump->BindWithGraph(graph, std::move(receiver)); + graph->PassToGraph(std::move(dump)); +} + +void DiscardsGraphDumpImpl::BindWithGraph( + performance_manager::Graph* graph, + mojo::PendingReceiver receiver) { + receiver_.Bind(std::move(receiver)); + receiver_.set_disconnect_handler(base::BindOnce( + &DiscardsGraphDumpImpl::OnConnectionError, base::Unretained(this))); +} + +namespace { + +template +void ForFrameAndOffspring(const performance_manager::FrameNode* parent_frame, + FunctionType on_frame) { + on_frame(parent_frame); + + for (const performance_manager::FrameNode* child_frame : + parent_frame->GetChildFrameNodes()) + ForFrameAndOffspring(child_frame, on_frame); +} + +} // namespace + +void DiscardsGraphDumpImpl::SubscribeToChanges( + mojo::PendingRemote change_subscriber) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + change_subscriber_.Bind(std::move(change_subscriber)); + + // Send creation notifications for all existing nodes. + for (const performance_manager::ProcessNode* process_node : + graph_->GetAllProcessNodes()) + SendProcessNotification(process_node, true); + + for (const performance_manager::PageNode* page_node : + graph_->GetAllPageNodes()) { + SendPageNotification(page_node, true); + StartPageFaviconRequest(page_node); + + // Dispatch preorder frame notifications. + for (const performance_manager::FrameNode* main_frame_node : + page_node->GetMainFrameNodes()) { + ForFrameAndOffspring( + main_frame_node, + [this](const performance_manager::FrameNode* frame_node) { + this->SendFrameNotification(frame_node, true); + this->StartFrameFaviconRequest(frame_node); + }); + } + } + + // Subscribe to subsequent notifications. + graph_->AddFrameNodeObserver(this); + graph_->AddPageNodeObserver(this); + graph_->AddProcessNodeObserver(this); +} + +void DiscardsGraphDumpImpl::OnPassedToGraph(performance_manager::Graph* graph) { + DCHECK(!graph_); + graph_ = graph; +} + +void DiscardsGraphDumpImpl::OnTakenFromGraph( + performance_manager::Graph* graph) { + DCHECK_EQ(graph_, graph); + + if (change_subscriber_) { + graph_->RemoveFrameNodeObserver(this); + graph_->RemovePageNodeObserver(this); + graph_->RemoveProcessNodeObserver(this); + } + + change_subscriber_.reset(); + + // The favicon helper must be deleted on the UI thread. + if (favicon_request_helper_) { + content::BrowserThread::DeleteSoon(content::BrowserThread::UI, FROM_HERE, + std::move(favicon_request_helper_)); + } + + graph_ = nullptr; +} + +void DiscardsGraphDumpImpl::OnFrameNodeAdded( + const performance_manager::FrameNode* frame_node) { + SendFrameNotification(frame_node, true); + StartFrameFaviconRequest(frame_node); +} + +void DiscardsGraphDumpImpl::OnBeforeFrameNodeRemoved( + const performance_manager::FrameNode* frame_node) { + SendDeletionNotification(frame_node); +} + +void DiscardsGraphDumpImpl::OnURLChanged( + const performance_manager::FrameNode* frame_node, + const GURL& previous_value) { + SendFrameNotification(frame_node, false); + StartFrameFaviconRequest(frame_node); +} + +void DiscardsGraphDumpImpl::OnPageNodeAdded( + const performance_manager::PageNode* page_node) { + SendPageNotification(page_node, true); + StartPageFaviconRequest(page_node); +} + +void DiscardsGraphDumpImpl::OnBeforePageNodeRemoved( + const performance_manager::PageNode* page_node) { + SendDeletionNotification(page_node); +} + +void DiscardsGraphDumpImpl::OnFaviconUpdated( + const performance_manager::PageNode* page_node) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + StartPageFaviconRequest(page_node); +} + +void DiscardsGraphDumpImpl::OnMainFrameUrlChanged( + const performance_manager::PageNode* page_node) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + SendPageNotification(page_node, false); +} + +void DiscardsGraphDumpImpl::OnProcessNodeAdded( + const performance_manager::ProcessNode* process_node) { + SendProcessNotification(process_node, true); +} + +void DiscardsGraphDumpImpl::OnProcessLifetimeChange( + const performance_manager::ProcessNode* process_node) { + SendProcessNotification(process_node, false); +} + +void DiscardsGraphDumpImpl::OnBeforeProcessNodeRemoved( + const performance_manager::ProcessNode* process_node) { + SendDeletionNotification(process_node); +} + +DiscardsGraphDumpImpl::FaviconRequestHelper* +DiscardsGraphDumpImpl::EnsureFaviconRequestHelper() { + if (!favicon_request_helper_) { + favicon_request_helper_ = std::make_unique( + weak_factory_.GetWeakPtr(), base::SequencedTaskRunnerHandle::Get()); + } + + return favicon_request_helper_.get(); +} + +void DiscardsGraphDumpImpl::StartPageFaviconRequest( + const performance_manager::PageNode* page_node) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + if (!page_node->GetMainFrameUrl().is_valid()) + return; + + base::PostTask(FROM_HERE, {content::BrowserThread::UI}, + base::BindOnce(&FaviconRequestHelper::RequestFavicon, + base::Unretained(EnsureFaviconRequestHelper()), + page_node->GetMainFrameUrl(), + page_node->GetContentsProxy(), + GetSerializationId(page_node))); +} + +void DiscardsGraphDumpImpl::StartFrameFaviconRequest( + const performance_manager::FrameNode* frame_node) { + if (!frame_node->GetURL().is_valid()) + return; + + base::PostTask(FROM_HERE, {content::BrowserThread::UI}, + base::BindOnce(&FaviconRequestHelper::RequestFavicon, + base::Unretained(EnsureFaviconRequestHelper()), + frame_node->GetURL(), + frame_node->GetPageNode()->GetContentsProxy(), + GetSerializationId(frame_node))); +} + +void DiscardsGraphDumpImpl::SendFrameNotification( + const performance_manager::FrameNode* frame, + bool created) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + // TODO(https://crbug.com/961785): Add more frame properties. + discards::mojom::FrameInfoPtr frame_info = discards::mojom::FrameInfo::New(); + + frame_info->id = GetSerializationId(frame); + + auto* parent_frame = frame->GetParentFrameNode(); + frame_info->parent_frame_id = GetSerializationId(parent_frame); + + auto* process = frame->GetProcessNode(); + frame_info->process_id = GetSerializationId(process); + + auto* page = frame->GetPageNode(); + frame_info->page_id = GetSerializationId(page); + + frame_info->url = frame->GetURL(); + + if (created) + change_subscriber_->FrameCreated(std::move(frame_info)); + else + change_subscriber_->FrameChanged(std::move(frame_info)); +} + +void DiscardsGraphDumpImpl::SendPageNotification( + const performance_manager::PageNode* page_node, + bool created) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + // TODO(https://crbug.com/961785): Add more page_node properties. + discards::mojom::PageInfoPtr page_info = discards::mojom::PageInfo::New(); + + page_info->id = GetSerializationId(page_node); + page_info->main_frame_url = page_node->GetMainFrameUrl(); + if (created) + change_subscriber_->PageCreated(std::move(page_info)); + else + change_subscriber_->PageChanged(std::move(page_info)); +} + +void DiscardsGraphDumpImpl::SendProcessNotification( + const performance_manager::ProcessNode* process, + bool created) { + // TODO(https://crbug.com/961785): Add more process properties. + discards::mojom::ProcessInfoPtr process_info = + discards::mojom::ProcessInfo::New(); + + process_info->id = GetSerializationId(process); + process_info->pid = process->GetProcessId(); + process_info->cumulative_cpu_usage = process->GetCumulativeCpuUsage(); + process_info->private_footprint_kb = process->GetPrivateFootprintKb(); + + if (created) + change_subscriber_->ProcessCreated(std::move(process_info)); + else + change_subscriber_->ProcessChanged(std::move(process_info)); +} + +void DiscardsGraphDumpImpl::SendDeletionNotification( + const performance_manager::Node* node) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + change_subscriber_->NodeDeleted(GetSerializationId(node)); +} + +void DiscardsGraphDumpImpl::SendFaviconNotification( + int64_t serialization_id, + scoped_refptr bitmap_data) { + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + DCHECK_NE(0u, bitmap_data->size()); + + discards::mojom::FavIconInfoPtr icon_info = + discards::mojom::FavIconInfo::New(); + icon_info->node_id = serialization_id; + + base::Base64Encode( + base::StringPiece(reinterpret_cast(bitmap_data->front()), + bitmap_data->size()), + &icon_info->icon_data); + + change_subscriber_->FavIconDataAvailable(std::move(icon_info)); +} + +// static +void DiscardsGraphDumpImpl::OnConnectionError(DiscardsGraphDumpImpl* impl) { + std::unique_ptr owned_impl = impl->graph_->TakeFromGraph(impl); +} diff --git a/chromium/chrome/browser/ui/webui/discards/graph_dump_impl.h b/chromium/chrome/browser/ui/webui/discards/graph_dump_impl.h new file mode 100644 index 00000000000..b973761978a --- /dev/null +++ b/chromium/chrome/browser/ui/webui/discards/graph_dump_impl.h @@ -0,0 +1,187 @@ +// 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. + +#ifndef CHROME_BROWSER_UI_WEBUI_DISCARDS_GRAPH_DUMP_IMPL_H_ +#define CHROME_BROWSER_UI_WEBUI_DISCARDS_GRAPH_DUMP_IMPL_H_ + +#include + +#include "base/memory/ref_counted_memory.h" +#include "base/memory/weak_ptr.h" +#include "base/sequence_checker.h" +#include "chrome/browser/ui/webui/discards/discards.mojom.h" +#include "components/performance_manager/public/graph/frame_node.h" +#include "components/performance_manager/public/graph/graph.h" +#include "components/performance_manager/public/graph/page_node.h" +#include "components/performance_manager/public/graph/process_node.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/remote.h" + +// TODO(siggi): Add workers to the WebUI graph. +class DiscardsGraphDumpImpl : public discards::mojom::GraphDump, + public performance_manager::GraphOwned, + public performance_manager::FrameNodeObserver, + public performance_manager::PageNodeObserver, + public performance_manager::ProcessNodeObserver { + public: + DiscardsGraphDumpImpl(); + ~DiscardsGraphDumpImpl() override; + + // Creates a new DiscardsGraphDumpImpl to service |receiver| and passes its + // ownership to |graph|. + static void CreateAndBind( + mojo::PendingReceiver receiver, + performance_manager::Graph* graph); + + // Exposed for testing. + void BindWithGraph( + performance_manager::Graph* graph, + mojo::PendingReceiver receiver); + + protected: + // WebUIGraphDump implementation. + void SubscribeToChanges( + mojo::PendingRemote change_subscriber) + override; + + // GraphOwned implementation. + void OnPassedToGraph(performance_manager::Graph* graph) override; + void OnTakenFromGraph(performance_manager::Graph* graph) override; + + // FrameNodeObserver implementation: + void OnFrameNodeAdded( + const performance_manager::FrameNode* frame_node) override; + void OnBeforeFrameNodeRemoved( + const performance_manager::FrameNode* frame_node) override; + // Ignored. + void OnIsCurrentChanged( + const performance_manager::FrameNode* frame_node) override {} + // Ignored. + void OnNetworkAlmostIdleChanged( + const performance_manager::FrameNode* frame_node) override {} + // Ignored. + void OnFrameLifecycleStateChanged( + const performance_manager::FrameNode* frame_node) override {} + // Ignored. + void OnOriginTrialFreezePolicyChanged( + const performance_manager::FrameNode* frame_node, + const InterventionPolicy& previous_value) override {} + void OnURLChanged(const performance_manager::FrameNode* frame_node, + const GURL& previous_value) override; + // Ignored. + void OnIsAdFrameChanged( + const performance_manager::FrameNode* frame_node) override {} + // Ignored. + void OnFrameIsHoldingWebLockChanged( + const performance_manager::FrameNode* frame_node) override {} + // Ignored. + void OnFrameIsHoldingIndexedDBLockChanged( + const performance_manager::FrameNode* frame_node) override {} + // Ignored. + void OnNonPersistentNotificationCreated( + const performance_manager::FrameNode* frame_node) override {} + // Ignored. + void OnPriorityAndReasonChanged( + const performance_manager::FrameNode* frame_node) override {} + + // PageNodeObserver implementation: + void OnPageNodeAdded(const performance_manager::PageNode* page_node) override; + void OnBeforePageNodeRemoved( + const performance_manager::PageNode* page_node) override; + void OnIsVisibleChanged( + const performance_manager::PageNode* page_node) override {} // Ignored. + void OnIsAudibleChanged( + const performance_manager::PageNode* page_node) override {} // Ignored. + void OnIsLoadingChanged( + const performance_manager::PageNode* page_node) override {} // Ignored. + void OnUkmSourceIdChanged( + const performance_manager::PageNode* page_node) override {} // Ignored. + // Ignored. + void OnPageLifecycleStateChanged( + const performance_manager::PageNode* page_node) override {} + // Ignored. + void OnPageOriginTrialFreezePolicyChanged( + const performance_manager::PageNode* page_node) override {} + // Ignored. + void OnPageIsHoldingWebLockChanged( + const performance_manager::PageNode* page_node) override {} + // Ignored. + void OnPageIsHoldingIndexedDBLockChanged( + const performance_manager::PageNode* page_node) override {} + void OnMainFrameUrlChanged( + const performance_manager::PageNode* page_node) override; + // Ignored. + void OnPageAlmostIdleChanged( + const performance_manager::PageNode* page_node) override {} + void OnMainFrameDocumentChanged( + const performance_manager::PageNode* page_node) override {} + void OnTitleUpdated(const performance_manager::PageNode* page_node) override { + } // Ignored. + void OnFaviconUpdated( + const performance_manager::PageNode* page_node) override; + + // ProcessNodeObserver implementation: + void OnProcessNodeAdded( + const performance_manager::ProcessNode* process_node) override; + void OnProcessLifetimeChange( + const performance_manager::ProcessNode* process_node) override; + void OnBeforeProcessNodeRemoved( + const performance_manager::ProcessNode* process_node) override; + void OnExpectedTaskQueueingDurationSample( + const performance_manager::ProcessNode* process_node) override { + } // Ignored. + // Ignored. + void OnMainThreadTaskLoadIsLow( + const performance_manager::ProcessNode* process_node) override {} + // Ignored. + void OnAllFramesInProcessFrozen( + const performance_manager::ProcessNode* process_node) override {} + + private: + // The favicon requests happen on the UI thread. This helper class + // maintains the state required to do that. + class FaviconRequestHelper; + + FaviconRequestHelper* EnsureFaviconRequestHelper(); + + void StartPageFaviconRequest(const performance_manager::PageNode* page_node); + void StartFrameFaviconRequest( + const performance_manager::FrameNode* frame_node); + + void SendFrameNotification(const performance_manager::FrameNode* frame, + bool created); + void SendPageNotification(const performance_manager::PageNode* page, + bool created); + void SendProcessNotification(const performance_manager::ProcessNode* process, + bool created); + void SendDeletionNotification(const performance_manager::Node* node); + void SendFaviconNotification( + int64_t serialization_id, + scoped_refptr bitmap_data); + + static void BindOnPMSequence( + mojo::PendingReceiver receiver, + performance_manager::Graph* graph); + static void OnConnectionError(DiscardsGraphDumpImpl* impl); + + performance_manager::Graph* graph_ = nullptr; + + std::unique_ptr favicon_request_helper_; + + // The current change subscriber to this dumper. This instance is subscribed + // to every node in |graph_| save for the system node, so long as there is a + // subscriber. + mojo::Remote change_subscriber_; + mojo::Receiver receiver_{this}; + + SEQUENCE_CHECKER(sequence_checker_); + + base::WeakPtrFactory weak_factory_{this}; + + DISALLOW_COPY_AND_ASSIGN(DiscardsGraphDumpImpl); +}; + +#endif // CHROME_BROWSER_UI_WEBUI_DISCARDS_GRAPH_DUMP_IMPL_H_ diff --git a/chromium/chrome/browser/ui/webui/discards/graph_dump_impl_unittest.cc b/chromium/chrome/browser/ui/webui/discards/graph_dump_impl_unittest.cc new file mode 100644 index 00000000000..8cdbbdd70a9 --- /dev/null +++ b/chromium/chrome/browser/ui/webui/discards/graph_dump_impl_unittest.cc @@ -0,0 +1,224 @@ +// 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/discards/graph_dump_impl.h" + +#include +#include +#include + +#include "base/run_loop.h" +#include "base/stl_util.h" +#include "base/test/bind_test_util.h" +#include "base/time/time.h" +#include "chrome/browser/ui/webui/discards/discards.mojom.h" +#include "components/performance_manager/test_support/graph_impl.h" +#include "components/performance_manager/test_support/mock_graphs.h" +#include "content/public/test/browser_task_environment.h" +#include "mojo/public/cpp/bindings/interface_request.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/remote.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace { + +using performance_manager::NodeBase; + +class TestChangeStream : public discards::mojom::GraphChangeStream { + public: + using FrameMap = std::map; + using PageMap = std::map; + using ProcessMap = std::map; + using IdSet = std::set; + + TestChangeStream() {} + + mojo::PendingRemote GetRemote() { + mojo::PendingRemote remote; + + receiver_.Bind(remote.InitWithNewPipeAndPassReceiver()); + + return remote; + } + + // discards::mojom::GraphChangeStream implementation + void FrameCreated(discards::mojom::FrameInfoPtr frame) override { + EXPECT_FALSE(HasId(frame->id)); + // If the node has a parent frame, we must have heard of it. + EXPECT_TRUE(HasIdIfValid(frame->parent_frame_id)); + EXPECT_TRUE(HasId(frame->page_id)); + EXPECT_TRUE(HasId(frame->process_id)); + + id_set_.insert(frame->id); + frame_map_.insert(std::make_pair(frame->id, std::move(frame))); + } + + void PageCreated(discards::mojom::PageInfoPtr page) override { + EXPECT_FALSE(HasId(page->id)); + id_set_.insert(page->id); + page_map_.insert(std::make_pair(page->id, std::move(page))); + } + + void ProcessCreated(discards::mojom::ProcessInfoPtr process) override { + EXPECT_FALSE(HasId(process->id)); + id_set_.insert(process->id); + process_map_.insert(std::make_pair(process->id, std::move(process))); + } + + void FrameChanged(discards::mojom::FrameInfoPtr frame) override { + EXPECT_TRUE(HasId(frame->id)); + frame_map_[frame->id] = std::move(frame); + ++num_changes_; + } + + void PageChanged(discards::mojom::PageInfoPtr page) override { + EXPECT_TRUE(HasId(page->id)); + page_map_[page->id] = std::move(page); + ++num_changes_; + } + + void ProcessChanged(discards::mojom::ProcessInfoPtr process) override { + EXPECT_TRUE(HasId(process->id)); + process_map_[process->id] = std::move(process); + ++num_changes_; + } + + void FavIconDataAvailable(discards::mojom::FavIconInfoPtr favicon) override {} + + void NodeDeleted(int64_t node_id) override { + EXPECT_EQ(1u, id_set_.erase(node_id)); + + size_t erased = frame_map_.erase(node_id) + page_map_.erase(node_id) + + process_map_.erase(node_id); + EXPECT_EQ(1u, erased); + } + + const FrameMap& frame_map() const { return frame_map_; } + const PageMap& page_map() const { return page_map_; } + const ProcessMap& process_map() const { return process_map_; } + const IdSet& id_set() const { return id_set_; } + size_t num_changes() const { return num_changes_; } + + private: + bool HasId(int64_t id) { return base::Contains(id_set_, id); } + bool HasIdIfValid(int64_t id) { return id == 0u || HasId(id); } + + FrameMap frame_map_; + PageMap page_map_; + ProcessMap process_map_; + IdSet id_set_; + size_t num_changes_ = 0; + + mojo::Receiver receiver_{this}; +}; + +class DiscardsGraphDumpImplTest : public testing::Test { + public: + void TearDown() override { graph_.TearDown(); } + + protected: + performance_manager::TestGraphImpl graph_; +}; + +} // namespace + +TEST_F(DiscardsGraphDumpImplTest, ChangeStream) { + content::BrowserTaskEnvironment task_environment; + + performance_manager::MockMultiplePagesWithMultipleProcessesGraph mock_graph( + &graph_); + + base::TimeTicks now = base::TimeTicks::Now(); + + const GURL kExampleUrl("http://www.example.org"); + int64_t next_navigation_id = 1; + mock_graph.page->OnMainFrameNavigationCommitted( + false, now, next_navigation_id++, kExampleUrl); + mock_graph.other_page->OnMainFrameNavigationCommitted( + false, now, next_navigation_id++, kExampleUrl); + + auto* main_frame = mock_graph.page->GetMainFrameNodeImpl(); + main_frame->OnNavigationCommitted(kExampleUrl, /* same_document */ false); + + std::unique_ptr impl = + std::make_unique(); + DiscardsGraphDumpImpl* impl_raw = impl.get(); + // Create a mojo remote to the impl. + mojo::Remote graph_dump_remote; + impl->BindWithGraph(&graph_, graph_dump_remote.BindNewPipeAndPassReceiver()); + graph_.PassToGraph(std::move(impl)); + + TestChangeStream change_stream; + graph_dump_remote->SubscribeToChanges(change_stream.GetRemote()); + + task_environment.RunUntilIdle(); + + // Validate that the initial graph state dump is complete. + EXPECT_EQ(0u, change_stream.num_changes()); + EXPECT_EQ(7u, change_stream.id_set().size()); + + EXPECT_EQ(2u, change_stream.process_map().size()); + for (const auto& kv : change_stream.process_map()) { + EXPECT_NE(0u, kv.second->id); + } + + EXPECT_EQ(3u, change_stream.frame_map().size()); + + // Count the top-level frames as we go. + size_t top_level_frames = 0; + for (const auto& kv : change_stream.frame_map()) { + const auto& frame = kv.second; + if (frame->parent_frame_id == 0) { + ++top_level_frames; + + // Top level frames should have a page ID. + EXPECT_NE(0u, frame->page_id); + + // The page's main frame should have an URL. + if (frame->id == NodeBase::GetSerializationId(main_frame)) + EXPECT_EQ(kExampleUrl, frame->url); + } + EXPECT_NE(0u, frame->id); + EXPECT_NE(0u, frame->process_id); + } + + // Make sure we have one top-level frame per page. + EXPECT_EQ(change_stream.page_map().size(), top_level_frames); + + EXPECT_EQ(2u, change_stream.page_map().size()); + for (const auto& kv : change_stream.page_map()) { + const auto& page = kv.second; + EXPECT_NE(0u, page->id); + EXPECT_EQ(kExampleUrl, page->main_frame_url); + } + + // Test change notifications. + const GURL kAnotherURL("http://www.google.com/"); + mock_graph.page->OnMainFrameNavigationCommitted( + false, now, next_navigation_id++, kAnotherURL); + + size_t child_frame_id = + NodeBase::GetSerializationId(mock_graph.child_frame.get()); + mock_graph.child_frame.reset(); + + task_environment.RunUntilIdle(); + + // Main frame navigation results in a notification for the url. + EXPECT_EQ(1u, change_stream.num_changes()); + EXPECT_FALSE(base::Contains(change_stream.id_set(), child_frame_id)); + + const auto main_page_it = change_stream.page_map().find( + NodeBase::GetSerializationId(mock_graph.page.get())); + ASSERT_TRUE(main_page_it != change_stream.page_map().end()); + EXPECT_EQ(kAnotherURL, main_page_it->second->main_frame_url); + + task_environment.RunUntilIdle(); + + // Make sure the Dump impl is torn down when the proxy closes. + graph_dump_remote.reset(); + task_environment.RunUntilIdle(); + + EXPECT_EQ(nullptr, graph_.TakeFromGraph(impl_raw)); +} diff --git a/chromium/chrome/browser/ui/webui/domain_reliability_internals_ui.cc b/chromium/chrome/browser/ui/webui/domain_reliability_internals_ui.cc index 148a71455e2..ad01bdc9b11 100644 --- a/chromium/chrome/browser/ui/webui/domain_reliability_internals_ui.cc +++ b/chromium/chrome/browser/ui/webui/domain_reliability_internals_ui.cc @@ -13,6 +13,7 @@ #include "content/public/browser/storage_partition.h" #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_data_source.h" +#include "services/network/public/mojom/network_context.mojom.h" DomainReliabilityInternalsUI::DomainReliabilityInternalsUI( content::WebUI* web_ui) diff --git a/chromium/chrome/browser/ui/webui/download_internals/download_internals_ui_message_handler.cc b/chromium/chrome/browser/ui/webui/download_internals/download_internals_ui_message_handler.cc index eb6d5d61bf2..042cc501ff5 100644 --- a/chromium/chrome/browser/ui/webui/download_internals/download_internals_ui_message_handler.cc +++ b/chromium/chrome/browser/ui/webui/download_internals/download_internals_ui_message_handler.cc @@ -9,6 +9,7 @@ #include "base/values.h" #include "chrome/browser/download/download_service_factory.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/profiles/profile_key.h" #include "components/download/public/background_service/download_params.h" #include "components/download/public/background_service/download_service.h" #include "content/public/browser/web_ui.h" diff --git a/chromium/chrome/browser/ui/webui/downloads/OWNERS b/chromium/chrome/browser/ui/webui/downloads/OWNERS index e7f7501b22d..23fd391d6d7 100644 --- a/chromium/chrome/browser/ui/webui/downloads/OWNERS +++ b/chromium/chrome/browser/ui/webui/downloads/OWNERS @@ -1,6 +1,5 @@ file://components/download/OWNERS -asanka@chromium.org dbeam@chromium.org per-file *.mojom=set noparent diff --git a/chromium/chrome/browser/ui/webui/downloads/downloads.mojom b/chromium/chrome/browser/ui/webui/downloads/downloads.mojom index 07926b97e6c..4aa8113bce1 100644 --- a/chromium/chrome/browser/ui/webui/downloads/downloads.mojom +++ b/chromium/chrome/browser/ui/webui/downloads/downloads.mojom @@ -28,7 +28,8 @@ struct Data { }; interface PageHandlerFactory { - CreatePageHandler(Page page, PageHandler& handler); + CreatePageHandler(pending_remote page, + pending_receiver handler); }; interface PageHandler { diff --git a/chromium/chrome/browser/ui/webui/downloads/downloads_dom_handler.cc b/chromium/chrome/browser/ui/webui/downloads/downloads_dom_handler.cc index 6031ead5cc1..b2a05371724 100644 --- a/chromium/chrome/browser/ui/webui/downloads/downloads_dom_handler.cc +++ b/chromium/chrome/browser/ui/webui/downloads/downloads_dom_handler.cc @@ -8,6 +8,7 @@ #include #include #include +#include #include "base/bind.h" #include "base/bind_helpers.h" @@ -30,6 +31,7 @@ #include "chrome/browser/download/drag_download_item.h" #include "chrome/browser/platform_util.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/webui/downloads/downloads.mojom.h" #include "chrome/browser/ui/webui/fileicon_source.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/pref_names.h" @@ -44,6 +46,9 @@ #include "content/public/browser/url_data_source.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_ui.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" #include "net/base/filename_util.h" #include "ui/base/l10n/time_format.h" #include "ui/gfx/image/image.h" @@ -78,13 +83,13 @@ void CountDownloadsDOMEvents(DownloadsDOMEvent event) { } // namespace DownloadsDOMHandler::DownloadsDOMHandler( - downloads::mojom::PageHandlerRequest request, - downloads::mojom::PagePtr page, + mojo::PendingReceiver receiver, + mojo::PendingRemote page, content::DownloadManager* download_manager, content::WebUI* web_ui) : list_tracker_(download_manager, std::move(page)), web_ui_(web_ui), - binding_(this, std::move(request)) { + receiver_(this, std::move(receiver)) { // Create our fileicon data source. content::URLDataSource::Add( Profile::FromBrowserContext(download_manager->GetBrowserContext()), diff --git a/chromium/chrome/browser/ui/webui/downloads/downloads_dom_handler.h b/chromium/chrome/browser/ui/webui/downloads/downloads_dom_handler.h index 554d69b5316..a66442d2c00 100644 --- a/chromium/chrome/browser/ui/webui/downloads/downloads_dom_handler.h +++ b/chromium/chrome/browser/ui/webui/downloads/downloads_dom_handler.h @@ -13,10 +13,12 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "chrome/browser/download/download_danger_prompt.h" -#include "chrome/browser/ui/webui/downloads/downloads_list_tracker.h" #include "chrome/browser/ui/webui/downloads/downloads.mojom.h" +#include "chrome/browser/ui/webui/downloads/downloads_list_tracker.h" #include "content/public/browser/web_contents_observer.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" namespace content { class DownloadManager; @@ -34,10 +36,11 @@ class DownloadItem; class DownloadsDOMHandler : public content::WebContentsObserver, public downloads::mojom::PageHandler { public: - DownloadsDOMHandler(downloads::mojom::PageHandlerRequest request, - downloads::mojom::PagePtr page, - content::DownloadManager* download_manager, - content::WebUI* web_ui); + DownloadsDOMHandler( + mojo::PendingReceiver receiver, + mojo::PendingRemote page, + content::DownloadManager* download_manager, + content::WebUI* web_ui); ~DownloadsDOMHandler() override; // WebContentsObserver implementation. @@ -123,7 +126,7 @@ class DownloadsDOMHandler : public content::WebContentsObserver, content::WebUI* web_ui_; - mojo::Binding binding_; + mojo::Receiver receiver_; base::WeakPtrFactory weak_ptr_factory_{this}; diff --git a/chromium/chrome/browser/ui/webui/downloads/downloads_dom_handler_unittest.cc b/chromium/chrome/browser/ui/webui/downloads/downloads_dom_handler_unittest.cc index c4935b9397d..8b9d499e094 100644 --- a/chromium/chrome/browser/ui/webui/downloads/downloads_dom_handler_unittest.cc +++ b/chromium/chrome/browser/ui/webui/downloads/downloads_dom_handler_unittest.cc @@ -16,6 +16,8 @@ #include "content/public/test/mock_download_manager.h" #include "content/public/test/test_web_ui.h" #include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -23,13 +25,14 @@ namespace { class TestDownloadsDOMHandler : public DownloadsDOMHandler { public: - TestDownloadsDOMHandler(downloads::mojom::PagePtr page, + TestDownloadsDOMHandler(mojo::PendingRemote page, content::DownloadManager* download_manager, content::WebUI* web_ui) - : DownloadsDOMHandler(downloads::mojom::PageHandlerRequest(), - std::move(page), - download_manager, - web_ui) {} + : DownloadsDOMHandler( + mojo::PendingReceiver(), + std::move(page), + download_manager, + web_ui) {} using DownloadsDOMHandler::FinalizeRemovals; using DownloadsDOMHandler::RemoveDownloads; @@ -66,7 +69,8 @@ class DownloadsDOMHandlerTest : public testing::Test { TEST_F(DownloadsDOMHandlerTest, ChecksForRemovedFiles) { EXPECT_CALL(*manager(), CheckForHistoryFilesRemoval()); - TestDownloadsDOMHandler handler(page_.BindAndGetPtr(), manager(), web_ui()); + TestDownloadsDOMHandler handler(page_.BindAndGetRemote(), manager(), + web_ui()); testing::Mock::VerifyAndClear(manager()); @@ -74,7 +78,8 @@ TEST_F(DownloadsDOMHandlerTest, ChecksForRemovedFiles) { } TEST_F(DownloadsDOMHandlerTest, HandleGetDownloads) { - TestDownloadsDOMHandler handler(page_.BindAndGetPtr(), manager(), web_ui()); + TestDownloadsDOMHandler handler(page_.BindAndGetRemote(), manager(), + web_ui()); handler.GetDownloads(std::vector()); @@ -110,7 +115,8 @@ TEST_F(DownloadsDOMHandlerTest, ClearAll) { ASSERT_TRUE(DownloadItemModel(&completed).ShouldShowInShelf()); - TestDownloadsDOMHandler handler(page_.BindAndGetPtr(), manager(), web_ui()); + TestDownloadsDOMHandler handler(page_.BindAndGetRemote(), manager(), + web_ui()); handler.RemoveDownloads(downloads); // Ensure |completed| has been "soft removed" (i.e. can be revived). diff --git a/chromium/chrome/browser/ui/webui/downloads/downloads_list_tracker.cc b/chromium/chrome/browser/ui/webui/downloads/downloads_list_tracker.cc index 4c9e7443170..becddefb813 100644 --- a/chromium/chrome/browser/ui/webui/downloads/downloads_list_tracker.cc +++ b/chromium/chrome/browser/ui/webui/downloads/downloads_list_tracker.cc @@ -5,6 +5,7 @@ #include "chrome/browser/ui/webui/downloads/downloads_list_tracker.h" #include +#include #include #include "base/bind.h" @@ -22,12 +23,15 @@ #include "chrome/browser/download/download_query.h" #include "chrome/browser/extensions/api/downloads/downloads_api.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/webui/downloads/downloads.mojom.h" #include "components/download/public/common/download_danger_type.h" #include "components/download/public/common/download_item.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/download_item_utils.h" #include "content/public/browser/download_manager.h" #include "extensions/browser/extension_registry.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/remote.h" #include "net/base/filename_util.h" #include "third_party/icu/source/i18n/unicode/datefmt.h" #include "ui/base/l10n/time_format.h" @@ -62,6 +66,11 @@ const char* GetDangerTypeString(download::DownloadDangerType danger_type) { return "ASYNC_SCANNING"; case download::DOWNLOAD_DANGER_TYPE_BLOCKED_PASSWORD_PROTECTED: return "BLOCKED_PASSWORD_PROTECTED"; + case download::DOWNLOAD_DANGER_TYPE_BLOCKED_TOO_LARGE: + case download::DOWNLOAD_DANGER_TYPE_SENSITIVE_CONTENT_WARNING: + case download::DOWNLOAD_DANGER_TYPE_SENSITIVE_CONTENT_BLOCK: + case download::DOWNLOAD_DANGER_TYPE_DEEP_SCANNED_SAFE: + case download::DOWNLOAD_DANGER_TYPE_DEEP_SCANNED_OPENED_DANGEROUS: case download::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS: case download::DOWNLOAD_DANGER_TYPE_MAYBE_DANGEROUS_CONTENT: case download::DOWNLOAD_DANGER_TYPE_USER_VALIDATED: @@ -86,8 +95,9 @@ std::string TimeFormatLongDate(const base::Time& time) { } // namespace -DownloadsListTracker::DownloadsListTracker(DownloadManager* download_manager, - downloads::mojom::PagePtr page) +DownloadsListTracker::DownloadsListTracker( + DownloadManager* download_manager, + mojo::PendingRemote page) : main_notifier_(download_manager, this), page_(std::move(page)), should_show_(base::BindRepeating(&DownloadsListTracker::ShouldShow, @@ -181,7 +191,7 @@ void DownloadsListTracker::OnDownloadRemoved(DownloadManager* manager, DownloadsListTracker::DownloadsListTracker( DownloadManager* download_manager, - downloads::mojom::PagePtr page, + mojo::PendingRemote page, base::Callback should_show) : main_notifier_(download_manager, this), page_(std::move(page)), @@ -227,7 +237,7 @@ downloads::mojom::DataPtr DownloadsListTracker::CreateDownloadData( content::DownloadItemUtils::GetBrowserContext(download_item)); auto* registry = extensions::ExtensionRegistry::Get(profile); const extensions::Extension* extension = registry->GetExtensionById( - by_ext->id(), extensions::ExtensionRegistry::COMPATIBILITY); + by_ext->id(), extensions::ExtensionRegistry::EVERYTHING); if (extension) by_ext_name = extension->name(); } diff --git a/chromium/chrome/browser/ui/webui/downloads/downloads_list_tracker.h b/chromium/chrome/browser/ui/webui/downloads/downloads_list_tracker.h index 14e515b98ea..a54c75f995c 100644 --- a/chromium/chrome/browser/ui/webui/downloads/downloads_list_tracker.h +++ b/chromium/chrome/browser/ui/webui/downloads/downloads_list_tracker.h @@ -18,6 +18,8 @@ #include "chrome/browser/ui/webui/downloads/downloads.mojom.h" #include "components/download/content/public/all_download_item_notifier.h" #include "components/download/public/common/download_item.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/remote.h" namespace content { class DownloadManager; @@ -29,7 +31,7 @@ class DownloadsListTracker : public download::AllDownloadItemNotifier::Observer { public: DownloadsListTracker(content::DownloadManager* download_manager, - downloads::mojom::PagePtr page); + mojo::PendingRemote page); ~DownloadsListTracker() override; // Clears all downloads on the page if currently sending updates and resets @@ -62,7 +64,7 @@ class DownloadsListTracker protected: // Testing constructor. DownloadsListTracker(content::DownloadManager* download_manager, - downloads::mojom::PagePtr page, + mojo::PendingRemote page, base::Callback); // Creates a dictionary value that's sent to the page as JSON. @@ -108,7 +110,7 @@ class DownloadsListTracker download::AllDownloadItemNotifier main_notifier_; std::unique_ptr original_notifier_; - downloads::mojom::PagePtr page_; + mojo::Remote page_; // Callback used to determine if an item should show on the page. Set to // |ShouldShow()| in default constructor, passed in while testing. diff --git a/chromium/chrome/browser/ui/webui/downloads/downloads_list_tracker_unittest.cc b/chromium/chrome/browser/ui/webui/downloads/downloads_list_tracker_unittest.cc index 00ab6f9573c..d7e35feb888 100644 --- a/chromium/chrome/browser/ui/webui/downloads/downloads_list_tracker_unittest.cc +++ b/chromium/chrome/browser/ui/webui/downloads/downloads_list_tracker_unittest.cc @@ -8,6 +8,7 @@ #include #include +#include #include #include "base/bind.h" @@ -16,12 +17,14 @@ #include "base/strings/string_number_conversions.h" #include "base/time/time.h" #include "chrome/browser/download/download_item_model.h" +#include "chrome/browser/ui/webui/downloads/downloads.mojom.h" #include "chrome/browser/ui/webui/downloads/mock_downloads_page.h" #include "chrome/test/base/testing_profile.h" #include "components/download/public/common/mock_download_item.h" #include "content/public/test/browser_task_environment.h" #include "content/public/test/mock_download_manager.h" #include "content/public/test/test_web_ui.h" +#include "mojo/public/cpp/bindings/pending_remote.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -44,7 +47,7 @@ bool ShouldShowItem(const DownloadItem& item) { class TestDownloadsListTracker : public DownloadsListTracker { public: TestDownloadsListTracker(content::DownloadManager* manager, - downloads::mojom::PagePtr page) + mojo::PendingRemote page) : DownloadsListTracker(manager, std::move(page), base::BindRepeating(&ShouldShowItem)) {} @@ -98,7 +101,7 @@ class DownloadsListTrackerTest : public testing::Test { void CreateTracker() { tracker_.reset( - new TestDownloadsListTracker(manager(), page_.BindAndGetPtr())); + new TestDownloadsListTracker(manager(), page_.BindAndGetRemote())); } TestingProfile* profile() { return &profile_; } @@ -241,7 +244,7 @@ TEST_F(DownloadsListTrackerTest, Incognito) { ON_CALL(incognito_manager, GetDownload(0)).WillByDefault(Return(&item)); testing::StrictMock page; - TestDownloadsListTracker tracker(&incognito_manager, page.BindAndGetPtr()); + TestDownloadsListTracker tracker(&incognito_manager, page.BindAndGetRemote()); EXPECT_TRUE(tracker.IsIncognito(item)); } diff --git a/chromium/chrome/browser/ui/webui/downloads/downloads_ui.cc b/chromium/chrome/browser/ui/webui/downloads/downloads_ui.cc index e1c53488cb0..9fe51881e90 100644 --- a/chromium/chrome/browser/ui/webui/downloads/downloads_ui.cc +++ b/chromium/chrome/browser/ui/webui/downloads/downloads_ui.cc @@ -17,6 +17,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/safe_browsing/advanced_protection_status_manager.h" #include "chrome/browser/safe_browsing/advanced_protection_status_manager_factory.h" +#include "chrome/browser/ui/webui/downloads/downloads.mojom.h" #include "chrome/browser/ui/webui/downloads/downloads_dom_handler.h" #include "chrome/browser/ui/webui/localized_string.h" #include "chrome/browser/ui/webui/managed_ui_handler.h" @@ -37,6 +38,9 @@ #include "content/public/browser/web_contents.h" #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_data_source.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" #include "ui/base/accelerators/accelerator.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/resource/resource_bundle.h" @@ -163,7 +167,7 @@ content::WebUIDataSource* CreateDownloadsUIHTMLSource(Profile* profile) { /////////////////////////////////////////////////////////////////////////////// DownloadsUI::DownloadsUI(content::WebUI* web_ui) - : ui::MojoWebUIController(web_ui, true), page_factory_binding_(this) { + : ui::MojoWebUIController(web_ui, true) { Profile* profile = Profile::FromWebUI(web_ui); web_ui->AddMessageHandler(std::make_unique()); @@ -187,20 +191,19 @@ base::RefCountedMemory* DownloadsUI::GetFaviconResourceBytes( } void DownloadsUI::BindPageHandlerFactory( - downloads::mojom::PageHandlerFactoryRequest request) { - if (page_factory_binding_.is_bound()) - page_factory_binding_.Unbind(); + mojo::PendingReceiver receiver) { + page_factory_receiver_.reset(); - page_factory_binding_.Bind(std::move(request)); + page_factory_receiver_.Bind(std::move(receiver)); } void DownloadsUI::CreatePageHandler( - downloads::mojom::PagePtr page, - downloads::mojom::PageHandlerRequest request) { + mojo::PendingRemote page, + mojo::PendingReceiver receiver) { DCHECK(page); Profile* profile = Profile::FromWebUI(web_ui()); DownloadManager* dlm = BrowserContext::GetDownloadManager(profile); page_handler_ = std::make_unique( - std::move(request), std::move(page), dlm, web_ui()); + std::move(receiver), std::move(page), dlm, web_ui()); } diff --git a/chromium/chrome/browser/ui/webui/downloads/downloads_ui.h b/chromium/chrome/browser/ui/webui/downloads/downloads_ui.h index 82f7dafc86b..ccb71d19076 100644 --- a/chromium/chrome/browser/ui/webui/downloads/downloads_ui.h +++ b/chromium/chrome/browser/ui/webui/downloads/downloads_ui.h @@ -9,7 +9,9 @@ #include "base/macros.h" #include "chrome/browser/ui/webui/downloads/downloads.mojom.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" #include "ui/base/layout.h" #include "ui/webui/mojo_web_ui_controller.h" @@ -30,15 +32,17 @@ class DownloadsUI : public ui::MojoWebUIController, private: void BindPageHandlerFactory( - downloads::mojom::PageHandlerFactoryRequest request); + mojo::PendingReceiver receiver); // downloads::mojom::PageHandlerFactory: - void CreatePageHandler(downloads::mojom::PagePtr page, - downloads::mojom::PageHandlerRequest request) override; + void CreatePageHandler( + mojo::PendingRemote page, + mojo::PendingReceiver receiver) override; std::unique_ptr page_handler_; - mojo::Binding page_factory_binding_; + mojo::Receiver page_factory_receiver_{ + this}; DISALLOW_COPY_AND_ASSIGN(DownloadsUI); }; diff --git a/chromium/chrome/browser/ui/webui/downloads/mock_downloads_page.cc b/chromium/chrome/browser/ui/webui/downloads/mock_downloads_page.cc index e6f21212dd1..986778fc2c1 100644 --- a/chromium/chrome/browser/ui/webui/downloads/mock_downloads_page.cc +++ b/chromium/chrome/browser/ui/webui/downloads/mock_downloads_page.cc @@ -4,12 +4,15 @@ #include "chrome/browser/ui/webui/downloads/mock_downloads_page.h" -MockPage::MockPage() : binding_(this) {} +#include "chrome/browser/ui/webui/downloads/downloads.mojom.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" + +MockPage::MockPage() = default; + MockPage::~MockPage() = default; -downloads::mojom::PagePtr MockPage::BindAndGetPtr() { - DCHECK(!binding_.is_bound()); - downloads::mojom::PagePtr page; - binding_.Bind(mojo::MakeRequest(&page)); - return page; +mojo::PendingRemote MockPage::BindAndGetRemote() { + DCHECK(!receiver_.is_bound()); + return receiver_.BindNewPipeAndPassRemote(); } diff --git a/chromium/chrome/browser/ui/webui/downloads/mock_downloads_page.h b/chromium/chrome/browser/ui/webui/downloads/mock_downloads_page.h index 0fdaccde260..119680ea139 100644 --- a/chromium/chrome/browser/ui/webui/downloads/mock_downloads_page.h +++ b/chromium/chrome/browser/ui/webui/downloads/mock_downloads_page.h @@ -8,8 +8,8 @@ #include #include "chrome/browser/ui/webui/downloads/downloads.mojom.h" - -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" #include "testing/gmock/include/gmock/gmock.h" class MockPage : public downloads::mojom::Page { @@ -17,14 +17,14 @@ class MockPage : public downloads::mojom::Page { MockPage(); ~MockPage() override; - downloads::mojom::PagePtr BindAndGetPtr(); + mojo::PendingRemote BindAndGetRemote(); MOCK_METHOD1(RemoveItem, void(int)); MOCK_METHOD2(UpdateItem, void(int, downloads::mojom::DataPtr)); MOCK_METHOD2(InsertItems, void(int, std::vector)); MOCK_METHOD0(ClearAll, void()); - mojo::Binding binding_; + mojo::Receiver receiver_{this}; }; #endif // CHROME_BROWSER_UI_WEBUI_DOWNLOADS_MOCK_DOWNLOADS_PAGE_H_ diff --git a/chromium/chrome/browser/ui/webui/engagement/site_engagement_ui.cc b/chromium/chrome/browser/ui/webui/engagement/site_engagement_ui.cc index 2c97430d0dc..03603cd5bfe 100644 --- a/chromium/chrome/browser/ui/webui/engagement/site_engagement_ui.cc +++ b/chromium/chrome/browser/ui/webui/engagement/site_engagement_ui.cc @@ -5,12 +5,14 @@ #include "chrome/browser/ui/webui/engagement/site_engagement_ui.h" #include +#include #include #include #include "base/bind.h" #include "base/callback.h" #include "base/macros.h" +#include "chrome/browser/engagement/site_engagement_details.mojom.h" #include "chrome/browser/engagement/site_engagement_service.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/url_constants.h" @@ -18,7 +20,8 @@ #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_controller.h" #include "content/public/browser/web_ui_data_source.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/receiver.h" namespace { @@ -30,8 +33,8 @@ class SiteEngagementDetailsProviderImpl // Instance is deleted when the supplied pipe is destroyed. SiteEngagementDetailsProviderImpl( Profile* profile, - mojo::InterfaceRequest request) - : profile_(profile), binding_(this, std::move(request)) { + mojo::PendingReceiver receiver) + : profile_(profile), receiver_(this, std::move(receiver)) { DCHECK(profile_); } @@ -70,7 +73,7 @@ class SiteEngagementDetailsProviderImpl // The Profile* handed to us in our constructor. Profile* profile_; - mojo::Binding binding_; + mojo::Receiver receiver_; DISALLOW_COPY_AND_ASSIGN(SiteEngagementDetailsProviderImpl); }; @@ -97,7 +100,7 @@ SiteEngagementUI::SiteEngagementUI(content::WebUI* web_ui) SiteEngagementUI::~SiteEngagementUI() {} void SiteEngagementUI::BindSiteEngagementDetailsProvider( - mojom::SiteEngagementDetailsProviderRequest request) { + mojo::PendingReceiver receiver) { ui_handler_ = std::make_unique( - Profile::FromWebUI(web_ui()), std::move(request)); + Profile::FromWebUI(web_ui()), std::move(receiver)); } diff --git a/chromium/chrome/browser/ui/webui/engagement/site_engagement_ui.h b/chromium/chrome/browser/ui/webui/engagement/site_engagement_ui.h index 1d84444e369..119a1229665 100644 --- a/chromium/chrome/browser/ui/webui/engagement/site_engagement_ui.h +++ b/chromium/chrome/browser/ui/webui/engagement/site_engagement_ui.h @@ -7,6 +7,7 @@ #include "base/macros.h" #include "chrome/browser/engagement/site_engagement_details.mojom.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "ui/webui/mojo_web_ui_controller.h" // The UI for chrome://site-engagement/. @@ -17,7 +18,7 @@ class SiteEngagementUI : public ui::MojoWebUIController { private: void BindSiteEngagementDetailsProvider( - mojom::SiteEngagementDetailsProviderRequest request); + mojo::PendingReceiver receiver); std::unique_ptr ui_handler_; diff --git a/chromium/chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_page_handler.cc b/chromium/chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_page_handler.cc index b336e92d1f8..b9a460ddfb3 100644 --- a/chromium/chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_page_handler.cc +++ b/chromium/chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_page_handler.cc @@ -4,6 +4,7 @@ #include "chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_page_handler.h" #include +#include #include #include "base/containers/flat_map.h" @@ -11,8 +12,11 @@ #include "chrome/browser/android/explore_sites/explore_sites_feature.h" #include "chrome/browser/android/explore_sites/url_util.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals.mojom.h" #include "components/language/core/browser/pref_names.h" #include "components/prefs/pref_service.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/receiver.h" namespace explore_sites { using chrome::android::explore_sites::ExploreSitesVariation; @@ -37,10 +41,10 @@ std::string GetChromeFlagsSetupString() { } // namespace ExploreSitesInternalsPageHandler::ExploreSitesInternalsPageHandler( - explore_sites_internals::mojom::PageHandlerRequest request, + mojo::PendingReceiver receiver, ExploreSitesService* explore_sites_service, Profile* profile) - : binding_(this, std::move(request)), + : receiver_(this, std::move(receiver)), explore_sites_service_(explore_sites_service), profile_(profile) {} diff --git a/chromium/chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_page_handler.h b/chromium/chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_page_handler.h index 4a95f5e741d..8b1218bcf51 100644 --- a/chromium/chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_page_handler.h +++ b/chromium/chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_page_handler.h @@ -8,7 +8,8 @@ #include "base/macros.h" #include "chrome/browser/android/explore_sites/explore_sites_service.h" #include "chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals.mojom.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/receiver.h" class Profile; @@ -19,7 +20,8 @@ class ExploreSitesInternalsPageHandler : public explore_sites_internals::mojom::PageHandler { public: ExploreSitesInternalsPageHandler( - explore_sites_internals::mojom::PageHandlerRequest request, + mojo::PendingReceiver + receiver, ExploreSitesService* explore_sites_service, Profile* profile); ~ExploreSitesInternalsPageHandler() override; @@ -33,7 +35,7 @@ class ExploreSitesInternalsPageHandler OverrideCountryCodeCallback) override; void ForceNetworkRequest(ForceNetworkRequestCallback) override; - mojo::Binding binding_; + mojo::Receiver receiver_; ExploreSitesService* explore_sites_service_; Profile* profile_; diff --git a/chromium/chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_ui.cc b/chromium/chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_ui.cc index 661ba823499..803dc70251a 100644 --- a/chromium/chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_ui.cc +++ b/chromium/chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_ui.cc @@ -9,10 +9,12 @@ #include "chrome/browser/android/chrome_feature_list.h" #include "chrome/browser/android/explore_sites/explore_sites_service_factory.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals.mojom.h" #include "chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_page_handler.h" #include "chrome/common/url_constants.h" #include "chrome/grit/browser_resources.h" #include "content/public/browser/web_ui_data_source.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" namespace explore_sites { @@ -44,9 +46,11 @@ ExploreSitesInternalsUI::ExploreSitesInternalsUI(content::WebUI* web_ui) ExploreSitesInternalsUI::~ExploreSitesInternalsUI() {} void ExploreSitesInternalsUI::BindExploreSitesInternalsPageHandler( - explore_sites_internals::mojom::PageHandlerRequest request) { + mojo::PendingReceiver + receiver) { page_handler_ = std::make_unique( - std::move(request), explore_sites_service_, Profile::FromWebUI(web_ui())); + std::move(receiver), explore_sites_service_, + Profile::FromWebUI(web_ui())); } } // namespace explore_sites diff --git a/chromium/chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_ui.h b/chromium/chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_ui.h index f0b3da06ad4..87fa86d06ec 100644 --- a/chromium/chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_ui.h +++ b/chromium/chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_ui.h @@ -10,6 +10,7 @@ #include "base/macros.h" #include "chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals.mojom.h" #include "chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_page_handler.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "ui/webui/mojo_web_ui_controller.h" namespace explore_sites { @@ -24,7 +25,8 @@ class ExploreSitesInternalsUI : public ui::MojoWebUIController { private: void BindExploreSitesInternalsPageHandler( - explore_sites_internals::mojom::PageHandlerRequest request); + mojo::PendingReceiver + receiver); std::unique_ptr page_handler_; ExploreSitesService* explore_sites_service_; diff --git a/chromium/chrome/browser/ui/webui/extensions/extension_icon_source.cc b/chromium/chrome/browser/ui/webui/extensions/extension_icon_source.cc index 76e1be57c95..ea745a1b618 100644 --- a/chromium/chrome/browser/ui/webui/extensions/extension_icon_source.cc +++ b/chromium/chrome/browser/ui/webui/extensions/extension_icon_source.cc @@ -17,7 +17,6 @@ #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" #include "base/threading/thread.h" -#include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/favicon/favicon_service_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/extensions/extension_constants.h" @@ -25,7 +24,7 @@ #include "chrome/common/url_constants.h" #include "chrome/grit/component_extension_resources_map.h" #include "extensions/browser/extension_prefs.h" -#include "extensions/browser/extension_system.h" +#include "extensions/browser/extension_registry.h" #include "extensions/browser/image_loader.h" #include "extensions/common/extension.h" #include "extensions/common/extension_resource.h" @@ -302,8 +301,8 @@ bool ExtensionIconSource::ParseData( match_type = ExtensionIconSet::MATCH_EXACTLY; std::string extension_id = path_parts.at(0); - const Extension* extension = ExtensionSystem::Get(profile_)-> - extension_service()->GetInstalledExtension(extension_id); + const Extension* extension = + ExtensionRegistry::Get(profile_)->GetInstalledExtension(extension_id); if (!extension) return false; diff --git a/chromium/chrome/browser/ui/webui/extensions/extensions_internals_source.cc b/chromium/chrome/browser/ui/webui/extensions/extensions_internals_source.cc index 69157d3f489..835595a56dc 100644 --- a/chromium/chrome/browser/ui/webui/extensions/extensions_internals_source.cc +++ b/chromium/chrome/browser/ui/webui/extensions/extensions_internals_source.cc @@ -91,31 +91,33 @@ const char* LocationToString(extensions::Manifest::Location loc) { base::Value CreationFlagsToList(int creation_flags) { base::Value flags_value(base::Value::Type::LIST); if (creation_flags & extensions::Extension::NO_FLAGS) - flags_value.GetList().emplace_back("NO_FLAGS"); + flags_value.Append("NO_FLAGS"); if (creation_flags & extensions::Extension::REQUIRE_KEY) - flags_value.GetList().emplace_back("REQUIRE_KEY"); + flags_value.Append("REQUIRE_KEY"); if (creation_flags & extensions::Extension::REQUIRE_MODERN_MANIFEST_VERSION) - flags_value.GetList().emplace_back("REQUIRE_MODERN_MANIFEST_VERSION"); + flags_value.Append("REQUIRE_MODERN_MANIFEST_VERSION"); if (creation_flags & extensions::Extension::ALLOW_FILE_ACCESS) - flags_value.GetList().emplace_back("ALLOW_FILE_ACCESS"); + flags_value.Append("ALLOW_FILE_ACCESS"); if (creation_flags & extensions::Extension::FROM_WEBSTORE) - flags_value.GetList().emplace_back("FROM_WEBSTORE"); + flags_value.Append("FROM_WEBSTORE"); if (creation_flags & extensions::Extension::FROM_BOOKMARK) - flags_value.GetList().emplace_back("FROM_BOOKMARK"); + flags_value.Append("FROM_BOOKMARK"); if (creation_flags & extensions::Extension::FOLLOW_SYMLINKS_ANYWHERE) - flags_value.GetList().emplace_back("FOLLOW_SYMLINKS_ANYWHERE"); + flags_value.Append("FOLLOW_SYMLINKS_ANYWHERE"); if (creation_flags & extensions::Extension::ERROR_ON_PRIVATE_KEY) - flags_value.GetList().emplace_back("ERROR_ON_PRIVATE_KEY"); + flags_value.Append("ERROR_ON_PRIVATE_KEY"); if (creation_flags & extensions::Extension::WAS_INSTALLED_BY_DEFAULT) - flags_value.GetList().emplace_back("WAS_INSTALLED_BY_DEFAULT"); + flags_value.Append("WAS_INSTALLED_BY_DEFAULT"); if (creation_flags & extensions::Extension::REQUIRE_PERMISSIONS_CONSENT) - flags_value.GetList().emplace_back("REQUIRE_PERMISSIONS_CONSENT"); + flags_value.Append("REQUIRE_PERMISSIONS_CONSENT"); if (creation_flags & extensions::Extension::IS_EPHEMERAL) - flags_value.GetList().emplace_back("IS_EPHEMERAL"); + flags_value.Append("IS_EPHEMERAL"); if (creation_flags & extensions::Extension::WAS_INSTALLED_BY_OEM) - flags_value.GetList().emplace_back("WAS_INSTALLED_BY_OEM"); + flags_value.Append("WAS_INSTALLED_BY_OEM"); if (creation_flags & extensions::Extension::MAY_BE_UNTRUSTED) - flags_value.GetList().emplace_back("MAY_BE_UNTRUSTED"); + flags_value.Append("MAY_BE_UNTRUSTED"); + if (creation_flags & extensions::Extension::WITHHOLD_PERMISSIONS) + flags_value.Append("WITHHOLD_PERMISSIONS"); return flags_value; } @@ -286,7 +288,7 @@ base::Value FormatKeepaliveData(extensions::ProcessManager* process_manager, activities_entry.SetKey( kTypeKey, base::Value(extensions::Activity::ToString(activity.first))); activities_entry.SetKey(kExtraDataKey, base::Value(activity.second)); - activities_data.GetList().push_back(std::move(activities_entry)); + activities_data.Append(std::move(activities_entry)); } keepalive_data.SetKey(kActivitesKey, std::move(activities_data)); return keepalive_data; @@ -304,9 +306,9 @@ base::Value FormatDetailedPermissionSet(const T& permissions) { base::Value tmp(base::Value::Type::DICTIONARY); tmp.SetKey(permission->name(), base::Value::FromUniquePtrValue(std::move(detail))); - value_list.GetList().push_back(std::move(tmp)); + value_list.Append(std::move(tmp)); } else { - value_list.GetList().push_back(base::Value(permission->name())); + value_list.Append(base::Value(permission->name())); } } return value_list; @@ -392,7 +394,7 @@ void AddEventListenerData(extensions::EventRouter* event_router, if (filter != nullptr) { listener_data.SetKey(kFilterKey, filter->Clone()); } - listeners_list.GetList().push_back(std::move(listener_data)); + listeners_list.Append(std::move(listener_data)); } } @@ -468,7 +470,7 @@ std::string ExtensionsInternalsSource::WriteToString() const { extension_data.SetKey(kInternalsVersionKey, base::Value(extension->GetVersionForDisplay())); extension_data.SetKey(kPermissionsKey, FormatPermissionsData(*extension)); - data.GetList().push_back(std::move(extension_data)); + data.Append(std::move(extension_data)); } // Aggregate and add the data for the registered event listeners. diff --git a/chromium/chrome/browser/ui/webui/extensions/extensions_ui.cc b/chromium/chrome/browser/ui/webui/extensions/extensions_ui.cc index 645cf9d7c67..18b00d539f7 100644 --- a/chromium/chrome/browser/ui/webui/extensions/extensions_ui.cc +++ b/chromium/chrome/browser/ui/webui/extensions/extensions_ui.cc @@ -69,6 +69,8 @@ content::WebUIDataSource* CreateMdExtensionsSource(Profile* profile, {"close", IDS_CLOSE}, {"clear", IDS_CLEAR}, {"confirm", IDS_CONFIRM}, + {"controlledSettingChildRestriction", + IDS_CONTROLLED_SETTING_CHILD_RESTRICTION}, {"controlledSettingPolicy", IDS_CONTROLLED_SETTING_POLICY}, {"done", IDS_DONE}, {"learnMore", IDS_LEARN_MORE}, diff --git a/chromium/chrome/browser/ui/webui/feed_internals/feed_internals_page_handler.cc b/chromium/chrome/browser/ui/webui/feed_internals/feed_internals_page_handler.cc index cbc85825f30..799b7214a10 100644 --- a/chromium/chrome/browser/ui/webui/feed_internals/feed_internals_page_handler.cc +++ b/chromium/chrome/browser/ui/webui/feed_internals/feed_internals_page_handler.cc @@ -12,6 +12,7 @@ #include "base/time/time.h" #include "chrome/browser/android/feed/feed_debugging_bridge.h" #include "chrome/browser/android/feed/feed_lifecycle_bridge.h" +#include "chrome/browser/ui/webui/feed_internals/feed_internals.mojom.h" #include "components/feed/content/feed_host_service.h" #include "components/feed/content/feed_offline_host.h" #include "components/feed/core/feed_scheduler_host.h" @@ -21,6 +22,8 @@ #include "components/offline_pages/core/prefetch/prefetch_prefs.h" #include "components/offline_pages/core/prefetch/suggestions_provider.h" #include "components/prefs/pref_service.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/receiver.h" namespace { @@ -47,10 +50,10 @@ std::string TriggerTypeToString(feed::FeedSchedulerHost::TriggerType* trigger) { } // namespace FeedInternalsPageHandler::FeedInternalsPageHandler( - feed_internals::mojom::PageHandlerRequest request, + mojo::PendingReceiver receiver, feed::FeedHostService* feed_host_service, PrefService* pref_service) - : binding_(this, std::move(request)), + : receiver_(this, std::move(receiver)), feed_scheduler_host_(feed_host_service->GetSchedulerHost()), feed_offline_host_(feed_host_service->GetOfflineHost()), pref_service_(pref_service) {} diff --git a/chromium/chrome/browser/ui/webui/feed_internals/feed_internals_page_handler.h b/chromium/chrome/browser/ui/webui/feed_internals/feed_internals_page_handler.h index 2d0352747a4..ab3a646da19 100644 --- a/chromium/chrome/browser/ui/webui/feed_internals/feed_internals_page_handler.h +++ b/chromium/chrome/browser/ui/webui/feed_internals/feed_internals_page_handler.h @@ -10,7 +10,8 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "chrome/browser/ui/webui/feed_internals/feed_internals.mojom.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/receiver.h" class PrefService; @@ -27,9 +28,10 @@ struct PrefetchSuggestion; // Concrete implementation of feed_internals::mojom::PageHandler. class FeedInternalsPageHandler : public feed_internals::mojom::PageHandler { public: - FeedInternalsPageHandler(feed_internals::mojom::PageHandlerRequest request, - feed::FeedHostService* feed_host_service, - PrefService* pref_service); + FeedInternalsPageHandler( + mojo::PendingReceiver receiver, + feed::FeedHostService* feed_host_service, + PrefService* pref_service); ~FeedInternalsPageHandler() override; // feed_internals::mojom::PageHandler @@ -45,8 +47,7 @@ class FeedInternalsPageHandler : public feed_internals::mojom::PageHandler { void GetFeedHistograms(GetFeedHistogramsCallback) override; private: - // Binding from the mojo interface to concrete implementation. - mojo::Binding binding_; + mojo::Receiver receiver_; void OnGetCurrentArticleSuggestionsDone( GetCurrentContentCallback callback, diff --git a/chromium/chrome/browser/ui/webui/feed_internals/feed_internals_ui.cc b/chromium/chrome/browser/ui/webui/feed_internals/feed_internals_ui.cc index de2a7c2ab9a..051f6fe93d7 100644 --- a/chromium/chrome/browser/ui/webui/feed_internals/feed_internals_ui.cc +++ b/chromium/chrome/browser/ui/webui/feed_internals/feed_internals_ui.cc @@ -9,10 +9,12 @@ #include "base/bind.h" #include "chrome/browser/android/feed/feed_host_service_factory.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/webui/feed_internals/feed_internals.mojom.h" #include "chrome/browser/ui/webui/feed_internals/feed_internals_page_handler.h" #include "chrome/common/url_constants.h" #include "chrome/grit/browser_resources.h" #include "content/public/browser/web_ui_data_source.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" FeedInternalsUI::FeedInternalsUI(content::WebUI* web_ui) : ui::MojoWebUIController(web_ui), profile_(Profile::FromWebUI(web_ui)) { @@ -35,9 +37,9 @@ FeedInternalsUI::FeedInternalsUI(content::WebUI* web_ui) FeedInternalsUI::~FeedInternalsUI() = default; void FeedInternalsUI::BindFeedInternalsPageHandler( - feed_internals::mojom::PageHandlerRequest request) { + mojo::PendingReceiver receiver) { page_handler_ = std::make_unique( - std::move(request), + std::move(receiver), feed::FeedHostServiceFactory::GetForBrowserContext(profile_), profile_->GetPrefs()); } diff --git a/chromium/chrome/browser/ui/webui/feed_internals/feed_internals_ui.h b/chromium/chrome/browser/ui/webui/feed_internals/feed_internals_ui.h index 8d6077fb073..662b9bb65bd 100644 --- a/chromium/chrome/browser/ui/webui/feed_internals/feed_internals_ui.h +++ b/chromium/chrome/browser/ui/webui/feed_internals/feed_internals_ui.h @@ -8,7 +8,9 @@ #include #include "base/macros.h" +#include "chrome/browser/ui/webui/feed_internals/feed_internals.mojom.h" #include "chrome/browser/ui/webui/feed_internals/feed_internals_page_handler.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "ui/webui/mojo_web_ui_controller.h" class Profile; @@ -27,7 +29,7 @@ class FeedInternalsUI : public ui::MojoWebUIController { private: void BindFeedInternalsPageHandler( - feed_internals::mojom::PageHandlerRequest request); + mojo::PendingReceiver receiver); Profile* profile_; diff --git a/chromium/chrome/browser/ui/webui/fileicon_source_unittest.cc b/chromium/chrome/browser/ui/webui/fileicon_source_unittest.cc index 549f17167eb..b4da3776f40 100644 --- a/chromium/chrome/browser/ui/webui/fileicon_source_unittest.cc +++ b/chromium/chrome/browser/ui/webui/fileicon_source_unittest.cc @@ -13,6 +13,7 @@ #include "content/public/test/browser_task_environment.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +#include "ui/base/layout.h" namespace { diff --git a/chromium/chrome/browser/ui/webui/flags_ui.cc b/chromium/chrome/browser/ui/webui/flags_ui.cc index 70df1a343d1..55b6c62ebe9 100644 --- a/chromium/chrome/browser/ui/webui/flags_ui.cc +++ b/chromium/chrome/browser/ui/webui/flags_ui.cc @@ -76,6 +76,7 @@ content::WebUIDataSource* CreateFlagsUIHTMLSource() { source->AddResourcePath(flags_ui::kFlagsJS, IDR_FLAGS_UI_FLAGS_JS); source->SetDefaultResource(IDR_FLAGS_UI_FLAGS_HTML); + source->UseStringsJs(); return source; } @@ -127,6 +128,7 @@ void FlagsUI::AddStrings(content::WebUIDataSource* source) { source->AddLocalizedString("enabled", IDS_FLAGS_UI_ENABLED_FEATURE); source->AddLocalizedString("experiment-enabled", IDS_FLAGS_UI_EXPERIMENT_ENABLED); + source->AddLocalizedString("heading", IDS_FLAGS_UI_TITLE); source->AddLocalizedString("no-results", IDS_FLAGS_UI_NO_RESULTS); source->AddLocalizedString("not-available-platform", IDS_FLAGS_UI_NOT_AVAILABLE_ON_PLATFORM); @@ -141,6 +143,10 @@ void FlagsUI::AddStrings(content::WebUIDataSource* source) { IDS_FLAGS_UI_SEARCH_PLACEHOLDER); source->AddLocalizedString("title", IDS_FLAGS_UI_TITLE); source->AddLocalizedString("unavailable", IDS_FLAGS_UI_UNAVAILABLE_FEATURE); + source->AddLocalizedString("searchResultsSingular", + IDS_FLAGS_UI_SEARCH_RESULTS_SINGULAR); + source->AddLocalizedString("searchResultsPlural", + IDS_FLAGS_UI_SEARCH_RESULTS_PLURAL); } // static @@ -156,11 +162,11 @@ void FlagsDeprecatedUI::AddStrings(content::WebUIDataSource* source) { IDS_DEPRECATED_FEATURES_ENABLED_FEATURE); source->AddLocalizedString("experiment-enabled", IDS_DEPRECATED_UI_EXPERIMENT_ENABLED); + source->AddLocalizedString("heading", IDS_DEPRECATED_FEATURES_HEADING); source->AddLocalizedString("no-results", IDS_DEPRECATED_FEATURES_NO_RESULTS); source->AddLocalizedString("not-available-platform", IDS_DEPRECATED_FEATURES_NOT_AVAILABLE_ON_PLATFORM); - source->AddLocalizedString("page-warning", - IDS_DEPRECATED_FEATURES_PAGE_WARNING); + source->AddString("page-warning", std::string()); source->AddLocalizedString("page-warning-explanation", IDS_DEPRECATED_FEATURES_PAGE_WARNING_EXPLANATION); source->AddLocalizedString("relaunch", IDS_DEPRECATED_FEATURES_RELAUNCH); @@ -172,6 +178,10 @@ void FlagsDeprecatedUI::AddStrings(content::WebUIDataSource* source) { source->AddLocalizedString("title", IDS_DEPRECATED_FEATURES_TITLE); source->AddLocalizedString("unavailable", IDS_DEPRECATED_FEATURES_UNAVAILABLE_FEATURE); + source->AddLocalizedString("searchResultsSingular", + IDS_ENTERPRISE_UI_SEARCH_RESULTS_SINGULAR); + source->AddLocalizedString("searchResultsPlural", + IDS_ENTERPRISE_UI_SEARCH_RESULTS_PLURAL); } template diff --git a/chromium/chrome/browser/ui/webui/flags_ui_unittest.cc b/chromium/chrome/browser/ui/webui/flags_ui_unittest.cc index e5f5a49a5ad..59c33e0e212 100644 --- a/chromium/chrome/browser/ui/webui/flags_ui_unittest.cc +++ b/chromium/chrome/browser/ui/webui/flags_ui_unittest.cc @@ -16,7 +16,7 @@ class FlagsUITest : public testing::Test { FlagsUITest() = default; private: - content::TestBrowserThreadBundle bundle_; + content::BrowserTaskEnvironment task_environment_; }; TEST_F(FlagsUITest, IsDeprecatedUrl) { diff --git a/chromium/chrome/browser/ui/webui/help/version_updater.h b/chromium/chrome/browser/ui/webui/help/version_updater.h index ad34cb0c53f..de48fe833ee 100644 --- a/chromium/chrome/browser/ui/webui/help/version_updater.h +++ b/chromium/chrome/browser/ui/webui/help/version_updater.h @@ -12,6 +12,7 @@ #include "build/build_config.h" #if defined(OS_CHROMEOS) +#include "chromeos/dbus/update_engine_client.h" #include "third_party/cros_system_api/dbus/update_engine/dbus-constants.h" #endif // defined(OS_CHROMEOS) @@ -48,8 +49,8 @@ class VersionUpdater { // types. #if defined(OS_CHROMEOS) typedef base::Callback ChannelCallback; - typedef base::OnceCallback - EolStatusCallback; + using EolInfoCallback = + base::OnceCallback; #endif // Used to update the client of status changes. @@ -98,7 +99,8 @@ class VersionUpdater { bool is_powerwash_allowed) = 0; virtual void GetChannel(bool get_current_channel, const ChannelCallback& callback) = 0; - virtual void GetEolStatus(EolStatusCallback callback) = 0; + // Get the End of Life (Auto Update Expiration) Date. + virtual void GetEolInfo(EolInfoCallback callback) = 0; // Sets a one time permission on a certain update in Update Engine. // - update_version: the Chrome OS version we want to update to. diff --git a/chromium/chrome/browser/ui/webui/help/version_updater_chromeos.cc b/chromium/chrome/browser/ui/webui/help/version_updater_chromeos.cc index 55b745814a2..c93b9b199b2 100644 --- a/chromium/chrome/browser/ui/webui/help/version_updater_chromeos.cc +++ b/chromium/chrome/browser/ui/webui/help/version_updater_chromeos.cc @@ -165,8 +165,8 @@ void VersionUpdaterCros::CheckForUpdate(const StatusCallback& callback, if (!update_engine_client->HasObserver(this)) update_engine_client->AddObserver(this); - if (update_engine_client->GetLastStatus().status != - UpdateEngineClient::UPDATE_STATUS_IDLE) { + if (update_engine_client->GetLastStatus().current_operation() != + update_engine::Operation::IDLE) { check_for_update_when_idle_ = true; return; } @@ -239,27 +239,26 @@ void VersionUpdaterCros::OnGetChannel(const ChannelCallback& cb, cb.Run(current_channel); } -void VersionUpdaterCros::GetEolStatus(EolStatusCallback cb) { +void VersionUpdaterCros::GetEolInfo(EolInfoCallback cb) { UpdateEngineClient* update_engine_client = DBusThreadManager::Get()->GetUpdateEngineClient(); - // Request the Eol Status. Bind to a weak_ptr bound method rather than passing + // Request the EolInfo. Bind to a weak_ptr bound method rather than passing // |cb| directly so that |cb| does not outlive |this|. - update_engine_client->GetEolStatus( - base::BindOnce(&VersionUpdaterCros::OnGetEolStatus, + update_engine_client->GetEolInfo( + base::BindOnce(&VersionUpdaterCros::OnGetEolInfo, weak_ptr_factory_.GetWeakPtr(), std::move(cb))); } -void VersionUpdaterCros::OnGetEolStatus( - EolStatusCallback cb, - update_engine::EndOfLifeStatus status, - base::Optional number_of_milestones) { - std::move(cb).Run(status); +void VersionUpdaterCros::OnGetEolInfo( + EolInfoCallback cb, + chromeos::UpdateEngineClient::EolInfo eol_info) { + std::move(cb).Run(std::move(eol_info)); } VersionUpdaterCros::VersionUpdaterCros(content::WebContents* web_contents) : context_(web_contents ? web_contents->GetBrowserContext() : nullptr), - last_operation_(UpdateEngineClient::UPDATE_STATUS_IDLE), + last_operation_(update_engine::Operation::IDLE), check_for_update_when_idle_(false) {} VersionUpdaterCros::~VersionUpdaterCros() { @@ -269,64 +268,65 @@ VersionUpdaterCros::~VersionUpdaterCros() { } void VersionUpdaterCros::UpdateStatusChanged( - const UpdateEngineClient::Status& status) { + const update_engine::StatusResult& status) { Status my_status = UPDATED; int progress = 0; - std::string version = status.new_version; - int64_t size = status.new_size; + std::string version = status.new_version(); + int64_t size = status.new_size(); base::string16 message; // If the updater is currently idle, just show the last operation (unless it // was previously checking for an update -- in that case, the system is // up to date now). See http://crbug.com/120063 for details. - UpdateEngineClient::UpdateStatusOperation operation_to_show = status.status; - if (status.status == UpdateEngineClient::UPDATE_STATUS_IDLE && - last_operation_ != - UpdateEngineClient::UPDATE_STATUS_CHECKING_FOR_UPDATE) { + update_engine::Operation operation_to_show = status.current_operation(); + if (status.current_operation() == update_engine::Operation::IDLE && + last_operation_ != update_engine::Operation::CHECKING_FOR_UPDATE) { operation_to_show = last_operation_; } switch (operation_to_show) { - case UpdateEngineClient::UPDATE_STATUS_ERROR: - case UpdateEngineClient::UPDATE_STATUS_REPORTING_ERROR_EVENT: - case UpdateEngineClient::UPDATE_STATUS_ATTEMPTING_ROLLBACK: + case update_engine::Operation::IDLE: + case update_engine::Operation::DISABLED: + case update_engine::Operation::ERROR: + case update_engine::Operation::REPORTING_ERROR_EVENT: + case update_engine::Operation::ATTEMPTING_ROLLBACK: // This path previously used the FAILED status and IDS_UPGRADE_ERROR, but // the update engine reports errors for some conditions that shouldn't // actually be displayed as errors to users: http://crbug.com/146919. // Just use the UPDATED status instead. break; - case UpdateEngineClient::UPDATE_STATUS_CHECKING_FOR_UPDATE: + case update_engine::Operation::CHECKING_FOR_UPDATE: my_status = CHECKING; break; - case UpdateEngineClient::UPDATE_STATUS_DOWNLOADING: - progress = static_cast(round(status.download_progress * 100)); + case update_engine::Operation::DOWNLOADING: + progress = static_cast(round(status.progress() * 100)); FALLTHROUGH; - case UpdateEngineClient::UPDATE_STATUS_UPDATE_AVAILABLE: + case update_engine::Operation::UPDATE_AVAILABLE: my_status = UPDATING; break; - case UpdateEngineClient::UPDATE_STATUS_NEED_PERMISSION_TO_UPDATE: + case update_engine::Operation::NEED_PERMISSION_TO_UPDATE: my_status = NEED_PERMISSION_TO_UPDATE; break; - case UpdateEngineClient::UPDATE_STATUS_VERIFYING: - case UpdateEngineClient::UPDATE_STATUS_FINALIZING: + case update_engine::Operation::VERIFYING: + case update_engine::Operation::FINALIZING: // Once the download is finished, keep the progress at 100; it shouldn't // go down while the status is the same. progress = 100; my_status = UPDATING; break; - case UpdateEngineClient::UPDATE_STATUS_UPDATED_NEED_REBOOT: + case update_engine::Operation::UPDATED_NEED_REBOOT: my_status = NEARLY_UPDATED; break; default: - break; + NOTREACHED(); } - callback_.Run(my_status, progress, status.is_rollback, version, size, - message); - last_operation_ = status.status; + callback_.Run(my_status, progress, status.is_enterprise_rollback(), version, + size, message); + last_operation_ = status.current_operation(); if (check_for_update_when_idle_ && - status.status == UpdateEngineClient::UPDATE_STATUS_IDLE) { + status.current_operation() == update_engine::Operation::IDLE) { CheckForUpdate(callback_, VersionUpdater::PromoteCallback()); } } diff --git a/chromium/chrome/browser/ui/webui/help/version_updater_chromeos.h b/chromium/chrome/browser/ui/webui/help/version_updater_chromeos.h index 3ec09168b97..057881513d2 100644 --- a/chromium/chrome/browser/ui/webui/help/version_updater_chromeos.h +++ b/chromium/chrome/browser/ui/webui/help/version_updater_chromeos.h @@ -9,7 +9,6 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "chrome/browser/ui/webui/help/version_updater.h" -#include "chromeos/dbus/update_engine_client.h" namespace content { class BrowserContext; @@ -26,6 +25,7 @@ class VersionUpdaterCros : public VersionUpdater, bool is_powerwash_allowed) override; void GetChannel(bool get_current_channel, const ChannelCallback& callback) override; + void GetEolInfo(EolInfoCallback callback) override; void SetUpdateOverCellularOneTimePermission(const StatusCallback& callback, const std::string& update_version, int64_t update_size) override; @@ -33,8 +33,6 @@ class VersionUpdaterCros : public VersionUpdater, // Gets the last update status, without triggering a new check or download. void GetUpdateStatus(const StatusCallback& callback); - void GetEolStatus(EolStatusCallback callback) override; - protected: friend class VersionUpdater; @@ -44,8 +42,7 @@ class VersionUpdaterCros : public VersionUpdater, private: // UpdateEngineClient::Observer implementation. - void UpdateStatusChanged( - const chromeos::UpdateEngineClient::Status& status) override; + void UpdateStatusChanged(const update_engine::StatusResult& status) override; // Callback from UpdateEngineClient::RequestUpdateCheck(). void OnUpdateCheck(chromeos::UpdateEngineClient::UpdateCheckResult result); @@ -57,10 +54,9 @@ class VersionUpdaterCros : public VersionUpdater, void OnGetChannel(const ChannelCallback& cb, const std::string& current_channel); - // Callback from UpdateEngineClient::GetEolStatus(). - void OnGetEolStatus(EolStatusCallback cb, - update_engine::EndOfLifeStatus status, - base::Optional number_of_milestones); + // Callback from UpdateEngineClient::GetEolInfo(). + void OnGetEolInfo(EolInfoCallback cb, + chromeos::UpdateEngineClient::EolInfo eol_info); // BrowserContext in which the class was instantiated. content::BrowserContext* context_; @@ -69,7 +65,7 @@ class VersionUpdaterCros : public VersionUpdater, StatusCallback callback_; // Last state received via UpdateStatusChanged(). - chromeos::UpdateEngineClient::UpdateStatusOperation last_operation_; + update_engine::Operation last_operation_; // True if an update check should be scheduled when the update engine is idle. bool check_for_update_when_idle_; diff --git a/chromium/chrome/browser/ui/webui/help/version_updater_chromeos_unittest.cc b/chromium/chrome/browser/ui/webui/help/version_updater_chromeos_unittest.cc index 850f225d3e7..5115ce9c60a 100644 --- a/chromium/chrome/browser/ui/webui/help/version_updater_chromeos_unittest.cc +++ b/chromium/chrome/browser/ui/webui/help/version_updater_chromeos_unittest.cc @@ -116,8 +116,8 @@ TEST_F(VersionUpdaterCrosTest, TwoOverlappingSetChannelRequests) { version_updater_->SetChannel("beta-channel", true); { - UpdateEngineClient::Status status; - status.status = UpdateEngineClient::UPDATE_STATUS_IDLE; + update_engine::StatusResult status; + status.set_current_operation(update_engine::Operation::IDLE); fake_update_engine_client_->set_default_status(status); fake_update_engine_client_->NotifyObserversThatStatusChanged(status); } @@ -130,9 +130,9 @@ TEST_F(VersionUpdaterCrosTest, TwoOverlappingSetChannelRequests) { EXPECT_EQ(1, fake_update_engine_client_->request_update_check_call_count()); { - UpdateEngineClient::Status status; - status.status = UpdateEngineClient::UPDATE_STATUS_DOWNLOADING; - status.download_progress = 0.1; + update_engine::StatusResult status; + status.set_current_operation(update_engine::Operation::DOWNLOADING); + status.set_progress(0.1); fake_update_engine_client_->set_default_status(status); fake_update_engine_client_->NotifyObserversThatStatusChanged(status); } @@ -142,8 +142,9 @@ TEST_F(VersionUpdaterCrosTest, TwoOverlappingSetChannelRequests) { // DOWNLOADING -> REPORTING_ERROR_EVENT transition since target channel is not // equal to downloading channel now. { - UpdateEngineClient::Status status; - status.status = UpdateEngineClient::UPDATE_STATUS_REPORTING_ERROR_EVENT; + update_engine::StatusResult status; + status.set_current_operation( + update_engine::Operation::REPORTING_ERROR_EVENT); fake_update_engine_client_->set_default_status(status); fake_update_engine_client_->NotifyObserversThatStatusChanged(status); } @@ -155,8 +156,8 @@ TEST_F(VersionUpdaterCrosTest, TwoOverlappingSetChannelRequests) { // REPORTING_ERROR_EVENT -> IDLE transition, update check should be // automatically scheduled. { - UpdateEngineClient::Status status; - status.status = UpdateEngineClient::UPDATE_STATUS_IDLE; + update_engine::StatusResult status; + status.set_current_operation(update_engine::Operation::IDLE); fake_update_engine_client_->set_default_status(status); fake_update_engine_client_->NotifyObserversThatStatusChanged(status); } diff --git a/chromium/chrome/browser/ui/webui/history_ui.cc b/chromium/chrome/browser/ui/webui/history_ui.cc index 5f900c0829b..4826cb8ecee 100644 --- a/chromium/chrome/browser/ui/webui/history_ui.cc +++ b/chromium/chrome/browser/ui/webui/history_ui.cc @@ -58,6 +58,7 @@ content::WebUIDataSource* CreateHistoryUIHTMLSource(Profile* profile) { static constexpr LocalizedString kStrings[] = { // Localized strings (alphabetical order). {"actionMenuDescription", IDS_HISTORY_ACTION_MENU_DESCRIPTION}, + {"ariaRoleDescription", IDS_HISTORY_ARIA_ROLE_DESCRIPTION}, {"bookmarked", IDS_HISTORY_ENTRY_BOOKMARKED}, {"cancel", IDS_CANCEL}, {"clearBrowsingData", IDS_CLEAR_BROWSING_DATA_TITLE}, diff --git a/chromium/chrome/browser/ui/webui/inspect_ui.cc b/chromium/chrome/browser/ui/webui/inspect_ui.cc index 031cc220f5f..059c4d8bcb6 100644 --- a/chromium/chrome/browser/ui/webui/inspect_ui.cc +++ b/chromium/chrome/browser/ui/webui/inspect_ui.cc @@ -4,6 +4,8 @@ #include "chrome/browser/ui/webui/inspect_ui.h" +#include + #include "base/bind.h" #include "base/macros.h" #include "base/metrics/user_metrics.h" @@ -69,14 +71,14 @@ const char kInspectUiNameField[] = "name"; const char kInspectUiUrlField[] = "url"; const char kInspectUiIsAdditionalField[] = "isAdditional"; -base::ListValue GetUiDevToolsTargets() { - base::ListValue targets; +base::Value GetUiDevToolsTargets() { + base::Value targets(base::Value::Type::LIST); for (const auto& client_pair : ui_devtools::UiDevToolsServer::GetClientNamesAndUrls()) { - auto target_data = std::make_unique(); - target_data->SetString(kInspectUiNameField, client_pair.first); - target_data->SetString(kInspectUiUrlField, client_pair.second); - target_data->SetBoolean(kInspectUiIsAdditionalField, true); + base::Value target_data(base::Value::Type::DICTIONARY); + target_data.SetStringKey(kInspectUiNameField, client_pair.first); + target_data.SetStringKey(kInspectUiUrlField, client_pair.second); + target_data.SetBoolKey(kInspectUiIsAdditionalField, true); targets.Append(std::move(target_data)); } return targets; @@ -513,8 +515,7 @@ void InspectUI::StartListeningNotifications() { DevToolsTargetsUIHandler::Callback callback = base::Bind(&InspectUI::PopulateTargets, base::Unretained(this)); - base::ListValue additional_targets = GetUiDevToolsTargets(); - PopulateAdditionalTargets(additional_targets); + PopulateAdditionalTargets(GetUiDevToolsTargets()); AddTargetUIHandler( DevToolsTargetsUIHandler::CreateForLocal(callback, profile)); @@ -666,7 +667,7 @@ void InspectUI::PopulateTargets(const std::string& source, targets); } -void InspectUI::PopulateAdditionalTargets(const base::ListValue& targets) { +void InspectUI::PopulateAdditionalTargets(const base::Value& targets) { web_ui()->CallJavascriptFunctionUnsafe("populateAdditionalTargets", targets); } diff --git a/chromium/chrome/browser/ui/webui/inspect_ui.h b/chromium/chrome/browser/ui/webui/inspect_ui.h index 6c491beeb30..e5fc1596fc1 100644 --- a/chromium/chrome/browser/ui/webui/inspect_ui.h +++ b/chromium/chrome/browser/ui/webui/inspect_ui.h @@ -7,6 +7,7 @@ #include #include +#include #include "base/macros.h" #include "base/memory/ref_counted.h" @@ -86,7 +87,7 @@ class InspectUI : public content::WebUIController, void PopulateTargets(const std::string& source_id, const base::ListValue& targets); - void PopulateAdditionalTargets(const base::ListValue& targets); + void PopulateAdditionalTargets(const base::Value& targets); void PopulatePortStatus(const base::Value& status); diff --git a/chromium/chrome/browser/ui/webui/interstitials/interstitial_ui.cc b/chromium/chrome/browser/ui/webui/interstitials/interstitial_ui.cc index 51016ebb1a9..96408e5feab 100644 --- a/chromium/chrome/browser/ui/webui/interstitials/interstitial_ui.cc +++ b/chromium/chrome/browser/ui/webui/interstitials/interstitial_ui.cc @@ -26,6 +26,7 @@ #include "components/grit/components_resources.h" #include "components/safe_browsing/db/database_manager.h" #include "components/security_interstitials/content/origin_policy_ui.h" +#include "components/security_interstitials/core/ssl_error_options_mask.h" #include "components/security_interstitials/core/ssl_error_ui.h" #include "content/public/browser/interstitial_page_delegate.h" #include "content/public/browser/render_frame_host.h" @@ -41,6 +42,7 @@ #include "net/cert/x509_util.h" #include "net/ssl/ssl_info.h" #include "services/metrics/public/cpp/ukm_source_id.h" +#include "services/network/public/cpp/origin_policy.h" #include "ui/base/resource/resource_bundle.h" #include "ui/base/webui/web_ui_util.h" @@ -180,9 +182,11 @@ SSLBlockingPage* CreateSSLBlockingPage(content::WebContents* web_contents) { // This delegate doesn't create an interstitial. int options_mask = 0; if (overridable) - options_mask |= security_interstitials::SSLErrorUI::SOFT_OVERRIDE_ENABLED; + options_mask |= + security_interstitials::SSLErrorOptionsMask::SOFT_OVERRIDE_ENABLED; if (strict_enforcement) - options_mask |= security_interstitials::SSLErrorUI::STRICT_ENFORCEMENT; + options_mask |= + security_interstitials::SSLErrorOptionsMask::STRICT_ENFORCEMENT; return SSLBlockingPage::Create( web_contents, cert_error, ssl_info, request_url, options_mask, time_triggered_, GURL(), nullptr, @@ -250,9 +254,11 @@ BadClockBlockingPage* CreateBadClockBlockingPage( // This delegate doesn't create an interstitial. int options_mask = 0; if (overridable) - options_mask |= security_interstitials::SSLErrorUI::SOFT_OVERRIDE_ENABLED; + options_mask |= + security_interstitials::SSLErrorOptionsMask::SOFT_OVERRIDE_ENABLED; if (strict_enforcement) - options_mask |= security_interstitials::SSLErrorUI::STRICT_ENFORCEMENT; + options_mask |= + security_interstitials::SSLErrorOptionsMask::STRICT_ENFORCEMENT; return new BadClockBlockingPage( web_contents, cert_error, ssl_info, request_url, base::Time::Now(), clock_state, nullptr, diff --git a/chromium/chrome/browser/ui/webui/interstitials/interstitial_ui_browsertest.cc b/chromium/chrome/browser/ui/webui/interstitials/interstitial_ui_browsertest.cc index 867c83d78ca..acd49406748 100644 --- a/chromium/chrome/browser/ui/webui/interstitials/interstitial_ui_browsertest.cc +++ b/chromium/chrome/browser/ui/webui/interstitials/interstitial_ui_browsertest.cc @@ -183,7 +183,7 @@ IN_PROC_BROWSER_TEST_F(InterstitialUITest, CaptivePortalInterstitialWifi) { IN_PROC_BROWSER_TEST_F(InterstitialUITest, OriginPolicyErrorInterstitial) { TestInterstitial(GURL("chrome://interstitials/origin_policy"), "Origin Policy Error", - base::ASCIIToUTF16("has requested that a security policy")); + base::ASCIIToUTF16("has requested that an origin policy")); } // Tests that back button works after opening an interstitial from diff --git a/chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals.mojom b/chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals.mojom index 7e5201566a6..061c1e82179 100644 --- a/chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals.mojom +++ b/chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals.mojom @@ -58,7 +58,7 @@ interface InterventionsInternalsPageHandler { GetPreviewsFlagsDetails() => (array flags); // Inject the client side page object. - SetClientPage(InterventionsInternalsPage page); + SetClientPage(pending_remote page); // Change the status of ignoring blacklist to |ignored|. |ignored| will // indicate whether the blacklist decision would be ignored when deciding if a diff --git a/chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler.cc b/chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler.cc index 2becb485ab2..f6bce1c0ea4 100644 --- a/chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler.cc +++ b/chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler.cc @@ -14,10 +14,15 @@ #include "build/build_config.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/flag_descriptions.h" +#include "chrome/browser/ui/webui/interventions_internals/interventions_internals.mojom.h" #include "chrome/common/chrome_switches.h" #include "components/data_reduction_proxy/core/common/data_reduction_proxy_switches.h" #include "components/previews/core/previews_experiments.h" #include "components/previews/core/previews_switches.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/remote.h" #include "net/base/features.h" #include "net/nqe/network_quality_estimator_params.h" #include "services/network/public/cpp/network_quality_tracker.h" @@ -123,10 +128,10 @@ std::string GetEnabledStateForSwitch(const std::string& switch_name) { } // namespace InterventionsInternalsPageHandler::InterventionsInternalsPageHandler( - mojom::InterventionsInternalsPageHandlerRequest request, + mojo::PendingReceiver receiver, previews::PreviewsUIService* previews_ui_service, network::NetworkQualityTracker* network_quality_tracker) - : binding_(this, std::move(request)), + : receiver_(this, std::move(receiver)), previews_ui_service_(previews_ui_service), network_quality_tracker_(network_quality_tracker), current_estimated_ect_(net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN) { @@ -143,8 +148,8 @@ InterventionsInternalsPageHandler::~InterventionsInternalsPageHandler() { } void InterventionsInternalsPageHandler::SetClientPage( - mojom::InterventionsInternalsPagePtr page) { - page_ = std::move(page); + mojo::PendingRemote page) { + page_.Bind(std::move(page)); DCHECK(page_); logger_->AddAndNotifyObserver(this); (network_quality_tracker_ ? network_quality_tracker_ diff --git a/chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler.h b/chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler.h index 87a45b749cc..b892a1efe74 100644 --- a/chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler.h +++ b/chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler.h @@ -13,7 +13,10 @@ #include "components/previews/content/previews_ui_service.h" #include "components/previews/core/previews_logger.h" #include "components/previews/core/previews_logger_observer.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/remote.h" #include "net/nqe/effective_connection_type.h" #include "services/network/public/cpp/network_quality_tracker.h" @@ -23,7 +26,7 @@ class InterventionsInternalsPageHandler public mojom::InterventionsInternalsPageHandler { public: InterventionsInternalsPageHandler( - mojom::InterventionsInternalsPageHandlerRequest request, + mojo::PendingReceiver receiver, previews::PreviewsUIService* previews_ui_service, network::NetworkQualityTracker* network_quality_tracker); ~InterventionsInternalsPageHandler() override; @@ -32,7 +35,8 @@ class InterventionsInternalsPageHandler void GetPreviewsEnabled(GetPreviewsEnabledCallback callback) override; void GetPreviewsFlagsDetails( GetPreviewsFlagsDetailsCallback callback) override; - void SetClientPage(mojom::InterventionsInternalsPagePtr page) override; + void SetClientPage( + mojo::PendingRemote page) override; void SetIgnorePreviewsBlacklistDecision(bool ignore) override; // previews::PreviewsLoggerObserver: @@ -49,7 +53,7 @@ class InterventionsInternalsPageHandler void OnEffectiveConnectionTypeChanged( net::EffectiveConnectionType type) override; - mojo::Binding binding_; + mojo::Receiver receiver_; // The PreviewsLogger that this handler is listening to, and guaranteed to // outlive |this|. @@ -67,7 +71,7 @@ class InterventionsInternalsPageHandler net::EffectiveConnectionType current_estimated_ect_; // Handle back to the page by which we can pass in new log messages. - mojom::InterventionsInternalsPagePtr page_; + mojo::Remote page_; DISALLOW_COPY_AND_ASSIGN(InterventionsInternalsPageHandler); }; diff --git a/chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler_unittest.cc b/chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler_unittest.cc index c4b5994f991..ec9be763c15 100644 --- a/chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler_unittest.cc +++ b/chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler_unittest.cc @@ -39,7 +39,9 @@ #include "components/previews/core/previews_logger_observer.h" #include "components/previews/core/previews_switches.h" #include "content/public/test/browser_task_environment.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" #include "net/base/features.h" #include "net/nqe/effective_connection_type.h" #include "net/nqe/network_quality_estimator_params.h" @@ -145,8 +147,8 @@ class TestInterventionsInternalsPage : public mojom::InterventionsInternalsPage { public: TestInterventionsInternalsPage( - mojom::InterventionsInternalsPageRequest request) - : binding_(this, std::move(request)), blacklist_ignored_(false) {} + mojo::PendingReceiver receiver) + : receiver_(this, std::move(receiver)), blacklist_ignored_(false) {} ~TestInterventionsInternalsPage() override {} @@ -188,7 +190,7 @@ class TestInterventionsInternalsPage bool blacklist_ignored() const { return blacklist_ignored_; } private: - mojo::Binding binding_; + mojo::Receiver receiver_; // The MessageLogPtr passed in LogNewMessage method. std::unique_ptr message_; @@ -285,21 +287,21 @@ class InterventionsInternalsPageHandlerTest : public testing::Test { ASSERT_TRUE(profile_manager_.SetUp()); - mojom::InterventionsInternalsPageHandlerPtr page_handler_ptr; - - mojom::InterventionsInternalsPageHandlerRequest handler_request = - mojo::MakeRequest(&page_handler_ptr); + mojo::PendingReceiver + handler_receiver = + mojo::PendingRemote() + .InitWithNewPipeAndPassReceiver(); page_handler_ = std::make_unique( - std::move(handler_request), previews_ui_service_.get(), + std::move(handler_receiver), previews_ui_service_.get(), &test_network_quality_tracker_); - mojom::InterventionsInternalsPagePtr page_ptr; - mojom::InterventionsInternalsPageRequest page_request = - mojo::MakeRequest(&page_ptr); + mojo::PendingRemote page; + mojo::PendingReceiver page_receiver = + page.InitWithNewPipeAndPassReceiver(); page_ = std::make_unique( - std::move(page_request)); + std::move(page_receiver)); - page_handler_->SetClientPage(std::move(page_ptr)); + page_handler_->SetClientPage(std::move(page)); scoped_feature_list_ = std::make_unique(); } diff --git a/chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals_ui.cc b/chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals_ui.cc index 2bd0e34b7cd..7a6d49bbd45 100644 --- a/chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals_ui.cc +++ b/chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals_ui.cc @@ -4,6 +4,7 @@ #include "chrome/browser/ui/webui/interventions_internals/interventions_internals_ui.h" +#include #include #include #include @@ -12,10 +13,12 @@ #include "chrome/browser/previews/previews_service.h" #include "chrome/browser/previews/previews_service_factory.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/webui/interventions_internals/interventions_internals.mojom.h" #include "chrome/common/url_constants.h" #include "chrome/grit/browser_resources.h" #include "components/previews/content/previews_ui_service.h" #include "content/public/browser/web_ui_data_source.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" namespace { @@ -62,8 +65,8 @@ InterventionsInternalsUI::InterventionsInternalsUI(content::WebUI* web_ui) InterventionsInternalsUI::~InterventionsInternalsUI() {} void InterventionsInternalsUI::BindInterventionsInternalsPageHandler( - mojom::InterventionsInternalsPageHandlerRequest request) { + mojo::PendingReceiver receiver) { DCHECK(previews_ui_service_); page_handler_ = std::make_unique( - std::move(request), previews_ui_service_, nullptr); + std::move(receiver), previews_ui_service_, nullptr); } diff --git a/chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals_ui.h b/chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals_ui.h index b284a9d8131..97143b00575 100644 --- a/chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals_ui.h +++ b/chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals_ui.h @@ -8,6 +8,7 @@ #include "base/macros.h" #include "chrome/browser/ui/webui/interventions_internals/interventions_internals.mojom.h" #include "chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "ui/webui/mojo_web_ui_controller.h" namespace previews { @@ -22,7 +23,7 @@ class InterventionsInternalsUI : public ui::MojoWebUIController { private: void BindInterventionsInternalsPageHandler( - mojom::InterventionsInternalsPageHandlerRequest request); + mojo::PendingReceiver receiver); // The PreviewsUIService associated with this UI. previews::PreviewsUIService* previews_ui_service_; diff --git a/chromium/chrome/browser/ui/webui/local_discovery/local_discovery_ui_browsertest.cc b/chromium/chrome/browser/ui/webui/local_discovery/local_discovery_ui_browsertest.cc index 94f7f790bb2..711b68fa7c0 100644 --- a/chromium/chrome/browser/ui/webui/local_discovery/local_discovery_ui_browsertest.cc +++ b/chromium/chrome/browser/ui/webui/local_discovery/local_discovery_ui_browsertest.cc @@ -43,6 +43,7 @@ #if defined(OS_CHROMEOS) #include "chrome/browser/browser_process.h" +#include "chrome/browser/browser_process_platform_part.h" #include "chrome/browser/chromeos/printing/cups_printers_manager_factory.h" #include "chrome/common/pref_names.h" #include "chromeos/components/account_manager/account_manager.h" diff --git a/chromium/chrome/browser/ui/webui/management_ui.cc b/chromium/chrome/browser/ui/webui/management_ui.cc index cf98a0cd441..2d50de52824 100644 --- a/chromium/chrome/browser/ui/webui/management_ui.cc +++ b/chromium/chrome/browser/ui/webui/management_ui.cc @@ -25,6 +25,7 @@ #if defined(OS_CHROMEOS) #include "chrome/browser/browser_process.h" +#include "chrome/browser/browser_process_platform_part.h" #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" #include "chrome/grit/chromium_strings.h" #include "ui/chromeos/devicetype_utils.h" @@ -115,14 +116,12 @@ content::WebUIDataSource* CreateManagementUIHtmlSource(Profile* profile) { #endif // defined(OS_CHROMEOS) source->UseStringsJs(); + source->EnableReplaceI18nInJS(); // Add required resources. - source->AddResourcePath("management_browser_proxy.html", - IDR_MANAGEMENT_BROWSER_PROXY_HTML); source->AddResourcePath("management_browser_proxy.js", IDR_MANAGEMENT_BROWSER_PROXY_JS); - source->AddResourcePath("management_ui.html", IDR_MANAGEMENT_UI_HTML); source->AddResourcePath("management_ui.js", IDR_MANAGEMENT_UI_JS); - source->AddResourcePath("icons.html", IDR_MANAGEMENT_ICONS_HTML); + source->AddResourcePath("icons.js", IDR_MANAGEMENT_ICONS_JS); source->SetDefaultResource(IDR_MANAGEMENT_HTML); return source; } diff --git a/chromium/chrome/browser/ui/webui/management_ui_browsertest.cc b/chromium/chrome/browser/ui/webui/management_ui_browsertest.cc index 8cd3f96a813..e358945c1b8 100644 --- a/chromium/chrome/browser/ui/webui/management_ui_browsertest.cc +++ b/chromium/chrome/browser/ui/webui/management_ui_browsertest.cc @@ -59,7 +59,7 @@ IN_PROC_BROWSER_TEST_F(ManagementUITest, ManagementStateChange) { // The browser is not managed. const std::string javascript = - "management.ManagementBrowserProxyImpl.getInstance()" + "window.ManagementBrowserProxyImpl.getInstance()" " .getContextualManagedData()" " .then(managed_result => " " domAutomationController.send(JSON.stringify(managed_result)));"; diff --git a/chromium/chrome/browser/ui/webui/management_ui_handler.cc b/chromium/chrome/browser/ui/webui/management_ui_handler.cc index 6b9e20b4ac9..6442a49973f 100644 --- a/chromium/chrome/browser/ui/webui/management_ui_handler.cc +++ b/chromium/chrome/browser/ui/webui/management_ui_handler.cc @@ -203,7 +203,7 @@ void AddDeviceReportingElement(base::Value* report_sources, base::Value data(base::Value::Type::DICTIONARY); data.SetKey("messageId", base::Value(message_id)); data.SetKey("reportingType", base::Value(ToJSDeviceReportingType(type))); - report_sources->GetList().push_back(std::move(data)); + report_sources->Append(std::move(data)); } void AddDeviceReportingInfo(base::Value* report_sources, Profile* profile) { @@ -297,7 +297,7 @@ base::Value GetPowerfulExtensions(const extensions::ExtensionSet& extensions) { extensions::util::GetExtensionInfo(extension.get()); extension_to_add->SetKey("permissions", base::Value(std::move(permission_messages))); - powerful_extensions.GetList().push_back(std::move(*extension_to_add)); + powerful_extensions.Append(std::move(*extension_to_add)); } } @@ -336,11 +336,8 @@ std::string ManagementUIHandler::GetAccountDomain(Profile* profile) { const std::string domain = gaia::ExtractDomainName(std::move(username)); - auto consumer_domain_pos = domain.find("gmail.com"); - if (consumer_domain_pos == std::string::npos) - consumer_domain_pos = domain.find("googlemail.com"); - - return consumer_domain_pos == std::string::npos ? domain : std::string(); + return (domain == "gmail.com" || domain == "googlemail.com") ? std::string() + : domain; } ManagementUIHandler::ManagementUIHandler() { @@ -410,8 +407,7 @@ void ManagementUIHandler::OnJavascriptDisallowed() { RemoveObservers(); } -void ManagementUIHandler::AddExtensionReportingInfo( - base::Value* report_sources) { +void ManagementUIHandler::AddReportingInfo(base::Value* report_sources) { const extensions::Extension* cloud_reporting_extension = GetEnabledExtension(kCloudReportingExtensionId); @@ -439,6 +435,15 @@ void ManagementUIHandler::AddExtensionReportingInfo( const bool cloud_reporting_extension_installed = cloud_reporting_extension != nullptr; + const auto* cloud_reporting_policy_value = + GetPolicyService() + ->GetPolicies(policy::PolicyNamespace(policy::POLICY_DOMAIN_CHROME, + std::string())) + .GetValue(policy::key::kCloudReportingEnabled); + const bool cloud_reporting_policy_enabled = + cloud_reporting_policy_value && cloud_reporting_policy_value->is_bool() && + cloud_reporting_policy_value->GetBool(); + const struct { const char* policy_key; const char* message; @@ -446,22 +451,25 @@ void ManagementUIHandler::AddExtensionReportingInfo( const bool enabled_by_default; } report_definitions[] = { {kPolicyKeyReportMachineIdData, kManagementExtensionReportMachineName, - ReportingType::kDevice, cloud_reporting_extension_installed}, + ReportingType::kDevice, + cloud_reporting_extension_installed || cloud_reporting_policy_enabled}, {kPolicyKeyReportMachineIdData, kManagementExtensionReportMachineNameAddress, ReportingType::kDevice, false}, {kPolicyKeyReportVersionData, kManagementExtensionReportVersion, - ReportingType::kDevice, cloud_reporting_extension_installed}, + ReportingType::kDevice, + cloud_reporting_extension_installed || cloud_reporting_policy_enabled}, {kPolicyKeyReportSystemTelemetryData, kManagementExtensionReportPerfCrash, ReportingType::kDevice, false}, {kPolicyKeyReportUserIdData, kManagementExtensionReportUsername, - ReportingType::kUser, cloud_reporting_extension_installed}, + ReportingType::kUser, + cloud_reporting_extension_installed || cloud_reporting_policy_enabled}, {kPolicyKeyReportSafeBrowsingData, kManagementExtensionReportSafeBrowsingWarnings, ReportingType::kSecurity, cloud_reporting_extension_installed}, {kPolicyKeyReportExtensionsData, kManagementExtensionReportExtensionsPlugin, ReportingType::kExtensions, - cloud_reporting_extension_installed}, + cloud_reporting_extension_installed || cloud_reporting_policy_enabled}, {kPolicyKeyReportUserBrowsingData, kManagementExtensionReportUserBrowsingData, ReportingType::kUserActivity, false}, @@ -503,7 +511,7 @@ void ManagementUIHandler::AddExtensionReportingInfo( data.SetKey( "reportingType", base::Value(GetReportingTypeValue(report_definition.reporting_type))); - report_sources->GetList().push_back(std::move(data)); + report_sources->Append(std::move(data)); } } @@ -597,7 +605,7 @@ base::Value ManagementUIHandler::GetThreatProtectionInfo( base::Value value(base::Value::Type::DICTIONARY); value.SetStringKey("title", kManagementDataLossPreventionName); value.SetStringKey("permission", kManagementDataLossPreventionPermissions); - info.GetList().push_back(std::move(value)); + info.Append(std::move(value)); } // SendFilesForMalwareCheck is a int-enum policy. The accepted values are @@ -606,13 +614,13 @@ base::Value ManagementUIHandler::GetThreatProtectionInfo( chrome_policies.GetValue(policy::key::kSendFilesForMalwareCheck); if (send_files_for_malware_check_value && send_files_for_malware_check_value->GetInt() > - safe_browsing::SEND_FILES_DISABLED && + safe_browsing::DO_NOT_SCAN && send_files_for_malware_check_value->GetInt() <= safe_browsing::SEND_FILES_FOR_MALWARE_CHECK_MAX) { base::Value value(base::Value::Type::DICTIONARY); value.SetStringKey("title", kManagementMalwareScanningName); value.SetStringKey("permission", kManagementMalwareScanningPermissions); - info.GetList().push_back(std::move(value)); + info.Append(std::move(value)); } auto* unsafe_event_reporting_value = @@ -621,7 +629,7 @@ base::Value ManagementUIHandler::GetThreatProtectionInfo( base::Value value(base::Value::Type::DICTIONARY); value.SetStringKey("title", kManagementEnterpriseReportingName); value.SetStringKey("permission", kManagementEnterpriseReportingPermissions); - info.GetList().push_back(std::move(value)); + info.Append(std::move(value)); } #if defined(OS_CHROMEOS) @@ -825,14 +833,14 @@ void ManagementUIHandler::HandleInitBrowserReportingInfo( const base::ListValue* args) { base::Value report_sources(base::Value::Type::LIST); AllowJavascript(); - AddExtensionReportingInfo(&report_sources); + AddReportingInfo(&report_sources); ResolveJavascriptCallback(args->GetList()[0] /* callback_id */, report_sources); } void ManagementUIHandler::NotifyBrowserReportingInfoUpdated() { base::Value report_sources(base::Value::Type::LIST); - AddExtensionReportingInfo(&report_sources); + AddReportingInfo(&report_sources); FireWebUIListener("browser-reporting-info-updated", report_sources); } diff --git a/chromium/chrome/browser/ui/webui/management_ui_handler.h b/chromium/chrome/browser/ui/webui/management_ui_handler.h index f06e8d6e58a..78fc6f597fe 100644 --- a/chromium/chrome/browser/ui/webui/management_ui_handler.h +++ b/chromium/chrome/browser/ui/webui/management_ui_handler.h @@ -113,7 +113,7 @@ class ManagementUIHandler : public content::WebUIMessageHandler, static void InitializeInternal(content::WebUI* web_ui, content::WebUIDataSource* source, Profile* profile); - void AddExtensionReportingInfo(base::Value* report_sources); + void AddReportingInfo(base::Value* report_sources); base::DictionaryValue GetContextualManagedData(Profile* profile); base::Value GetThreatProtectionInfo(Profile* profile) const; diff --git a/chromium/chrome/browser/ui/webui/management_ui_handler_unittest.cc b/chromium/chrome/browser/ui/webui/management_ui_handler_unittest.cc index 8541fce2c79..5eb74d5c0a7 100644 --- a/chromium/chrome/browser/ui/webui/management_ui_handler_unittest.cc +++ b/chromium/chrome/browser/ui/webui/management_ui_handler_unittest.cc @@ -61,7 +61,7 @@ class TestManagementUIHandler : public ManagementUIHandler { base::Value GetExtensionReportingInfo() { base::Value report_sources(base::Value::Type::LIST); - AddExtensionReportingInfo(&report_sources); + AddReportingInfo(&report_sources); return report_sources; } @@ -304,7 +304,7 @@ TEST_F(ManagementUIHandlerTests, TEST_F(ManagementUIHandlerTests, ManagementContextualSourceUpdateManagedKnownDomain) { TestingProfile::Builder builder; - builder.SetProfileName("managed@manager.com"); + builder.SetProfileName("managed@gmail.com.manager.com.gmail.com"); auto profile = builder.Build(); base::string16 extension_reporting_title; @@ -324,15 +324,17 @@ TEST_F(ManagementUIHandlerTests, EXPECT_EQ(data.DictSize(), 4u); EXPECT_EQ(extension_reporting_title, - l10n_util::GetStringFUTF16(IDS_MANAGEMENT_EXTENSIONS_INSTALLED_BY, - base::UTF8ToUTF16("manager.com"))); + l10n_util::GetStringFUTF16( + IDS_MANAGEMENT_EXTENSIONS_INSTALLED_BY, + base::UTF8ToUTF16("gmail.com.manager.com.gmail.com"))); EXPECT_EQ(browser_management_notice, l10n_util::GetStringFUTF16( IDS_MANAGEMENT_BROWSER_NOTICE, base::UTF8ToUTF16(chrome::kManagedUiLearnMoreUrl))); EXPECT_EQ(subtitle, - l10n_util::GetStringFUTF16(IDS_MANAGEMENT_SUBTITLE_MANAGED_BY, - base::UTF8ToUTF16("manager.com"))); + l10n_util::GetStringFUTF16( + IDS_MANAGEMENT_SUBTITLE_MANAGED_BY, + base::UTF8ToUTF16("gmail.com.manager.com.gmail.com"))); EXPECT_TRUE(managed); } @@ -565,6 +567,31 @@ TEST_F(ManagementUIHandlerTests, EXPECT_EQ(reporting_info.GetList().size(), expected_messages.size()); } +TEST_F(ManagementUIHandlerTests, CloudReportingPolicy) { + handler_.EnableCloudReportingExtension(false); + + policy::PolicyMap chrome_policies; + const policy::PolicyNamespace chrome_policies_namespace = + policy::PolicyNamespace(policy::POLICY_DOMAIN_CHROME, std::string()); + EXPECT_CALL(policy_service_, GetPolicies(_)) + .WillRepeatedly(ReturnRef(chrome_policies)); + SetPolicyValue(policy::key::kCloudReportingEnabled, chrome_policies, true); + + std::set expected_messages = { + kManagementExtensionReportMachineName, kManagementExtensionReportUsername, + kManagementExtensionReportVersion, + kManagementExtensionReportExtensionsPlugin}; + + auto reporting_info = handler_.GetExtensionReportingInfo(); + const auto& reporting_info_list = reporting_info.GetList(); + + for (const base::Value& info : reporting_info_list) { + const std::string* messageId = info.FindStringKey("messageId"); + EXPECT_TRUE(expected_messages.find(*messageId) != expected_messages.end()); + } + EXPECT_EQ(reporting_info.GetList().size(), expected_messages.size()); +} + TEST_F(ManagementUIHandlerTests, ExtensionReportingInfoPoliciesMerge) { policy::PolicyMap on_prem_reporting_extension_beta_policies; policy::PolicyMap on_prem_reporting_extension_stable_policies; @@ -603,6 +630,11 @@ TEST_F(ManagementUIHandlerTests, ExtensionReportingInfoPoliciesMerge) { EXPECT_CALL(policy_service_, GetPolicies(on_prem_reporting_extension_beta_policy_namespace)) .WillOnce(ReturnRef(on_prem_reporting_extension_beta_policies)); + policy::PolicyMap empty_policy_map; + EXPECT_CALL(policy_service_, + GetPolicies(policy::PolicyNamespace(policy::POLICY_DOMAIN_CHROME, + std::string()))) + .WillOnce(ReturnRef(empty_policy_map)); handler_.EnableCloudReportingExtension(true); @@ -686,19 +718,19 @@ TEST_F(ManagementUIHandlerTests, ThreatReportingInfo) { base::Value value(base::Value::Type::DICTIONARY); value.SetStringKey("title", kManagementDataLossPreventionName); value.SetStringKey("permission", kManagementDataLossPreventionPermissions); - expected_info.GetList().push_back(std::move(value)); + expected_info.Append(std::move(value)); } { base::Value value(base::Value::Type::DICTIONARY); value.SetStringKey("title", kManagementMalwareScanningName); value.SetStringKey("permission", kManagementMalwareScanningPermissions); - expected_info.GetList().push_back(std::move(value)); + expected_info.Append(std::move(value)); } { base::Value value(base::Value::Type::DICTIONARY); value.SetStringKey("title", kManagementEnterpriseReportingName); value.SetStringKey("permission", kManagementEnterpriseReportingPermissions); - expected_info.GetList().push_back(std::move(value)); + expected_info.Append(std::move(value)); } EXPECT_EQ(expected_info, *threat_protection_info->FindListKey("info")); diff --git a/chromium/chrome/browser/ui/webui/media/media_engagement_ui.cc b/chromium/chrome/browser/ui/webui/media/media_engagement_ui.cc index e69a536ae5c..66a07e5567e 100644 --- a/chromium/chrome/browser/ui/webui/media/media_engagement_ui.cc +++ b/chromium/chrome/browser/ui/webui/media/media_engagement_ui.cc @@ -5,6 +5,7 @@ #include "chrome/browser/ui/webui/media/media_engagement_ui.h" #include +#include #include "base/bind.h" #include "base/command_line.h" @@ -13,6 +14,7 @@ #include "build/build_config.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/media/media_engagement_score.h" +#include "chrome/browser/media/media_engagement_score_details.mojom.h" #include "chrome/browser/media/media_engagement_service.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/url_constants.h" @@ -25,7 +27,8 @@ #include "content/public/browser/web_ui_data_source.h" #include "content/public/common/web_preferences.h" #include "media/base/media_switches.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/receiver.h" #if !defined(OS_ANDROID) #include "chrome/common/pref_names.h" @@ -48,11 +51,11 @@ class MediaEngagementScoreDetailsProviderImpl public: MediaEngagementScoreDetailsProviderImpl( content::WebUI* web_ui, - mojo::InterfaceRequest - request) + mojo::PendingReceiver + receiver) : web_ui_(web_ui), profile_(Profile::FromWebUI(web_ui)), - binding_(this, std::move(request)) { + receiver_(this, std::move(receiver)) { DCHECK(web_ui_); DCHECK(profile_); service_ = MediaEngagementService::Get(profile_); @@ -130,7 +133,7 @@ class MediaEngagementScoreDetailsProviderImpl MediaEngagementService* service_; - mojo::Binding binding_; + mojo::Receiver receiver_; DISALLOW_COPY_AND_ASSIGN(MediaEngagementScoreDetailsProviderImpl); }; @@ -156,7 +159,8 @@ MediaEngagementUI::MediaEngagementUI(content::WebUI* web_ui) MediaEngagementUI::~MediaEngagementUI() = default; void MediaEngagementUI::BindMediaEngagementScoreDetailsProvider( - media::mojom::MediaEngagementScoreDetailsProviderRequest request) { + mojo::PendingReceiver + receiver) { ui_handler_ = std::make_unique( - web_ui(), std::move(request)); + web_ui(), std::move(receiver)); } diff --git a/chromium/chrome/browser/ui/webui/media/media_engagement_ui.h b/chromium/chrome/browser/ui/webui/media/media_engagement_ui.h index a6d311226fb..51d367b598b 100644 --- a/chromium/chrome/browser/ui/webui/media/media_engagement_ui.h +++ b/chromium/chrome/browser/ui/webui/media/media_engagement_ui.h @@ -5,8 +5,11 @@ #ifndef CHROME_BROWSER_UI_WEBUI_MEDIA_MEDIA_ENGAGEMENT_UI_H_ #define CHROME_BROWSER_UI_WEBUI_MEDIA_MEDIA_ENGAGEMENT_UI_H_ +#include + #include "base/macros.h" #include "chrome/browser/media/media_engagement_score_details.mojom.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "ui/webui/mojo_web_ui_controller.h" // The UI for chrome://media-engagement/. @@ -17,7 +20,8 @@ class MediaEngagementUI : public ui::MojoWebUIController { private: void BindMediaEngagementScoreDetailsProvider( - media::mojom::MediaEngagementScoreDetailsProviderRequest request); + mojo::PendingReceiver + receiver); std::unique_ptr ui_handler_; diff --git a/chromium/chrome/browser/ui/webui/media_router/media_router_internals_webui_message_handler.cc b/chromium/chrome/browser/ui/webui/media_router/media_router_internals_webui_message_handler.cc index f986d70ad5e..f3390a9b16f 100644 --- a/chromium/chrome/browser/ui/webui/media_router/media_router_internals_webui_message_handler.cc +++ b/chromium/chrome/browser/ui/webui/media_router/media_router_internals_webui_message_handler.cc @@ -18,17 +18,17 @@ MediaRouterInternalsWebUIMessageHandler:: void MediaRouterInternalsWebUIMessageHandler::RegisterMessages() { web_ui()->RegisterMessageCallback( - "initialized", + "getStatus", base::BindRepeating( - &MediaRouterInternalsWebUIMessageHandler::HandleInitialized, + &MediaRouterInternalsWebUIMessageHandler::HandleGetStatus, base::Unretained(this))); } -void MediaRouterInternalsWebUIMessageHandler::HandleInitialized( +void MediaRouterInternalsWebUIMessageHandler::HandleGetStatus( const base::ListValue* args) { AllowJavascript(); - CallJavascriptFunction("media_router_internals.setStatus", - router_->GetState()); + const base::Value& callback_id = args->GetList()[0]; + ResolveJavascriptCallback(callback_id, router_->GetState()); } } // namespace media_router diff --git a/chromium/chrome/browser/ui/webui/media_router/media_router_internals_webui_message_handler.h b/chromium/chrome/browser/ui/webui/media_router/media_router_internals_webui_message_handler.h index 0f9c6fb49a8..b893c1e370b 100644 --- a/chromium/chrome/browser/ui/webui/media_router/media_router_internals_webui_message_handler.h +++ b/chromium/chrome/browser/ui/webui/media_router/media_router_internals_webui_message_handler.h @@ -25,7 +25,7 @@ class MediaRouterInternalsWebUIMessageHandler void RegisterMessages() override; // Handlers for JavaScript messages. - void HandleInitialized(const base::ListValue* args); + void HandleGetStatus(const base::ListValue* args); // Pointer to the MediaRouter. const MediaRouter* router_; diff --git a/chromium/chrome/browser/ui/webui/memory_internals_ui.cc b/chromium/chrome/browser/ui/webui/memory_internals_ui.cc index 6ce8d49549e..35f89024c7d 100644 --- a/chromium/chrome/browser/ui/webui/memory_internals_ui.cc +++ b/chromium/chrome/browser/ui/webui/memory_internals_ui.cc @@ -33,14 +33,12 @@ #include "content/public/browser/browser_thread.h" #include "content/public/browser/child_process_data.h" #include "content/public/browser/render_process_host.h" -#include "content/public/browser/system_connector.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_data_source.h" #include "content/public/browser/web_ui_message_handler.h" #include "content/public/common/process_type.h" #include "mojo/public/cpp/system/platform_handle.h" -#include "services/service_manager/public/cpp/connector.h" #include "ui/shell_dialogs/select_file_dialog.h" #include "ui/shell_dialogs/select_file_policy.h" @@ -105,8 +103,8 @@ std::string GetMessageString() { // Generates one row of the returned process info. base::Value MakeProcessInfo(int pid, std::string description) { base::Value result(base::Value::Type::LIST); - result.GetList().push_back(base::Value(pid)); - result.GetList().push_back(base::Value(std::move(description))); + result.Append(base::Value(pid)); + result.Append(base::Value(std::move(description))); return result; } @@ -269,7 +267,6 @@ void MemoryInternalsDOMHandler::HandleStartProfiling( supervisor->StartManualProfiling(pid); } else { supervisor->Start( - content::GetSystemConnector(), base::BindOnce(&heap_profiling::Supervisor::StartManualProfiling, base::Unretained(supervisor), pid)); } diff --git a/chromium/chrome/browser/ui/webui/net_export_ui.cc b/chromium/chrome/browser/ui/webui/net_export_ui.cc index 081ef17bf0d..7b7cf106ad3 100644 --- a/chromium/chrome/browser/ui/webui/net_export_ui.cc +++ b/chromium/chrome/browser/ui/webui/net_export_ui.cc @@ -212,7 +212,7 @@ void NetExportMessageHandler::OnEnableNotifyUIWithState( void NetExportMessageHandler::OnStartNetLog(const base::ListValue* list) { DCHECK_CURRENTLY_ON(BrowserThread::UI); - const base::Value::ListStorage& params = list->GetList(); + base::span params = list->GetList(); // Determine the capture mode. capture_mode_ = net::NetLogCaptureMode::kDefault; diff --git a/chromium/chrome/browser/ui/webui/net_internals/net_internals_ui.cc b/chromium/chrome/browser/ui/webui/net_internals/net_internals_ui.cc index 8c5bfd5d3fc..3d53fdef64c 100644 --- a/chromium/chrome/browser/ui/webui/net_internals/net_internals_ui.cc +++ b/chromium/chrome/browser/ui/webui/net_internals/net_internals_ui.cc @@ -35,6 +35,7 @@ #include "content/public/browser/web_ui_message_handler.h" #include "net/log/net_log_util.h" #include "services/network/expect_ct_reporter.h" +#include "services/network/public/mojom/network_context.mojom.h" #if defined(OS_CHROMEOS) #include "chrome/browser/chromeos/file_manager/filesystem_api_util.h" @@ -44,7 +45,7 @@ #include "chrome/browser/policy/policy_conversions.h" #include "chrome/common/logging_chrome.h" #include "chromeos/dbus/dbus_thread_manager.h" -#include "chromeos/dbus/debug_daemon_client.h" +#include "chromeos/dbus/debug_daemon/debug_daemon_client.h" #include "chromeos/network/onc/onc_certificate_importer_impl.h" #include "chromeos/network/onc/onc_parsed_certificates.h" #include "chromeos/network/onc/onc_utils.h" diff --git a/chromium/chrome/browser/ui/webui/net_internals/net_internals_ui_browsertest.cc b/chromium/chrome/browser/ui/webui/net_internals/net_internals_ui_browsertest.cc index eab07796c00..9ca268af073 100644 --- a/chromium/chrome/browser/ui/webui/net_internals/net_internals_ui_browsertest.cc +++ b/chromium/chrome/browser/ui/webui/net_internals/net_internals_ui_browsertest.cc @@ -14,6 +14,7 @@ #include "base/files/scoped_file.h" #include "base/macros.h" #include "base/memory/weak_ptr.h" +#include "base/message_loop/message_loop_current.h" #include "base/strings/string_split.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" @@ -35,6 +36,9 @@ #include "content/public/browser/storage_partition.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_ui_message_handler.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" #include "net/base/address_list.h" #include "net/base/net_errors.h" #include "net/dns/host_resolver_source.h" @@ -66,10 +70,11 @@ class DnsLookupClient : public network::mojom::ResolveHostClient { public: using Callback = base::OnceCallback; - DnsLookupClient(network::mojom::ResolveHostClientRequest request, - Callback callback) - : binding_(this, std::move(request)), callback_(std::move(callback)) { - binding_.set_connection_error_handler( + DnsLookupClient( + mojo::PendingReceiver receiver, + Callback callback) + : receiver_(this, std::move(receiver)), callback_(std::move(callback)) { + receiver_.set_disconnect_handler( base::BindOnce(&DnsLookupClient::OnComplete, base::Unretained(this), net::ERR_FAILED, base::nullopt)); } @@ -95,7 +100,7 @@ class DnsLookupClient : public network::mojom::ResolveHostClient { } private: - mojo::Binding binding_; + mojo::Receiver receiver_; Callback callback_; }; @@ -214,15 +219,15 @@ void NetInternalsTest::MessageHandler::DnsLookup( auto resolve_host_parameters = network::mojom::ResolveHostParameters::New(); if (local) resolve_host_parameters->source = net::HostResolverSource::LOCAL_ONLY; - network::mojom::ResolveHostClientPtr client_ptr; + mojo::PendingRemote client; // DnsLookupClient owns itself. - new DnsLookupClient(mojo::MakeRequest(&client_ptr), + new DnsLookupClient(client.InitWithNewPipeAndPassReceiver(), base::BindOnce(&MessageHandler::RunJavascriptCallback, weak_factory_.GetWeakPtr())); content::BrowserContext::GetDefaultStoragePartition(browser()->profile()) ->GetNetworkContext() ->ResolveHost(net::HostPortPair(hostname, 80), - std::move(resolve_host_parameters), std::move(client_ptr)); + std::move(resolve_host_parameters), std::move(client)); } //////////////////////////////////////////////////////////////////////////////// diff --git a/chromium/chrome/browser/ui/webui/notifications_internals/notifications_internals_ui_message_handler.cc b/chromium/chrome/browser/ui/webui/notifications_internals/notifications_internals_ui_message_handler.cc index cd4c3f51c07..a9753fabdf2 100644 --- a/chromium/chrome/browser/ui/webui/notifications_internals/notifications_internals_ui_message_handler.cc +++ b/chromium/chrome/browser/ui/webui/notifications_internals/notifications_internals_ui_message_handler.cc @@ -41,6 +41,7 @@ void NotificationsInternalsUIMessageHandler::HandleScheduleNotification( schedule_params.deliver_time_end = base::Time::Now() + base::TimeDelta::FromMinutes(5); notifications::NotificationData data; + // TOOD(hesen): Enable adding icons from notifications-internals HTML. data.custom_data.emplace("url", args->GetList()[1].GetString()); data.title = base::UTF8ToUTF16(args->GetList()[2].GetString()); data.message = base::UTF8ToUTF16(args->GetList()[3].GetString()); diff --git a/chromium/chrome/browser/ui/webui/ntp/app_launcher_handler.cc b/chromium/chrome/browser/ui/webui/ntp/app_launcher_handler.cc index abeeef88687..36c8b28c89f 100644 --- a/chromium/chrome/browser/ui/webui/ntp/app_launcher_handler.cc +++ b/chromium/chrome/browser/ui/webui/ntp/app_launcher_handler.cc @@ -145,8 +145,8 @@ void AppLauncherHandler::CreateAppInfo(const Extension* extension, bool enabled = service->IsExtensionEnabled(extension->id()) && !extensions::ExtensionRegistry::Get(service->GetBrowserContext()) - ->GetExtensionById(extension->id(), - extensions::ExtensionRegistry::TERMINATED); + ->terminated_extensions() + .GetByID(extension->id()); extensions::GetExtensionBasicInfo(extension, enabled, value); value->SetBoolean("mayDisable", extensions::ExtensionSystem::Get( @@ -303,7 +303,8 @@ void AppLauncherHandler::Observe(int type, content::Details(details).ptr(); if (id) { const Extension* extension = - extension_service_->GetInstalledExtension(*id); + ExtensionRegistry::Get(extension_service_->profile()) + ->GetInstalledExtension(*id); if (!extension) { // Extension could still be downloading or installing. return; @@ -376,8 +377,10 @@ void AppLauncherHandler::FillAppDictionary(base::DictionaryValue* dictionary) { Profile* profile = Profile::FromWebUI(web_ui()); PrefService* prefs = profile->GetPrefs(); + ExtensionRegistry* registry = + ExtensionRegistry::Get(extension_service_->profile()); for (auto it = visible_apps_.begin(); it != visible_apps_.end(); ++it) { - const Extension* extension = extension_service_->GetInstalledExtension(*it); + const Extension* extension = registry->GetInstalledExtension(*it); if (extension && extensions::ui_util::ShouldDisplayInNewTabPage( extension, profile)) { installed_extensions->Append(GetAppInfo(extension)); @@ -491,8 +494,8 @@ void AppLauncherHandler::HandleLaunchApp(const base::ListValue* args) { Profile* profile = extension_service_->profile(); const Extension* extension = - extensions::ExtensionRegistry::Get(profile)->GetExtensionById( - extension_id, extensions::ExtensionRegistry::ENABLED); + extensions::ExtensionRegistry::Get(profile)->enabled_extensions().GetByID( + extension_id); // Prompt the user to re-enable the application if disabled. if (!extension) { @@ -524,8 +527,8 @@ void AppLauncherHandler::HandleLaunchApp(const base::ListValue* args) { disposition == WindowOpenDisposition::NEW_BACKGROUND_TAB || disposition == WindowOpenDisposition::NEW_WINDOW) { // TODO(jamescook): Proper support for background tabs. - AppLaunchParams params( - profile, extension_id, + apps::AppLaunchParams params( + extension_id, disposition == WindowOpenDisposition::NEW_WINDOW ? apps::mojom::LaunchContainer::kLaunchContainerWindow : apps::mojom::LaunchContainer::kLaunchContainerTab, @@ -541,7 +544,7 @@ void AppLauncherHandler::HandleLaunchApp(const base::ListValue* args) { if (browser) old_contents = browser->tab_strip_model()->GetActiveWebContents(); - AppLaunchParams params = CreateAppLaunchParamsUserContainer( + apps::AppLaunchParams params = CreateAppLaunchParamsUserContainer( profile, extension, old_contents ? WindowOpenDisposition::CURRENT_TAB : WindowOpenDisposition::NEW_FOREGROUND_TAB, @@ -567,7 +570,9 @@ void AppLauncherHandler::HandleSetLaunchType(const base::ListValue* args) { const Extension* extension = extensions::ExtensionRegistry::Get(extension_service_->profile()) ->GetExtensionById(extension_id, - extensions::ExtensionRegistry::COMPATIBILITY); + extensions::ExtensionRegistry::ENABLED | + extensions::ExtensionRegistry::DISABLED | + extensions::ExtensionRegistry::TERMINATED); if (!extension) return; @@ -583,8 +588,9 @@ void AppLauncherHandler::HandleUninstallApp(const base::ListValue* args) { std::string extension_id; CHECK(args->GetString(0, &extension_id)); - const Extension* extension = extension_service_->GetInstalledExtension( - extension_id); + const Extension* extension = + ExtensionRegistry::Get(extension_service_->profile()) + ->GetInstalledExtension(extension_id); if (!extension) return; @@ -621,7 +627,9 @@ void AppLauncherHandler::HandleCreateAppShortcut(const base::ListValue* args) { const Extension* extension = extensions::ExtensionRegistry::Get(extension_service_->profile()) ->GetExtensionById(extension_id, - extensions::ExtensionRegistry::COMPATIBILITY); + extensions::ExtensionRegistry::ENABLED | + extensions::ExtensionRegistry::DISABLED | + extensions::ExtensionRegistry::TERMINATED); if (!extension) return; @@ -639,7 +647,9 @@ void AppLauncherHandler::HandleInstallAppLocally(const base::ListValue* args) { const Extension* extension = extensions::ExtensionRegistry::Get(extension_service_->profile()) ->GetExtensionById(extension_id, - extensions::ExtensionRegistry::COMPATIBILITY); + extensions::ExtensionRegistry::ENABLED | + extensions::ExtensionRegistry::DISABLED | + extensions::ExtensionRegistry::TERMINATED); if (!extension) return; @@ -664,7 +674,9 @@ void AppLauncherHandler::HandleShowAppInfo(const base::ListValue* args) { const Extension* extension = extensions::ExtensionRegistry::Get(extension_service_->profile()) ->GetExtensionById(extension_id, - extensions::ExtensionRegistry::COMPATIBILITY); + extensions::ExtensionRegistry::ENABLED | + extensions::ExtensionRegistry::DISABLED | + extensions::ExtensionRegistry::TERMINATED); if (!extension) return; @@ -707,9 +719,6 @@ void AppLauncherHandler::HandleReorderApps(const base::ListValue* args) { // Don't update the page; it already knows the apps have been reordered. base::AutoReset auto_reset(&ignore_changes_, true); - ExtensionPrefs* extension_prefs = - ExtensionPrefs::Get(extension_service_->GetBrowserContext()); - extension_prefs->SetAppDraggedByUser(dragged_app_id); ExtensionSystem::Get(extension_service_->GetBrowserContext()) ->app_sorting() ->OnExtensionMoved(dragged_app_id, predecessor_to_moved_ext, @@ -801,7 +810,7 @@ void AppLauncherHandler::OnFaviconForApp( web_app->app_url = install_info->app_url; if (!image_result.image.IsEmpty()) { - WebApplicationInfo::IconInfo icon; + WebApplicationIconInfo icon; icon.data = image_result.image.AsBitmap(); icon.width = icon.data.width(); icon.height = icon.data.height(); @@ -874,7 +883,9 @@ void AppLauncherHandler::ExtensionEnableFlowAborted(bool user_initiated) { const Extension* extension = extensions::ExtensionRegistry::Get(extension_service_->profile()) ->GetExtensionById(extension_id_prompting_, - extensions::ExtensionRegistry::COMPATIBILITY); + extensions::ExtensionRegistry::ENABLED | + extensions::ExtensionRegistry::DISABLED | + extensions::ExtensionRegistry::TERMINATED); std::string histogram_name = user_initiated ? "ReEnableCancel" : "ReEnableAbort"; extensions::ExtensionService::RecordPermissionMessagesHistogram( diff --git a/chromium/chrome/browser/ui/webui/ntp/cookie_controls_handler.cc b/chromium/chrome/browser/ui/webui/ntp/cookie_controls_handler.cc new file mode 100644 index 00000000000..3a7b7005675 --- /dev/null +++ b/chromium/chrome/browser/ui/webui/ntp/cookie_controls_handler.cc @@ -0,0 +1,117 @@ +// Copyright 2019 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/ntp/cookie_controls_handler.h" + +#include + +#include "base/bind.h" +#include "base/feature_list.h" +#include "base/metrics/user_metrics.h" +#include "base/metrics/user_metrics_action.h" +#include "base/values.h" +#include "chrome/browser/policy/profile_policy_connector.h" +#include "chrome/browser/profiles/profile.h" +#include "components/content_settings/core/browser/cookie_settings.h" +#include "components/content_settings/core/common/features.h" +#include "components/content_settings/core/common/pref_names.h" +#include "components/policy/core/common/policy_service.h" +#include "components/policy/policy_constants.h" +#include "components/prefs/pref_service.h" + +CookieControlsHandler::CookieControlsHandler() {} + +CookieControlsHandler::~CookieControlsHandler() {} + +void CookieControlsHandler::RegisterMessages() { + web_ui()->RegisterMessageCallback( + "cookieControlsToggleChanged", + base::BindRepeating( + &CookieControlsHandler::HandleCookieControlsToggleChanged, + base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "observeCookieControlsSettingsChanges", + base::BindRepeating( + &CookieControlsHandler::HandleObserveCookieControlsSettingsChanges, + base::Unretained(this))); +} + +void CookieControlsHandler::OnJavascriptAllowed() { + Profile* profile = Profile::FromWebUI(web_ui()); + pref_change_registrar_.Init(profile->GetPrefs()); + pref_change_registrar_.Add( + prefs::kCookieControlsMode, + base::Bind(&CookieControlsHandler::OnCookieControlsChanged, + base::Unretained(this))); + pref_change_registrar_.Add( + prefs::kBlockThirdPartyCookies, + base::Bind(&CookieControlsHandler::OnThirdPartyCookieBlockingChanged, + base::Unretained(this))); + policy_registrar_ = std::make_unique( + profile->GetProfilePolicyConnector()->policy_service(), + policy::PolicyNamespace(policy::POLICY_DOMAIN_CHROME, std::string())); + policy_registrar_->Observe( + policy::key::kBlockThirdPartyCookies, + base::BindRepeating( + &CookieControlsHandler::OnThirdPartyCookieBlockingPolicyChanged, + base::Unretained(this))); +} + +void CookieControlsHandler::OnJavascriptDisallowed() { + pref_change_registrar_.RemoveAll(); + policy_registrar_.reset(); +} + +void CookieControlsHandler::HandleCookieControlsToggleChanged( + const base::ListValue* args) { + bool checked; + CHECK(args->GetBoolean(0, &checked)); + Profile* profile = Profile::FromWebUI(web_ui()); + profile->GetPrefs()->SetInteger( + prefs::kCookieControlsMode, + static_cast( + checked ? content_settings::CookieControlsMode::kIncognitoOnly + : content_settings::CookieControlsMode::kOff)); + base::RecordAction( + checked ? base::UserMetricsAction("CookieControls.NTP.Enabled") + : base::UserMetricsAction("CookieControls.NTP.Disabled")); +} + +void CookieControlsHandler::HandleObserveCookieControlsSettingsChanges( + const base::ListValue* args) { + AllowJavascript(); + OnCookieControlsChanged(); + OnThirdPartyCookieBlockingChanged(); +} + +void CookieControlsHandler::OnCookieControlsChanged() { + Profile* profile = Profile::FromWebUI(web_ui()); + FireWebUIListener("cookie-controls-changed", + base::Value(GetToggleCheckedValue(profile))); +} + +bool CookieControlsHandler::GetToggleCheckedValue(const Profile* profile) { + int mode = profile->GetPrefs()->GetInteger(prefs::kCookieControlsMode); + return mode != static_cast(content_settings::CookieControlsMode::kOff); +} + +void CookieControlsHandler::OnThirdPartyCookieBlockingChanged() { + Profile* profile = Profile::FromWebUI(web_ui()); + FireWebUIListener("third-party-cookie-blocking-changed", + base::Value(ShouldHideCookieControlsUI(profile))); +} + +void CookieControlsHandler::OnThirdPartyCookieBlockingPolicyChanged( + const base::Value* previous, + const base::Value* current) { + OnThirdPartyCookieBlockingChanged(); +} + +bool CookieControlsHandler::ShouldHideCookieControlsUI(const Profile* profile) { + return !base::FeatureList::IsEnabled( + content_settings::kImprovedCookieControls) || + profile->GetPrefs()->IsManagedPreference( + prefs::kBlockThirdPartyCookies) || + profile->GetPrefs()->GetBoolean(prefs::kBlockThirdPartyCookies); +} diff --git a/chromium/chrome/browser/ui/webui/ntp/cookie_controls_handler.h b/chromium/chrome/browser/ui/webui/ntp/cookie_controls_handler.h new file mode 100644 index 00000000000..a0fd7bfa7a9 --- /dev/null +++ b/chromium/chrome/browser/ui/webui/ntp/cookie_controls_handler.h @@ -0,0 +1,65 @@ +// Copyright 2019 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_NTP_COOKIE_CONTROLS_HANDLER_H_ +#define CHROME_BROWSER_UI_WEBUI_NTP_COOKIE_CONTROLS_HANDLER_H_ + +#include + +#include "components/prefs/pref_change_registrar.h" +#include "content/public/browser/web_ui_message_handler.h" + +class CookieControlsHandlerTest; +class Profile; + +namespace base { +class ListValue; +class Value; +} // namespace base + +namespace policy { +class PolicyChangeRegistrar; +} + +// Handles requests for prefs::kCookieControlsMode retrival/update. +class CookieControlsHandler : public content::WebUIMessageHandler { + public: + CookieControlsHandler(); + ~CookieControlsHandler() override; + + // WebUIMessageHandler + void RegisterMessages() override; + void OnJavascriptAllowed() override; + void OnJavascriptDisallowed() override; + + void HandleCookieControlsToggleChanged(const base::ListValue* args); + + void HandleObserveCookieControlsSettingsChanges(const base::ListValue* args); + + // Whether cookie controls UI should be hidden in incognito ntp. + static bool ShouldHideCookieControlsUI(const Profile* profile); + + static bool GetToggleCheckedValue(const Profile* profile); + + private: + friend class CookieControlsHandlerTest; + + // Updates cookie controls UI when underlying setting has changed. + void OnCookieControlsChanged(); + + // Updates cookie controls UI when third-party cookie blocking setting has + // changed. + void OnThirdPartyCookieBlockingChanged(); + + void OnThirdPartyCookieBlockingPolicyChanged(const base::Value* previous, + const base::Value* current); + + PrefChangeRegistrar pref_change_registrar_; + + std::unique_ptr policy_registrar_; + + DISALLOW_COPY_AND_ASSIGN(CookieControlsHandler); +}; + +#endif // CHROME_BROWSER_UI_WEBUI_NTP_COOKIE_CONTROLS_HANDLER_H_ diff --git a/chromium/chrome/browser/ui/webui/ntp/cookie_controls_handler_unittest.cc b/chromium/chrome/browser/ui/webui/ntp/cookie_controls_handler_unittest.cc new file mode 100644 index 00000000000..e269fef1122 --- /dev/null +++ b/chromium/chrome/browser/ui/webui/ntp/cookie_controls_handler_unittest.cc @@ -0,0 +1,51 @@ +// Copyright 2019 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/ntp/cookie_controls_handler.h" + +#include "base/values.h" +#include "chrome/test/base/chrome_render_view_host_test_harness.h" +#include "components/content_settings/core/browser/cookie_settings.h" +#include "components/content_settings/core/common/pref_names.h" +#include "components/prefs/pref_service.h" +#include "content/public/test/test_web_ui.h" + +class CookieControlsHandlerTest : public ChromeRenderViewHostTestHarness { + public: + void SetUp() override { + ChromeRenderViewHostTestHarness::SetUp(); + web_ui_.set_web_contents(web_contents()); + handler_ = std::make_unique(); + handler_->set_web_ui(&web_ui_); + } + + void TearDown() override { + handler_->set_web_ui(nullptr); + ChromeRenderViewHostTestHarness::TearDown(); + } + + protected: + content::TestWebUI web_ui_; + std::unique_ptr handler_; +}; + +TEST_F(CookieControlsHandlerTest, HandleCookieControlsToggleChanged) { + EXPECT_EQ( + static_cast(content_settings::CookieControlsMode::kIncognitoOnly), + Profile::FromWebUI(&web_ui_)->GetPrefs()->GetInteger( + prefs::kCookieControlsMode)); + base::ListValue args_false; + args_false.AppendBoolean(false); + handler_->HandleCookieControlsToggleChanged(&args_false); + EXPECT_EQ(static_cast(content_settings::CookieControlsMode::kOff), + Profile::FromWebUI(&web_ui_)->GetPrefs()->GetInteger( + prefs::kCookieControlsMode)); + base::ListValue args_true; + args_true.AppendBoolean(true); + handler_->HandleCookieControlsToggleChanged(&args_true); + EXPECT_EQ( + static_cast(content_settings::CookieControlsMode::kIncognitoOnly), + Profile::FromWebUI(&web_ui_)->GetPrefs()->GetInteger( + prefs::kCookieControlsMode)); +} diff --git a/chromium/chrome/browser/ui/webui/ntp/new_tab_ui.cc b/chromium/chrome/browser/ui/webui/ntp/new_tab_ui.cc index 48f2a16a42c..1743ef945fe 100644 --- a/chromium/chrome/browser/ui/webui/ntp/new_tab_ui.cc +++ b/chromium/chrome/browser/ui/webui/ntp/new_tab_ui.cc @@ -15,6 +15,7 @@ #include "base/values.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/webui/ntp/app_launcher_handler.h" +#include "chrome/browser/ui/webui/ntp/cookie_controls_handler.h" #include "chrome/browser/ui/webui/ntp/core_app_launcher_handler.h" #include "chrome/browser/ui/webui/ntp/ntp_resource_cache.h" #include "chrome/browser/ui/webui/ntp/ntp_resource_cache_factory.h" @@ -56,8 +57,10 @@ NewTabUI::NewTabUI(content::WebUI* web_ui) : content::WebUIController(web_ui) { Profile* profile = GetProfile(); - if (!profile->IsGuestSession()) + if (!profile->IsGuestSession()) { web_ui->AddMessageHandler(std::make_unique()); + web_ui->AddMessageHandler(std::make_unique()); + } // content::URLDataSource assumes the ownership of the html source. content::URLDataSource::Add(profile, std::make_unique( diff --git a/chromium/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc b/chromium/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc index 2dcf1f8771c..3614c8d9757 100644 --- a/chromium/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc +++ b/chromium/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc @@ -15,6 +15,7 @@ #include "base/values.h" #include "build/build_config.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/browser_process_platform_part.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/signin/identity_manager_factory.h" @@ -25,6 +26,7 @@ #include "chrome/browser/ui/layout_constants.h" #include "chrome/browser/ui/webui/app_launcher_login_handler.h" #include "chrome/browser/ui/webui/ntp/app_launcher_handler.h" +#include "chrome/browser/ui/webui/ntp/cookie_controls_handler.h" #include "chrome/common/buildflags.h" #include "chrome/common/chrome_features.h" #include "chrome/common/pref_names.h" @@ -34,6 +36,8 @@ #include "chrome/grit/generated_resources.h" #include "chrome/grit/theme_resources.h" #include "components/bookmarks/common/bookmark_pref_names.h" +#include "components/content_settings/core/common/features.h" +#include "components/content_settings/core/common/pref_names.h" #include "components/google/core/common/google_util.h" #include "components/prefs/pref_service.h" #include "components/signin/public/identity_manager/identity_manager.h" @@ -135,9 +139,7 @@ std::string GetNewTabBackgroundTilingCSS( } // namespace NTPResourceCache::NTPResourceCache(Profile* profile) - : profile_(profile), - is_swipe_tracking_from_scroll_events_enabled_(false), - theme_observer_(this) { + : profile_(profile), is_swipe_tracking_from_scroll_events_enabled_(false) { registrar_.Add(this, chrome::NOTIFICATION_BROWSER_THEME_CHANGED, content::Source( ThemeServiceFactory::GetForProfile(profile))); @@ -276,6 +278,15 @@ void NTPResourceCache::CreateNewTabIncognitoHTML() { l10n_util::GetStringUTF8(IDS_NEW_TAB_OTR_NOT_SAVED); replacements["learnMoreLink"] = kLearnMoreIncognitoUrl; replacements["title"] = l10n_util::GetStringUTF8(IDS_NEW_TAB_TITLE); + replacements["hideCookieControls"] = + CookieControlsHandler::ShouldHideCookieControlsUI(profile_) ? "hidden" + : ""; + replacements["cookieControlsTitle"] = + l10n_util::GetStringUTF8(IDS_SETTINGS_SITE_SETTINGS_THIRD_PARTY_COOKIE); + replacements["cookieControlsDescription"] = l10n_util::GetStringUTF8( + IDS_SETTINGS_SITE_SETTINGS_THIRD_PARTY_COOKIE_SUBLABEL); + replacements["cookieControlsToggleChecked"] = + CookieControlsHandler::GetToggleCheckedValue(profile_) ? "checked" : ""; const ui::ThemeProvider& tp = ThemeService::GetThemeProviderForProfile(profile_); @@ -451,7 +462,7 @@ void NTPResourceCache::CreateNewTabHTML() { !prefs->GetBoolean(prefs::kHideWebStoreIcon)); load_time_data.SetBoolean("canShowAppInfoDialog", - CanShowAppInfoDialog()); + CanPlatformShowAppInfoDialog()); AppLauncherHandler::GetLocalizedValues(profile_, &load_time_data); diff --git a/chromium/chrome/browser/ui/webui/ntp/ntp_resource_cache.h b/chromium/chrome/browser/ui/webui/ntp/ntp_resource_cache.h index 354de3c3e10..d6f96e8b7bb 100644 --- a/chromium/chrome/browser/ui/webui/ntp/ntp_resource_cache.h +++ b/chromium/chrome/browser/ui/webui/ntp/ntp_resource_cache.h @@ -13,6 +13,7 @@ #include "components/prefs/pref_change_registrar.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" +#include "ui/native_theme/native_theme.h" #include "ui/native_theme/native_theme_observer.h" class Profile; @@ -26,10 +27,6 @@ namespace content { class RenderProcessHost; } -namespace ui { -class NativeTheme; -} - // This class keeps a cache of NTP resources (HTML and CSS) so we don't have to // regenerate them all the time. // Note: This is only used for incognito and guest mode NTPs (NewTabUI), as well @@ -97,7 +94,8 @@ class NTPResourceCache : public content::NotificationObserver, // Set based on platform_util::IsSwipeTrackingFromScrollEventsEnabled. bool is_swipe_tracking_from_scroll_events_enabled_; - ScopedObserver theme_observer_; + ScopedObserver theme_observer_{ + this}; DISALLOW_COPY_AND_ASSIGN(NTPResourceCache); }; diff --git a/chromium/chrome/browser/ui/webui/offline/offline_internals_ui_message_handler.cc b/chromium/chrome/browser/ui/webui/offline/offline_internals_ui_message_handler.cc index b1ad92cf59c..27a6e11e0d3 100644 --- a/chromium/chrome/browser/ui/webui/offline/offline_internals_ui_message_handler.cc +++ b/chromium/chrome/browser/ui/webui/offline/offline_internals_ui_message_handler.cc @@ -25,6 +25,7 @@ #include "chrome/browser/offline_pages/prefetch/prefetched_pages_notifier.h" #include "chrome/browser/offline_pages/request_coordinator_factory.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/profiles/profile_key.h" #include "chrome/common/channel_info.h" #include "chrome/common/chrome_content_client.h" #include "components/offline_pages/core/client_namespace_constants.h" @@ -345,7 +346,7 @@ void OfflineInternalsUIMessageHandler::HandleGeneratePageBundle( // serialize it into JSON, instead of doing direct string manipulation. base::ListValue urls; for (const auto& prefetch_url : prefetch_urls) { - urls.GetList().emplace_back(prefetch_url.url.spec()); + urls.Append(prefetch_url.url.spec()); } std::string json; base::JSONWriter::Write(urls, &json); diff --git a/chromium/chrome/browser/ui/webui/omnibox/omnibox.mojom b/chromium/chrome/browser/ui/webui/omnibox/omnibox.mojom index 7ffa3971673..e113fded051 100644 --- a/chromium/chrome/browser/ui/webui/omnibox/omnibox.mojom +++ b/chromium/chrome/browser/ui/webui/omnibox/omnibox.mojom @@ -52,9 +52,10 @@ struct AutocompleteResultsForProvider { }; struct OmniboxResponse { - bool done; + int32 cursor_position; // Time delta since the request was started, in milliseconds. int32 time_since_omnibox_started_ms; + bool done; // The inferred metrics::OmniboxInputType of the request represented as a // string. string type; @@ -67,7 +68,7 @@ struct OmniboxResponse { interface OmniboxPageHandler { // Registers the webui page. - SetClientPage(OmniboxPage page); + SetClientPage(pending_remote page); // Prompts a autocopmlete controller to process an omnibox query. StartOmniboxQuery(string input_string, bool reset_autocomplete_controller, diff --git a/chromium/chrome/browser/ui/webui/omnibox/omnibox_page_handler.cc b/chromium/chrome/browser/ui/webui/omnibox/omnibox_page_handler.cc index 3c90ef1508e..c8dc602ed4d 100644 --- a/chromium/chrome/browser/ui/webui/omnibox/omnibox_page_handler.cc +++ b/chromium/chrome/browser/ui/webui/omnibox/omnibox_page_handler.cc @@ -222,8 +222,8 @@ struct TypeConverter request) - : profile_(profile), binding_(this, std::move(request)), observer_(this) { + mojo::PendingReceiver receiver) + : profile_(profile), receiver_(this, std::move(receiver)), observer_(this) { observer_.Add(OmniboxControllerEmitter::GetForBrowserContext(profile_)); ResetController(); } @@ -235,22 +235,25 @@ void OmniboxPageHandler::OnResultChanged(bool default_match_changed) { } void OmniboxPageHandler::OnOmniboxQuery(AutocompleteController* controller, - const base::string16& input_text) { + const AutocompleteInput& input) { + time_omnibox_started_ = base::Time::Now(); + input_ = input; page_->HandleNewAutocompleteQuery(controller == controller_.get(), - base::UTF16ToUTF8(input_text)); + base::UTF16ToUTF8(input.text())); } void OmniboxPageHandler::OnOmniboxResultChanged( bool default_match_changed, AutocompleteController* controller) { mojom::OmniboxResponsePtr response(mojom::OmniboxResponse::New()); - response->done = controller->done(); + response->cursor_position = input_.cursor_position(); response->time_since_omnibox_started_ms = (base::Time::Now() - time_omnibox_started_).InMilliseconds(); + response->done = controller->done(); + response->type = AutocompleteInput::TypeToString(input_.type()); const base::string16 host = input_.text().substr(input_.parts().host.begin, input_.parts().host.len); response->host = base::UTF16ToUTF8(host); - response->type = AutocompleteInput::TypeToString(input_.type()); bool is_typed_host; if (!LookupIsTypedHost(host, &is_typed_host)) is_typed_host = false; @@ -372,8 +375,9 @@ bool OmniboxPageHandler::LookupIsTypedHost(const base::string16& host, return true; } -void OmniboxPageHandler::SetClientPage(mojom::OmniboxPagePtr page) { - page_ = std::move(page); +void OmniboxPageHandler::SetClientPage( + mojo::PendingRemote page) { + page_.Bind(std::move(page)); } void OmniboxPageHandler::StartOmniboxQuery(const std::string& input_string, @@ -391,30 +395,22 @@ void OmniboxPageHandler::StartOmniboxQuery(const std::string& input_string, // actual results to not depend on the state of the previous request. if (reset_autocomplete_controller) ResetController(); - // TODO (manukh): OmniboxPageHandler::StartOmniboxQuery is invoked only for - // queries from the debug page and not for queries from the browser omnibox. - // time_omnibox_started_ and input_ are therefore not set for browser omnibox - // queries, resulting in inaccurate time_since_omnibox_started_ms, host, type, - // and is_typed_host values in the result object being sent to the debug page. - // For the user, this means the 'details' section is mostly inaccurate for - // browser omnibox queries. - time_omnibox_started_ = base::Time::Now(); - input_ = AutocompleteInput( + AutocompleteInput input( base::UTF8ToUTF16(input_string), cursor_position, static_cast( page_classification), ChromeAutocompleteSchemeClassifier(profile_)); GURL current_url_gurl{current_url}; if (current_url_gurl.is_valid()) - input_.set_current_url(current_url_gurl); - input_.set_current_title(base::UTF8ToUTF16(current_url)); - input_.set_prevent_inline_autocomplete(prevent_inline_autocomplete); - input_.set_prefer_keyword(prefer_keyword); + input.set_current_url(current_url_gurl); + input.set_current_title(base::UTF8ToUTF16(current_url)); + input.set_prevent_inline_autocomplete(prevent_inline_autocomplete); + input.set_prefer_keyword(prefer_keyword); if (prefer_keyword) - input_.set_keyword_mode_entry_method(metrics::OmniboxEventProto::TAB); - input_.set_from_omnibox_focus(zero_suggest); + input.set_keyword_mode_entry_method(metrics::OmniboxEventProto::TAB); + input.set_from_omnibox_focus(zero_suggest); - OnOmniboxQuery(controller_.get(), input_.text()); + OnOmniboxQuery(controller_.get(), input); controller_->Start(input_); } diff --git a/chromium/chrome/browser/ui/webui/omnibox/omnibox_page_handler.h b/chromium/chrome/browser/ui/webui/omnibox/omnibox_page_handler.h index ec2f26b4a18..c960ff022e6 100644 --- a/chromium/chrome/browser/ui/webui/omnibox/omnibox_page_handler.h +++ b/chromium/chrome/browser/ui/webui/omnibox/omnibox_page_handler.h @@ -17,7 +17,10 @@ #include "components/omnibox/browser/autocomplete_input.h" #include "components/omnibox/browser/autocomplete_match.h" #include "components/omnibox/browser/omnibox_controller_emitter.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/remote.h" class AutocompleteController; class Profile; @@ -32,7 +35,7 @@ class OmniboxPageHandler : public AutocompleteControllerDelegate, public: // OmniboxPageHandler is deleted when the supplied pipe is destroyed. OmniboxPageHandler(Profile* profile, - mojo::InterfaceRequest request); + mojo::PendingReceiver receiver); ~OmniboxPageHandler() override; // AutocompleteControllerDelegate overrides: @@ -40,12 +43,12 @@ class OmniboxPageHandler : public AutocompleteControllerDelegate, // OmniboxControllerEmitter::Observer overrides: void OnOmniboxQuery(AutocompleteController* controller, - const base::string16& input_text) override; + const AutocompleteInput& input) override; void OnOmniboxResultChanged(bool default_match_changed, AutocompleteController* controller) override; // mojom::OmniboxPageHandler overrides: - void SetClientPage(mojom::OmniboxPagePtr page) override; + void SetClientPage(mojo::PendingRemote page) override; // current_url may be invalid, in which case, autocomplete input's url won't // be set. void StartOmniboxQuery(const std::string& input_string, @@ -80,12 +83,12 @@ class OmniboxPageHandler : public AutocompleteControllerDelegate, AutocompleteInput input_; // Handle back to the page by which we can pass results. - mojom::OmniboxPagePtr page_; + mojo::Remote page_; // The Profile* handed to us in our constructor. Profile* profile_; - mojo::Binding binding_; + mojo::Receiver receiver_; ScopedObserver observer_; diff --git a/chromium/chrome/browser/ui/webui/omnibox/omnibox_ui.cc b/chromium/chrome/browser/ui/webui/omnibox/omnibox_ui.cc index 4e95206d915..0b5b49cde52 100644 --- a/chromium/chrome/browser/ui/webui/omnibox/omnibox_ui.cc +++ b/chromium/chrome/browser/ui/webui/omnibox/omnibox_ui.cc @@ -12,7 +12,7 @@ #include "chrome/browser/ui/webui/version_handler.h" #include "chrome/browser/ui/webui/version_ui.h" #include "chrome/common/url_constants.h" -#include "chrome/grit/browser_resources.h" +#include "chrome/grit/omnibox_resources.h" #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_controller.h" #include "content/public/browser/web_ui_data_source.h" @@ -51,7 +51,7 @@ OmniboxUI::OmniboxUI(content::WebUI* web_ui) OmniboxUI::~OmniboxUI() {} void OmniboxUI::BindOmniboxPageHandler( - mojom::OmniboxPageHandlerRequest request) { - omnibox_handler_.reset( - new OmniboxPageHandler(Profile::FromWebUI(web_ui()), std::move(request))); + mojo::PendingReceiver receiver) { + omnibox_handler_ = std::make_unique( + Profile::FromWebUI(web_ui()), std::move(receiver)); } diff --git a/chromium/chrome/browser/ui/webui/omnibox/omnibox_ui.h b/chromium/chrome/browser/ui/webui/omnibox/omnibox_ui.h index d65e868e21b..81f3ad0e054 100644 --- a/chromium/chrome/browser/ui/webui/omnibox/omnibox_ui.h +++ b/chromium/chrome/browser/ui/webui/omnibox/omnibox_ui.h @@ -7,6 +7,7 @@ #include "base/macros.h" #include "chrome/browser/ui/webui/omnibox/omnibox.mojom.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "ui/webui/mojo_web_ui_controller.h" class OmniboxPageHandler; @@ -18,7 +19,8 @@ class OmniboxUI : public ui::MojoWebUIController { ~OmniboxUI() override; private: - void BindOmniboxPageHandler(mojom::OmniboxPageHandlerRequest request); + void BindOmniboxPageHandler( + mojo::PendingReceiver receiver); std::unique_ptr omnibox_handler_; diff --git a/chromium/chrome/browser/ui/webui/policy_ui_browsertest.cc b/chromium/chrome/browser/ui/webui/policy_ui_browsertest.cc index e4ac4cf3d0b..1f2578fb958 100644 --- a/chromium/chrome/browser/ui/webui/policy_ui_browsertest.cc +++ b/chromium/chrome/browser/ui/webui/policy_ui_browsertest.cc @@ -14,6 +14,7 @@ #include "base/json/json_writer.h" #include "base/macros.h" #include "base/run_loop.h" +#include "base/task/thread_pool/thread_pool_instance.h" #include "base/threading/thread_restrictions.h" #include "base/values.h" #include "build/build_config.h" @@ -692,7 +693,7 @@ IN_PROC_BROWSER_TEST_F(PolicyUITest, MAYBE_ExtensionLoadAndSendPolicy) { auto object_value = std::make_unique(); object_value->SetKey("objectProperty", base::Value(true)); auto array_value = std::make_unique(); - array_value->GetList().push_back(base::Value(true)); + array_value->Append(base::Value(true)); policy::PolicyMap values; values.Set(kNormalBooleanPolicy, policy::POLICY_LEVEL_MANDATORY, diff --git a/chromium/chrome/browser/ui/webui/policy_ui_handler.cc b/chromium/chrome/browser/ui/webui/policy_ui_handler.cc index 22075e1d920..44c529aa787 100644 --- a/chromium/chrome/browser/ui/webui/policy_ui_handler.cc +++ b/chromium/chrome/browser/ui/webui/policy_ui_handler.cc @@ -885,7 +885,7 @@ base::Value PolicyUIHandler::GetPolicyNames() const { const policy::Schema* chrome_schema = schema_map->GetSchema(chrome_ns); for (auto it = chrome_schema->GetPropertiesIterator(); !it.IsAtEnd(); it.Advance()) { - chrome_policy_names->GetList().push_back(base::Value(it.key())); + chrome_policy_names->Append(base::Value(it.key())); } auto chrome_values = std::make_unique(); chrome_values->SetString("name", "Chrome Policies"); @@ -911,7 +911,7 @@ base::Value PolicyUIHandler::GetPolicyNames() const { // Store in a map, not an array, for faster lookup on JS side. for (auto prop = schema->GetPropertiesIterator(); !prop.IsAtEnd(); prop.Advance()) { - policy_names->GetList().push_back(base::Value(prop.key())); + policy_names->Append(base::Value(prop.key())); } } extension_value->Set("policyNames", std::move(policy_names)); diff --git a/chromium/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos.cc b/chromium/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos.cc index 9b926a8b629..9edda51b6d3 100644 --- a/chromium/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos.cc +++ b/chromium/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos.cc @@ -25,7 +25,7 @@ #include "chrome/browser/ui/webui/print_preview/print_preview_utils.h" #include "chrome/common/pref_names.h" #include "chromeos/dbus/dbus_thread_manager.h" -#include "chromeos/dbus/debug_daemon_client.h" +#include "chromeos/dbus/debug_daemon/debug_daemon_client.h" #include "chromeos/printing/printer_configuration.h" #include "components/prefs/pref_service.h" #include "components/printing/browser/printer_capabilities.h" @@ -303,6 +303,9 @@ base::Value LocalPrinterHandlerChromeos::GetNativePrinterPolicies() const { policies.SetKey( kAllowedPinModes, base::Value(prefs->GetInteger(prefs::kPrintingAllowedPinModes))); + policies.SetKey(kAllowedBackgroundGraphicsModes, + base::Value(prefs->GetInteger( + prefs::kPrintingAllowedBackgroundGraphicsModes))); policies.SetKey(kDefaultColorMode, base::Value(prefs->GetInteger(prefs::kPrintingColorDefault))); policies.SetKey( @@ -310,6 +313,9 @@ base::Value LocalPrinterHandlerChromeos::GetNativePrinterPolicies() const { base::Value(prefs->GetInteger(prefs::kPrintingDuplexDefault))); policies.SetKey(kDefaultPinMode, base::Value(prefs->GetInteger(prefs::kPrintingPinDefault))); + policies.SetKey(kDefaultBackgroundGraphicsMode, + base::Value(prefs->GetInteger( + prefs::kPrintingBackgroundGraphicsDefault))); return policies; } diff --git a/chromium/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos_unittest.cc b/chromium/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos_unittest.cc index 756f3b374ea..5329108a661 100644 --- a/chromium/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos_unittest.cc +++ b/chromium/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos_unittest.cc @@ -289,20 +289,26 @@ TEST_F(LocalPrinterHandlerChromeosTest, GetNativePrinterPolicies) { std::make_unique(0)); prefs->SetUserPref(prefs::kPrintingAllowedPinModes, std::make_unique(1)); + prefs->SetUserPref(prefs::kPrintingAllowedBackgroundGraphicsModes, + std::make_unique(2)); prefs->SetUserPref(prefs::kPrintingColorDefault, std::make_unique(2)); prefs->SetUserPref(prefs::kPrintingDuplexDefault, std::make_unique(4)); prefs->SetUserPref(prefs::kPrintingPinDefault, std::make_unique(0)); + prefs->SetUserPref(prefs::kPrintingBackgroundGraphicsDefault, + std::make_unique(0)); base::Value expected_policies(base::Value::Type::DICTIONARY); expected_policies.SetKey(kAllowedColorModes, base::Value(1)); expected_policies.SetKey(kAllowedDuplexModes, base::Value(0)); expected_policies.SetKey(kAllowedPinModes, base::Value(1)); + expected_policies.SetKey(kAllowedBackgroundGraphicsModes, base::Value(2)); expected_policies.SetKey(kDefaultColorMode, base::Value(2)); expected_policies.SetKey(kDefaultDuplexMode, base::Value(4)); expected_policies.SetKey(kDefaultPinMode, base::Value(0)); + expected_policies.SetKey(kDefaultBackgroundGraphicsMode, base::Value(0)); EXPECT_EQ(expected_policies, local_printer_handler_->GetNativePrinterPolicies()); diff --git a/chromium/chrome/browser/ui/webui/print_preview/pdf_printer_handler.cc b/chromium/chrome/browser/ui/webui/print_preview/pdf_printer_handler.cc index 00cf10991ed..f0033a7e67b 100644 --- a/chromium/chrome/browser/ui/webui/print_preview/pdf_printer_handler.cc +++ b/chromium/chrome/browser/ui/webui/print_preview/pdf_printer_handler.cc @@ -72,38 +72,41 @@ gfx::Size GetDefaultPdfMediaSizeMicrons() { } base::Value GetPdfCapabilities(const std::string& locale) { - cloud_devices::CloudDeviceDescription description; - using namespace cloud_devices::printer; + using cloud_devices::printer::MediaType; - OrientationCapability orientation; + cloud_devices::CloudDeviceDescription description; + cloud_devices::printer::OrientationCapability orientation; orientation.AddOption(cloud_devices::printer::OrientationType::PORTRAIT); orientation.AddOption(cloud_devices::printer::OrientationType::LANDSCAPE); - orientation.AddDefaultOption(OrientationType::AUTO_ORIENTATION, true); + orientation.AddDefaultOption( + cloud_devices::printer::OrientationType::AUTO_ORIENTATION, true); orientation.SaveTo(&description); - ColorCapability color; + cloud_devices::printer::ColorCapability color; { - Color standard_color(ColorType::STANDARD_COLOR); + cloud_devices::printer::Color standard_color( + cloud_devices::printer::ColorType::STANDARD_COLOR); standard_color.vendor_id = base::NumberToString(COLOR); color.AddDefaultOption(standard_color, true); } color.SaveTo(&description); - static const cloud_devices::printer::MediaType kPdfMedia[] = { + static const MediaType kPdfMedia[] = { MediaType::ISO_A0, MediaType::ISO_A1, MediaType::ISO_A2, MediaType::ISO_A3, MediaType::ISO_A4, MediaType::ISO_A5, MediaType::NA_LEGAL, MediaType::NA_LETTER, MediaType::NA_LEDGER}; const gfx::Size default_media_size = GetDefaultPdfMediaSizeMicrons(); - Media default_media("", "", default_media_size.width(), - default_media_size.height()); + cloud_devices::printer::Media default_media(std::string(), std::string(), + default_media_size.width(), + default_media_size.height()); if (!default_media.MatchBySize() || !base::Contains(kPdfMedia, default_media.type)) { - default_media = - Media(locale == "en-US" ? MediaType::NA_LETTER : MediaType::ISO_A4); + default_media = cloud_devices::printer::Media( + locale == "en-US" ? MediaType::NA_LETTER : MediaType::ISO_A4); } - MediaCapability media; + cloud_devices::printer::MediaCapability media; for (const auto& pdf_media : kPdfMedia) { - Media media_option(pdf_media); + cloud_devices::printer::Media media_option(pdf_media); media.AddDefaultOption(media_option, default_media.type == media_option.type); } diff --git a/chromium/chrome/browser/ui/webui/print_preview/policy_settings.cc b/chromium/chrome/browser/ui/webui/print_preview/policy_settings.cc index dbaa090f34c..11ab72453e8 100644 --- a/chromium/chrome/browser/ui/webui/print_preview/policy_settings.cc +++ b/chromium/chrome/browser/ui/webui/print_preview/policy_settings.cc @@ -14,10 +14,13 @@ void PolicySettings::RegisterProfilePrefs( user_prefs::PrefRegistrySyncable* registry) { registry->RegisterBooleanPref(prefs::kPrintHeaderFooter, true); #if defined(OS_CHROMEOS) + registry->RegisterIntegerPref(prefs::kPrintingAllowedBackgroundGraphicsModes, + 0); registry->RegisterIntegerPref(prefs::kPrintingAllowedColorModes, 0); registry->RegisterIntegerPref(prefs::kPrintingAllowedDuplexModes, 0); registry->RegisterIntegerPref(prefs::kPrintingAllowedPinModes, 0); registry->RegisterListPref(prefs::kPrintingAllowedPageSizes); + registry->RegisterIntegerPref(prefs::kPrintingBackgroundGraphicsDefault, 0); registry->RegisterIntegerPref(prefs::kPrintingColorDefault, 0); registry->RegisterIntegerPref(prefs::kPrintingDuplexDefault, 0); registry->RegisterIntegerPref(prefs::kPrintingPinDefault, 0); diff --git a/chromium/chrome/browser/ui/webui/print_preview/print_preview_handler.cc b/chromium/chrome/browser/ui/webui/print_preview/print_preview_handler.cc index 977fa0091ff..2ecb8cdde5a 100644 --- a/chromium/chrome/browser/ui/webui/print_preview/print_preview_handler.cc +++ b/chromium/chrome/browser/ui/webui/print_preview/print_preview_handler.cc @@ -147,6 +147,7 @@ enum PrintSettingsBuckets { DEFAULT_DPI, NON_DEFAULT_DPI, PIN, + FIT_TO_PAPER, PRINT_SETTINGS_BUCKET_BOUNDARY }; @@ -315,9 +316,6 @@ void ReportPrintSettingsStats(const base::Value& print_settings, if (print_settings.FindIntKey(kSettingCopies).value_or(1) > 1) ReportPrintSettingHistogram(COPIES); - if (preview_settings.FindIntKey(kSettingScaleFactor).value_or(100) != 100) - ReportPrintSettingHistogram(SCALING); - if (preview_settings.FindIntKey(kSettingPagesPerSheet).value_or(1) != 1) ReportPrintSettingHistogram(PAGES_PER_SHEET); @@ -354,9 +352,18 @@ void ReportPrintSettingsStats(const base::Value& print_settings, if (preview_settings.FindBoolKey(kSettingRasterizePdf).value_or(false)) ReportPrintSettingHistogram(PRINT_AS_IMAGE); - if (is_pdf && - preview_settings.FindBoolKey(kSettingFitToPageEnabled).value_or(false)) { - ReportPrintSettingHistogram(FIT_TO_PAGE); + ScalingType scaling_type = + static_cast(preview_settings.FindIntKey(kSettingScalingType) + .value_or(ScalingType::DEFAULT)); + if (scaling_type == ScalingType::CUSTOM) { + ReportPrintSettingHistogram(SCALING); + } + + if (is_pdf) { + if (scaling_type == ScalingType::FIT_TO_PAGE) + ReportPrintSettingHistogram(FIT_TO_PAGE); + else if (scaling_type == ScalingType::FIT_TO_PAPER) + ReportPrintSettingHistogram(FIT_TO_PAPER); } if (print_settings.FindIntKey(kSettingDpiHorizontal).value_or(0) > 0 && @@ -377,21 +384,32 @@ void ReportPrintSettingsStats(const base::Value& print_settings, UserActionBuckets DetermineUserAction(const base::Value& settings) { #if defined(OS_MACOSX) - if (settings.FindKey(kSettingOpenPDFInPreview) != nullptr) + if (settings.FindKey(kSettingOpenPDFInPreview)) return OPEN_IN_MAC_PREVIEW; #endif // This needs to be checked before checking for a cloud print ID, since a // print ticket for printing to Drive will also contain a cloud print ID. if (settings.FindBoolKey(kSettingPrintToGoogleDrive).value_or(false)) return PRINT_TO_GOOGLE_DRIVE; - if (settings.FindKey(kSettingCloudPrintId) != nullptr) + if (settings.FindKey(kSettingCloudPrintId)) return PRINT_WITH_CLOUD_PRINT; - if (settings.FindBoolKey(kSettingPrintWithPrivet).value_or(false)) - return PRINT_WITH_PRIVET; - if (settings.FindBoolKey(kSettingPrintWithExtension).value_or(false)) - return PRINT_WITH_EXTENSION; - if (settings.FindBoolKey(kSettingPrintToPDF).value_or(false)) - return PRINT_TO_PDF; + + PrinterType type = static_cast( + settings.FindIntKey(kSettingPrinterType).value()); + switch (type) { + case kPrivetPrinter: + return PRINT_WITH_PRIVET; + case kExtensionPrinter: + return PRINT_WITH_EXTENSION; + case kPdfPrinter: + return PRINT_TO_PDF; + case kLocalPrinter: + break; + default: + NOTREACHED(); + break; + } + if (settings.FindBoolKey(kSettingShowSystemDialog).value_or(false)) return FALLBACK_TO_ADVANCED_SETTINGS_DIALOG; return PRINT_TO_PRINTER; @@ -965,7 +983,7 @@ void PrintPreviewHandler::GetUserAccountList(base::Value* settings) { const std::vector& accounts = identity_manager_->GetAccountsInCookieJar().signed_in_accounts; for (const gaia::ListedAccount& account : accounts) { - account_list.GetList().emplace_back(account.email); + account_list.Append(account.email); } settings->SetKey(kSyncAvailable, base::Value(true)); } else { @@ -982,6 +1000,8 @@ void PrintPreviewHandler::SendInitialSettings( print_preview_ui()->initiator_title()); initial_settings.SetBoolKey(kSettingPreviewModifiable, print_preview_ui()->source_is_modifiable()); + initial_settings.SetBoolKey(kSettingPreviewIsPdf, + print_preview_ui()->source_is_pdf()); initial_settings.SetStringKey(kSettingPrinterName, default_printer); initial_settings.SetBoolKey(kDocumentHasSelection, print_preview_ui()->source_has_selection()); @@ -1122,7 +1142,7 @@ void PrintPreviewHandler::OnAccountsInCookieUpdated( const std::vector& accounts = accounts_in_cookie_jar_info.signed_in_accounts; for (const auto account : accounts) { - account_list.GetList().emplace_back(account.email); + account_list.Append(account.email); } FireWebUIListener("user-accounts-updated", std::move(account_list)); } @@ -1136,6 +1156,10 @@ void PrintPreviewHandler::OnPrintPreviewReady(int preview_uid, int request_id) { } void PrintPreviewHandler::OnPrintPreviewFailed(int request_id) { + WebContents* initiator = GetInitiator(); + if (!initiator || initiator->IsBeingDestroyed()) + return; // Drop notification if fired during destruction sequence. + std::string callback_id = GetCallbackId(request_id); if (callback_id.empty()) return; diff --git a/chromium/chrome/browser/ui/webui/print_preview/print_preview_handler.h b/chromium/chrome/browser/ui/webui/print_preview/print_preview_handler.h index bdccac1a8a4..e5f5f921753 100644 --- a/chromium/chrome/browser/ui/webui/print_preview/print_preview_handler.h +++ b/chromium/chrome/browser/ui/webui/print_preview/print_preview_handler.h @@ -38,16 +38,6 @@ class PdfPrinterHandler; class PrinterHandler; class PrintPreviewUI; -// Must match print_preview.PrinterType in -// chrome/browser/resources/print_preview/native_layer.js -enum PrinterType { - kPrivetPrinter, - kExtensionPrinter, - kPdfPrinter, - kLocalPrinter, - kCloudPrinter -}; - // The handler for Javascript messages related to the print preview dialog. class PrintPreviewHandler : public content::WebUIMessageHandler, public signin::IdentityManager::Observer { diff --git a/chromium/chrome/browser/ui/webui/print_preview/print_preview_handler_unittest.cc b/chromium/chrome/browser/ui/webui/print_preview/print_preview_handler_unittest.cc index e56a96a4703..6d724094aa6 100644 --- a/chromium/chrome/browser/ui/webui/print_preview/print_preview_handler_unittest.cc +++ b/chromium/chrome/browser/ui/webui/print_preview/print_preview_handler_unittest.cc @@ -48,9 +48,13 @@ namespace { const char kDummyInitiatorName[] = "TestInitiator"; const char kTestData[] = "abc"; -// Array of all PrinterType values. -const PrinterType kAllTypes[] = {kPrivetPrinter, kExtensionPrinter, kPdfPrinter, - kLocalPrinter}; +// Array of all PrinterTypes. +constexpr PrinterType kAllTypes[] = {kPrivetPrinter, kExtensionPrinter, + kPdfPrinter, kLocalPrinter, kCloudPrinter}; + +// Array of all PrinterTypes that have working PrinterHandlers. +constexpr PrinterType kAllSupportedTypes[] = {kPrivetPrinter, kExtensionPrinter, + kPdfPrinter, kLocalPrinter}; struct PrinterInfo { std::string id; @@ -90,14 +94,15 @@ PrinterInfo GetEmptyPrinterInfo() { return empty_printer; } -base::Value GetPrintPreviewTicket(bool is_pdf) { - base::Value print_ticket = GetPrintTicket(kLocalPrinter, false); +base::Value GetPrintPreviewTicket() { + base::Value print_ticket = GetPrintTicket(kLocalPrinter); // Make some modifications to match a preview print ticket. print_ticket.SetKey(kSettingPageRange, base::Value()); - print_ticket.SetKey(kIsFirstRequest, base::Value(true)); - print_ticket.SetKey(kPreviewRequestID, base::Value(0)); - print_ticket.SetKey(kSettingPreviewModifiable, base::Value(is_pdf)); + print_ticket.SetBoolKey(kIsFirstRequest, true); + print_ticket.SetIntKey(kPreviewRequestID, 0); + print_ticket.SetBoolKey(kSettingPreviewModifiable, false); + print_ticket.SetBoolKey(kSettingPreviewIsPdf, true); print_ticket.RemoveKey(kSettingPageWidth); print_ticket.RemoveKey(kSettingPageHeight); print_ticket.RemoveKey(kSettingShowSystemDialog); @@ -109,10 +114,10 @@ std::unique_ptr ConstructPreviewArgs( base::StringPiece callback_id, const base::Value& print_ticket) { base::Value args(base::Value::Type::LIST); - args.GetList().emplace_back(callback_id); + args.Append(callback_id); std::string json; base::JSONWriter::Write(print_ticket, &json); - args.GetList().emplace_back(json); + args.Append(json); return base::ListValue::From(base::Value::ToUniquePtrValue(std::move(args))); } @@ -292,7 +297,7 @@ class PrintPreviewHandlerTest : public testing::Test { // Sending this message will enable javascript, so it must always be called // before any other messages are sent. base::Value args(base::Value::Type::LIST); - args.GetList().emplace_back("test-callback-id-0"); + args.Append("test-callback-id-0"); std::unique_ptr list_args = base::ListValue::From(base::Value::ToUniquePtrValue(std::move(args))); @@ -512,8 +517,8 @@ TEST_F(PrintPreviewHandlerTest, GetPrinters) { base::Value args(base::Value::Type::LIST); std::string callback_id_in = "test-callback-id-" + base::NumberToString(i + 1); - args.GetList().emplace_back(callback_id_in); - args.GetList().emplace_back(type); + args.Append(callback_id_in); + args.Append(type); std::unique_ptr list_args = base::ListValue::From(base::Value::ToUniquePtrValue(std::move(args))); handler()->HandleGetPrinters(list_args.get()); @@ -531,7 +536,7 @@ TEST_F(PrintPreviewHandlerTest, GetPrinters) { ASSERT_TRUE(add_data.arg2()->GetAsInteger(&type_out)); EXPECT_EQ(type, type_out); ASSERT_TRUE(add_data.arg3()); - const base::Value::ListStorage& printer_list = add_data.arg3()->GetList(); + base::span printer_list = add_data.arg3()->GetList(); ASSERT_EQ(printer_list.size(), 1u); EXPECT_TRUE(printer_list[0].FindKeyOfType("printer_name", base::Value::Type::STRING)); @@ -552,15 +557,15 @@ TEST_F(PrintPreviewHandlerTest, GetPrinterCapabilities) { // Check all four printer types that implement // PrinterHandler::StartGetCapability(). - for (size_t i = 0; i < base::size(kAllTypes); i++) { - PrinterType type = kAllTypes[i]; + for (size_t i = 0; i < base::size(kAllSupportedTypes); i++) { + PrinterType type = kAllSupportedTypes[i]; handler()->reset_calls(); base::Value args(base::Value::Type::LIST); std::string callback_id_in = "test-callback-id-" + base::NumberToString(i + 1); - args.GetList().emplace_back(callback_id_in); - args.GetList().emplace_back(kDummyPrinterName); - args.GetList().emplace_back(type); + args.Append(callback_id_in); + args.Append(kDummyPrinterName); + args.Append(type); std::unique_ptr list_args = base::ListValue::From(base::Value::ToUniquePtrValue(std::move(args))); handler()->HandleGetPrinterCapabilities(list_args.get()); @@ -581,24 +586,25 @@ TEST_F(PrintPreviewHandlerTest, GetPrinterCapabilities) { // Run through the loop again, this time with a printer that has no // capabilities. - for (size_t i = 0; i < base::size(kAllTypes); i++) { - PrinterType type = kAllTypes[i]; + for (size_t i = 0; i < base::size(kAllSupportedTypes); i++) { + PrinterType type = kAllSupportedTypes[i]; handler()->reset_calls(); base::Value args(base::Value::Type::LIST); std::string callback_id_in = "test-callback-id-" + - base::NumberToString(i + base::size(kAllTypes) + 1); - args.GetList().emplace_back(callback_id_in); - args.GetList().emplace_back("EmptyPrinter"); - args.GetList().emplace_back(type); + base::NumberToString(i + base::size(kAllSupportedTypes) + 1); + args.Append(callback_id_in); + args.Append("EmptyPrinter"); + args.Append(type); std::unique_ptr list_args = base::ListValue::From(base::Value::ToUniquePtrValue(std::move(args))); handler()->HandleGetPrinterCapabilities(list_args.get()); EXPECT_TRUE(handler()->CalledOnlyForType(type)); - // Start with 1 call from initial settings plus base::size(kAllTypes) from - // first loop, then add 1 more for each loop iteration. - ASSERT_EQ(1u + base::size(kAllTypes) + (i + 1), + // Start with 1 call from initial settings plus + // base::size(kAllSupportedTypes) from first loop, then add 1 more for each + // loop iteration. + ASSERT_EQ(1u + base::size(kAllSupportedTypes) + (i + 1), web_ui()->call_data().size()); // Verify printer capabilities promise was rejected. @@ -610,27 +616,25 @@ TEST_F(PrintPreviewHandlerTest, GetPrinterCapabilities) { TEST_F(PrintPreviewHandlerTest, Print) { Initialize(); - // All four printer types can print, as well as cloud printers. - for (size_t i = 0; i <= base::size(kAllTypes); i++) { - // Also check cloud print. Use dummy type value of Privet (will be ignored). - bool cloud = i == base::size(kAllTypes); - PrinterType type = cloud ? kPrivetPrinter : kAllTypes[i]; + // All printer types can print. + for (size_t i = 0; i < base::size(kAllTypes); i++) { + PrinterType type = kAllTypes[i]; handler()->reset_calls(); base::Value args(base::Value::Type::LIST); std::string callback_id_in = "test-callback-id-" + base::NumberToString(i + 1); - args.GetList().emplace_back(callback_id_in); - base::Value print_ticket = GetPrintTicket(type, cloud); + args.Append(callback_id_in); + base::Value print_ticket = GetPrintTicket(type); std::string json; base::JSONWriter::Write(print_ticket, &json); - args.GetList().emplace_back(json); + args.Append(json); std::unique_ptr list_args = base::ListValue::From(base::Value::ToUniquePtrValue(std::move(args))); handler()->HandlePrint(list_args.get()); // Verify correct PrinterHandler was called or that no handler was requested // for cloud printers. - if (cloud) { + if (type == kCloudPrinter) { EXPECT_TRUE(handler()->NotCalled()); } else { EXPECT_TRUE(handler()->CalledOnlyForType(type)); @@ -641,7 +645,7 @@ TEST_F(PrintPreviewHandlerTest, Print) { CheckWebUIResponse(data, callback_id_in, true); // For cloud print, should also get the encoded data back as a string. - if (cloud) { + if (type == kCloudPrinter) { std::string print_data; ASSERT_TRUE(data.arg3()->GetAsString(&print_data)); std::string expected_data; @@ -654,7 +658,7 @@ TEST_F(PrintPreviewHandlerTest, Print) { TEST_F(PrintPreviewHandlerTest, GetPreview) { Initialize(); - base::Value print_ticket = GetPrintPreviewTicket(false); + base::Value print_ticket = GetPrintPreviewTicket(); std::unique_ptr list_args = ConstructPreviewArgs("test-callback-id-1", print_ticket); handler()->HandleGetPreview(list_args.get()); @@ -668,7 +672,7 @@ TEST_F(PrintPreviewHandlerTest, GetPreview) { preview_id_found = true; continue; } - base::Value* value_in = print_ticket.FindKey(it.first); + const base::Value* value_in = print_ticket.FindKey(it.first); ASSERT_TRUE(value_in); EXPECT_EQ(*value_in, it.second); } @@ -679,37 +683,38 @@ TEST_F(PrintPreviewHandlerTest, SendPreviewUpdates) { Initialize(); const char callback_id_in[] = "test-callback-id-1"; - base::Value print_ticket = GetPrintPreviewTicket(false); + base::Value print_ticket = GetPrintPreviewTicket(); std::unique_ptr list_args = ConstructPreviewArgs(callback_id_in, print_ticket); handler()->HandleGetPreview(list_args.get()); base::DictionaryValue preview_params = VerifyPreviewMessage(); // Read the preview UI ID and request ID - const base::Value* request_value = preview_params.FindKey(kPreviewRequestID); - ASSERT_TRUE(request_value); - ASSERT_TRUE(request_value->is_int()); - int preview_request_id = request_value->GetInt(); + base::Optional request_value = + preview_params.FindIntKey(kPreviewRequestID); + ASSERT_TRUE(request_value.has_value()); + int preview_request_id = request_value.value(); - const base::Value* ui_value = preview_params.FindKey(kPreviewUIID); - ASSERT_TRUE(ui_value); - ASSERT_TRUE(ui_value->is_int()); - int preview_ui_id = ui_value->GetInt(); + base::Optional ui_value = preview_params.FindIntKey(kPreviewUIID); + ASSERT_TRUE(ui_value.has_value()); + int preview_ui_id = ui_value.value(); // Simulate renderer responses: PageLayoutReady, PageCountReady, // PagePreviewReady, and OnPrintPreviewReady will be called in that order. - base::DictionaryValue layout; - layout.SetKey(kSettingMarginTop, base::Value(34.0)); - layout.SetKey(kSettingMarginLeft, base::Value(34.0)); - layout.SetKey(kSettingMarginBottom, base::Value(34.0)); - layout.SetKey(kSettingMarginRight, base::Value(34.0)); - layout.SetKey(kSettingContentWidth, base::Value(544.0)); - layout.SetKey(kSettingContentHeight, base::Value(700.0)); - layout.SetKey(kSettingPrintableAreaX, base::Value(17)); - layout.SetKey(kSettingPrintableAreaY, base::Value(17)); - layout.SetKey(kSettingPrintableAreaWidth, base::Value(578)); - layout.SetKey(kSettingPrintableAreaHeight, base::Value(734)); - handler()->SendPageLayoutReady(layout, false, preview_request_id); + base::Value layout(base::Value::Type::DICTIONARY); + layout.SetDoubleKey(kSettingMarginTop, 34.0); + layout.SetDoubleKey(kSettingMarginLeft, 34.0); + layout.SetDoubleKey(kSettingMarginBottom, 34.0); + layout.SetDoubleKey(kSettingMarginRight, 34.0); + layout.SetDoubleKey(kSettingContentWidth, 544.0); + layout.SetDoubleKey(kSettingContentHeight, 700.0); + layout.SetIntKey(kSettingPrintableAreaX, 17); + layout.SetIntKey(kSettingPrintableAreaY, 17); + layout.SetIntKey(kSettingPrintableAreaWidth, 578); + layout.SetIntKey(kSettingPrintableAreaHeight, 734); + handler()->SendPageLayoutReady(base::Value::AsDictionaryValue(layout), + /*has_custom_page_size_style,=*/false, + preview_request_id); // Verify that page-layout-ready webUI event was fired. AssertWebUIEventFired(*web_ui()->call_data().back(), "page-layout-ready"); @@ -732,7 +737,8 @@ TEST_F(PrintPreviewHandlerTest, SendPreviewUpdates) { // None of these should work since there has been no new preview request. // Check that there are no new web UI messages sent. size_t message_count = web_ui()->call_data().size(); - handler()->SendPageLayoutReady(base::DictionaryValue(), false, + handler()->SendPageLayoutReady(base::DictionaryValue(), + /*has_custom_page_size_style,=*/false, preview_request_id); EXPECT_EQ(message_count, web_ui()->call_data().size()); handler()->SendPageCountReady(1, -1, 0); @@ -788,15 +794,15 @@ TEST_F(PrintPreviewHandlerFailingTest, GetPrinterCapabilities) { // Check all four printer types that implement // PrinterHandler::StartGetCapability(). - for (size_t i = 0; i < base::size(kAllTypes); i++) { - PrinterType type = kAllTypes[i]; + for (size_t i = 0; i < base::size(kAllSupportedTypes); i++) { + PrinterType type = kAllSupportedTypes[i]; handler()->reset_calls(); base::Value args(base::Value::Type::LIST); std::string callback_id_in = "test-callback-id-" + base::NumberToString(i + 1); - args.GetList().emplace_back(callback_id_in); - args.GetList().emplace_back(kDummyPrinterName); - args.GetList().emplace_back(type); + args.Append(callback_id_in); + args.Append(kDummyPrinterName); + args.Append(type); std::unique_ptr list_args = base::ListValue::From(base::Value::ToUniquePtrValue(std::move(args))); handler()->HandleGetPrinterCapabilities(list_args.get()); diff --git a/chromium/chrome/browser/ui/webui/print_preview/print_preview_ui.cc b/chromium/chrome/browser/ui/webui/print_preview/print_preview_ui.cc index a855e2f1d97..820820687a5 100644 --- a/chromium/chrome/browser/ui/webui/print_preview/print_preview_ui.cc +++ b/chromium/chrome/browser/ui/webui/print_preview/print_preview_ui.cc @@ -26,6 +26,7 @@ #include "base/values.h" #include "build/build_config.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/browser_process_platform_part.h" #include "chrome/browser/printing/background_printing_manager.h" #include "chrome/browser/printing/print_preview_data_service.h" #include "chrome/browser/profiles/profile.h" @@ -66,6 +67,10 @@ #include "base/enterprise_util.h" #endif +#if !BUILDFLAG(OPTIMIZE_WEBUI) +#include "chrome/browser/ui/webui/managed_ui_handler.h" +#endif + using content::WebContents; namespace printing { @@ -223,6 +228,7 @@ void AddPrintPreviewStrings(content::WebUIDataSource* source) { {"optionCustomScaling", IDS_PRINT_PREVIEW_OPTION_CUSTOM_SCALING}, {"optionDefaultScaling", IDS_PRINT_PREVIEW_OPTION_DEFAULT_SCALING}, {"optionFitToPage", IDS_PRINT_PREVIEW_OPTION_FIT_TO_PAGE}, + {"optionFitToPaper", IDS_PRINT_PREVIEW_OPTION_FIT_TO_PAPER}, {"optionHeaderFooter", IDS_PRINT_PREVIEW_OPTION_HEADER_FOOTER}, {"optionLandscape", IDS_PRINT_PREVIEW_OPTION_LANDSCAPE}, {"optionLongEdge", IDS_PRINT_PREVIEW_OPTION_LONG_EDGE}, @@ -343,60 +349,44 @@ void SetupPrintPreviewPlugin(content::WebUIDataSource* source) { int id; } kPdfResources[] = { {"pdf/browser_api.js", IDR_PDF_BROWSER_API_JS}, + {"pdf/controller.js", IDR_PDF_CONTROLLER_JS}, {"pdf/elements/icons.html", IDR_PDF_ICONS_HTML}, {"pdf/elements/shared-vars.html", IDR_PDF_SHARED_VARS_HTML}, - {"pdf/elements/viewer-bookmark/viewer-bookmark.html", - IDR_PDF_VIEWER_BOOKMARK_HTML}, - {"pdf/elements/viewer-bookmark/viewer-bookmark.js", - IDR_PDF_VIEWER_BOOKMARK_JS}, - {"pdf/elements/viewer-error-screen/viewer-error-screen.html", - IDR_PDF_VIEWER_ERROR_SCREEN_HTML}, - {"pdf/elements/viewer-error-screen/viewer-error-screen.js", - IDR_PDF_VIEWER_ERROR_SCREEN_JS}, + {"pdf/elements/viewer-bookmark.html", IDR_PDF_VIEWER_BOOKMARK_HTML}, + {"pdf/elements/viewer-bookmark.js", IDR_PDF_VIEWER_BOOKMARK_JS}, + {"pdf/elements/viewer-error-screen.html", IDR_PDF_VIEWER_ERROR_SCREEN_HTML}, + {"pdf/elements/viewer-error-screen.js", IDR_PDF_VIEWER_ERROR_SCREEN_JS}, #if defined(OS_CHROMEOS) - {"pdf/elements/viewer-ink-host/viewer-ink-host.html", - IDR_PDF_VIEWER_INK_HOST_HTML}, - {"pdf/elements/viewer-ink-host/viewer-ink-host.js", - IDR_PDF_VIEWER_INK_HOST_JS}, + {"pdf/elements/viewer-ink-host.html", IDR_PDF_VIEWER_INK_HOST_HTML}, + {"pdf/elements/viewer-ink-host.js", IDR_PDF_VIEWER_INK_HOST_JS}, #endif - {"pdf/elements/viewer-page-indicator/viewer-page-indicator.html", + {"pdf/elements/viewer-page-indicator.html", IDR_PDF_VIEWER_PAGE_INDICATOR_HTML}, - {"pdf/elements/viewer-page-indicator/viewer-page-indicator.js", - IDR_PDF_VIEWER_PAGE_INDICATOR_JS}, - {"pdf/elements/viewer-page-selector/viewer-page-selector.html", + {"pdf/elements/viewer-page-indicator.js", IDR_PDF_VIEWER_PAGE_INDICATOR_JS}, + {"pdf/elements/viewer-page-selector.html", IDR_PDF_VIEWER_PAGE_SELECTOR_HTML}, - {"pdf/elements/viewer-page-selector/viewer-page-selector.js", - IDR_PDF_VIEWER_PAGE_SELECTOR_JS}, - {"pdf/elements/viewer-password-screen/viewer-password-screen.html", + {"pdf/elements/viewer-page-selector.js", IDR_PDF_VIEWER_PAGE_SELECTOR_JS}, + {"pdf/elements/viewer-password-screen.html", IDR_PDF_VIEWER_PASSWORD_SCREEN_HTML}, - {"pdf/elements/viewer-password-screen/viewer-password-screen.js", + {"pdf/elements/viewer-password-screen.js", IDR_PDF_VIEWER_PASSWORD_SCREEN_JS}, - {"pdf/elements/viewer-pdf-toolbar/viewer-pdf-toolbar.html", - IDR_PDF_VIEWER_PDF_TOOLBAR_HTML}, - {"pdf/elements/viewer-pdf-toolbar/viewer-pdf-toolbar.js", - IDR_PDF_VIEWER_PDF_TOOLBAR_JS}, + {"pdf/elements/viewer-pdf-toolbar.html", IDR_PDF_VIEWER_PDF_TOOLBAR_HTML}, + {"pdf/elements/viewer-pdf-toolbar.js", IDR_PDF_VIEWER_PDF_TOOLBAR_JS}, #if defined(OS_CHROMEOS) - {"pdf/elements/viewer-form-warning/viewer-form-warning.html", - IDR_PDF_VIEWER_FORM_WARNING_HTML}, - {"pdf/elements/viewer-form-warning/viewer-form-warning.js", - IDR_PDF_VIEWER_FORM_WARNING_JS}, - {"pdf/elements/viewer-pen-options/viewer-pen-options.html", - IDR_PDF_VIEWER_PEN_OPTIONS_HTML}, - {"pdf/elements/viewer-pen-options/viewer-pen-options.js", - IDR_PDF_VIEWER_PEN_OPTIONS_JS}, + {"pdf/elements/viewer-form-warning.html", IDR_PDF_VIEWER_FORM_WARNING_HTML}, + {"pdf/elements/viewer-form-warning.js", IDR_PDF_VIEWER_FORM_WARNING_JS}, + {"pdf/elements/viewer-pen-options.html", IDR_PDF_VIEWER_PEN_OPTIONS_HTML}, + {"pdf/elements/viewer-pen-options.js", IDR_PDF_VIEWER_PEN_OPTIONS_JS}, #endif - {"pdf/elements/viewer-toolbar-dropdown/viewer-toolbar-dropdown.html", + {"pdf/elements/viewer-toolbar-dropdown.html", IDR_PDF_VIEWER_TOOLBAR_DROPDOWN_HTML}, - {"pdf/elements/viewer-toolbar-dropdown/viewer-toolbar-dropdown.js", + {"pdf/elements/viewer-toolbar-dropdown.js", IDR_PDF_VIEWER_TOOLBAR_DROPDOWN_JS}, - {"pdf/elements/viewer-zoom-toolbar/viewer-zoom-button.html", - IDR_PDF_VIEWER_ZOOM_BUTTON_HTML}, - {"pdf/elements/viewer-zoom-toolbar/viewer-zoom-button.js", - IDR_PDF_VIEWER_ZOOM_BUTTON_JS}, - {"pdf/elements/viewer-zoom-toolbar/viewer-zoom-toolbar.html", + {"pdf/elements/viewer-zoom-button.html", IDR_PDF_VIEWER_ZOOM_BUTTON_HTML}, + {"pdf/elements/viewer-zoom-button.js", IDR_PDF_VIEWER_ZOOM_BUTTON_JS}, + {"pdf/elements/viewer-zoom-toolbar.html", IDR_PDF_VIEWER_ZOOM_SELECTOR_HTML}, - {"pdf/elements/viewer-zoom-toolbar/viewer-zoom-toolbar.js", - IDR_PDF_VIEWER_ZOOM_SELECTOR_JS}, + {"pdf/elements/viewer-zoom-toolbar.js", IDR_PDF_VIEWER_ZOOM_SELECTOR_JS}, {"pdf/gesture_detector.js", IDR_PDF_GESTURE_DETECTOR_JS}, {"pdf/index.css", IDR_PDF_INDEX_CSS}, {"pdf/index.html", IDR_PDF_INDEX_HTML}, @@ -470,7 +460,12 @@ PrintPreviewUI::PrintPreviewUI(content::WebUI* web_ui) handler_(CreatePrintPreviewHandlers(web_ui)) { // Set up the chrome://print/ data source. Profile* profile = Profile::FromWebUI(web_ui); - content::WebUIDataSource::Add(profile, CreatePrintPreviewUISource(profile)); + content::WebUIDataSource* source = CreatePrintPreviewUISource(profile); +#if !BUILDFLAG(OPTIMIZE_WEBUI) + // For the Polymer 3 demo page. + ManagedUIHandler::Initialize(web_ui, source); +#endif + content::WebUIDataSource::Add(profile, source); // Set up the chrome://theme/ source. content::URLDataSource::Add(profile, std::make_unique(profile)); @@ -574,6 +569,7 @@ void PrintPreviewUI::SetInitialParams( PrintPreviewUI* print_preview_ui = static_cast( print_preview_dialog->GetWebUI()->GetController()); print_preview_ui->source_is_modifiable_ = params.is_modifiable; + print_preview_ui->source_is_pdf_ = params.is_pdf; print_preview_ui->source_has_selection_ = params.has_selection; print_preview_ui->print_selection_only_ = params.selection_only; } diff --git a/chromium/chrome/browser/ui/webui/print_preview/print_preview_ui.h b/chromium/chrome/browser/ui/webui/print_preview/print_preview_ui.h index 2aca55e7bc1..1922e87b53e 100644 --- a/chromium/chrome/browser/ui/webui/print_preview/print_preview_ui.h +++ b/chromium/chrome/browser/ui/webui/print_preview/print_preview_ui.h @@ -61,6 +61,8 @@ class PrintPreviewUI : public ConstrainedWebDialogUI { bool source_is_modifiable() const { return source_is_modifiable_; } + bool source_is_pdf() const { return source_is_pdf_; } + bool source_has_selection() const { return source_has_selection_; } bool print_selection_only() const { return print_selection_only_; } @@ -257,6 +259,9 @@ class PrintPreviewUI : public ConstrainedWebDialogUI { // Indicates whether the source document can be modified. bool source_is_modifiable_ = true; + // Indicates whether the source document is a PDF. + bool source_is_pdf_ = false; + // Indicates whether the source document has selection. bool source_has_selection_ = false; diff --git a/chromium/chrome/browser/ui/webui/print_preview/print_preview_utils.cc b/chromium/chrome/browser/ui/webui/print_preview/print_preview_utils.cc index e9d21dc1c15..e8af4416366 100644 --- a/chromium/chrome/browser/ui/webui/print_preview/print_preview_utils.cc +++ b/chromium/chrome/browser/ui/webui/print_preview/print_preview_utils.cc @@ -212,15 +212,12 @@ bool ParseSettings(const base::Value& settings, std::string* out_capabilities, gfx::Size* out_page_size, base::Value* out_ticket) { - const std::string* destination_id_opt = - settings.FindStringKey(kSettingDeviceName); const std::string* ticket_opt = settings.FindStringKey(kSettingTicket); const std::string* capabilities_opt = settings.FindStringKey(kSettingCapabilities); out_page_size->SetSize(settings.FindIntKey(kSettingPageWidth).value_or(0), settings.FindIntKey(kSettingPageHeight).value_or(0)); - if (!destination_id_opt || !ticket_opt || !capabilities_opt || - out_page_size->IsEmpty()) { + if (!ticket_opt || !capabilities_opt || out_page_size->IsEmpty()) { NOTREACHED(); return false; } @@ -229,7 +226,7 @@ bool ParseSettings(const base::Value& settings, if (!ticket_value) return false; - *out_destination_id = *destination_id_opt; + *out_destination_id = *settings.FindStringKey(kSettingDeviceName); *out_capabilities = *capabilities_opt; *out_ticket = std::move(*ticket_value); return true; diff --git a/chromium/chrome/browser/ui/webui/print_preview/print_preview_utils_unittest.cc b/chromium/chrome/browser/ui/webui/print_preview/print_preview_utils_unittest.cc index 2fed881bf5d..1d84fb3e65c 100644 --- a/chromium/chrome/browser/ui/webui/print_preview/print_preview_utils_unittest.cc +++ b/chromium/chrome/browser/ui/webui/print_preview/print_preview_utils_unittest.cc @@ -163,8 +163,7 @@ void ValidateVendorCaps(const base::Value* printer_out, ASSERT_TRUE(vendor_capability_out); size_t index = 0; - const base::Value::ListStorage& output_list = - vendor_capability_out->GetList(); + base::span output_list = vendor_capability_out->GetList(); for (const auto& input_entry : input_vendor_caps->GetList()) { if (!HasValidEntry( input_entry diff --git a/chromium/chrome/browser/ui/webui/profile_helper_browsertest.cc b/chromium/chrome/browser/ui/webui/profile_helper_browsertest.cc index 5e9302e517b..c6f2e95b4a0 100644 --- a/chromium/chrome/browser/ui/webui/profile_helper_browsertest.cc +++ b/chromium/chrome/browser/ui/webui/profile_helper_browsertest.cc @@ -4,7 +4,7 @@ #include "base/bind.h" #include "base/run_loop.h" -#include "base/scoped_observer.h" +#include "build/build_config.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/profiles/profile_attributes_storage.h" #include "chrome/browser/profiles/profile_manager.h" @@ -46,8 +46,12 @@ Profile* CreateProfile() { class ExpectBrowserActivationForProfile : public BrowserListObserver { public: explicit ExpectBrowserActivationForProfile(Profile* profile) - : profile_(profile), scoped_observer_(this) { - scoped_observer_.Add(BrowserList::GetInstance()); + : profile_(profile) { + BrowserList::AddObserver(this); + } + + ~ExpectBrowserActivationForProfile() override { + BrowserList::RemoveObserver(this); } void Wait() { @@ -63,7 +67,31 @@ class ExpectBrowserActivationForProfile : public BrowserListObserver { private: Profile* profile_; base::RunLoop loop_; - ScopedObserver scoped_observer_; +}; + +// An observer that returns back to test code after a new browser is added to +// the BrowserList. +class BrowserAddedObserver : public BrowserListObserver { + public: + BrowserAddedObserver() { BrowserList::AddObserver(this); } + + ~BrowserAddedObserver() override { BrowserList::RemoveObserver(this); } + + Browser* Wait() { + run_loop_.Run(); + return browser_; + } + + protected: + // BrowserListObserver: + void OnBrowserAdded(Browser* browser) override { + browser_ = browser; + run_loop_.Quit(); + } + + private: + Browser* browser_; + base::RunLoop run_loop_; }; } // namespace @@ -123,12 +151,15 @@ IN_PROC_BROWSER_TEST_F(ProfileHelperTest, DeleteSoleProfile) { EXPECT_EQ(1u, storage.GetNumberOfProfiles()); // Original browser will be closed, and browser with the new profile created. + BrowserAddedObserver added_observer; webui::DeleteProfileAtPath(original_browser->profile()->GetPath(), ProfileMetrics::DELETE_PROFILE_SETTINGS); ui_test_utils::WaitForBrowserToClose(original_browser); + Browser* new_browser = added_observer.Wait(); EXPECT_EQ(1u, browser_list->size()); EXPECT_FALSE(base::Contains(*browser_list, original_browser)); + EXPECT_NE(new_browser, original_browser); EXPECT_EQ(1u, storage.GetNumberOfProfiles()); } diff --git a/chromium/chrome/browser/ui/webui/quota_internals/OWNERS b/chromium/chrome/browser/ui/webui/quota_internals/OWNERS index af949556e32..84d5cb66e1c 100644 --- a/chromium/chrome/browser/ui/webui/quota_internals/OWNERS +++ b/chromium/chrome/browser/ui/webui/quota_internals/OWNERS @@ -1,6 +1,4 @@ -tzik@chromium.org -jsbell@chromium.org -pwnall@chromium.org +file://storage/browser/quota/OWNERS # TEAM: storage-dev@chromium.org # COMPONENT: Blink>Storage>Quota diff --git a/chromium/chrome/browser/ui/webui/reset_password/reset_password_ui.cc b/chromium/chrome/browser/ui/webui/reset_password/reset_password_ui.cc index b4b7b46f2c6..e6293d9e973 100644 --- a/chromium/chrome/browser/ui/webui/reset_password/reset_password_ui.cc +++ b/chromium/chrome/browser/ui/webui/reset_password/reset_password_ui.cc @@ -4,10 +4,14 @@ #include "chrome/browser/ui/webui/reset_password/reset_password_ui.h" +#include +#include + #include "base/bind.h" #include "base/metrics/histogram_macros.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/webui/reset_password/reset_password.mojom.h" #include "chrome/common/url_constants.h" #include "chrome/grit/browser_resources.h" #include "components/safe_browsing/common/safe_browsing_prefs.h" @@ -21,7 +25,7 @@ #include "content/public/browser/navigation_entry.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_ui_data_source.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/receiver.h" #include "ui/base/l10n/l10n_util.h" using safe_browsing::LoginReputationClientResponse; @@ -46,9 +50,8 @@ class ResetPasswordHandlerImpl : public mojom::ResetPasswordHandler { public: ResetPasswordHandlerImpl( content::WebContents* web_contents, - mojo::InterfaceRequest request) - : web_contents_(web_contents), - binding_(this, std::move(request)) { + mojo::PendingReceiver receiver) + : web_contents_(web_contents), receiver_(this, std::move(receiver)) { DCHECK(web_contents); } @@ -73,7 +76,7 @@ class ResetPasswordHandlerImpl : public mojom::ResetPasswordHandler { private: content::WebContents* web_contents_; - mojo::Binding binding_; + mojo::Receiver receiver_; DISALLOW_COPY_AND_ASSIGN(ResetPasswordHandlerImpl); }; @@ -126,9 +129,9 @@ ResetPasswordUI::ResetPasswordUI(content::WebUI* web_ui) ResetPasswordUI::~ResetPasswordUI() {} void ResetPasswordUI::BindResetPasswordHandler( - mojom::ResetPasswordHandlerRequest request) { + mojo::PendingReceiver receiver) { ui_handler_ = std::make_unique( - web_ui()->GetWebContents(), std::move(request)); + web_ui()->GetWebContents(), std::move(receiver)); } base::DictionaryValue ResetPasswordUI::PopulateStrings() const { diff --git a/chromium/chrome/browser/ui/webui/reset_password/reset_password_ui.h b/chromium/chrome/browser/ui/webui/reset_password/reset_password_ui.h index 8712c13c91d..3bd39465b30 100644 --- a/chromium/chrome/browser/ui/webui/reset_password/reset_password_ui.h +++ b/chromium/chrome/browser/ui/webui/reset_password/reset_password_ui.h @@ -9,6 +9,7 @@ #include "chrome/browser/safe_browsing/chrome_password_protection_service.h" #include "chrome/browser/ui/webui/reset_password/reset_password.mojom.h" #include "components/password_manager/core/browser/password_manager_metrics_util.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "ui/webui/mojo_web_ui_controller.h" namespace base { @@ -24,7 +25,8 @@ class ResetPasswordUI : public ui::MojoWebUIController { ~ResetPasswordUI() override; private: - void BindResetPasswordHandler(mojom::ResetPasswordHandlerRequest request); + void BindResetPasswordHandler( + mojo::PendingReceiver receiver); base::DictionaryValue PopulateStrings() const; diff --git a/chromium/chrome/browser/ui/webui/sandbox/OWNERS b/chromium/chrome/browser/ui/webui/sandbox/OWNERS new file mode 100644 index 00000000000..058ee25caec --- /dev/null +++ b/chromium/chrome/browser/ui/webui/sandbox/OWNERS @@ -0,0 +1,3 @@ +file://sandbox/OWNERS +# COMPONENT: Internals>Sandbox +# TEAM: security-dev@chromium.org diff --git a/chromium/chrome/browser/ui/webui/sandbox/sandbox_handler.cc b/chromium/chrome/browser/ui/webui/sandbox/sandbox_handler.cc new file mode 100644 index 00000000000..a4f1c53905c --- /dev/null +++ b/chromium/chrome/browser/ui/webui/sandbox/sandbox_handler.cc @@ -0,0 +1,134 @@ +// Copyright 2019 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/sandbox/sandbox_handler.h" + +#include + +#include "base/bind.h" +#include "base/numerics/safe_conversions.h" +#include "base/task/post_task.h" +#include "base/values.h" +#include "content/public/browser/browser_child_process_host_iterator.h" +#include "content/public/browser/browser_task_traits.h" +#include "content/public/browser/browser_thread.h" +#include "content/public/browser/child_process_data.h" +#include "content/public/browser/render_process_host.h" +#include "content/public/browser/web_ui.h" +#include "content/public/common/process_type.h" +#include "services/service_manager/sandbox/win/sandbox_win.h" + +using content::BrowserChildProcessHostIterator; +using content::ChildProcessData; +using content::RenderProcessHost; + +namespace sandbox_handler { +namespace { +base::Value FetchBrowserChildProcesses() { + // The |BrowserChildProcessHostIterator| must only be used on the IO thread. + DCHECK_CURRENTLY_ON(content::BrowserThread::IO); + base::Value browser_processes(base::Value::Type::LIST); + + for (BrowserChildProcessHostIterator itr; !itr.Done(); ++itr) { + const ChildProcessData& process_data = itr.GetData(); + // Only add processes that have already started, i.e. with valid handles. + if (!process_data.GetProcess().IsValid()) + continue; + base::Value proc(base::Value::Type::DICTIONARY); + proc.SetPath("processId", base::Value(base::strict_cast( + process_data.GetProcess().Pid()))); + proc.SetPath("processType", + base::Value(content::GetProcessTypeNameInEnglish( + process_data.process_type))); + proc.SetPath("name", base::Value(process_data.name)); + proc.SetPath("metricsName", base::Value(process_data.metrics_name)); + browser_processes.GetList().push_back(std::move(proc)); + } + + return browser_processes; +} + +base::Value FetchRenderHostProcesses() { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + base::Value renderer_processes(base::Value::Type::LIST); + + for (RenderProcessHost::iterator it(RenderProcessHost::AllHostsIterator()); + !it.IsAtEnd(); it.Advance()) { + RenderProcessHost* host = it.GetCurrentValue(); + // Skip processes that might not have started yet. + if (!host->GetProcess().IsValid()) + continue; + + base::Value proc(base::Value::Type::DICTIONARY); + proc.SetPath( + "processId", + base::Value(base::strict_cast(host->GetProcess().Pid()))); + renderer_processes.GetList().push_back(std::move(proc)); + } + + return renderer_processes; +} + +} // namespace + +SandboxHandler::SandboxHandler() = default; +SandboxHandler::~SandboxHandler() = default; + +void SandboxHandler::RegisterMessages() { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + + web_ui()->RegisterMessageCallback( + "requestSandboxDiagnostics", + base::BindRepeating(&SandboxHandler::HandleRequestSandboxDiagnostics, + base::Unretained(this))); +} + +void SandboxHandler::HandleRequestSandboxDiagnostics( + const base::ListValue* args) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + + CHECK_EQ(1U, args->GetList().size()); + sandbox_diagnostics_callback_id_ = args->GetList()[0].Clone(); + + AllowJavascript(); + + base::PostTaskAndReplyWithResult( + FROM_HERE, {content::BrowserThread::IO}, + base::Bind(&FetchBrowserChildProcesses), + base::Bind(&SandboxHandler::FetchBrowserChildProcessesCompleted, + weak_ptr_factory_.GetWeakPtr())); +} + +void SandboxHandler::FetchBrowserChildProcessesCompleted( + base::Value browser_processes) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + browser_processes_ = std::move(browser_processes); + + service_manager::SandboxWin::GetPolicyDiagnostics( + base::Bind(&SandboxHandler::FetchSandboxDiagnosticsCompleted, + weak_ptr_factory_.GetWeakPtr())); +} + +// This runs nested inside SandboxWin so we get out quickly. +void SandboxHandler::FetchSandboxDiagnosticsCompleted( + base::Value sandbox_policies) { + sandbox_policies_ = std::move(sandbox_policies); + base::PostTask(FROM_HERE, {content::BrowserThread::UI}, + base::BindOnce(&SandboxHandler::GetRendererProcessesAndFinish, + weak_ptr_factory_.GetWeakPtr())); +} + +void SandboxHandler::GetRendererProcessesAndFinish() { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + + auto renderer_processes = FetchRenderHostProcesses(); + base::Value results(base::Value::Type::DICTIONARY); + results.SetPath("browser", std::move(browser_processes_)); + results.SetPath("policies", std::move(sandbox_policies_)); + results.SetPath("renderer", std::move(renderer_processes)); + ResolveJavascriptCallback(sandbox_diagnostics_callback_id_, + std::move(results)); +} + +} // namespace sandbox_handler diff --git a/chromium/chrome/browser/ui/webui/sandbox/sandbox_handler.h b/chromium/chrome/browser/ui/webui/sandbox/sandbox_handler.h new file mode 100644 index 00000000000..822044f28b3 --- /dev/null +++ b/chromium/chrome/browser/ui/webui/sandbox/sandbox_handler.h @@ -0,0 +1,52 @@ +// Copyright 2019 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_SANDBOX_SANDBOX_HANDLER_H_ +#define CHROME_BROWSER_UI_WEBUI_SANDBOX_SANDBOX_HANDLER_H_ + +#include "base/macros.h" +#include "base/memory/weak_ptr.h" +#include "content/public/browser/web_ui_message_handler.h" + +namespace base { +class Value; +class ListValue; +} // namespace base + +namespace sandbox_handler { +// This class takes care of sending the list of processes and their sandboxing +// status to the chrome://sandbox WebUI page when it is requested. +class SandboxHandler : public content::WebUIMessageHandler { + public: + SandboxHandler(); + ~SandboxHandler() override; + + private: + // content::WebUIMessageHandler: + void RegisterMessages() override; + + // Callback for the "requestSandboxDiagnostics" message. + void HandleRequestSandboxDiagnostics(const base::ListValue* args); + + void OnSandboxDataFetched(base::Value results); + + void FetchBrowserChildProcessesCompleted(base::Value browser_processes); + void FetchSandboxDiagnosticsCompleted(base::Value sandbox_policies); + void GetRendererProcessesAndFinish(); + + // The ID of the callback that will get invoked with the sandbox list. + base::Value sandbox_diagnostics_callback_id_; + base::Value browser_processes_; + base::Value sandbox_policies_; + + // Always keep this the last member of this class to make sure it's the + // first thing to be destructed. + base::WeakPtrFactory weak_ptr_factory_{this}; + + DISALLOW_COPY_AND_ASSIGN(SandboxHandler); +}; + +} // namespace sandbox_handler + +#endif // CHROME_BROWSER_UI_WEBUI_SANDBOX_SANDBOX_HANDLER_H_ diff --git a/chromium/chrome/browser/ui/webui/sandbox/sandbox_internals_ui.cc b/chromium/chrome/browser/ui/webui/sandbox/sandbox_internals_ui.cc new file mode 100644 index 00000000000..9c3783b3791 --- /dev/null +++ b/chromium/chrome/browser/ui/webui/sandbox/sandbox_internals_ui.cc @@ -0,0 +1,104 @@ +// 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/sandbox/sandbox_internals_ui.h" + +#include + +#include "build/build_config.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/common/url_constants.h" +#include "chrome/grit/browser_resources.h" +#include "content/public/browser/render_frame_host.h" +#include "content/public/browser/web_contents.h" +#include "content/public/browser/web_ui.h" +#include "content/public/browser/web_ui_data_source.h" + +#if defined(OS_WIN) +#include "chrome/browser/ui/webui/sandbox/sandbox_handler.h" +#endif + +#if defined(OS_ANDROID) +#include "chrome/common/sandbox_status_extension_android.mojom.h" +#include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h" +#endif + +#if defined(OS_LINUX) +#include "services/service_manager/sandbox/sandbox.h" +#include "services/service_manager/zygote/zygote_host_linux.h" +#endif + +namespace { + +#if defined(OS_LINUX) +static void SetSandboxStatusData(content::WebUIDataSource* source) { + // Get expected sandboxing status of renderers. + const int status = + service_manager::ZygoteHost::GetInstance()->GetRendererSandboxStatus(); + + source->AddBoolean("suid", status & service_manager::SandboxLinux::kSUID); + source->AddBoolean("userNs", status & service_manager::SandboxLinux::kUserNS); + source->AddBoolean("pidNs", status & service_manager::SandboxLinux::kPIDNS); + source->AddBoolean("netNs", status & service_manager::SandboxLinux::kNetNS); + source->AddBoolean("seccompBpf", + status & service_manager::SandboxLinux::kSeccompBPF); + source->AddBoolean("seccompTsync", + status & service_manager::SandboxLinux::kSeccompTSYNC); + source->AddBoolean("yamaBroker", + status & service_manager::SandboxLinux::kYama); + + // Yama does not enforce in user namespaces. + bool enforcing_yama_nonbroker = + status & service_manager::SandboxLinux::kYama && + !(status & service_manager::SandboxLinux::kUserNS); + source->AddBoolean("yamaNonbroker", enforcing_yama_nonbroker); + + // Require either the setuid or namespace sandbox for our first-layer sandbox. + bool good_layer1 = (status & service_manager::SandboxLinux::kSUID || + status & service_manager::SandboxLinux::kUserNS) && + status & service_manager::SandboxLinux::kPIDNS && + status & service_manager::SandboxLinux::kNetNS; + // A second-layer sandbox is also required to be adequately sandboxed. + bool good_layer2 = status & service_manager::SandboxLinux::kSeccompBPF; + source->AddBoolean("sandboxGood", good_layer1 && good_layer2); +} +#endif + +content::WebUIDataSource* CreateDataSource() { + content::WebUIDataSource* source = + content::WebUIDataSource::Create(chrome::kChromeUISandboxHost); + source->SetDefaultResource(IDR_SANDBOX_INTERNALS_HTML); + source->AddResourcePath("sandbox_internals.js", IDR_SANDBOX_INTERNALS_JS); + +#if defined(OS_LINUX) + SetSandboxStatusData(source); + source->UseStringsJs(); +#endif + + return source; +} + +} // namespace + +SandboxInternalsUI::SandboxInternalsUI(content::WebUI* web_ui) + : content::WebUIController(web_ui) { +#if defined(OS_WIN) + web_ui->AddMessageHandler( + std::make_unique()); +#endif + Profile* profile = Profile::FromWebUI(web_ui); + content::WebUIDataSource::Add(profile, CreateDataSource()); +} + +void SandboxInternalsUI::RenderFrameCreated( + content::RenderFrameHost* render_frame_host) { +#if defined(OS_ANDROID) + mojo::AssociatedRemote sandbox_status; + render_frame_host->GetRemoteAssociatedInterfaces()->GetInterface( + &sandbox_status); + sandbox_status->AddSandboxStatusExtension(); +#endif +} + +SandboxInternalsUI::~SandboxInternalsUI() {} diff --git a/chromium/chrome/browser/ui/webui/sandbox/sandbox_internals_ui.h b/chromium/chrome/browser/ui/webui/sandbox/sandbox_internals_ui.h new file mode 100644 index 00000000000..5fbd2ea41f0 --- /dev/null +++ b/chromium/chrome/browser/ui/webui/sandbox/sandbox_internals_ui.h @@ -0,0 +1,31 @@ +// 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. + +#ifndef CHROME_BROWSER_UI_WEBUI_SANDBOX_SANDBOX_INTERNALS_UI_H_ +#define CHROME_BROWSER_UI_WEBUI_SANDBOX_SANDBOX_INTERNALS_UI_H_ + +#include "base/macros.h" +#include "content/public/browser/web_ui_controller.h" + +// This WebUI page displays the status of the renderer sandbox on Linux and +// Android. The two OSes share the same basic page, but the data reported are +// obtained from different places: +// - On Linux, this object in the browser queries the renderer ZygoteHost +// to get the sandbox status of the renderers. The data are then specified +// as loadTimeData on the WebUI Page. +// - On Android, this object sends an IPC message to the +// SandboxStatusExtension in the renderer, which installs a JavaScript +// function on the web page to return the current sandbox status. +class SandboxInternalsUI : public content::WebUIController { + public: + explicit SandboxInternalsUI(content::WebUI* web_ui); + ~SandboxInternalsUI() override; + + void RenderFrameCreated(content::RenderFrameHost* render_frame_host) override; + + private: + DISALLOW_COPY_AND_ASSIGN(SandboxInternalsUI); +}; + +#endif // CHROME_BROWSER_UI_WEBUI_SANDBOX_SANDBOX_INTERNALS_UI_H_ diff --git a/chromium/chrome/browser/ui/webui/sandbox_internals_ui.cc b/chromium/chrome/browser/ui/webui/sandbox_internals_ui.cc deleted file mode 100644 index e09f9d4a1e9..00000000000 --- a/chromium/chrome/browser/ui/webui/sandbox_internals_ui.cc +++ /dev/null @@ -1,96 +0,0 @@ -// 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/sandbox_internals_ui.h" - -#include - -#include "build/build_config.h" -#include "chrome/browser/profiles/profile.h" -#include "chrome/common/url_constants.h" -#include "chrome/grit/browser_resources.h" -#include "content/public/browser/render_frame_host.h" -#include "content/public/browser/web_contents.h" -#include "content/public/browser/web_ui.h" -#include "content/public/browser/web_ui_data_source.h" - -#if defined(OS_ANDROID) -#include "chrome/common/sandbox_status_extension_android.mojom.h" -#include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h" -#endif - -#if defined(OS_LINUX) -#include "services/service_manager/sandbox/sandbox.h" -#include "services/service_manager/zygote/zygote_host_linux.h" -#endif - -namespace { - -#if defined(OS_LINUX) -static void SetSandboxStatusData(content::WebUIDataSource* source) { - // Get expected sandboxing status of renderers. - const int status = - service_manager::ZygoteHost::GetInstance()->GetRendererSandboxStatus(); - - source->AddBoolean("suid", status & service_manager::SandboxLinux::kSUID); - source->AddBoolean("userNs", status & service_manager::SandboxLinux::kUserNS); - source->AddBoolean("pidNs", status & service_manager::SandboxLinux::kPIDNS); - source->AddBoolean("netNs", status & service_manager::SandboxLinux::kNetNS); - source->AddBoolean("seccompBpf", - status & service_manager::SandboxLinux::kSeccompBPF); - source->AddBoolean("seccompTsync", - status & service_manager::SandboxLinux::kSeccompTSYNC); - source->AddBoolean("yamaBroker", - status & service_manager::SandboxLinux::kYama); - - // Yama does not enforce in user namespaces. - bool enforcing_yama_nonbroker = - status & service_manager::SandboxLinux::kYama && - !(status & service_manager::SandboxLinux::kUserNS); - source->AddBoolean("yamaNonbroker", enforcing_yama_nonbroker); - - // Require either the setuid or namespace sandbox for our first-layer sandbox. - bool good_layer1 = (status & service_manager::SandboxLinux::kSUID || - status & service_manager::SandboxLinux::kUserNS) && - status & service_manager::SandboxLinux::kPIDNS && - status & service_manager::SandboxLinux::kNetNS; - // A second-layer sandbox is also required to be adequately sandboxed. - bool good_layer2 = status & service_manager::SandboxLinux::kSeccompBPF; - source->AddBoolean("sandboxGood", good_layer1 && good_layer2); -} -#endif - -content::WebUIDataSource* CreateDataSource() { - content::WebUIDataSource* source = - content::WebUIDataSource::Create(chrome::kChromeUISandboxHost); - source->SetDefaultResource(IDR_SANDBOX_INTERNALS_HTML); - source->AddResourcePath("sandbox_internals.js", IDR_SANDBOX_INTERNALS_JS); - -#if defined(OS_LINUX) - SetSandboxStatusData(source); - source->UseStringsJs(); -#endif - - return source; -} - -} // namespace - -SandboxInternalsUI::SandboxInternalsUI(content::WebUI* web_ui) - : content::WebUIController(web_ui) { - Profile* profile = Profile::FromWebUI(web_ui); - content::WebUIDataSource::Add(profile, CreateDataSource()); -} - -void SandboxInternalsUI::RenderFrameCreated( - content::RenderFrameHost* render_frame_host) { -#if defined(OS_ANDROID) - chrome::mojom::SandboxStatusExtensionAssociatedPtr sandbox_status; - render_frame_host->GetRemoteAssociatedInterfaces()->GetInterface( - &sandbox_status); - sandbox_status->AddSandboxStatusExtension(); -#endif -} - -SandboxInternalsUI::~SandboxInternalsUI() {} diff --git a/chromium/chrome/browser/ui/webui/sandbox_internals_ui.h b/chromium/chrome/browser/ui/webui/sandbox_internals_ui.h deleted file mode 100644 index c8c59692774..00000000000 --- a/chromium/chrome/browser/ui/webui/sandbox_internals_ui.h +++ /dev/null @@ -1,31 +0,0 @@ -// 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. - -#ifndef CHROME_BROWSER_UI_WEBUI_SANDBOX_INTERNALS_UI_H_ -#define CHROME_BROWSER_UI_WEBUI_SANDBOX_INTERNALS_UI_H_ - -#include "base/macros.h" -#include "content/public/browser/web_ui_controller.h" - -// This WebUI page displays the status of the renderer sandbox on Linux and -// Android. The two OSes share the same basic page, but the data reported are -// obtained from different places: -// - On Linux, this object in the browser queries the renderer ZygoteHost -// to get the sandbox status of the renderers. The data are then specified -// as loadTimeData on the WebUI Page. -// - On Android, this object sends an IPC message to the -// SandboxStatusExtension in the renderer, which installs a JavaScript -// function on the web page to return the current sandbox status. -class SandboxInternalsUI : public content::WebUIController { - public: - explicit SandboxInternalsUI(content::WebUI* web_ui); - ~SandboxInternalsUI() override; - - void RenderFrameCreated(content::RenderFrameHost* render_frame_host) override; - - private: - DISALLOW_COPY_AND_ASSIGN(SandboxInternalsUI); -}; - -#endif // CHROME_BROWSER_UI_WEBUI_SANDBOX_INTERNALS_UI_H_ diff --git a/chromium/chrome/browser/ui/webui/settings/about_handler.cc b/chromium/chrome/browser/ui/webui/settings/about_handler.cc index 7245f9a91e3..735025691f6 100644 --- a/chromium/chrome/browser/ui/webui/settings/about_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/about_handler.cc @@ -28,6 +28,7 @@ #include "build/branding_buildflags.h" #include "build/build_config.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/browser_process_platform_part.h" #include "chrome/browser/chrome_content_browser_client.h" #include "chrome/browser/obsolete_system/obsolete_system.h" #include "chrome/browser/ui/browser.h" @@ -55,7 +56,6 @@ #if defined(OS_CHROMEOS) #include "base/i18n/time_formatting.h" -#include "base/system/sys_info.h" #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos.h" #include "chrome/browser/chromeos/ownership/owner_settings_service_chromeos_factory.h" #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" @@ -70,7 +70,7 @@ #include "chromeos/constants/chromeos_features.h" #include "chromeos/constants/chromeos_switches.h" #include "chromeos/dbus/power/power_manager_client.h" -#include "chromeos/dbus/util/version_loader.h" +#include "chromeos/dbus/update_engine_client.h" #include "chromeos/network/network_state.h" #include "chromeos/network/network_state_handler.h" #include "chromeos/system/statistics_provider.h" @@ -227,21 +227,6 @@ std::string ReadRegulatoryLabelText(const base::FilePath& label_dir_path) { return std::string(); } -std::unique_ptr GetVersionInfo() { - std::unique_ptr version_info( - new base::DictionaryValue); - - version_info->SetString("osVersion", - chromeos::version_loader::GetVersion( - chromeos::version_loader::VERSION_FULL)); - version_info->SetString("arcVersion", - chromeos::version_loader::GetARCVersion()); - version_info->SetString("osFirmware", - chromeos::version_loader::GetFirmware()); - - return version_info; -} - #endif // defined(OS_CHROMEOS) std::string UpdateStatusToString(VersionUpdater::Status status) { @@ -355,16 +340,6 @@ AboutHandler* AboutHandler::Create(content::WebUIDataSource* html_source, os_with_linux_license); html_source->AddBoolean("aboutEnterpriseManaged", IsEnterpriseManaged()); - base::Time build_time = base::SysInfo::GetLsbReleaseTime(); - base::string16 build_date = base::TimeFormatFriendlyDate(build_time); - html_source->AddString("aboutBuildDate", build_date); - - base::CommandLine::StringType command_line = - base::CommandLine::ForCurrentProcess()->GetCommandLineString(); - html_source->AddString("aboutCommandLine", command_line); - - html_source->AddString("aboutUserAgent", GetUserAgent()); - html_source->AddString("aboutJsEngineVersion", V8_VERSION_STRING); html_source->AddString("endOfLifeMessage", l10n_util::GetStringFUTF16( IDS_EOL_NOTIFICATION_EOL, ui::GetChromeOSDeviceName())); @@ -404,9 +379,6 @@ void AboutHandler::RegisterMessages() { "requestUpdateOverCellular", base::BindRepeating(&AboutHandler::HandleRequestUpdateOverCellular, base::Unretained(this))); - web_ui()->RegisterMessageCallback( - "getVersionInfo", base::BindRepeating(&AboutHandler::HandleGetVersionInfo, - base::Unretained(this))); web_ui()->RegisterMessageCallback( "getRegulatoryInfo", base::BindRepeating(&AboutHandler::HandleGetRegulatoryInfo, @@ -419,8 +391,8 @@ void AboutHandler::RegisterMessages() { base::BindRepeating(&AboutHandler::HandleRefreshTPMFirmwareUpdateStatus, base::Unretained(this))); web_ui()->RegisterMessageCallback( - "getHasEndOfLife", - base::BindRepeating(&AboutHandler::HandleGetHasEndOfLife, + "getEndOfLifeInfo", + base::BindRepeating(&AboutHandler::HandleGetEndOfLifeInfo, base::Unretained(this))); web_ui()->RegisterMessageCallback( "getEnabledReleaseNotes", @@ -600,25 +572,6 @@ void AboutHandler::HandleSetChannel(const base::ListValue* args) { } } -void AboutHandler::HandleGetVersionInfo(const base::ListValue* args) { - CHECK_EQ(1U, args->GetSize()); - std::string callback_id; - CHECK(args->GetString(0, &callback_id)); - - base::PostTaskAndReplyWithResult( - FROM_HERE, - {base::ThreadPool(), base::MayBlock(), base::TaskPriority::USER_VISIBLE}, - base::Bind(&GetVersionInfo), - base::Bind(&AboutHandler::OnGetVersionInfoReady, - weak_factory_.GetWeakPtr(), callback_id)); -} - -void AboutHandler::OnGetVersionInfoReady( - std::string callback_id, - std::unique_ptr version_info) { - ResolveJavascriptCallback(base::Value(callback_id), *version_info); -} - void AboutHandler::HandleGetRegulatoryInfo(const base::ListValue* args) { CHECK_EQ(1U, args->GetSize()); std::string callback_id; @@ -704,22 +657,31 @@ void AboutHandler::RefreshTPMFirmwareUpdateStatus( FireWebUIListener("tpm-firmware-update-status-changed", *event); } -void AboutHandler::HandleGetHasEndOfLife(const base::ListValue* args) { +void AboutHandler::HandleGetEndOfLifeInfo(const base::ListValue* args) { CHECK_EQ(1U, args->GetSize()); std::string callback_id; CHECK(args->GetString(0, &callback_id)); - version_updater_->GetEolStatus( - base::BindOnce(&AboutHandler::OnGetEndOfLifeStatus, - weak_factory_.GetWeakPtr(), callback_id)); -} - -void AboutHandler::OnGetEndOfLifeStatus(std::string callback_id, - update_engine::EndOfLifeStatus status) { - // Check for EndOfLifeStatus::kEol only because - // EndOfLifeStatus::kSecurityOnly state is no longer supported. - ResolveJavascriptCallback( - base::Value(callback_id), - base::Value(status == update_engine::EndOfLifeStatus::kEol)); + version_updater_->GetEolInfo(base::BindOnce(&AboutHandler::OnGetEndOfLifeInfo, + weak_factory_.GetWeakPtr(), + callback_id)); +} + +void AboutHandler::OnGetEndOfLifeInfo( + std::string callback_id, + chromeos::UpdateEngineClient::EolInfo eol_info) { + base::Value response(base::Value::Type::DICTIONARY); + if (!eol_info.eol_date.is_null()) { + response.SetBoolKey("hasEndOfLife", eol_info.eol_date <= base::Time::Now()); + response.SetStringKey("aboutPageEndOfLifeMessage", + l10n_util::GetStringFUTF16( + IDS_SETTINGS_ABOUT_PAGE_END_OF_LIFE_MESSAGE, + base::TimeFormatMonthAndYear(eol_info.eol_date), + base::ASCIIToUTF16(chrome::kEolNotificationURL))); + } else { + response.SetBoolKey("hasEndOfLife", false); + response.SetStringKey("aboutPageEndOfLifeMessage", ""); + } + ResolveJavascriptCallback(base::Value(callback_id), response); } #endif // defined(OS_CHROMEOS) diff --git a/chromium/chrome/browser/ui/webui/settings/about_handler.h b/chromium/chrome/browser/ui/webui/settings/about_handler.h index 0c9d0b82c4e..679bad2fa37 100644 --- a/chromium/chrome/browser/ui/webui/settings/about_handler.h +++ b/chromium/chrome/browser/ui/webui/settings/about_handler.h @@ -25,7 +25,6 @@ #endif // defined(OS_CHROMEOS) namespace base { -class DictionaryValue; class FilePath; class ListValue; } @@ -100,12 +99,6 @@ class AboutHandler : public settings::SettingsPageUIHandler, // Sets the release track version. void HandleSetChannel(const base::ListValue* args); - // Retrieves OS, ARC and firmware versions. - void HandleGetVersionInfo(const base::ListValue* args); - void OnGetVersionInfoReady( - std::string callback_id, - std::unique_ptr version_info); - // Retrieves combined channel info. void HandleGetChannelInfo(const base::ListValue* args); // Callbacks for version_updater_->GetChannel calls. @@ -162,15 +155,15 @@ class AboutHandler : public settings::SettingsPageUIHandler, const base::FilePath& label_dir_path, const std::string& text); - // Retrieves device end of life status. - // Will asynchronously resolve the provided callback with a boolean - // indicating whether the device has reached end-of-life status (will no - // longer receive updates). - void HandleGetHasEndOfLife(const base::ListValue* args); + // Retrieves device End of Life information which contains the End of Life + // date. Will asynchronously resolve the provided callback with an object + // containing a boolean indicating whether the device has reached/passed End + // of Life, and an End Of Life description formatted with the month and year. + void HandleGetEndOfLifeInfo(const base::ListValue* args); - // Callbacks for version_updater_->GetEolStatus calls. - void OnGetEndOfLifeStatus(std::string callback_id, - update_engine::EndOfLifeStatus status); + // Callbacks for version_updater_->GetEolInfo calls. + void OnGetEndOfLifeInfo(std::string callback_id, + chromeos::UpdateEngineClient::EolInfo eol_info); #endif // Specialized instance of the VersionUpdater used to update the browser. diff --git a/chromium/chrome/browser/ui/webui/settings/browser_lifetime_handler.cc b/chromium/chrome/browser/ui/webui/settings/browser_lifetime_handler.cc index 64e4f292e47..8589141e89d 100644 --- a/chromium/chrome/browser/ui/webui/settings/browser_lifetime_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/browser_lifetime_handler.cc @@ -102,7 +102,7 @@ void BrowserLifetimeHandler::HandleSignOutAndRestart( void BrowserLifetimeHandler::HandleFactoryReset( const base::ListValue* args) { - const base::Value::ListStorage& args_list = args->GetList(); + base::span args_list = args->GetList(); CHECK_EQ(1U, args_list.size()); bool tpm_firmware_update_requested = args_list[0].GetBool(); diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/account_manager_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/account_manager_handler.cc index 3978c28d325..53cc34c898e 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/account_manager_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/account_manager_handler.cc @@ -204,7 +204,7 @@ void AccountManagerUIHandler::OnGetAccounts( if (IsSameAccount(account_key, device_account_id)) { device_account = std::move(account); } else { - accounts.GetList().push_back(std::move(account)); + accounts.Append(std::move(account)); } } diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/android_apps_handler.h b/chromium/chrome/browser/ui/webui/settings/chromeos/android_apps_handler.h index 3a7d0549e7d..db3d37534d2 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/android_apps_handler.h +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/android_apps_handler.h @@ -11,7 +11,7 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "base/scoped_observer.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h" #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h" diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/app_management/app_management_page_handler_factory.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/app_management/app_management_page_handler_factory.cc index 8b3abcc9b50..7a9cb175f5b 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/app_management/app_management_page_handler_factory.cc +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/app_management/app_management_page_handler_factory.cc @@ -11,6 +11,7 @@ #include "base/feature_list.h" #include "chrome/browser/apps/app_service/app_icon_source.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/webui/app_management/app_management.mojom.h" #include "chrome/browser/ui/webui/app_management/app_management_page_handler.h" #include "chrome/grit/browser_resources.h" #include "chrome/grit/chromium_strings.h" @@ -19,37 +20,29 @@ #include "content/public/browser/url_data_source.h" #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_data_source.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" #include "ui/base/resource/resource_bundle.h" AppManagementPageHandlerFactory::AppManagementPageHandlerFactory( Profile* profile) - : page_factory_binding_(this), profile_(profile) {} + : profile_(profile) {} AppManagementPageHandlerFactory::~AppManagementPageHandlerFactory() = default; void AppManagementPageHandlerFactory::Bind( - app_management::mojom::PageHandlerFactoryRequest request) { - if (page_factory_binding_.is_bound()) { - page_factory_binding_.Unbind(); - } + mojo::PendingReceiver receiver) { + page_factory_receiver_.reset(); - page_factory_binding_.Bind(std::move(request)); -} - -void AppManagementPageHandlerFactory::BindPageHandlerFactory( - app_management::mojom::PageHandlerFactoryRequest request) { - if (page_factory_binding_.is_bound()) { - page_factory_binding_.Unbind(); - } - - page_factory_binding_.Bind(std::move(request)); + page_factory_receiver_.Bind(std::move(receiver)); } void AppManagementPageHandlerFactory::CreatePageHandler( - app_management::mojom::PagePtr page, - app_management::mojom::PageHandlerRequest request) { + mojo::PendingRemote page, + mojo::PendingReceiver receiver) { DCHECK(page); page_handler_ = std::make_unique( - std::move(request), std::move(page), profile_); + std::move(receiver), std::move(page), profile_); } diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/app_management/app_management_page_handler_factory.h b/chromium/chrome/browser/ui/webui/settings/chromeos/app_management/app_management_page_handler_factory.h index 3779071f093..ca3d617e7b4 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/app_management/app_management_page_handler_factory.h +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/app_management/app_management_page_handler_factory.h @@ -9,7 +9,9 @@ #include "base/macros.h" #include "chrome/browser/ui/webui/app_management/app_management.mojom.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" class Profile; @@ -21,21 +23,20 @@ class AppManagementPageHandlerFactory explicit AppManagementPageHandlerFactory(Profile* profile); ~AppManagementPageHandlerFactory() override; - void Bind(app_management::mojom::PageHandlerFactoryRequest request); + void Bind(mojo::PendingReceiver + receiver); private: - void BindPageHandlerFactory( - app_management::mojom::PageHandlerFactoryRequest request); - // app_management::mojom::PageHandlerFactory: void CreatePageHandler( - app_management::mojom::PagePtr page, - app_management::mojom::PageHandlerRequest request) override; + mojo::PendingRemote page, + mojo::PendingReceiver receiver) + override; std::unique_ptr page_handler_; - mojo::Binding - page_factory_binding_; + mojo::Receiver + page_factory_receiver_{this}; Profile* profile_; diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/app_management/app_management_uma.h b/chromium/chrome/browser/ui/webui/settings/chromeos/app_management/app_management_uma.h new file mode 100644 index 00000000000..31d7515612e --- /dev/null +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/app_management/app_management_uma.h @@ -0,0 +1,31 @@ +// Copyright 2019 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_SETTINGS_CHROMEOS_APP_MANAGEMENT_APP_MANAGEMENT_UMA_H_ +#define CHROME_BROWSER_UI_WEBUI_SETTINGS_CHROMEOS_APP_MANAGEMENT_APP_MANAGEMENT_UMA_H_ + +// These are used in histograms, do not remove/renumber entries. If you're +// adding to this enum with the intention that it will be logged, update the +// AppManagementEntryPoint enum listing in +// tools/metrics/histograms/enums.xml. +enum class AppManagementEntryPoint { + kAppListContextMenuAppInfoArc = 0, + kAppListContextMenuAppInfoChromeApp = 1, + kAppListContextMenuAppInfoWebApp = 2, + kLauncherContextMenuAppInfoArc = 3, + kLauncherContextMenuAppInfoChromeApp = 4, + kLauncherContextMenuAppInfoWebApp = 5, + kAppManagementMainViewArc = 6, + kAppManagementMainViewChromeApp = 7, + kAppManagementMainViewWebApp = 8, + kOsSettingsMainPage = 9, + kMaxValue = kOsSettingsMainPage, +}; + +// This histogram is also declared and used at chrome/browser/resources/ +// settings/chrome_os/os_apps_page/app_management_page/constants.js. +constexpr char kAppManagementEntryPointsHistogramName[] = + "AppManagement.EntryPoints"; + +#endif // CHROME_BROWSER_UI_WEBUI_SETTINGS_CHROMEOS_APP_MANAGEMENT_APP_MANAGEMENT_UMA_H_ diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/change_picture_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/change_picture_handler.cc index 2038031a39e..1c5b605ea28 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/change_picture_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/change_picture_handler.cc @@ -17,6 +17,7 @@ #include "base/stl_util.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" +#include "base/task/post_task.h" #include "base/values.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/chromeos/accessibility/accessibility_manager.h" @@ -84,9 +85,7 @@ const char kProfileDownloadReason[] = "Preferences"; } // namespace ChangePictureHandler::ChangePictureHandler() - : previous_image_index_(user_manager::User::USER_IMAGE_INVALID), - user_manager_observer_(this), - camera_observer_(this) { + : previous_image_index_(user_manager::User::USER_IMAGE_INVALID) { ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); audio::SoundsManager* manager = audio::SoundsManager::Get(); manager->Initialize(SOUND_OBJECT_DELETE, @@ -225,11 +224,17 @@ void ChangePictureHandler::SendSelectedImage() { user->has_image_bytes()) { previous_image_bytes_ = user->image_bytes(); SendOldImage(webui::GetPngDataUrl(previous_image_bytes_->front(), - previous_image_bytes_->size()), - -1); + previous_image_bytes_->size())); } else { previous_image_bytes_ = nullptr; - SendOldImage(webui::GetBitmapDataUrl(*previous_image_.bitmap()), -1); + DCHECK(previous_image_.IsThreadSafe()); + // Post a task because GetBitmapDataUrl does PNG encoding, which is + // slow for large images. + base::PostTaskAndReplyWithResult( + FROM_HERE, {base::ThreadPool(), base::TaskPriority::USER_BLOCKING}, + base::BindOnce(&webui::GetBitmapDataUrl, *previous_image_.bitmap()), + base::BindOnce(&ChangePictureHandler::SendOldImage, + weak_ptr_factory_.GetWeakPtr())); } break; } @@ -250,7 +255,7 @@ void ChangePictureHandler::SendSelectedImage() { previous_image_ = user->GetImage(); previous_image_bytes_ = nullptr; previous_image_format_ = user_manager::UserImage::FORMAT_UNKNOWN; - SendOldImage( + SendOldImageWithIndex( default_user_image::GetDefaultImageUrl(previous_image_index_), previous_image_index_); } @@ -277,11 +282,15 @@ void ChangePictureHandler::UpdateProfileImage() { user_image_manager->DownloadProfileImage(kProfileDownloadReason); } -void ChangePictureHandler::SendOldImage(const std::string& image_url, - int image_index) { +void ChangePictureHandler::SendOldImage(std::string&& image_url) { + SendOldImageWithIndex(std::move(image_url), -1); +} + +void ChangePictureHandler::SendOldImageWithIndex(std::string&& image_url, + int image_index) { base::DictionaryValue result; - result.SetString("url", image_url); - result.SetInteger("index", image_index); + result.SetStringPath("url", std::move(image_url)); + result.SetIntPath("index", image_index); FireWebUIListener("old-image-changed", result); } diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/change_picture_handler.h b/chromium/chrome/browser/ui/webui/settings/chromeos/change_picture_handler.h index ab0e18342c0..a3bb95d292e 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/change_picture_handler.h +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/change_picture_handler.h @@ -6,6 +6,7 @@ #define CHROME_BROWSER_UI_WEBUI_SETTINGS_CHROMEOS_CHANGE_PICTURE_HANDLER_H_ #include "base/macros.h" +#include "base/memory/weak_ptr.h" #include "base/scoped_observer.h" #include "chrome/browser/chromeos/camera_presence_notifier.h" #include "chrome/browser/image_decoder.h" @@ -60,11 +61,14 @@ class ChangePictureHandler : public ::settings::SettingsPageUIHandler, // if any, on the page. Shouldn't be called before |SendProfileImage|. void UpdateProfileImage(); + // Sends the previous user image to the page. + void SendOldImage(std::string&& image_url); + // Sends the previous user image to the page. Also sends |image_index| which // is either the index of the previous user image (if it was from an older // default image set) or -1 otherwise. This allows the WebUI to show credits // for older default images. - void SendOldImage(const std::string& image_url, int image_index); + void SendOldImageWithIndex(std::string&& image_url, int image_index); // Starts camera presence check. void CheckCameraPresence(); @@ -135,9 +139,12 @@ class ChangePictureHandler : public ::settings::SettingsPageUIHandler, // Data for |user_photo_|. scoped_refptr user_photo_data_; - ScopedObserver - user_manager_observer_; - ScopedObserver camera_observer_; + ScopedObserver + user_manager_observer_{this}; + ScopedObserver + camera_observer_{this}; + + base::WeakPtrFactory weak_ptr_factory_{this}; DISALLOW_COPY_AND_ASSIGN(ChangePictureHandler); }; diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/crostini_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/crostini_handler.cc index c548d8996f3..2a4d10fed51 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/crostini_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/crostini_handler.cc @@ -154,7 +154,7 @@ base::ListValue UsbDevicesToListValue( const bool shared_in_crostini = device.vm_sharing_info[crostini::kCrostiniDefaultVmName].shared; device_info.SetKey("shared", base::Value(shared_in_crostini)); - usb_devices_list.GetList().push_back(std::move(device_info)); + usb_devices_list.Append(std::move(device_info)); } return usb_devices_list; } diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc index 2f4c1749e9a..ce238a44a78 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc @@ -36,7 +36,7 @@ #include "chrome/common/chrome_paths.h" #include "chrome/common/pref_names.h" #include "chromeos/dbus/dbus_thread_manager.h" -#include "chromeos/dbus/debug_daemon_client.h" +#include "chromeos/dbus/debug_daemon/debug_daemon_client.h" #include "chromeos/printing/ppd_cache.h" #include "chromeos/printing/ppd_line_reader.h" #include "chromeos/printing/ppd_provider.h" @@ -75,8 +75,15 @@ void OnRemovedPrinter(const Printer::PrinterProtocol& protocol, bool success) { } // Log if the IPP attributes request was succesful. -void RecordIppQuerySuccess(bool success) { - UMA_HISTOGRAM_BOOLEAN("Printing.CUPS.IppAttributesSuccess", success); +void RecordIppQueryResult(const PrinterQueryResult& result) { + bool reachable = (result != PrinterQueryResult::UNREACHABLE); + UMA_HISTOGRAM_BOOLEAN("Printing.CUPS.IppDeviceReachable", reachable); + + if (reachable) { + // Only record whether the query was successful if we reach the printer. + bool query_success = (result == PrinterQueryResult::SUCCESS); + UMA_HISTOGRAM_BOOLEAN("Printing.CUPS.IppAttributesSuccess", query_success); + } } // Returns true if |printer_uri| is an IPP uri. @@ -116,7 +123,7 @@ base::Value BuildCupsPrintersList(const std::vector& printers) { for (const Printer& printer : printers) { // Some of these printers could be invalid but we want to allow the user // to edit them. crbug.com/778383 - printers_list.GetList().push_back( + printers_list.Append( base::Value::FromUniquePtrValue(GetCupsPrinterInfo(printer))); } @@ -491,9 +498,9 @@ void CupsPrintersHandler::OnAutoconfQueriedDiscovered( const std::string& make_and_model, const std::vector& document_formats, bool ipp_everywhere) { - const bool success = result == PrinterQueryResult::SUCCESS; - RecordIppQuerySuccess(success); + RecordIppQueryResult(result); + const bool success = result == PrinterQueryResult::SUCCESS; if (success) { // If we queried a valid make and model, use it. The mDNS record isn't // guaranteed to have it. However, don't overwrite it if the printer @@ -537,8 +544,8 @@ void CupsPrintersHandler::OnAutoconfQueried( const std::string& make_and_model, const std::vector& document_formats, bool ipp_everywhere) { + RecordIppQueryResult(result); const bool success = result == PrinterQueryResult::SUCCESS; - RecordIppQuerySuccess(success); if (result == PrinterQueryResult::UNREACHABLE) { PRINTER_LOG(DEBUG) << "Could not reach printer"; @@ -966,6 +973,7 @@ void CupsPrintersHandler::VerifyPpdContents(const base::FilePath& path, void CupsPrintersHandler::HandleStartDiscovery(const base::ListValue* args) { PRINTER_LOG(DEBUG) << "Start printer discovery"; + AllowJavascript(); discovery_active_ = true; OnPrintersChanged(PrinterClass::kAutomatic, printers_manager_->GetPrinters(PrinterClass::kAutomatic)); diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler_unittest.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler_unittest.cc index c9c52df5e53..e861529292c 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler_unittest.cc +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler_unittest.cc @@ -12,7 +12,7 @@ #include "chrome/browser/chromeos/printing/printing_stubs.h" #include "chrome/test/base/testing_profile.h" #include "chromeos/dbus/dbus_thread_manager.h" -#include "chromeos/dbus/debug_daemon_client.h" +#include "chromeos/dbus/debug_daemon/debug_daemon_client.h" #include "content/public/test/browser_task_environment.h" #include "content/public/test/test_web_ui.h" #include "testing/gtest/include/gtest/gtest.h" diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/date_time_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/date_time_handler.cc index e2de1a94c72..59656e6e848 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/date_time_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/date_time_handler.cc @@ -12,6 +12,7 @@ #include "base/time/time.h" #include "base/values.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/browser_process_platform_part.h" #include "chrome/browser/chromeos/child_accounts/parent_access_code/parent_access_service.h" #include "chrome/browser/chromeos/set_time_dialog.h" #include "chrome/browser/chromeos/system/timezone_resolver_manager.h" diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/device_keyboard_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/device_keyboard_handler.cc index c38687e6415..ee16a539c7b 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/device_keyboard_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/device_keyboard_handler.cc @@ -16,7 +16,6 @@ #include "services/service_manager/public/cpp/connector.h" #include "ui/chromeos/events/event_rewriter_chromeos.h" #include "ui/chromeos/events/keyboard_layout_util.h" -#include "ui/events/devices/device_data_manager.h" namespace { @@ -59,8 +58,7 @@ void KeyboardHandler::TestAPI::Initialize() { handler_->HandleInitialize(&args); } -KeyboardHandler::KeyboardHandler() : observer_(this) {} - +KeyboardHandler::KeyboardHandler() = default; KeyboardHandler::~KeyboardHandler() = default; void KeyboardHandler::RegisterMessages() { diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/device_keyboard_handler.h b/chromium/chrome/browser/ui/webui/settings/chromeos/device_keyboard_handler.h index 89e70bb56cf..ee6c480adc5 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/device_keyboard_handler.h +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/device_keyboard_handler.h @@ -8,16 +8,13 @@ #include "base/macros.h" #include "base/scoped_observer.h" #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h" +#include "ui/events/devices/device_data_manager.h" #include "ui/events/devices/input_device_event_observer.h" namespace base { class ListValue; } -namespace ui { -class DeviceDataManager; -} - namespace chromeos { namespace settings { @@ -71,7 +68,8 @@ class KeyboardHandler // Sends the UI a message about whether hardware keyboard are attached. void UpdateKeyboards(); - ScopedObserver observer_; + ScopedObserver observer_{ + this}; DISALLOW_COPY_AND_ASSIGN(KeyboardHandler); }; diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/device_power_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/device_power_handler.cc index 79feea807e9..1906a330cd5 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/device_power_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/device_power_handler.cc @@ -109,8 +109,7 @@ void PowerHandler::TestAPI::SetLidClosedBehavior( handler_->HandleSetLidClosedBehavior(&args); } -PowerHandler::PowerHandler(PrefService* prefs) - : prefs_(prefs), power_manager_client_observer_(this) {} +PowerHandler::PowerHandler(PrefService* prefs) : prefs_(prefs) {} PowerHandler::~PowerHandler() {} diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/device_power_handler.h b/chromium/chrome/browser/ui/webui/settings/chromeos/device_power_handler.h index a362dcd45be..d55a3944bd5 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/device_power_handler.h +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/device_power_handler.h @@ -114,8 +114,8 @@ class PowerHandler : public ::settings::SettingsPageUIHandler, // Used to watch power management prefs for changes so the UI can be notified. std::unique_ptr pref_change_registrar_; - ScopedObserver - power_manager_client_observer_; + ScopedObserver + power_manager_client_observer_{this}; // Last lid state received from powerd. PowerManagerClient::LidState lid_state_ = PowerManagerClient::LidState::OPEN; diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.cc index b9737dc9919..0eebb3c1814 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.cc @@ -25,6 +25,7 @@ #include "chrome/browser/browsing_data/browsing_data_local_storage_helper.h" #include "chrome/browser/browsing_data/browsing_data_service_worker_helper.h" #include "chrome/browser/chromeos/arc/arc_util.h" +#include "chrome/browser/chromeos/crostini/crostini_features.h" #include "chrome/browser/chromeos/crostini/crostini_manager.h" #include "chrome/browser/chromeos/crostini/crostini_util.h" #include "chrome/browser/chromeos/drive/file_system_util.h" @@ -42,7 +43,6 @@ #include "components/arc/arc_util.h" #include "components/arc/session/arc_bridge_service.h" #include "components/browsing_data/content/conditional_cache_counting_helper.h" -#include "components/drive/chromeos/file_system_interface.h" #include "components/user_manager/user_manager.h" #include "content/public/browser/browser_context.h" #include "content/public/browser/storage_partition.h" @@ -85,7 +85,6 @@ StorageHandler::StorageHandler(Profile* profile, browser_site_data_size_(-1), has_browser_site_data_size_(false), updating_downloads_size_(false), - updating_drive_cache_size_(false), updating_browsing_data_size_(false), updating_android_size_(false), updating_crostini_size_(false), @@ -127,10 +126,6 @@ void StorageHandler::RegisterMessages() { "openArcStorage", base::BindRepeating(&StorageHandler::HandleOpenArcStorage, base::Unretained(this))); - web_ui()->RegisterMessageCallback( - "clearDriveCache", - base::BindRepeating(&StorageHandler::HandleClearDriveCache, - base::Unretained(this))); web_ui()->RegisterMessageCallback( "updateExternalStorages", base::BindRepeating(&StorageHandler::HandleUpdateExternalStorages, @@ -183,7 +178,6 @@ void StorageHandler::HandleUpdateStorageInfo(const base::ListValue* args) { UpdateSizeStat(); UpdateDownloadsSize(); - UpdateDriveCacheSize(); UpdateBrowsingDataSize(); UpdateAndroidRunning(); UpdateAndroidSize(); @@ -207,25 +201,11 @@ void StorageHandler::HandleOpenArcStorage( arc_storage_manager->OpenPrivateVolumeSettings(); } -void StorageHandler::HandleClearDriveCache( - const base::ListValue* unused_args) { - drive::FileSystemInterface* const file_system = - drive::util::GetFileSystemByProfile(profile_); - file_system->FreeDiskSpaceIfNeededFor( - std::numeric_limits::max(), // Removes as much as possible. - base::Bind(&StorageHandler::OnClearDriveCacheDone, - weak_ptr_factory_.GetWeakPtr())); -} - void StorageHandler::HandleUpdateExternalStorages( const base::ListValue* unused_args) { UpdateExternalStorages(); } -void StorageHandler::OnClearDriveCacheDone(bool /*success*/) { - UpdateDriveCacheSize(); -} - void StorageHandler::UpdateSizeStat() { const base::FilePath downloads_path = file_manager::util::GetDownloadsFolderForProfile(profile_); @@ -282,28 +262,6 @@ void StorageHandler::OnGetDownloadsSize(int64_t size) { base::Value(ui::FormatBytes(size))); } -void StorageHandler::UpdateDriveCacheSize() { - drive::FileSystemInterface* const file_system = - drive::util::GetFileSystemByProfile(profile_); - if (!file_system) - return; - - if (updating_drive_cache_size_) - return; - updating_drive_cache_size_ = true; - - // Shows the item "Offline cache" and starts calculating size. - FireWebUIListener("storage-drive-enabled-changed", base::Value(true)); - file_system->CalculateCacheSize(base::Bind( - &StorageHandler::OnGetDriveCacheSize, weak_ptr_factory_.GetWeakPtr())); -} - -void StorageHandler::OnGetDriveCacheSize(int64_t size) { - updating_drive_cache_size_ = false; - FireWebUIListener("storage-drive-cache-size-changed", - base::Value(ui::FormatBytes(size)), base::Value(size > 0)); -} - void StorageHandler::UpdateBrowsingDataSize() { if (updating_browsing_data_size_) return; @@ -410,7 +368,7 @@ void StorageHandler::OnGetAndroidSize(bool succeeded, } void StorageHandler::UpdateCrostiniSize() { - if (!crostini::IsCrostiniEnabled(profile_)) { + if (!crostini::CrostiniFeatures::Get()->IsEnabled(profile_)) { return; } @@ -500,7 +458,7 @@ void StorageHandler::UpdateExternalStorages() { base::Value device(base::Value::Type::DICTIONARY); device.SetKey("uuid", base::Value(disk->fs_uuid())); device.SetKey("label", base::Value(label)); - devices.GetList().push_back(std::move(device)); + devices.Append(std::move(device)); } FireWebUIListener("onExternalStoragesUpdated", devices); } diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.h b/chromium/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.h index 32078b3aa56..4c901c9913a 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.h +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.h @@ -16,7 +16,7 @@ #include "base/optional.h" #include "base/scoped_observer.h" #include "chrome/browser/browsing_data/site_data_size_collector.h" -#include "chrome/browser/chromeos/arc/arc_session_manager.h" +#include "chrome/browser/chromeos/arc/session/arc_session_manager.h" #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h" #include "chromeos/dbus/cryptohome/rpc.pb.h" #include "chromeos/disks/disk_mount_manager.h" @@ -80,12 +80,8 @@ class StorageHandler void HandleUpdateStorageInfo(const base::ListValue* unused_args); void HandleOpenDownloads(const base::ListValue* unused_args); void HandleOpenArcStorage(const base::ListValue* unused_args); - void HandleClearDriveCache(const base::ListValue* unused_args); void HandleUpdateExternalStorages(const base::ListValue* unused_args); - // Callback called when clearing Drive cache is done. - void OnClearDriveCacheDone(bool success); - // Requests updating disk space information. void UpdateSizeStat(); @@ -98,12 +94,6 @@ class StorageHandler // Callback to update the UI about the size of Downloads directory. void OnGetDownloadsSize(int64_t size); - // Requests updating the size of Drive Cache. - void UpdateDriveCacheSize(); - - // Callback to update the UI about the size of Drive Cache. - void OnGetDriveCacheSize(int64_t size); - // Requests updating the size of browsing data. void UpdateBrowsingDataSize(); @@ -166,7 +156,6 @@ class StorageHandler // Flags indicating fetch operations for storage sizes are ongoing. bool updating_downloads_size_; - bool updating_drive_cache_size_; bool updating_browsing_data_size_; bool updating_android_size_; bool updating_crostini_size_; diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/device_stylus_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/device_stylus_handler.cc index 202fcf856f8..ad7f2ee26ba 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/device_stylus_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/device_stylus_handler.cc @@ -14,7 +14,6 @@ #include "chrome/browser/chromeos/arc/arc_util.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/app_list/arc/arc_app_utils.h" -#include "ui/events/devices/device_data_manager.h" namespace chromeos { namespace settings { @@ -29,8 +28,7 @@ constexpr char kAppLockScreenSupportKey[] = "lockScreenSupport"; } // namespace -StylusHandler::StylusHandler() : note_observer_(this), input_observer_(this) {} - +StylusHandler::StylusHandler() = default; StylusHandler::~StylusHandler() = default; void StylusHandler::RegisterMessages() { diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/device_stylus_handler.h b/chromium/chrome/browser/ui/webui/settings/chromeos/device_stylus_handler.h index a1be49b471f..c0e2429de10 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/device_stylus_handler.h +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/device_stylus_handler.h @@ -12,16 +12,13 @@ #include "base/scoped_observer.h" #include "chrome/browser/chromeos/note_taking_helper.h" #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h" +#include "ui/events/devices/device_data_manager.h" #include "ui/events/devices/input_device_event_observer.h" namespace base { class ListValue; } -namespace ui { -class DeviceDataManager; -} - namespace chromeos { namespace settings { @@ -63,9 +60,10 @@ class StylusHandler : public ::settings::SettingsPageUIHandler, std::set note_taking_app_ids_; // Observer registration. - ScopedObserver note_observer_; + ScopedObserver note_observer_{ + this}; ScopedObserver - input_observer_; + input_observer_{this}; DISALLOW_COPY_AND_ASSIGN(StylusHandler); }; diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/fingerprint_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/fingerprint_handler.cc index 577dc77a406..601eeaf2435 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/fingerprint_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/fingerprint_handler.cc @@ -20,7 +20,6 @@ #include "chrome/common/pref_names.h" #include "chrome/grit/generated_resources.h" #include "components/prefs/pref_service.h" -#include "components/session_manager/core/session_manager.h" #include "content/public/browser/system_connector.h" #include "services/device/public/mojom/constants.mojom.h" #include "services/service_manager/public/cpp/connector.h" @@ -57,10 +56,9 @@ std::unique_ptr GetFingerprintsInfo( } // namespace -FingerprintHandler::FingerprintHandler(Profile* profile) - : profile_(profile), binding_(this), session_observer_(this) { - content::GetSystemConnector()->BindInterface(device::mojom::kServiceName, - &fp_service_); +FingerprintHandler::FingerprintHandler(Profile* profile) : profile_(profile) { + content::GetSystemConnector()->Connect( + device::mojom::kServiceName, fp_service_.BindNewPipeAndPassReceiver()); user_id_ = ProfileHelper::Get()->GetUserIdHashFromProfile(profile); } @@ -111,14 +109,12 @@ void FingerprintHandler::OnJavascriptAllowed() { if (SessionManager::Get()) session_observer_.Add(SessionManager::Get()); - device::mojom::FingerprintObserverPtr observer; - binding_.Bind(mojo::MakeRequest(&observer)); - fp_service_->AddFingerprintObserver(std::move(observer)); + fp_service_->AddFingerprintObserver(receiver_.BindNewPipeAndPassRemote()); } void FingerprintHandler::OnJavascriptDisallowed() { session_observer_.RemoveAll(); - binding_.Close(); + receiver_.reset(); } void FingerprintHandler::OnRestarted() {} diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/fingerprint_handler.h b/chromium/chrome/browser/ui/webui/settings/chromeos/fingerprint_handler.h index 766d8842ee6..97c85fd65d9 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/fingerprint_handler.h +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/fingerprint_handler.h @@ -8,8 +8,10 @@ #include "base/containers/flat_map.h" #include "base/scoped_observer.h" #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h" +#include "components/session_manager/core/session_manager.h" #include "components/session_manager/core/session_manager_observer.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/remote.h" #include "services/device/public/mojom/fingerprint.mojom.h" class Profile; @@ -18,10 +20,6 @@ namespace base { class ListValue; } // namespace base -namespace session_manager { -class SessionManager; -} // namespace session_manager - namespace chromeos { namespace settings { @@ -79,11 +77,11 @@ class FingerprintHandler : public ::settings::SettingsPageUIHandler, std::vector fingerprints_paths_; std::string user_id_; - device::mojom::FingerprintPtr fp_service_; - mojo::Binding binding_; + mojo::Remote fp_service_; + mojo::Receiver receiver_{this}; ScopedObserver - session_observer_; + session_observer_{this}; base::WeakPtrFactory weak_ptr_factory_{this}; diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/internet_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/internet_handler.cc index 883457370ee..e75796ecd32 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/internet_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/internet_handler.cc @@ -213,7 +213,7 @@ void InternetHandler::SendGmsCoreNotificationsDisabledDeviceNames() { base::ListValue device_names_value; for (const auto& device_name : device_names_without_notifications_) - device_names_value.GetList().push_back(device_name->Clone()); + device_names_value.Append(device_name->Clone()); FireWebUIListener(kSendGmsCoreNotificationsDisabledDeviceNames, device_names_value); diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/kerberos_accounts_handler.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/kerberos_accounts_handler.cc index d6125af737b..f249f72f2ad 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/kerberos_accounts_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/kerberos_accounts_handler.cc @@ -21,9 +21,7 @@ namespace chromeos { namespace settings { -KerberosAccountsHandler::KerberosAccountsHandler() - : credentials_manager_observer_(this) {} - +KerberosAccountsHandler::KerberosAccountsHandler() = default; KerberosAccountsHandler::~KerberosAccountsHandler() = default; void KerberosAccountsHandler::RegisterMessages() { @@ -105,7 +103,7 @@ void KerberosAccountsHandler::OnListAccounts( account_dict.SetBoolean("passwordWasRemembered", account.password_was_remembered()); account_dict.SetString("pic", ticket_icon); - accounts.GetList().push_back(std::move(account_dict)); + accounts.Append(std::move(account_dict)); } ResolveJavascriptCallback(base::Value(callback_id), std::move(accounts)); diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/kerberos_accounts_handler.h b/chromium/chrome/browser/ui/webui/settings/chromeos/kerberos_accounts_handler.h index 296cf45bb46..00dfa0cf7bc 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/kerberos_accounts_handler.h +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/kerberos_accounts_handler.h @@ -77,7 +77,7 @@ class KerberosAccountsHandler : public ::settings::SettingsPageUIHandler, // This class keeps track of that and removes this instance on destruction. ScopedObserver - credentials_manager_observer_; + credentials_manager_observer_{this}; base::WeakPtrFactory weak_factory_{this}; diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/os_settings_ui.cc b/chromium/chrome/browser/ui/webui/settings/chromeos/os_settings_ui.cc index a0fd1fe87ff..ca0d04c1df6 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/os_settings_ui.cc +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/os_settings_ui.cc @@ -16,6 +16,7 @@ #include "base/bind.h" #include "base/feature_list.h" #include "build/build_config.h" +#include "chrome/browser/ui/web_applications/system_web_app_ui_utils.h" #include "chrome/browser/ui/webui/app_management/app_management.mojom.h" #include "chrome/browser/ui/webui/app_management/app_management_page_handler.h" #include "chrome/browser/ui/webui/managed_ui_handler.h" @@ -28,6 +29,7 @@ #include "chrome/browser/ui/webui/settings/chromeos/wallpaper_handler.h" #include "chrome/browser/ui/webui/settings/downloads_handler.h" #include "chrome/browser/ui/webui/settings/extension_control_handler.h" +#include "chrome/browser/ui/webui/settings/font_handler.h" #include "chrome/browser/ui/webui/settings/languages_handler.h" #include "chrome/browser/ui/webui/settings/people_handler.h" #include "chrome/browser/ui/webui/settings/profile_info_handler.h" @@ -49,6 +51,7 @@ #include "components/password_manager/core/common/password_manager_features.h" #include "components/unified_consent/feature.h" #include "content/public/browser/web_ui_data_source.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" namespace chromeos { namespace settings { @@ -84,6 +87,7 @@ OSSettingsUI::OSSettingsUI(content::WebUI* web_ui) std::make_unique<::settings::DownloadsHandler>(profile)); AddSettingsPageUIHandler( std::make_unique<::settings::ExtensionControlHandler>()); + AddSettingsPageUIHandler(std::make_unique<::settings::FontHandler>(web_ui)); AddSettingsPageUIHandler( std::make_unique<::settings::LanguagesHandler>(web_ui)); AddSettingsPageUIHandler( @@ -102,8 +106,8 @@ OSSettingsUI::OSSettingsUI(content::WebUI* web_ui) html_source->AddBoolean("unifiedConsentEnabled", unified_consent::IsUnifiedConsentFeatureEnabled()); - html_source->AddBoolean( - "showApps", base::FeatureList::IsEnabled(features::kAppManagement)); + html_source->AddBoolean("showAppManagement", base::FeatureList::IsEnabled( + features::kAppManagement)); #if defined(OS_CHROMEOS) html_source->AddBoolean( @@ -124,7 +128,8 @@ OSSettingsUI::OSSettingsUI(content::WebUI* web_ui) if (web_app::SystemWebAppManager::IsEnabled()) { html_source->AddResourcePath("icon-192.png", IDR_SETTINGS_LOGO_192); html_source->AddResourcePath("pwa.html", IDR_PWA_HTML); - html_source->AddResourcePath("manifest.json", IDR_OS_SETTINGS_MANIFEST); + web_app::SetManifestRequestFilter(html_source, IDR_OS_SETTINGS_MANIFEST, + IDS_SETTINGS_SETTINGS); } #if BUILDFLAG(OPTIMIZE_WEBUI) @@ -154,7 +159,8 @@ OSSettingsUI::OSSettingsUI(content::WebUI* web_ui) html_source->AddResourcePath("app-management/image_info.mojom-lite.js", IDR_APP_MANAGEMENT_IMAGE_INFO_MOJO_LITE_JS); - ::settings::AddLocalizedStrings(html_source, profile); + ::settings::AddLocalizedStrings(html_source, profile, + web_ui->GetWebContents()); auto plural_string_handler = std::make_unique(); plural_string_handler->AddLocalizedString("profileLabel", @@ -183,18 +189,18 @@ void OSSettingsUI::AddSettingsPageUIHandler( } void OSSettingsUI::BindCrosNetworkConfig( - network_config::mojom::CrosNetworkConfigRequest request) { - ash::GetNetworkConfigService(std::move(request)); + mojo::PendingReceiver receiver) { + ash::GetNetworkConfigService(std::move(receiver)); } void OSSettingsUI::BindAppManagementPageHandlerFactory( - app_management::mojom::PageHandlerFactoryRequest request) { + mojo::PendingReceiver receiver) { if (!app_management_page_handler_factory_) { app_management_page_handler_factory_ = std::make_unique( Profile::FromWebUI(web_ui())); } - app_management_page_handler_factory_->Bind(std::move(request)); + app_management_page_handler_factory_->Bind(std::move(receiver)); } } // namespace settings diff --git a/chromium/chrome/browser/ui/webui/settings/chromeos/os_settings_ui.h b/chromium/chrome/browser/ui/webui/settings/chromeos/os_settings_ui.h index 63131cfb6f6..ff325c20bc3 100644 --- a/chromium/chrome/browser/ui/webui/settings/chromeos/os_settings_ui.h +++ b/chromium/chrome/browser/ui/webui/settings/chromeos/os_settings_ui.h @@ -12,6 +12,7 @@ #include "chrome/browser/ui/webui/settings/chromeos/app_management/app_management_page_handler_factory.h" #include "chrome/browser/ui/webui/webui_load_timer.h" #include "chromeos/services/network_config/public/mojom/cros_network_config.mojom-forward.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "ui/webui/mojo_web_ui_controller.h" namespace content { @@ -31,9 +32,10 @@ class OSSettingsUI : public ui::MojoWebUIController { void AddSettingsPageUIHandler( std::unique_ptr handler); void BindCrosNetworkConfig( - network_config::mojom::CrosNetworkConfigRequest request); + mojo::PendingReceiver receiver); void BindAppManagementPageHandlerFactory( - app_management::mojom::PageHandlerFactoryRequest request); + mojo::PendingReceiver + receiver); WebuiLoadTimer webui_load_timer_; diff --git a/chromium/chrome/browser/ui/webui/settings/font_handler.cc b/chromium/chrome/browser/ui/webui/settings/font_handler.cc index 2c25ebed0da..062eb45fb0f 100644 --- a/chromium/chrome/browser/ui/webui/settings/font_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/font_handler.cc @@ -21,7 +21,6 @@ #include "components/prefs/pref_service.h" #include "content/public/browser/font_list_async.h" #include "content/public/browser/web_ui.h" -#include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_system.h" #include "extensions/common/extension_urls.h" @@ -39,7 +38,7 @@ const char kAdvancedFontSettingsExtensionId[] = namespace settings { FontHandler::FontHandler(content::WebUI* webui) - : extension_registry_observer_(this), profile_(Profile::FromWebUI(webui)) { + : profile_(Profile::FromWebUI(webui)) { #if defined(OS_MACOSX) // Perform validation for saved fonts. settings_utils::ValidateSavedFonts(profile_->GetPrefs()); @@ -103,7 +102,9 @@ const extensions::Extension* FontHandler::GetAdvancedFontSettingsExtension() { extensions::ExtensionSystem::Get(profile_)->extension_service(); if (!service->IsExtensionEnabled(kAdvancedFontSettingsExtensionId)) return nullptr; - return service->GetInstalledExtension(kAdvancedFontSettingsExtensionId); + extensions::ExtensionRegistry* registry = + extensions::ExtensionRegistry::Get(profile_); + return registry->GetInstalledExtension(kAdvancedFontSettingsExtensionId); } void FontHandler::NotifyAdvancedFontSettingsAvailability() { diff --git a/chromium/chrome/browser/ui/webui/settings/font_handler.h b/chromium/chrome/browser/ui/webui/settings/font_handler.h index f88659d654a..3c0a284ca9e 100644 --- a/chromium/chrome/browser/ui/webui/settings/font_handler.h +++ b/chromium/chrome/browser/ui/webui/settings/font_handler.h @@ -12,6 +12,7 @@ #include "base/memory/weak_ptr.h" #include "base/scoped_observer.h" #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h" +#include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_registry_observer.h" namespace base { @@ -24,7 +25,6 @@ class WebUI; namespace extensions { class Extension; -class ExtensionRegistry; } class Profile; @@ -71,7 +71,7 @@ class FontHandler : public SettingsPageUIHandler, ScopedObserver - extension_registry_observer_; + extension_registry_observer_{this}; Profile* profile_; // Weak pointer. diff --git a/chromium/chrome/browser/ui/webui/settings/incompatible_applications_handler_win.cc b/chromium/chrome/browser/ui/webui/settings/incompatible_applications_handler_win.cc index 79d5c9c5078..d5e0e06c6ca 100644 --- a/chromium/chrome/browser/ui/webui/settings/incompatible_applications_handler_win.cc +++ b/chromium/chrome/browser/ui/webui/settings/incompatible_applications_handler_win.cc @@ -106,7 +106,7 @@ void IncompatibleApplicationsHandler::HandleRequestIncompatibleApplicationsList( base::Value(application.blacklist_action->message_type())); dict.SetKey("url", base::Value(application.blacklist_action->message_url())); - application_list.GetList().push_back(std::move(dict)); + application_list.Append(std::move(dict)); } UMA_HISTOGRAM_COUNTS_100("IncompatibleApplicationsPage.NumApplications", diff --git a/chromium/chrome/browser/ui/webui/settings/people_handler.cc b/chromium/chrome/browser/ui/webui/settings/people_handler.cc index 5d7331dbf92..3ec355f0bd3 100644 --- a/chromium/chrome/browser/ui/webui/settings/people_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/people_handler.cc @@ -44,7 +44,6 @@ #include "components/strings/grit/components_strings.h" #include "components/sync/base/passphrase_enums.h" #include "components/sync/base/user_selectable_type.h" -#include "components/sync/driver/sync_service.h" #include "components/sync/driver/sync_service_utils.h" #include "components/sync/driver/sync_user_settings.h" #include "components/unified_consent/feature.h" @@ -204,24 +203,23 @@ base::string16 GetEnterPassphraseBody(syncer::PassphraseType passphrase_type, base::Time passphrase_time) { DCHECK(syncer::IsExplicitPassphrase(passphrase_type)); switch (passphrase_type) { - case syncer::PassphraseType::FROZEN_IMPLICIT_PASSPHRASE: + case syncer::PassphraseType::kFrozenImplicitPassphrase: if (passphrase_time.is_null()) { return GetStringUTF16(IDS_SYNC_ENTER_GOOGLE_PASSPHRASE_BODY); } return GetStringFUTF16(IDS_SYNC_ENTER_GOOGLE_PASSPHRASE_BODY_WITH_DATE, base::ASCIIToUTF16(chrome::kSyncErrorsHelpURL), base::TimeFormatShortDate(passphrase_time)); - case syncer::PassphraseType::CUSTOM_PASSPHRASE: + case syncer::PassphraseType::kCustomPassphrase: if (passphrase_time.is_null()) { return GetStringUTF16(IDS_SYNC_ENTER_PASSPHRASE_BODY); } return GetStringFUTF16(IDS_SYNC_ENTER_PASSPHRASE_BODY_WITH_DATE, base::ASCIIToUTF16(chrome::kSyncErrorsHelpURL), base::TimeFormatShortDate(passphrase_time)); - case syncer::PassphraseType::IMPLICIT_PASSPHRASE: - case syncer::PassphraseType::KEYSTORE_PASSPHRASE: - case syncer::PassphraseType::TRUSTED_VAULT_PASSPHRASE: - case syncer::PassphraseType::PASSPHRASE_TYPE_SIZE: + case syncer::PassphraseType::kImplicitPassphrase: + case syncer::PassphraseType::kKeystorePassphrase: + case syncer::PassphraseType::kTrustedVaultPassphrase: break; } NOTREACHED(); @@ -235,16 +233,15 @@ base::string16 GetFullEncryptionBody(syncer::PassphraseType passphrase_type, return GetStringUTF16(IDS_SYNC_FULL_ENCRYPTION_BODY_CUSTOM); } switch (passphrase_type) { - case syncer::PassphraseType::FROZEN_IMPLICIT_PASSPHRASE: + case syncer::PassphraseType::kFrozenImplicitPassphrase: return GetStringFUTF16(IDS_SYNC_FULL_ENCRYPTION_BODY_GOOGLE_WITH_DATE, base::TimeFormatShortDate(passphrase_time)); - case syncer::PassphraseType::CUSTOM_PASSPHRASE: + case syncer::PassphraseType::kCustomPassphrase: return GetStringFUTF16(IDS_SYNC_FULL_ENCRYPTION_BODY_CUSTOM_WITH_DATE, base::TimeFormatShortDate(passphrase_time)); - case syncer::PassphraseType::IMPLICIT_PASSPHRASE: - case syncer::PassphraseType::KEYSTORE_PASSPHRASE: - case syncer::PassphraseType::TRUSTED_VAULT_PASSPHRASE: - case syncer::PassphraseType::PASSPHRASE_TYPE_SIZE: + case syncer::PassphraseType::kImplicitPassphrase: + case syncer::PassphraseType::kKeystorePassphrase: + case syncer::PassphraseType::kTrustedVaultPassphrase: break; } NOTREACHED(); @@ -263,11 +260,7 @@ const char PeopleHandler::kDonePageStatus[] = "done"; const char PeopleHandler::kPassphraseFailedPageStatus[] = "passphraseFailed"; PeopleHandler::PeopleHandler(Profile* profile) - : profile_(profile), - configuring_sync_(false), - identity_manager_observer_(this), - sync_service_observer_(this) { -} + : profile_(profile), configuring_sync_(false) {} PeopleHandler::~PeopleHandler() { // Early exit if running unit tests (no actual WebUI is attached). @@ -626,8 +619,8 @@ void PeopleHandler::HandleSetEncryption(const base::ListValue* args) { bool passphrase_failed = false; if (!configuration.passphrase.empty()) { // We call IsPassphraseRequired() here (instead of - // IsPassphraseRequiredForDecryption()) because the user may try to enter - // a passphrase even though no encrypted data types are enabled. + // IsPassphraseRequiredForPreferredDataTypes()) because the user may try to + // enter a passphrase even though no encrypted data types are enabled. if (service->GetUserSettings()->IsPassphraseRequired()) { // If we have pending keys, try to decrypt them with the provided // passphrase. We track if this succeeds or fails because a failed @@ -649,7 +642,7 @@ void PeopleHandler::HandleSetEncryption(const base::ListValue* args) { } if (passphrase_failed || - service->GetUserSettings()->IsPassphraseRequiredForDecryption()) { + service->GetUserSettings()->IsPassphraseRequiredForPreferredDataTypes()) { // If the user doesn't enter any passphrase, we won't call // SetDecryptionPassphrase() (passphrase_failed == false), but we still // want to display an error message to let the user know that their blank @@ -1104,8 +1097,8 @@ void PeopleHandler::PushSyncPrefs() { sync_user_settings->IsEncryptEverythingAllowed()); // We call IsPassphraseRequired() here, instead of calling - // IsPassphraseRequiredForDecryption(), because we want to show the passphrase - // UI even if no encrypted data types are enabled. + // IsPassphraseRequiredForPreferredDataTypes(), because we want to show the + // passphrase UI even if no encrypted data types are enabled. args.SetBoolean("passphraseRequired", sync_user_settings->IsPassphraseRequired()); @@ -1156,7 +1149,8 @@ void PeopleHandler::MarkFirstSetupComplete() { // We're done configuring, so notify SyncService that it is OK to start // syncing. - service->GetUserSettings()->SetFirstSetupComplete(); + service->GetUserSettings()->SetFirstSetupComplete( + syncer::SyncFirstSetupCompleteSource::ADVANCED_FLOW_CONFIRM); FireWebUIListener("sync-settings-saved"); } diff --git a/chromium/chrome/browser/ui/webui/settings/people_handler.h b/chromium/chrome/browser/ui/webui/settings/people_handler.h index 51e9195e619..e60362bf93b 100644 --- a/chromium/chrome/browser/ui/webui/settings/people_handler.h +++ b/chromium/chrome/browser/ui/webui/settings/people_handler.h @@ -22,6 +22,7 @@ #include "components/prefs/pref_change_registrar.h" #include "components/signin/public/base/signin_buildflags.h" #include "components/signin/public/identity_manager/identity_manager.h" +#include "components/sync/driver/sync_service.h" #include "components/sync/driver/sync_service_observer.h" #include "content/public/browser/web_contents_observer.h" @@ -36,7 +37,6 @@ enum class AccessPoint; } // namespace signin_metrics namespace syncer { -class SyncService; class SyncSetupInProgressHandle; } // namespace syncer @@ -262,9 +262,10 @@ class PeopleHandler : public SettingsPageUIHandler, PrefChangeRegistrar profile_pref_registrar_; // Manages observer lifetimes. - ScopedObserver - identity_manager_observer_; - ScopedObserver sync_service_observer_; + ScopedObserver + identity_manager_observer_{this}; + ScopedObserver + sync_service_observer_{this}; #if defined(OS_CHROMEOS) base::WeakPtrFactory weak_factory_{this}; diff --git a/chromium/chrome/browser/ui/webui/settings/people_handler_unittest.cc b/chromium/chrome/browser/ui/webui/settings/people_handler_unittest.cc index 1a327ed2a6f..833ac7b4d4a 100644 --- a/chromium/chrome/browser/ui/webui/settings/people_handler_unittest.cc +++ b/chromium/chrome/browser/ui/webui/settings/people_handler_unittest.cc @@ -240,7 +240,7 @@ class PeopleHandlerTest : public ChromeRenderViewHostTestHarness { .WillByDefault(Return(true)); ON_CALL(*mock_sync_service_->GetMockUserSettings(), GetPassphraseType()) - .WillByDefault(Return(syncer::PassphraseType::IMPLICIT_PASSPHRASE)); + .WillByDefault(Return(syncer::PassphraseType::kImplicitPassphrase)); ON_CALL(*mock_sync_service_->GetMockUserSettings(), GetExplicitPassphraseTime()) .WillByDefault(Return(base::Time())); @@ -816,7 +816,7 @@ TEST_F(PeopleHandlerTest, TestSyncEverything) { list_args.AppendString(kTestCallbackId); list_args.AppendString(args); ON_CALL(*mock_sync_service_->GetMockUserSettings(), - IsPassphraseRequiredForDecryption()) + IsPassphraseRequiredForPreferredDataTypes()) .WillByDefault(Return(false)); ON_CALL(*mock_sync_service_->GetMockUserSettings(), IsPassphraseRequired()) .WillByDefault(Return(false)); @@ -835,7 +835,7 @@ TEST_F(PeopleHandlerTest, TestPassphraseStillRequired) { list_args.AppendString(kTestCallbackId); list_args.AppendString(args); ON_CALL(*mock_sync_service_->GetMockUserSettings(), - IsPassphraseRequiredForDecryption()) + IsPassphraseRequiredForPreferredDataTypes()) .WillByDefault(Return(true)); ON_CALL(*mock_sync_service_->GetMockUserSettings(), IsPassphraseRequired()) .WillByDefault(Return(true)); @@ -864,7 +864,7 @@ TEST_F(PeopleHandlerTest, EnterExistingFrozenImplicitPassword) { IsPassphraseRequired()) .WillOnce(Return(true)); ON_CALL(*mock_sync_service_->GetMockUserSettings(), - IsPassphraseRequiredForDecryption()) + IsPassphraseRequiredForPreferredDataTypes()) .WillByDefault(Return(false)); ON_CALL(*mock_sync_service_->GetMockUserSettings(), IsUsingSecondaryPassphrase()) @@ -890,7 +890,7 @@ TEST_F(PeopleHandlerTest, SetNewCustomPassphrase) { IsEncryptEverythingAllowed()) .WillByDefault(Return(true)); ON_CALL(*mock_sync_service_->GetMockUserSettings(), - IsPassphraseRequiredForDecryption()) + IsPassphraseRequiredForPreferredDataTypes()) .WillByDefault(Return(false)); ON_CALL(*mock_sync_service_->GetMockUserSettings(), IsPassphraseRequired()) .WillByDefault(Return(false)); @@ -914,7 +914,7 @@ TEST_F(PeopleHandlerTest, EnterWrongExistingPassphrase) { list_args.AppendString(kTestCallbackId); list_args.AppendString(args); ON_CALL(*mock_sync_service_->GetMockUserSettings(), - IsPassphraseRequiredForDecryption()) + IsPassphraseRequiredForPreferredDataTypes()) .WillByDefault(Return(true)); ON_CALL(*mock_sync_service_->GetMockUserSettings(), IsPassphraseRequired()) .WillByDefault(Return(true)); @@ -945,7 +945,7 @@ TEST_F(PeopleHandlerTest, EnterBlankExistingPassphrase) { list_args.AppendString(kTestCallbackId); list_args.AppendString(args); ON_CALL(*mock_sync_service_->GetMockUserSettings(), - IsPassphraseRequiredForDecryption()) + IsPassphraseRequiredForPreferredDataTypes()) .WillByDefault(Return(true)); ON_CALL(*mock_sync_service_->GetMockUserSettings(), IsPassphraseRequired()) .WillByDefault(Return(true)); @@ -976,7 +976,7 @@ TEST_F(PeopleHandlerTest, TestSyncIndividualTypes) { list_args.AppendString(kTestCallbackId); list_args.AppendString(args); ON_CALL(*mock_sync_service_->GetMockUserSettings(), - IsPassphraseRequiredForDecryption()) + IsPassphraseRequiredForPreferredDataTypes()) .WillByDefault(Return(false)); ON_CALL(*mock_sync_service_->GetMockUserSettings(), IsPassphraseRequired()) .WillByDefault(Return(false)); @@ -1001,7 +1001,7 @@ TEST_F(PeopleHandlerTest, TestSyncAllManually) { list_args.AppendString(kTestCallbackId); list_args.AppendString(args); ON_CALL(*mock_sync_service_->GetMockUserSettings(), - IsPassphraseRequiredForDecryption()) + IsPassphraseRequiredForPreferredDataTypes()) .WillByDefault(Return(false)); ON_CALL(*mock_sync_service_->GetMockUserSettings(), IsPassphraseRequired()) .WillByDefault(Return(false)); @@ -1171,8 +1171,7 @@ TEST_F(PeopleHandlerTest, ShowSetupOldGaiaPassphraseRequired) { ON_CALL(*mock_sync_service_->GetMockUserSettings(), IsPassphraseRequired()) .WillByDefault(Return(true)); ON_CALL(*mock_sync_service_->GetMockUserSettings(), GetPassphraseType()) - .WillByDefault( - Return(syncer::PassphraseType::FROZEN_IMPLICIT_PASSPHRASE)); + .WillByDefault(Return(syncer::PassphraseType::kFrozenImplicitPassphrase)); SetupInitializedSyncService(); SetDefaultExpectationsForConfigPage(); @@ -1188,7 +1187,7 @@ TEST_F(PeopleHandlerTest, ShowSetupCustomPassphraseRequired) { ON_CALL(*mock_sync_service_->GetMockUserSettings(), IsPassphraseRequired()) .WillByDefault(Return(true)); ON_CALL(*mock_sync_service_->GetMockUserSettings(), GetPassphraseType()) - .WillByDefault(Return(syncer::PassphraseType::CUSTOM_PASSPHRASE)); + .WillByDefault(Return(syncer::PassphraseType::kCustomPassphrase)); SetupInitializedSyncService(); SetDefaultExpectationsForConfigPage(); @@ -1241,7 +1240,7 @@ TEST_F(PeopleHandlerTest, ShowSetupEncryptAllDisallowed) { TEST_F(PeopleHandlerTest, TurnOnEncryptAllDisallowed) { ON_CALL(*mock_sync_service_->GetMockUserSettings(), - IsPassphraseRequiredForDecryption()) + IsPassphraseRequiredForPreferredDataTypes()) .WillByDefault(Return(false)); ON_CALL(*mock_sync_service_->GetMockUserSettings(), IsPassphraseRequired()) .WillByDefault(Return(false)); @@ -1309,8 +1308,9 @@ TEST_F(PeopleHandlerTest, DashboardClearWhileSettingsOpen_ConfirmSoon) { NotifySyncStateChanged(); }); EXPECT_CALL(*mock_sync_service_->GetMockUserSettings(), - SetFirstSetupComplete()) - .WillOnce([&]() { + SetFirstSetupComplete( + syncer::SyncFirstSetupCompleteSource::ADVANCED_FLOW_CONFIRM)) + .WillOnce([&](syncer::SyncFirstSetupCompleteSource) { ON_CALL(*mock_sync_service_->GetMockUserSettings(), IsFirstSetupComplete()) .WillByDefault(Return(true)); @@ -1318,7 +1318,7 @@ TEST_F(PeopleHandlerTest, DashboardClearWhileSettingsOpen_ConfirmSoon) { }); base::ListValue did_abort; - did_abort.GetList().push_back(base::Value(false)); + did_abort.Append(base::Value(false)); handler_->OnDidClosePage(&did_abort); } @@ -1374,9 +1374,11 @@ TEST_F(PeopleHandlerTest, DashboardClearWhileSettingsOpen_ConfirmLater) { NotifySyncStateChanged(); }); if (!browser_defaults::kSyncAutoStarts) { - EXPECT_CALL(*mock_sync_service_->GetMockUserSettings(), - SetFirstSetupComplete()) - .WillOnce([&]() { + EXPECT_CALL( + *mock_sync_service_->GetMockUserSettings(), + SetFirstSetupComplete( + syncer::SyncFirstSetupCompleteSource::ADVANCED_FLOW_CONFIRM)) + .WillOnce([&](syncer::SyncFirstSetupCompleteSource) { ON_CALL(*mock_sync_service_->GetMockUserSettings(), IsFirstSetupComplete()) .WillByDefault(Return(true)); @@ -1385,7 +1387,7 @@ TEST_F(PeopleHandlerTest, DashboardClearWhileSettingsOpen_ConfirmLater) { } base::ListValue did_abort; - did_abort.GetList().push_back(base::Value(false)); + did_abort.Append(base::Value(false)); handler_->OnDidClosePage(&did_abort); } @@ -1438,7 +1440,7 @@ TEST_P(PeopleHandlerDiceUnifiedConsentTest, StoredAccountsList) { base::Value accounts = handler.GetStoredAccountsList(); ASSERT_TRUE(accounts.is_list()); - const base::Value::ListStorage& accounts_list = accounts.GetList(); + base::span accounts_list = accounts.GetList(); if (dice_enabled) { ASSERT_EQ(2u, accounts_list.size()); diff --git a/chromium/chrome/browser/ui/webui/settings/profile_info_handler.cc b/chromium/chrome/browser/ui/webui/settings/profile_info_handler.cc index f99ba773f67..6e0af7ba4fa 100644 --- a/chromium/chrome/browser/ui/webui/settings/profile_info_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/profile_info_handler.cc @@ -35,12 +35,7 @@ const char ProfileInfoHandler::kProfileInfoChangedEventName[] = const char ProfileInfoHandler::kProfileStatsCountReadyEventName[] = "profile-stats-count-ready"; -ProfileInfoHandler::ProfileInfoHandler(Profile* profile) - : profile_(profile), -#if defined(OS_CHROMEOS) - user_manager_observer_(this), -#endif - profile_observer_(this) { +ProfileInfoHandler::ProfileInfoHandler(Profile* profile) : profile_(profile) { #if defined(OS_CHROMEOS) // Set up the chrome://userimage/ source. content::URLDataSource::Add(profile, @@ -157,7 +152,10 @@ ProfileInfoHandler::GetAccountNameAndIcon() const { if (g_browser_process->profile_manager() ->GetProfileAttributesStorage() .GetProfileAttributesWithPath(profile_->GetPath(), &entry)) { - name = base::UTF16ToUTF8(entry->GetName()); + name = base::UTF16ToUTF8( + ProfileAttributesEntry::ShouldConcatenateGaiaAndProfileName() + ? entry->GetLocalProfileName() + : entry->GetName()); // TODO(crbug.com/710660): return chrome://theme/IDR_PROFILE_AVATAR_* // and update theme_source.cc to get high res avatar icons. This does less // work here, sends less over IPC, and is more stable with returned results. diff --git a/chromium/chrome/browser/ui/webui/settings/profile_info_handler.h b/chromium/chrome/browser/ui/webui/settings/profile_info_handler.h index 1c40211b89a..354c27d54eb 100644 --- a/chromium/chrome/browser/ui/webui/settings/profile_info_handler.h +++ b/chromium/chrome/browser/ui/webui/settings/profile_info_handler.h @@ -74,12 +74,12 @@ class ProfileInfoHandler : public SettingsPageUIHandler, Profile* profile_; #if defined(OS_CHROMEOS) - ScopedObserver - user_manager_observer_; + ScopedObserver + user_manager_observer_{this}; #endif - ScopedObserver - profile_observer_; + ScopedObserver + profile_observer_{this}; // Used to cancel callbacks when JavaScript becomes disallowed. base::WeakPtrFactory callback_weak_ptr_factory_{this}; diff --git a/chromium/chrome/browser/ui/webui/settings/search_engines_handler.cc b/chromium/chrome/browser/ui/webui/settings/search_engines_handler.cc index 37eab4887a8..6f0374d327b 100644 --- a/chromium/chrome/browser/ui/webui/settings/search_engines_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/search_engines_handler.cc @@ -108,8 +108,7 @@ SearchEnginesHandler::GetSearchEnginesList() { list_controller_.table_model()->IndexOfTemplateURL(default_engine); // Build the first list (default search engines). - std::unique_ptr defaults = - std::make_unique(); + auto defaults = std::make_unique(); int last_default_engine_index = list_controller_.table_model()->last_search_engine_index(); @@ -122,7 +121,7 @@ SearchEnginesHandler::GetSearchEnginesList() { } // Build the second list (other search engines). - std::unique_ptr others = std::make_unique(); + auto others = std::make_unique(); int last_other_engine_index = list_controller_.table_model()->last_other_engine_index(); @@ -135,8 +134,7 @@ SearchEnginesHandler::GetSearchEnginesList() { } // Build the third list (omnibox extensions). - std::unique_ptr extensions = - std::make_unique(); + auto extensions = std::make_unique(); int engine_count = list_controller_.table_model()->RowCount(); // Sanity check for https://crbug.com/781703. @@ -146,8 +144,7 @@ SearchEnginesHandler::GetSearchEnginesList() { extensions->Append(CreateDictionaryForEngine(i, i == default_index)); } - std::unique_ptr search_engines_info( - new base::DictionaryValue); + auto search_engines_info = std::make_unique(); search_engines_info->Set("defaults", std::move(defaults)); search_engines_info->Set("others", std::move(others)); search_engines_info->Set("extensions", std::move(extensions)); @@ -185,7 +182,7 @@ SearchEnginesHandler::CreateDictionaryForEngine(int index, bool is_default) { // chrome/browser/resources/settings/search_engines_page/ // in @typedef for SearchEngine. Please update it whenever you add or remove // any keys here. - std::unique_ptr dict(new base::DictionaryValue()); + auto dict = std::make_unique(); dict->SetInteger("id", template_url->id()); dict->SetString("name", template_url->short_name()); dict->SetString("displayName", diff --git a/chromium/chrome/browser/ui/webui/settings/settings_cookies_view_handler.cc b/chromium/chrome/browser/ui/webui/settings/settings_cookies_view_handler.cc index 25dbe1f03e7..602c0980873 100644 --- a/chromium/chrome/browser/ui/webui/settings/settings_cookies_view_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/settings_cookies_view_handler.cc @@ -132,6 +132,7 @@ void CookiesViewHandler::OnJavascriptAllowed() { void CookiesViewHandler::OnJavascriptDisallowed() { callback_weak_ptr_factory_.InvalidateWeakPtrs(); + request_.Clear(); } void CookiesViewHandler::RegisterMessages() { @@ -231,14 +232,13 @@ void CookiesViewHandler::TreeModelBeginBatch(CookiesTreeModel* model) { void CookiesViewHandler::TreeModelEndBatch(CookiesTreeModel* model) { DCHECK(batch_update_); batch_update_ = false; - if (IsJavascriptAllowed()) { - if (request_.should_send_list) { - SendLocalDataList(model->GetRoot()); - } else if (!request_.callback_id_.empty()) { - ResolveJavascriptCallback(base::Value(request_.callback_id_), - (base::Value())); - request_.Clear(); - } + + if (request_.should_send_list) { + SendLocalDataList(model->GetRoot()); + } else if (!request_.callback_id_.empty()) { + ResolveJavascriptCallback(base::Value(request_.callback_id_), + (base::Value())); + request_.Clear(); } } @@ -255,14 +255,18 @@ void CookiesViewHandler::RecreateCookiesTreeModel() { filter_.clear(); sorted_sites_.clear(); EnsureCookiesTreeModelCreated(); + + CHECK(!request_.callback_id_.empty()); + ResolveJavascriptCallback(base::Value(request_.callback_id_), + (base::Value())); + request_.Clear(); } void CookiesViewHandler::HandleGetCookieDetails(const base::ListValue* args) { CHECK(request_.callback_id_.empty()); - CHECK_EQ(2U, args->GetSize()); - CHECK(args->GetString(0, &request_.callback_id_)); - std::string site; - CHECK(args->GetString(1, &site)); + CHECK_EQ(2U, args->GetList().size()); + request_.callback_id_ = args->GetList()[0].GetString(); + std::string site = args->GetList()[1].GetString(); AllowJavascript(); const CookieTreeNode* node = model_util_->GetTreeNodeFromTitle( @@ -279,11 +283,10 @@ void CookiesViewHandler::HandleGetCookieDetails(const base::ListValue* args) { void CookiesViewHandler::HandleGetNumCookiesString( const base::ListValue* args) { - CHECK_EQ(2U, args->GetSize()); + CHECK_EQ(2U, args->GetList().size()); std::string callback_id; - CHECK(args->GetString(0, &callback_id)); - int num_cookies; - CHECK(args->GetInteger(1, &num_cookies)); + callback_id = args->GetList()[0].GetString(); + int num_cookies = args->GetList()[1].GetInt(); AllowJavascript(); const base::string16 string = @@ -296,10 +299,9 @@ void CookiesViewHandler::HandleGetNumCookiesString( void CookiesViewHandler::HandleGetDisplayList(const base::ListValue* args) { CHECK(request_.callback_id_.empty()); - CHECK_EQ(2U, args->GetSize()); - CHECK(args->GetString(0, &request_.callback_id_)); - base::string16 filter; - CHECK(args->GetString(1, &filter)); + CHECK_EQ(2U, args->GetList().size()); + request_.callback_id_ = args->GetList()[0].GetString(); + base::string16 filter = base::UTF8ToUTF16(args->GetList()[1].GetString()); AllowJavascript(); request_.should_send_list = true; @@ -315,8 +317,8 @@ void CookiesViewHandler::HandleGetDisplayList(const base::ListValue* args) { void CookiesViewHandler::HandleReloadCookies(const base::ListValue* args) { CHECK(request_.callback_id_.empty()); - CHECK_EQ(1U, args->GetSize()); - CHECK(args->GetString(0, &request_.callback_id_)); + CHECK_EQ(1U, args->GetList().size()); + request_.callback_id_ = args->GetList()[0].GetString(); AllowJavascript(); RecreateCookiesTreeModel(); @@ -324,8 +326,8 @@ void CookiesViewHandler::HandleReloadCookies(const base::ListValue* args) { void CookiesViewHandler::HandleRemoveAll(const base::ListValue* args) { CHECK(request_.callback_id_.empty()); - CHECK_EQ(1U, args->GetSize()); - CHECK(args->GetString(0, &request_.callback_id_)); + CHECK_EQ(1U, args->GetList().size()); + request_.callback_id_ = args->GetList()[0].GetString(); AllowJavascript(); cookies_tree_model_->DeleteAllStoredObjects(); @@ -333,8 +335,7 @@ void CookiesViewHandler::HandleRemoveAll(const base::ListValue* args) { } void CookiesViewHandler::HandleRemove(const base::ListValue* args) { - std::string node_path; - CHECK(args->GetString(0, &node_path)); + std::string node_path = args->GetList()[0].GetString(); AllowJavascript(); const CookieTreeNode* node = model_util_->GetTreeNodeFromPath( @@ -347,8 +348,8 @@ void CookiesViewHandler::HandleRemove(const base::ListValue* args) { void CookiesViewHandler::HandleRemoveThirdParty(const base::ListValue* args) { CHECK(request_.callback_id_.empty()); - CHECK_EQ(1U, args->GetSize()); - CHECK(args->GetString(0, &request_.callback_id_)); + CHECK_EQ(1U, args->GetList().size()); + request_.callback_id_ = args->GetList()[0].GetString(); AllowJavascript(); Profile* profile = Profile::FromWebUI(web_ui()); @@ -360,7 +361,7 @@ void CookiesViewHandler::HandleRemoveThirdParty(const base::ListValue* args) { } void CookiesViewHandler::HandleRemoveShownItems(const base::ListValue* args) { - CHECK_EQ(0U, args->GetSize()); + CHECK_EQ(0U, args->GetList().size()); AllowJavascript(); CookieTreeNode* parent = cookies_tree_model_->GetRoot(); @@ -369,10 +370,9 @@ void CookiesViewHandler::HandleRemoveShownItems(const base::ListValue* args) { } void CookiesViewHandler::HandleRemoveItem(const base::ListValue* args) { - CHECK_EQ(1U, args->GetSize()); + CHECK_EQ(1U, args->GetList().size()); CHECK(request_.callback_id_.empty()); - base::string16 site; - CHECK(args->GetString(0, &site)); + base::string16 site = base::UTF8ToUTF16(args->GetList()[0].GetString()); AllowJavascript(); CookieTreeNode* parent = cookies_tree_model_->GetRoot(); diff --git a/chromium/chrome/browser/ui/webui/settings/settings_cookies_view_handler.h b/chromium/chrome/browser/ui/webui/settings/settings_cookies_view_handler.h index d5a031bf16a..27b91d2d6c9 100644 --- a/chromium/chrome/browser/ui/webui/settings/settings_cookies_view_handler.h +++ b/chromium/chrome/browser/ui/webui/settings/settings_cookies_view_handler.h @@ -46,6 +46,10 @@ class CookiesViewHandler : public SettingsPageUIHandler, void TreeModelEndBatch(CookiesTreeModel* model) override; private: + friend class CookiesViewHandlerTest; + FRIEND_TEST_ALL_PREFIXES(CookiesViewHandlerTest, + HandleReloadCookiesAndGetDisplayList); + // Creates the CookiesTreeModel if necessary. void EnsureCookiesTreeModelCreated(); diff --git a/chromium/chrome/browser/ui/webui/settings/settings_cookies_view_handler_unittest.cc b/chromium/chrome/browser/ui/webui/settings/settings_cookies_view_handler_unittest.cc new file mode 100644 index 00000000000..05d9e3dfcfa --- /dev/null +++ b/chromium/chrome/browser/ui/webui/settings/settings_cookies_view_handler_unittest.cc @@ -0,0 +1,65 @@ +// Copyright 2019 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/settings/settings_cookies_view_handler.h" + +#include +#include + +#include "base/values.h" +#include "chrome/test/base/chrome_render_view_host_test_harness.h" +#include "content/public/test/test_web_ui.h" + +namespace settings { + +class CookiesViewHandlerTest : public ChromeRenderViewHostTestHarness { + public: + void SetUp() override { + ChromeRenderViewHostTestHarness::SetUp(); + + web_ui_ = std::make_unique(); + web_ui_->set_web_contents(web_contents()); + handler_ = std::make_unique(); + handler_->set_web_ui(web_ui()); + handler_->AllowJavascript(); + web_ui_->ClearTrackedCalls(); + } + + void TearDown() override { + handler_->set_web_ui(nullptr); + handler_.reset(); + web_ui_.reset(); + + ChromeRenderViewHostTestHarness::TearDown(); + } + + content::TestWebUI* web_ui() { return web_ui_.get(); } + CookiesViewHandler* handler() { return handler_.get(); } + + private: + std::unique_ptr web_ui_; + std::unique_ptr handler_; +}; + +// This unit test checks that the javascript callbacks are called correctly for +// the reloadCookies and the getDisplayList handler cases. It also makes sure +// that CHECKs for request_.callback_id_.empty() do not fire when multiple +// handlers are called in sequence. +TEST_F(CookiesViewHandlerTest, HandleReloadCookiesAndGetDisplayList) { + const std::string reload_callback_id("localData.reload_0"); + const std::string get_display_list_callback_id("localData.getDisplayList_1"); + + base::ListValue reload_args; + reload_args.AppendString(reload_callback_id); + handler()->HandleReloadCookies(&reload_args); + EXPECT_EQ(1U, web_ui()->call_data().size()); + + base::ListValue get_display_list_args; + get_display_list_args.AppendString(reload_callback_id); + get_display_list_args.AppendString(std::string()); + handler()->HandleGetDisplayList(&get_display_list_args); + EXPECT_EQ(2U, web_ui()->call_data().size()); +} + +} // namespace settings diff --git a/chromium/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chromium/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc index 3ff5f45c78b..01411db9371 100644 --- a/chromium/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc +++ b/chromium/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc @@ -18,6 +18,7 @@ #include "build/buildflag.h" #include "chrome/browser/autofill/personal_data_manager_factory.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/browser_process_platform_part.h" #include "chrome/browser/content_settings/host_content_settings_map_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_shortcut_manager.h" @@ -33,7 +34,11 @@ #include "chrome/grit/chromium_strings.h" #include "chrome/grit/generated_resources.h" #include "chrome/grit/locale_settings.h" +#include "components/autofill/content/browser/content_autofill_driver.h" +#include "components/autofill/content/browser/content_autofill_driver_factory.h" #include "components/autofill/core/browser/autofill_experiments.h" +#include "components/autofill/core/browser/autofill_manager.h" +#include "components/autofill/core/browser/payments/credit_card_access_manager.h" #include "components/autofill/core/browser/payments/payments_service_url.h" #include "components/autofill/core/browser/payments/payments_util.h" #include "components/autofill/core/browser/personal_data_manager.h" @@ -42,6 +47,7 @@ #include "components/autofill/core/common/autofill_features.h" #include "components/autofill/core/common/autofill_payments_features.h" #include "components/browsing_data/core/features.h" +#include "components/content_settings/core/common/features.h" #include "components/google/core/common/google_util.h" #include "components/omnibox/common/omnibox_features.h" #include "components/password_manager/core/browser/manage_passwords_referrer.h" @@ -54,6 +60,7 @@ #include "components/sync/driver/sync_service_utils.h" #include "components/sync/driver/sync_user_settings.h" #include "components/unified_consent/feature.h" +#include "content/public/browser/web_contents.h" #include "content/public/browser/web_ui_data_source.h" #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h" @@ -68,11 +75,12 @@ #if defined(OS_CHROMEOS) #include "ash/public/cpp/ash_switches.h" -#include "ash/public/mojom/voice_interaction_controller.mojom.h" +#include "ash/public/mojom/assistant_state_controller.mojom.h" #include "base/system/sys_info.h" #include "chrome/browser/chromeos/account_manager/account_manager_util.h" #include "chrome/browser/chromeos/arc/arc_util.h" #include "chrome/browser/chromeos/assistant/assistant_util.h" +#include "chrome/browser/chromeos/crostini/crostini_features.h" #include "chrome/browser/chromeos/crostini/crostini_util.h" #include "chrome/browser/chromeos/kerberos/kerberos_credentials_manager.h" #include "chrome/browser/chromeos/login/quick_unlock/quick_unlock_utils.h" @@ -337,7 +345,8 @@ void AddA11yStrings(content::WebUIDataSource* html_source) { {"mouseSettingsTitle", IDS_SETTINGS_ACCESSIBILITY_MOUSE_SETTINGS_TITLE}, {"mouseSettingsDescription", IDS_SETTINGS_ACCESSIBILITY_MOUSE_SETTINGS_DESCRIPTION}, - {"audioHeading", IDS_SETTINGS_ACCESSIBILITY_AUDIO_HEADING}, + {"audioAndCaptionsHeading", + IDS_SETTINGS_ACCESSIBILITY_AUDIO_AND_CAPTIONS_HEADING}, {"additionalFeaturesTitle", IDS_SETTINGS_ACCESSIBILITY_ADDITIONAL_FEATURES_TITLE}, {"manageTtsSettings", IDS_SETTINGS_MANAGE_TTS_SETTINGS}, @@ -426,19 +435,16 @@ void AddAboutStrings(content::WebUIDataSource* html_source) { {"aboutUpgradeUpdatingPercent", IDS_SETTINGS_UPGRADE_UPDATING_PERCENT}, #if defined(OS_CHROMEOS) - {"aboutArcVersionLabel", IDS_SETTINGS_ABOUT_PAGE_ARC_VERSION}, - {"aboutBuildDateLabel", IDS_VERSION_UI_BUILD_DATE}, + {"aboutBuildDetailsTitle", IDS_OS_SETTINGS_ABOUT_PAGE_BUILD_DETAILS}, {"aboutChannelBeta", IDS_SETTINGS_ABOUT_PAGE_CURRENT_CHANNEL_BETA}, {"aboutChannelCanary", IDS_SETTINGS_ABOUT_PAGE_CURRENT_CHANNEL_CANARY}, {"aboutChannelDev", IDS_SETTINGS_ABOUT_PAGE_CURRENT_CHANNEL_DEV}, {"aboutChannelLabel", IDS_SETTINGS_ABOUT_PAGE_CHANNEL}, {"aboutChannelStable", IDS_SETTINGS_ABOUT_PAGE_CURRENT_CHANNEL_STABLE}, {"aboutCheckForUpdates", IDS_SETTINGS_ABOUT_PAGE_CHECK_FOR_UPDATES}, - {"aboutCommandLineLabel", IDS_VERSION_UI_COMMAND_LINE}, {"aboutCurrentlyOnChannel", IDS_SETTINGS_ABOUT_PAGE_CURRENT_CHANNEL}, {"aboutDetailedBuildInfo", IDS_SETTINGS_ABOUT_PAGE_DETAILED_BUILD_INFO}, - {"aboutFirmwareLabel", IDS_SETTINGS_ABOUT_PAGE_FIRMWARE}, - {"aboutPlatformLabel", IDS_SETTINGS_ABOUT_PAGE_PLATFORM}, + {"aboutEndOfLifeTitle", IDS_SETTINGS_ABOUT_PAGE_END_OF_LIFE_TITLE}, {"aboutRelaunchAndPowerwash", IDS_SETTINGS_ABOUT_PAGE_RELAUNCH_AND_POWERWASH}, {"aboutRollbackInProgress", IDS_SETTINGS_UPGRADE_ROLLBACK_IN_PROGRESS}, @@ -449,7 +455,6 @@ void AddAboutStrings(content::WebUIDataSource* html_source) { IDS_SETTINGS_UPGRADE_UPDATING_CHANNEL_SWITCH}, {"aboutUpgradeSuccessChannelSwitch", IDS_SETTINGS_UPGRADE_SUCCESSFUL_CHANNEL_SWITCH}, - {"aboutUserAgentLabel", IDS_VERSION_UI_USER_AGENT}, {"aboutTPMFirmwareUpdateTitle", IDS_SETTINGS_ABOUT_TPM_FIRMWARE_UPDATE_TITLE}, {"aboutTPMFirmwareUpdateDescription", @@ -580,7 +585,7 @@ void AddCrostiniStrings(content::WebUIDataSource* html_source, crostini::ContainerChromeOSBaseDirectory().value()))); html_source->AddBoolean( "showCrostiniExportImport", - crostini::IsCrostiniExportImportUIAllowedForProfile(profile)); + crostini::CrostiniFeatures::Get()->IsExportImportUIAllowed(profile)); } void AddPluginVmStrings(content::WebUIDataSource* html_source, @@ -613,6 +618,7 @@ void AddAndroidAppStrings(content::WebUIDataSource* html_source) { {"androidAppsEnable", IDS_SETTINGS_TURN_ON}, {"androidAppsManageApps", IDS_SETTINGS_ANDROID_APPS_MANAGE_APPS}, {"androidAppsRemove", IDS_SETTINGS_ANDROID_APPS_REMOVE}, + {"androidAppsRemoveButton", IDS_SETTINGS_ANDROID_APPS_REMOVE_BUTTON}, {"androidAppsDisableDialogTitle", IDS_SETTINGS_ANDROID_APPS_DISABLE_DIALOG_TITLE}, {"androidAppsDisableDialogMessage", @@ -642,32 +648,22 @@ void AddAppsStrings(content::WebUIDataSource* html_source) { void AddAppManagementStrings(content::WebUIDataSource* html_source) { static constexpr LocalizedString localized_strings[] = { - {"appListTitle", IDS_APP_MANAGEMENT_APP_LIST_TITLE}, - {"appNoPermission", IDS_APPLICATION_INFO_APP_NO_PERMISSIONS_TEXT}, - {"camera", IDS_APP_MANAGEMENT_CAMERA}, - {"contacts", IDS_APP_MANAGEMENT_CONTACTS}, - {"controlledByPolicy", IDS_CONTROLLED_SETTING_POLICY}, - {"lessApps", IDS_APP_MANAGEMENT_LESS_APPS}, - {"location", IDS_APP_MANAGEMENT_LOCATION}, - {"microphone", IDS_APP_MANAGEMENT_MICROPHONE}, - {"moreApps", IDS_APP_MANAGEMENT_MORE_APPS}, - {"moreSettings", IDS_APP_MANAGEMENT_MORE_SETTINGS}, - {"notifications", IDS_APP_MANAGEMENT_NOTIFICATIONS}, - {"notificationSublabel", IDS_APP_MANAGEMENT_NOTIFICATIONS_SUBLABEL}, - {"openAndroidSettings", IDS_APP_MANAGEMENT_ANDROID_SETTINGS}, - {"openExtensionsSettings", IDS_APP_MANAGEMENT_EXTENSIONS_SETTINGS}, - {"openSiteSettings", IDS_APP_MANAGEMENT_SITE_SETTING}, - {"permissions", IDS_APP_MANAGEMENT_PERMISSIONS}, - {"pinControlledByPolicy", IDS_APP_MANAGEMENT_PIN_ENFORCED_BY_POLICY}, - {"pinToShelf", IDS_APP_MANAGEMENT_PIN_TO_SHELF}, - {"policyAppUninstallPolicy", IDS_APP_MANAGEMENT_POLICY_APP_POLICY_STRING}, - {"size", IDS_APP_MANAGEMENT_SIZE}, - {"storage", IDS_APP_MANAGEMENT_STORAGE}, - {"systemAppUninstallPolicy", IDS_APP_MANAGEMENT_SYSTEM_APP_POLICY_STRING}, - {"thisAppCan", IDS_APP_MANAGEMENT_THIS_APP_CAN}, - {"title", IDS_APP_MANAGEMENT_TITLE}, - {"uninstallApp", IDS_APP_MANAGEMENT_UNINSTALL_APP}, - {"version", IDS_APP_MANAGEMENT_VERSION}, + {"appManagementAppInstalledByPolicyLabel", + IDS_APP_MANAGEMENT_POLICY_APP_POLICY_STRING}, + {"appManagementCameraPermissionLabel", IDS_APP_MANAGEMENT_CAMERA}, + {"appManagementContactsPermissionLabel", IDS_APP_MANAGEMENT_CONTACTS}, + {"appManagementLocationPermissionLabel", IDS_APP_MANAGEMENT_LOCATION}, + {"appManagementMicrophonePermissionLabel", IDS_APP_MANAGEMENT_MICROPHONE}, + {"appManagementMoreSettingsLabel", IDS_APP_MANAGEMENT_MORE_SETTINGS}, + {"appManagementNoAppsFound", IDS_APP_MANAGEMENT_NO_APPS_FOUND}, + {"appManagementNoPermissions", + IDS_APPLICATION_INFO_APP_NO_PERMISSIONS_TEXT}, + {"appManagementNotificationsLabel", IDS_APP_MANAGEMENT_NOTIFICATIONS}, + {"appManagementPermissionsLabel", IDS_APP_MANAGEMENT_PERMISSIONS}, + {"appManagementPinToShelfLabel", IDS_APP_MANAGEMENT_PIN_TO_SHELF}, + {"appManagementSearchPrompt", IDS_APP_MANAGEMENT_SEARCH_PROMPT}, + {"appManagementStoragePermissionLabel", IDS_APP_MANAGEMENT_STORAGE}, + {"appManagementUninstallLabel", IDS_APP_MANAGEMENT_UNINSTALL_APP}, }; AddLocalizedStringsBulk(html_source, localized_strings, base::size(localized_strings)); @@ -884,7 +880,8 @@ void AddDeviceStrings(content::WebUIDataSource* html_source) { {"mouseSpeed", IDS_SETTINGS_MOUSE_SPEED_LABEL}, {"mouseSwapButtons", IDS_SETTINGS_MOUSE_SWAP_BUTTONS_LABEL}, {"mouseReverseScroll", IDS_SETTINGS_MOUSE_REVERSE_SCROLL_LABEL}, - {"pointerAccelerationLabel", IDS_SETTINGS_POINTER_ACCELERATION_LABEL}, + {"mouseAccelerationLabel", IDS_SETTINGS_MOUSE_ACCELERATION_LABEL}, + {"touchpadAccelerationLabel", IDS_SETTINGS_TOUCHPAD_ACCELERATION_LABEL}, }; AddLocalizedStringsBulk(html_source, kPointersStrings, base::size(kPointersStrings)); @@ -1040,7 +1037,6 @@ void AddDeviceStrings(content::WebUIDataSource* html_source) { {"storageItemInUse", IDS_SETTINGS_STORAGE_ITEM_IN_USE}, {"storageItemAvailable", IDS_SETTINGS_STORAGE_ITEM_AVAILABLE}, {"storageItemDownloads", IDS_SETTINGS_STORAGE_ITEM_DOWNLOADS}, - {"storageItemDriveCache", IDS_SETTINGS_STORAGE_ITEM_DRIVE_CACHE}, {"storageItemBrowsingData", IDS_SETTINGS_STORAGE_ITEM_BROWSING_DATA}, {"storageItemAndroid", IDS_SETTINGS_STORAGE_ITEM_ANDROID}, {"storageItemCrostini", IDS_SETTINGS_STORAGE_ITEM_CROSTINI}, @@ -1059,20 +1055,18 @@ void AddDeviceStrings(content::WebUIDataSource* html_source) { IDS_SETTINGS_STORAGE_SPACE_CRITICALLY_LOW_MESSAGE_LINE_1}, {"storageSpaceCriticallyLowMessageLine2", IDS_SETTINGS_STORAGE_SPACE_CRITICALLY_LOW_MESSAGE_LINE_2}, - {"storageClearDriveCacheDialogTitle", - IDS_SETTINGS_STORAGE_CLEAR_DRIVE_CACHE_DIALOG_TITLE}, - {"storageClearDriveCacheDialogDescription", - IDS_SETTINGS_STORAGE_CLEAR_DRIVE_CACHE_DESCRIPTION}, - {"storageDeleteAllButtonTitle", - IDS_SETTINGS_STORAGE_DELETE_ALL_BUTTON_TITLE}, {"storageExternal", IDS_SETTINGS_STORAGE_EXTERNAL}, - {"storageAndroidAppsExternalDrivesNote", - IDS_SETTINGS_STORAGE_ANDROID_APPS_ACCESS_EXTERNAL_DRIVES_NOTE}, {"storageExternalStorageListHeader", IDS_SETTINGS_STORAGE_EXTERNAL_STORAGE_LIST_HEADER}}; AddLocalizedStringsBulk(html_source, kStorageStrings, base::size(kStorageStrings)); + html_source->AddString( + "storageAndroidAppsExternalDrivesNote", + l10n_util::GetStringFUTF16( + IDS_SETTINGS_STORAGE_ANDROID_APPS_ACCESS_EXTERNAL_DRIVES_NOTE, + base::ASCIIToUTF16(chrome::kArcExternalStorageLearnMoreURL))); + static constexpr LocalizedString kPowerStrings[] = { {"powerTitle", IDS_SETTINGS_POWER_TITLE}, {"powerSourceLabel", IDS_SETTINGS_POWER_SOURCE_LABEL}, @@ -1296,6 +1290,7 @@ void AddResetStrings(content::WebUIDataSource* html_source) { {"powerwashDialogExplanation", IDS_SETTINGS_FACTORY_RESET_WARNING}, {"powerwashDialogButton", IDS_SETTINGS_RESTART}, {"powerwashLearnMoreUrl", IDS_FACTORY_RESET_HELP_URL}, + {"powerwashButton", IDS_SETTINGS_FACTORY_RESET_BUTTON_LABEL}, #endif // Automatic reset banner (now a dialog). {"resetAutomatedDialogTitle", IDS_SETTINGS_RESET_AUTOMATED_DIALOG_TITLE}, @@ -1612,6 +1607,8 @@ void AddLanguagesStrings(content::WebUIDataSource* html_source) { IDS_SETTINGS_LANGUAGES_ADD_DICTIONARY_WORD_DUPLICATE_ERROR}, {"addDictionaryWordLengthError", IDS_SETTINGS_LANGUAGES_ADD_DICTIONARY_WORD_LENGTH_ERROR}, + {"deleteDictionaryWordButton", + IDS_SETTINGS_LANGUAGES_DELETE_DICTIONARY_WORD_BUTTON}, {"customDictionaryWords", IDS_SETTINGS_LANGUAGES_DICTIONARY_WORDS}, {"noCustomDictionaryWordsFound", IDS_SETTINGS_LANGUAGES_DICTIONARY_WORDS_NONE}, @@ -1701,8 +1698,41 @@ void AddOnStartupStrings(content::WebUIDataSource* html_source) { base::size(kLocalizedStrings)); } +bool IsFidoAuthenticationAvailable(autofill::PersonalDataManager* personal_data, + content::WebContents* web_contents) { + // Don't show toggle switch if user is unable to downstream cards. + if (personal_data->GetSyncSigninState() != + autofill::AutofillSyncSigninState:: + kSignedInAndWalletSyncTransportEnabled && + personal_data->GetSyncSigninState() != + autofill::AutofillSyncSigninState::kSignedInAndSyncFeatureEnabled) { + return false; + } + + // If |autofill_manager| is not available, then don't show toggle switch. + autofill::ContentAutofillDriverFactory* autofill_driver_factory = + autofill::ContentAutofillDriverFactory::FromWebContents(web_contents); + if (!autofill_driver_factory) + return false; + autofill::ContentAutofillDriver* autofill_driver = + autofill_driver_factory->DriverForFrame(web_contents->GetMainFrame()); + if (!autofill_driver) + return false; + autofill::AutofillManager* autofill_manager = + autofill_driver->autofill_manager(); + if (!autofill_manager) + return false; + + // Show the toggle switch only if the flag is enabled. Once returned, this + // decision may be overridden (from true to false) by the caller in the + // payments section if no platform authenticator is found. + return base::FeatureList::IsEnabled( + autofill::features::kAutofillCreditCardAuthentication); +} + void AddAutofillStrings(content::WebUIDataSource* html_source, - Profile* profile) { + Profile* profile, + content::WebContents* web_contents) { static constexpr LocalizedString kLocalizedStrings[] = { {"autofillPageTitle", IDS_SETTINGS_AUTOFILL}, {"passwords", IDS_SETTINGS_PASSWORDS}, @@ -1715,6 +1745,9 @@ void AddAutofillStrings(content::WebUIDataSource* html_source, {"enableCreditCardsLabel", IDS_AUTOFILL_ENABLE_CREDIT_CARDS_TOGGLE_LABEL}, {"enableCreditCardsSublabel", IDS_AUTOFILL_ENABLE_CREDIT_CARDS_TOGGLE_SUBLABEL}, + {"enableCreditCardFIDOAuthLabel", IDS_ENABLE_CREDIT_CARD_FIDO_AUTH_LABEL}, + {"enableCreditCardFIDOAuthSublabel", + IDS_ENABLE_CREDIT_CARD_FIDO_AUTH_SUBLABEL}, {"addresses", IDS_AUTOFILL_ADDRESSES}, {"addressesTitle", IDS_AUTOFILL_ADDRESSES_SETTINGS_TITLE}, {"addAddressTitle", IDS_SETTINGS_AUTOFILL_ADDRESSES_ADD_TITLE}, @@ -1748,10 +1781,6 @@ void AddAutofillStrings(content::WebUIDataSource* html_source, IDS_SETTINGS_PASSWORDS_AUTOSIGNIN_CHECKBOX_DESC}, {"passwordsLeakDetectionLabel", IDS_SETTINGS_PASSWORDS_LEAK_DETECTION_LABEL}, - {"passwordsLeakDetectionSignedInDescription", - IDS_SETTINGS_PASSWORDS_LEAK_DETECTION_SIGNED_IN_DESC}, - {"passwordsLeakDetectionSignedOutDisabledDescription", - IDS_SETTINGS_PASSWORDS_LEAK_DETECTION_SIGNED_OUT_DISABLED_DESC}, {"passwordsLeakDetectionSignedOutEnabledDescription", IDS_SETTINGS_PASSWORDS_LEAK_DETECTION_SIGNED_OUT_ENABLED_DESC}, {"savedPasswordsHeading", IDS_SETTINGS_PASSWORDS_SAVED_HEADING}, @@ -1822,15 +1851,18 @@ void AddAutofillStrings(content::WebUIDataSource* html_source, #else // !defined(OS_CHROMEOS) is_guest_mode = profile->IsOffTheRecord(); #endif // defined(OS_CHROMEOS) + autofill::PersonalDataManager* personal_data = + autofill::PersonalDataManagerFactory::GetForProfile(profile); html_source->AddBoolean( "migrationEnabled", - !is_guest_mode && - autofill::IsCreditCardMigrationEnabled( - autofill::PersonalDataManagerFactory::GetForProfile(profile), - profile->GetPrefs(), - ProfileSyncServiceFactory::GetForProfile(profile), - /*is_test_mode=*/false, - /*log_manager=*/nullptr)); + !is_guest_mode && autofill::IsCreditCardMigrationEnabled( + personal_data, profile->GetPrefs(), + ProfileSyncServiceFactory::GetForProfile(profile), + /*is_test_mode=*/false, + /*log_manager=*/nullptr)); + html_source->AddBoolean( + "fidoAuthenticationAvailableForAutofill", + IsFidoAuthenticationAvailable(personal_data, web_contents)); html_source->AddBoolean( "passwordsLeakDetectionEnabled", @@ -1859,6 +1891,12 @@ void AddPeopleStrings(content::WebUIDataSource* html_source, Profile* profile) { {"accountListHeader", IDS_SETTINGS_ACCOUNT_MANAGER_LIST_HEADER}, {"addAccountLabel", IDS_SETTINGS_ACCOUNT_MANAGER_ADD_ACCOUNT_LABEL}, {"removeAccountLabel", IDS_SETTINGS_ACCOUNT_MANAGER_REMOVE_ACCOUNT_LABEL}, + {"accountManagerPrimaryAccountTooltip", + IDS_SETTINGS_ACCOUNT_MANAGER_PRIMARY_ACCOUNT_TOOLTIP}, + {"accountManagerSecondaryAccountsDisabledText", + IDS_SETTINGS_ACCOUNT_MANAGER_SECONDARY_ACCOUNTS_DISABLED_TEXT}, + {"accountManagerSecondaryAccountsDisabledChildText", + IDS_SETTINGS_ACCOUNT_MANAGER_SECONDARY_ACCOUNTS_DISABLED_CHILD_TEXT}, {"accountManagerSignedOutAccountName", IDS_SETTINGS_ACCOUNT_MANAGER_SIGNED_OUT_ACCOUNT_PLACEHOLDER}, {"accountManagerUnmigratedAccountName", @@ -2311,6 +2349,7 @@ void AddPrintingStrings(content::WebUIDataSource* html_source) { {"printerModel", IDS_SETTINGS_PRINTING_CUPS_PRINTER_DETAILS_MODEL}, {"printerQueue", IDS_SETTINGS_PRINTING_CUPS_PRINTER_DETAILS_QUEUE}, {"savedPrintersTitle", IDS_SETTINGS_PRINTING_CUPS_SAVED_PRINTERS_TITLE}, + {"showMorePrinters", IDS_SETTINGS_PRINTING_CUPS_SHOW_MORE}, {"addPrintersNearbyTitle", IDS_SETTINGS_PRINTING_CUPS_ADD_PRINTERS_NEARBY_TITLE}, {"addPrintersManuallyTitle", @@ -2666,6 +2705,9 @@ void AddGoogleAssistantStrings(content::WebUIDataSource* html_source, html_source->AddBoolean("hotwordDspAvailable", chromeos::IsHotwordDspAvailable()); + html_source->AddBoolean( + "voiceMatchDisabled", + chromeos::assistant::features::IsVoiceMatchDisabled()); } #endif @@ -2737,6 +2779,8 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source, {"siteSettingsCategoryCookies", IDS_SETTINGS_SITE_SETTINGS_COOKIES}, {"siteSettingsCategoryHandlers", IDS_SETTINGS_SITE_SETTINGS_HANDLERS}, {"siteSettingsCategoryImages", IDS_SETTINGS_SITE_SETTINGS_IMAGES}, + {"siteSettingsCategoryInsecureContent", + IDS_SETTINGS_SITE_SETTINGS_INSECURE_CONTENT}, {"siteSettingsCategoryLocation", IDS_SETTINGS_SITE_SETTINGS_LOCATION}, {"siteSettingsCategoryJavascript", IDS_SETTINGS_SITE_SETTINGS_JAVASCRIPT}, {"siteSettingsCategoryMicrophone", IDS_SETTINGS_SITE_SETTINGS_MIC}, @@ -2773,6 +2817,10 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source, {"siteSettingsMic", IDS_SETTINGS_SITE_SETTINGS_MIC}, {"siteSettingsNotifications", IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS}, {"siteSettingsImages", IDS_SETTINGS_SITE_SETTINGS_IMAGES}, + {"siteSettingsInsecureContent", + IDS_SETTINGS_SITE_SETTINGS_INSECURE_CONTENT}, + {"siteSettingsInsecureContentBlock", + IDS_SETTINGS_SITE_SETTINGS_INSECURE_CONTENT_BLOCK}, {"siteSettingsJavascript", IDS_SETTINGS_SITE_SETTINGS_JAVASCRIPT}, {"siteSettingsSound", IDS_SETTINGS_SITE_SETTINGS_SOUND}, {"siteSettingsSoundAllow", IDS_SETTINGS_SITE_SETTINGS_SOUND_ALLOW}, @@ -2947,6 +2995,8 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source, IDS_SETTINGS_SITE_SETTINGS_THIRD_PARTY_COOKIE_REMOVE_CONFIRMATION}, {"siteSettingsCookiesClearThirdParty", IDS_SETTINGS_SITE_SETTINGS_CLEAR_THIRD_PARTY_COOKIES}, + {"siteSettingsCookiesThirdPartyExceptionLabel", + IDS_SETTINGS_SITE_SETTINGS_THIRD_PARTY_COOKIES_EXCEPTION_LABEL}, {"siteSettingsCookieRemoveDialogTitle", IDS_SETTINGS_SITE_SETTINGS_COOKIE_REMOVE_DIALOG_TITLE}, {"siteSettingsCookieRemoveMultipleConfirmation", @@ -2986,7 +3036,6 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source, {"handlerSetDefault", IDS_SETTINGS_SITE_SETTINGS_HANDLER_SET_DEFAULT}, {"handlerRemove", IDS_SETTINGS_SITE_SETTINGS_REMOVE}, {"adobeFlashStorage", IDS_SETTINGS_SITE_SETTINGS_ADOBE_FLASH_SETTINGS}, - {"learnMore", IDS_LEARN_MORE}, {"incognitoSite", IDS_SETTINGS_SITE_SETTINGS_INCOGNITO}, {"incognitoSiteOnly", IDS_SETTINGS_SITE_SETTINGS_INCOGNITO_ONLY}, {"embeddedIncognitoSite", IDS_SETTINGS_SITE_SETTINGS_INCOGNITO_EMBEDDED}, @@ -3058,10 +3107,6 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source, "enableExperimentalWebPlatformFeatures", cmd.HasSwitch(::switches::kEnableExperimentalWebPlatformFeatures)); - html_source->AddBoolean( - "enableBluetoothScanningContentSetting", - cmd.HasSwitch(::switches::kEnableWebBluetoothScanning)); - html_source->AddBoolean( "enableNativeFileSystemWriteContentSetting", base::FeatureList::IsEnabled(::blink::features::kNativeFileSystemAPI)); @@ -3070,6 +3115,16 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source, "enableRemovingAllThirdPartyCookies", base::FeatureList::IsEnabled( browsing_data::features::kEnableRemovingAllThirdPartyCookies)); + + html_source->AddBoolean( + "enableInsecureContentContentSetting", + base::FeatureList::IsEnabled(features::kMixedContentSiteSetting)); + + html_source->AddBoolean( + "showImprovedCookieControlsForThirdParties", + base::FeatureList::IsEnabled( + content_settings :: + kImprovedCookieControlsForThirdPartyCookieBlocking)); } #if defined(OS_CHROMEOS) @@ -3084,6 +3139,7 @@ void AddUsersStrings(content::WebUIDataSource* html_source) { {"removeUserTooltip", IDS_SETTINGS_USERS_REMOVE_USER_TOOLTIP}, {"addUsers", IDS_SETTINGS_USERS_ADD_USERS}, {"addUsersEmail", IDS_SETTINGS_USERS_ADD_USERS_EMAIL}, + {"userExistsError", IDS_SETTINGS_USER_EXISTS_ERROR}, }; AddLocalizedStringsBulk(html_source, kLocalizedStrings, base::size(kLocalizedStrings)); @@ -3172,6 +3228,8 @@ void AddMultideviceStrings(content::WebUIDataSource* html_source) { {"multideviceForgetDevice", IDS_SETTINGS_MULTIDEVICE_FORGET_THIS_DEVICE}, {"multideviceSmartLockOptions", IDS_SETTINGS_PEOPLE_LOCK_SCREEN_OPTIONS_LOCK}, + {"multideviceForgetDeviceDisconnect", + IDS_SETTINGS_MULTIDEVICE_FORGET_THIS_DEVICE_DISCONNECT}, }; AddLocalizedStringsBulk(html_source, kLocalizedStrings, base::size(kLocalizedStrings)); @@ -3246,8 +3304,10 @@ void AddSecurityKeysStrings(content::WebUIDataSource* html_source) { IDS_SETTINGS_SECURITY_KEYS_BIO_ENROLLMENT_SUBPAGE_DESCRIPTION}, {"securityKeysBioEnrollmentTouch", IDS_SETTINGS_SECURITY_KEYS_BIO_ENROLLMENT_TOUCH}, - {"securityKeysPINTooShort", - IDS_SETTINGS_SECURITY_KEYS_PIN_ERROR_TOO_SHORT}, + {"securityKeysBioEnrollmentChooseName", + IDS_SETTINGS_SECURITY_KEYS_BIO_CHOOSE_NAME}, + {"securityKeysBioEnrollmentNameLabel", + IDS_SETTINGS_SECURITY_KEYS_BIO_NAME_LABEL}, {"securityKeysConfirmPIN", IDS_SETTINGS_SECURITY_KEYS_CONFIRM_PIN}, {"securityKeysCredentialWebsite", IDS_SETTINGS_SECURITY_KEYS_CREDENTIAL_WEBSITE}, @@ -3340,10 +3400,11 @@ void AddSecurityKeysStrings(content::WebUIDataSource* html_source) { } // namespace void AddLocalizedStrings(content::WebUIDataSource* html_source, - Profile* profile) { + Profile* profile, + content::WebContents* web_contents) { AddA11yStrings(html_source); AddAboutStrings(html_source); - AddAutofillStrings(html_source, profile); + AddAutofillStrings(html_source, profile, web_contents); AddAppearanceStrings(html_source, profile); #if defined(OS_WIN) && BUILDFLAG(GOOGLE_CHROME_BRANDING) diff --git a/chromium/chrome/browser/ui/webui/settings/settings_localized_strings_provider.h b/chromium/chrome/browser/ui/webui/settings/settings_localized_strings_provider.h index 1642eb7503a..a72290f479f 100644 --- a/chromium/chrome/browser/ui/webui/settings/settings_localized_strings_provider.h +++ b/chromium/chrome/browser/ui/webui/settings/settings_localized_strings_provider.h @@ -9,6 +9,7 @@ class Profile; namespace content { class WebUIDataSource; +class WebContents; } namespace settings { @@ -17,7 +18,8 @@ namespace settings { // causes |html_source| to expose a strings.js file from its source which // contains a mapping from string's name to its translated value. void AddLocalizedStrings(content::WebUIDataSource* html_source, - Profile* profile); + Profile* profile, + content::WebContents* web_contents); } // namespace settings diff --git a/chromium/chrome/browser/ui/webui/settings/settings_manage_profile_handler.cc b/chromium/chrome/browser/ui/webui/settings/settings_manage_profile_handler.cc index 40505a485bd..ce95eecb512 100644 --- a/chromium/chrome/browser/ui/webui/settings/settings_manage_profile_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/settings_manage_profile_handler.cc @@ -48,7 +48,7 @@ const char kProfileShortcutNotFound[] = "profileShortcutNotFound"; } // namespace ManageProfileHandler::ManageProfileHandler(Profile* profile) - : profile_(profile), observer_(this) {} + : profile_(profile) {} ManageProfileHandler::~ManageProfileHandler() {} diff --git a/chromium/chrome/browser/ui/webui/settings/settings_manage_profile_handler.h b/chromium/chrome/browser/ui/webui/settings/settings_manage_profile_handler.h index 210f76c5bf2..fc5ebe7917b 100644 --- a/chromium/chrome/browser/ui/webui/settings/settings_manage_profile_handler.h +++ b/chromium/chrome/browser/ui/webui/settings/settings_manage_profile_handler.h @@ -88,7 +88,8 @@ class ManageProfileHandler : public settings::SettingsPageUIHandler, Profile* profile_; // Used to observe profile avatar updates. - ScopedObserver observer_; + ScopedObserver + observer_{this}; // For generating weak pointers to itself for callbacks. base::WeakPtrFactory weak_factory_{this}; diff --git a/chromium/chrome/browser/ui/webui/settings/settings_security_key_handler.cc b/chromium/chrome/browser/ui/webui/settings/settings_security_key_handler.cc index 8f725e8ca0d..b949500f09a 100644 --- a/chromium/chrome/browser/ui/webui/settings/settings_security_key_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/settings_security_key_handler.cc @@ -43,6 +43,14 @@ void HandleClose(base::Closure close_callback, const base::ListValue* args) { close_callback.Run(); } +base::DictionaryValue EncodeEnrollment(const std::vector& id, + const std::string& name) { + base::DictionaryValue value; + value.SetStringKey("name", name); + value.SetStringKey("id", base::HexEncode(id.data(), id.size())); + return value; +} + } // namespace namespace settings { @@ -389,6 +397,7 @@ void SecurityKeysCredentialHandler::HandleDelete(const base::ListValue* args) { base::BindOnce(&SecurityKeysCredentialHandler::OnCredentialsDeleted, weak_factory_.GetWeakPtr())); } + void SecurityKeysCredentialHandler::OnCredentialManagementReady() { DCHECK(state_ == State::kStart || state_ == State::kPIN); DCHECK_CURRENTLY_ON(BrowserThread::UI); @@ -542,6 +551,10 @@ void SecurityKeysBioEnrollmentHandler::RegisterMessages() { "securityKeyBioEnrollDelete", base::BindRepeating(&SecurityKeysBioEnrollmentHandler::HandleDelete, base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "securityKeyBioEnrollRename", + base::BindRepeating(&SecurityKeysBioEnrollmentHandler::HandleRename, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "securityKeyBioEnrollCancel", base::BindRepeating(&SecurityKeysBioEnrollmentHandler::HandleCancel, @@ -684,7 +697,7 @@ void SecurityKeysBioEnrollmentHandler::OnHaveEnumeration( elem.SetStringKey("name", std::move(enrollment.second)); elem.SetStringKey("id", base::HexEncode(enrollment.first.data(), enrollment.first.size())); - list.emplace_back(std::move(elem)); + list.emplace_back(EncodeEnrollment(enrollment.first, enrollment.second)); } } @@ -719,13 +732,46 @@ void SecurityKeysBioEnrollmentHandler::OnEnrollingResponse( } void SecurityKeysBioEnrollmentHandler::OnEnrollmentFinished( - device::CtapDeviceResponseCode code) { + device::CtapDeviceResponseCode code, + std::vector template_id) { + DCHECK_EQ(state_, State::kEnrolling); + DCHECK(!callback_id_.empty()); + if (code == device::CtapDeviceResponseCode::kCtap2ErrKeepAliveCancel) { + base::DictionaryValue d; + d.SetIntKey("code", static_cast(code)); + d.SetIntKey("remaining", 0); + ResolveJavascriptCallback(base::Value(std::move(callback_id_)), + std::move(d)); + return; + } + if (code != device::CtapDeviceResponseCode::kSuccess) { + OnError(device::BioEnrollmentStatus::kAuthenticatorResponseInvalid); + return; + } + bio_->EnumerateTemplates(base::BindOnce( + &SecurityKeysBioEnrollmentHandler::OnHavePostEnrollmentEnumeration, + weak_factory_.GetWeakPtr(), std::move(template_id))); +} + +void SecurityKeysBioEnrollmentHandler::OnHavePostEnrollmentEnumeration( + std::vector enrolled_template_id, + device::CtapDeviceResponseCode code, + base::Optional, std::string>> enrollments) { DCHECK_EQ(state_, State::kEnrolling); DCHECK(!callback_id_.empty()); state_ = State::kReady; + if (code != device::CtapDeviceResponseCode::kSuccess || !enrollments || + !base::Contains(*enrollments, enrolled_template_id)) { + OnError(device::BioEnrollmentStatus::kAuthenticatorResponseInvalid); + return; + } + base::DictionaryValue d; d.SetIntKey("code", static_cast(code)); d.SetIntKey("remaining", 0); + d.SetKey("enrollment", + EncodeEnrollment(enrolled_template_id, + (*enrollments)[enrolled_template_id])); ResolveJavascriptCallback(base::Value(std::move(callback_id_)), std::move(d)); } @@ -747,7 +793,7 @@ void SecurityKeysBioEnrollmentHandler::HandleDelete( } void SecurityKeysBioEnrollmentHandler::OnDelete( - device::CtapDeviceResponseCode c) { + device::CtapDeviceResponseCode code) { DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK_EQ(state_, State::kDeleting); DCHECK(!callback_id_.empty()); @@ -757,22 +803,42 @@ void SecurityKeysBioEnrollmentHandler::OnDelete( weak_factory_.GetWeakPtr())); } -void SecurityKeysBioEnrollmentHandler::HandleCancel( +void SecurityKeysBioEnrollmentHandler::HandleRename( const base::ListValue* args) { DCHECK_CURRENTLY_ON(BrowserThread::UI); - DCHECK_EQ(1u, args->GetSize()); - state_ = State::kCancelling; + DCHECK_EQ(args->GetSize(), 3u); + state_ = State::kRenaming; callback_id_ = args->GetList()[0].GetString(); - bio_->Cancel(base::BindOnce(&SecurityKeysBioEnrollmentHandler::OnEnrollCancel, - weak_factory_.GetWeakPtr())); + std::vector template_id; + if (!base::HexStringToBytes(args->GetList()[1].GetString(), &template_id)) { + NOTREACHED(); + return; + } + bio_->RenameTemplate( + std::move(template_id), args->GetList()[2].GetString(), + base::BindOnce(&SecurityKeysBioEnrollmentHandler::OnRename, + weak_factory_.GetWeakPtr())); } -void SecurityKeysBioEnrollmentHandler::OnEnrollCancel( - device::CtapDeviceResponseCode) { - DCHECK_EQ(state_, State::kCancelling); - state_ = State::kReady; - ResolveJavascriptCallback(base::Value(std::move(callback_id_)), - base::Value()); +void SecurityKeysBioEnrollmentHandler::OnRename( + device::CtapDeviceResponseCode code) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + DCHECK_EQ(state_, State::kRenaming); + DCHECK(!callback_id_.empty()); + state_ = State::kEnumerating; + bio_->EnumerateTemplates( + base::BindOnce(&SecurityKeysBioEnrollmentHandler::OnHaveEnumeration, + weak_factory_.GetWeakPtr())); +} + +void SecurityKeysBioEnrollmentHandler::HandleCancel( + const base::ListValue* args) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + DCHECK_EQ(state_, State::kEnrolling); + DCHECK_EQ(0u, args->GetSize()); + DCHECK(!callback_id_.empty()); + // OnEnrollmentFinished() will be invoked once the cancellation is complete. + bio_->CancelEnrollment(); } } // namespace settings diff --git a/chromium/chrome/browser/ui/webui/settings/settings_security_key_handler.h b/chromium/chrome/browser/ui/webui/settings/settings_security_key_handler.h index 60196df0fba..cfb3b29b42f 100644 --- a/chromium/chrome/browser/ui/webui/settings/settings_security_key_handler.h +++ b/chromium/chrome/browser/ui/webui/settings/settings_security_key_handler.h @@ -184,7 +184,7 @@ class SecurityKeysBioEnrollmentHandler : public SecurityKeysHandlerBase { kEnumerating, kEnrolling, kDeleting, - kCancelling, + kRenaming, }; void RegisterMessages() override; @@ -204,13 +204,20 @@ class SecurityKeysBioEnrollmentHandler : public SecurityKeysHandlerBase { void HandleStartEnrolling(const base::ListValue* args); void OnEnrollingResponse(device::BioEnrollmentSampleStatus, uint8_t); - void OnEnrollmentFinished(device::CtapDeviceResponseCode); + void OnEnrollmentFinished(device::CtapDeviceResponseCode, + std::vector template_id); + void OnHavePostEnrollmentEnumeration( + std::vector enrolled_template_id, + device::CtapDeviceResponseCode code, + base::Optional, std::string>> enrollments); void HandleDelete(const base::ListValue* args); void OnDelete(device::CtapDeviceResponseCode); + void HandleRename(const base::ListValue* args); + void OnRename(device::CtapDeviceResponseCode); + void HandleCancel(const base::ListValue* args); - void OnEnrollCancel(device::CtapDeviceResponseCode); State state_ = State::kNone; std::string callback_id_; diff --git a/chromium/chrome/browser/ui/webui/settings/settings_ui.cc b/chromium/chrome/browser/ui/webui/settings/settings_ui.cc index 3ea47f5691e..374bc9896da 100644 --- a/chromium/chrome/browser/ui/webui/settings/settings_ui.cc +++ b/chromium/chrome/browser/ui/webui/settings/settings_ui.cc @@ -47,14 +47,15 @@ #include "chrome/browser/ui/webui/settings/settings_security_key_handler.h" #include "chrome/browser/ui/webui/settings/settings_startup_pages_handler.h" #include "chrome/browser/ui/webui/settings/site_settings_handler.h" +#include "chrome/common/chrome_features.h" #include "chrome/common/pref_names.h" #include "chrome/common/url_constants.h" +#include "chrome/grit/generated_resources.h" #include "chrome/grit/settings_resources.h" #include "chrome/grit/settings_resources_map.h" #include "components/favicon_base/favicon_url_parser.h" #include "components/password_manager/core/common/password_manager_features.h" #include "components/pref_registry/pref_registry_syncable.h" -#include "components/safe_browsing/buildflags.h" #include "components/unified_consent/feature.h" #include "content/public/browser/url_data_source.h" #include "content/public/browser/web_contents.h" @@ -83,6 +84,7 @@ #include "ash/public/cpp/resources/grit/ash_public_unscaled_resources.h" #include "ash/public/cpp/stylus_utils.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/browser_process_platform_part.h" #include "chrome/browser/chromeos/account_manager/account_manager_util.h" #include "chrome/browser/chromeos/android_sms/android_sms_app_manager.h" #include "chrome/browser/chromeos/android_sms/android_sms_service_factory.h" @@ -93,6 +95,7 @@ #include "chrome/browser/chromeos/multidevice_setup/multidevice_setup_client_factory.h" #include "chrome/browser/chromeos/plugin_vm/plugin_vm_util.h" #include "chrome/browser/chromeos/profiles/profile_helper.h" +#include "chrome/browser/ui/web_applications/system_web_app_ui_utils.h" #include "chrome/browser/ui/webui/chromeos/smb_shares/smb_handler.h" #include "chrome/browser/ui/webui/settings/chromeos/accessibility_handler.h" #include "chrome/browser/ui/webui/settings/chromeos/account_manager_handler.h" @@ -124,6 +127,7 @@ #include "chromeos/login/auth/password_visibility_utils.h" #include "chromeos/services/multidevice_setup/public/cpp/prefs.h" #include "chromeos/services/network_config/public/mojom/constants.mojom.h" // nogncheck +#include "chromeos/services/network_config/public/mojom/cros_network_config.mojom.h" // nogncheck #include "components/arc/arc_util.h" #include "components/prefs/pref_service.h" #include "components/user_manager/user.h" @@ -147,11 +151,6 @@ #include "chrome/browser/ui/webui/settings/printing_handler.h" #endif -#if BUILDFLAG(FULL_SAFE_BROWSING) -#include "chrome/browser/safe_browsing/chrome_password_protection_service.h" -#include "chrome/browser/ui/webui/settings/change_password_handler.h" -#endif - namespace settings { // static void SettingsUI::RegisterProfilePrefs( @@ -250,26 +249,20 @@ SettingsUI::SettingsUI(content::WebUI* web_ui) std::make_unique()); #endif // OS_WIN && BUILDFLAG(GOOGLE_CHROME_BRANDING) - bool password_protection_available = false; -#if BUILDFLAG(FULL_SAFE_BROWSING) - safe_browsing::ChromePasswordProtectionService* password_protection = - safe_browsing::ChromePasswordProtectionService:: - GetPasswordProtectionService(profile); - password_protection_available = !!password_protection; - if (password_protection) { - AddSettingsPageUIHandler( - std::make_unique(profile, password_protection)); - } -#endif - html_source->AddBoolean("passwordProtectionAvailable", - password_protection_available); - #if !defined(OS_CHROMEOS) html_source->AddBoolean( "diceEnabled", AccountConsistencyModeManager::IsDiceEnabledForProfile(profile)); #endif // !defined(OS_CHROMEOS) + html_source->AddBoolean( + "a11yEnhancements", + base::FeatureList::IsEnabled(features::kWebUIA11yEnhancements)); + + html_source->AddBoolean( + "privacySettingsRedesignEnabled", + base::FeatureList::IsEnabled(features::kPrivacySettingsRedesign)); + html_source->AddBoolean("unifiedConsentEnabled", unified_consent::IsUnifiedConsentFeatureEnabled()); @@ -312,6 +305,8 @@ SettingsUI::SettingsUI(content::WebUI* web_ui) if (web_app::SystemWebAppManager::IsEnabled()) { html_source->AddResourcePath("icon-192.png", IDR_SETTINGS_LOGO_192); html_source->AddResourcePath("pwa.html", IDR_PWA_HTML); + web_app::SetManifestRequestFilter(html_source, IDR_SETTINGS_MANIFEST, + IDS_SETTINGS_SETTINGS); } #endif // defined (OS_CHROMEOS) @@ -322,9 +317,6 @@ SettingsUI::SettingsUI(content::WebUI* web_ui) html_source->AddResourcePath("lazy_load.html", IDR_SETTINGS_LAZY_LOAD_VULCANIZED_HTML); html_source->SetDefaultResource(IDR_SETTINGS_VULCANIZED_HTML); -#if defined(OS_CHROMEOS) - html_source->AddResourcePath("manifest.json", IDR_SETTINGS_MANIFEST); -#endif // defined (OS_CHROMEOS) #else // Add all settings resources. for (size_t i = 0; i < kSettingsResourcesSize; ++i) { @@ -334,7 +326,7 @@ SettingsUI::SettingsUI(content::WebUI* web_ui) html_source->SetDefaultResource(IDR_SETTINGS_SETTINGS_HTML); #endif - AddLocalizedStrings(html_source, profile); + AddLocalizedStrings(html_source, profile, web_ui->GetWebContents()); ManagedUIHandler::Initialize(web_ui, html_source); @@ -534,8 +526,9 @@ void SettingsUI::AddSettingsPageUIHandler( #if defined(OS_CHROMEOS) void SettingsUI::BindCrosNetworkConfig( - chromeos::network_config::mojom::CrosNetworkConfigRequest request) { - ash::GetNetworkConfigService(std::move(request)); + mojo::PendingReceiver + receiver) { + ash::GetNetworkConfigService(std::move(receiver)); } #endif // defined(OS_CHROMEOS) diff --git a/chromium/chrome/browser/ui/webui/settings/settings_ui.h b/chromium/chrome/browser/ui/webui/settings/settings_ui.h index 16d535fe786..0353806fc15 100644 --- a/chromium/chrome/browser/ui/webui/settings/settings_ui.h +++ b/chromium/chrome/browser/ui/webui/settings/settings_ui.h @@ -10,7 +10,8 @@ #include "chrome/browser/ui/webui/webui_load_timer.h" #if defined(OS_CHROMEOS) -#include "chromeos/services/network_config/public/mojom/cros_network_config.mojom.h" // nogncheck +#include "chromeos/services/network_config/public/mojom/cros_network_config.mojom-forward.h" // nogncheck +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "ui/webui/mojo_web_ui_controller.h" #else #include "content/public/browser/web_ui_controller.h" @@ -55,7 +56,8 @@ class SettingsUI std::unique_ptr handler); #if defined(OS_CHROMEOS) void BindCrosNetworkConfig( - chromeos::network_config::mojom::CrosNetworkConfigRequest request); + mojo::PendingReceiver + receiver); #endif WebuiLoadTimer webui_load_timer_; diff --git a/chromium/chrome/browser/ui/webui/settings/site_settings_handler.cc b/chromium/chrome/browser/ui/webui/settings/site_settings_handler.cc index 6318434a79a..69b90770924 100644 --- a/chromium/chrome/browser/ui/webui/settings/site_settings_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/site_settings_handler.cc @@ -41,7 +41,6 @@ #include "chrome/common/extensions/manifest_handlers/app_launch_info.h" #include "chrome/common/pref_names.h" #include "chrome/grit/generated_resources.h" -#include "components/content_settings/core/browser/host_content_settings_map.h" #include "components/content_settings/core/browser/website_settings_registry.h" #include "components/content_settings/core/common/content_settings_types.h" #include "components/content_settings/core/common/content_settings_utils.h" @@ -53,11 +52,11 @@ #include "content/public/browser/web_contents.h" #include "content/public/browser/web_ui.h" #include "content/public/common/origin_util.h" -#include "content/public/common/page_zoom.h" #include "content/public/common/url_constants.h" #include "extensions/browser/extension_registry.h" #include "extensions/common/permissions/api_permission.h" #include "extensions/common/permissions/permissions_data.h" +#include "third_party/blink/public/common/page/page_zoom.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/text/bytes_formatting.h" @@ -252,11 +251,11 @@ void ConvertSiteGroupMapToListValue( origin_object.SetKey( kHasPermissionSettings, base::Value(base::Contains(origin_permission_set, origin))); - origin_list.GetList().emplace_back(std::move(origin_object)); + origin_list.Append(std::move(origin_object)); } site_group.SetKey(kNumCookies, base::Value(0)); site_group.SetKey(kOriginList, std::move(origin_list)); - list_value->GetList().push_back(std::move(site_group)); + list_value->Append(std::move(site_group)); } } @@ -311,8 +310,6 @@ void LogAllSitesAction(AllSitesAction action) { SiteSettingsHandler::SiteSettingsHandler(Profile* profile) : profile_(profile), - observer_(this), - chooser_observer_(this), pref_change_registrar_(nullptr) {} SiteSettingsHandler::~SiteSettingsHandler() { @@ -1061,7 +1058,6 @@ void SiteSettingsHandler::HandleSetCategoryPermissionForPattern( CHECK_EQ(5U, args->GetSize()); std::string primary_pattern_string; CHECK(args->GetString(0, &primary_pattern_string)); - // TODO(dschuyler): Review whether |secondary_pattern_string| should be used. std::string secondary_pattern_string; CHECK(args->GetString(1, &secondary_pattern_string)); std::string type; @@ -1272,7 +1268,7 @@ void SiteSettingsHandler::SendZoomLevels() { // Calculate the zoom percent from the factor. Round up to the nearest whole // number. int zoom_percent = static_cast( - content::ZoomLevelToZoomFactor(zoom_level.zoom_level) * 100 + 0.5); + blink::PageZoomLevelToZoomFactor(zoom_level.zoom_level) * 100 + 0.5); exception->SetString(kZoom, base::FormatPercent(zoom_percent)); exception->SetString(site_settings::kSource, site_settings::SiteSettingSourceToString( diff --git a/chromium/chrome/browser/ui/webui/settings/site_settings_handler.h b/chromium/chrome/browser/ui/webui/settings/site_settings_handler.h index 04848c7d698..ed0eafa76ae 100644 --- a/chromium/chrome/browser/ui/webui/settings/site_settings_handler.h +++ b/chromium/chrome/browser/ui/webui/settings/site_settings_handler.h @@ -15,12 +15,12 @@ #include "chrome/browser/permissions/chooser_context_base.h" #include "chrome/browser/ui/webui/settings/settings_page_ui_handler.h" #include "components/content_settings/core/browser/content_settings_observer.h" +#include "components/content_settings/core/browser/host_content_settings_map.h" #include "content/public/browser/host_zoom_map.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" #include "ppapi/buildflags/buildflags.h" -class HostContentSettingsMap; class Profile; class PrefChangeRegistrar; @@ -254,11 +254,12 @@ class SiteSettingsHandler : public SettingsPageUIHandler, std::string clearing_origin_; // Change observer for content settings. - ScopedObserver observer_; + ScopedObserver observer_{ + this}; // Change observer for chooser permissions. ScopedObserver - chooser_observer_; + chooser_observer_{this}; // Change observer for prefs. std::unique_ptr pref_change_registrar_; diff --git a/chromium/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc b/chromium/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc index 3d5fc205b3d..99fe6375c41 100644 --- a/chromium/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc +++ b/chromium/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc @@ -513,9 +513,9 @@ TEST_F(SiteSettingsHandlerTest, MAYBE_GetAllSites) { base::ListValue get_all_sites_args; get_all_sites_args.AppendString(kCallbackId); base::Value category_list(base::Value::Type::LIST); - category_list.GetList().emplace_back(kNotifications); - category_list.GetList().emplace_back(kFlash); - get_all_sites_args.GetList().push_back(std::move(category_list)); + category_list.Append(kNotifications); + category_list.Append(kFlash); + get_all_sites_args.Append(std::move(category_list)); // Test all sites is empty when there are no preferences. handler()->HandleGetAllSites(&get_all_sites_args); @@ -527,7 +527,7 @@ TEST_F(SiteSettingsHandlerTest, MAYBE_GetAllSites) { EXPECT_EQ(kCallbackId, data.arg1()->GetString()); ASSERT_TRUE(data.arg2()->GetBool()); - const base::Value::ListStorage& site_groups = data.arg3()->GetList(); + base::span site_groups = data.arg3()->GetList(); EXPECT_EQ(0UL, site_groups.size()); } @@ -549,12 +549,12 @@ TEST_F(SiteSettingsHandlerTest, MAYBE_GetAllSites) { EXPECT_EQ(kCallbackId, data.arg1()->GetString()); ASSERT_TRUE(data.arg2()->GetBool()); - const base::Value::ListStorage& site_groups = data.arg3()->GetList(); + base::span site_groups = data.arg3()->GetList(); EXPECT_EQ(1UL, site_groups.size()); for (const base::Value& site_group : site_groups) { const std::string& etld_plus1_string = site_group.FindKey("etldPlus1")->GetString(); - const base::Value::ListStorage& origin_list = + base::span origin_list = site_group.FindKey("origins")->GetList(); EXPECT_EQ("example.com", etld_plus1_string); EXPECT_EQ(2UL, origin_list.size()); @@ -578,12 +578,12 @@ TEST_F(SiteSettingsHandlerTest, MAYBE_GetAllSites) { EXPECT_EQ(kCallbackId, data.arg1()->GetString()); ASSERT_TRUE(data.arg2()->GetBool()); - const base::Value::ListStorage& site_groups = data.arg3()->GetList(); + base::span site_groups = data.arg3()->GetList(); EXPECT_EQ(2UL, site_groups.size()); for (const base::Value& site_group : site_groups) { const std::string& etld_plus1_string = site_group.FindKey("etldPlus1")->GetString(); - const base::Value::ListStorage& origin_list = + base::span origin_list = site_group.FindKey("origins")->GetList(); if (etld_plus1_string == "example2.net") { EXPECT_EQ(1UL, origin_list.size()); @@ -617,7 +617,7 @@ TEST_F(SiteSettingsHandlerTest, MAYBE_GetAllSites) { EXPECT_EQ(kCallbackId, data.arg1()->GetString()); ASSERT_TRUE(data.arg2()->GetBool()); - const base::Value::ListStorage& site_groups = data.arg3()->GetList(); + base::span site_groups = data.arg3()->GetList(); EXPECT_EQ(3UL, site_groups.size()); } @@ -631,7 +631,7 @@ TEST_F(SiteSettingsHandlerTest, MAYBE_GetAllSites) { EXPECT_EQ(kCallbackId, data.arg1()->GetString()); ASSERT_TRUE(data.arg2()->GetBool()); - const base::Value::ListStorage& site_groups = data.arg3()->GetList(); + base::span site_groups = data.arg3()->GetList(); EXPECT_EQ(2UL, site_groups.size()); EXPECT_EQ("example.com", site_groups[0].FindKey("etldPlus1")->GetString()); EXPECT_EQ("example2.net", site_groups[1].FindKey("etldPlus1")->GetString()); @@ -660,7 +660,7 @@ TEST_F(SiteSettingsHandlerTest, MAYBE_GetAllSites) { EXPECT_EQ(kCallbackId, data.arg1()->GetString()); ASSERT_TRUE(data.arg2()->GetBool()); - const base::Value::ListStorage& site_groups = data.arg3()->GetList(); + base::span site_groups = data.arg3()->GetList(); EXPECT_EQ(2UL, site_groups.size()); EXPECT_EQ("example.com", site_groups[0].FindKey("etldPlus1")->GetString()); EXPECT_EQ("example2.net", site_groups[1].FindKey("etldPlus1")->GetString()); @@ -689,7 +689,7 @@ TEST_F(SiteSettingsHandlerTest, MAYBE_GetAllSites) { EXPECT_EQ(kCallbackId, data.arg1()->GetString()); ASSERT_TRUE(data.arg2()->GetBool()); - const base::Value::ListStorage& site_groups = data.arg3()->GetList(); + base::span site_groups = data.arg3()->GetList(); EXPECT_EQ(2UL, site_groups.size()); EXPECT_EQ("example.com", site_groups[0].FindKey("etldPlus1")->GetString()); EXPECT_EQ("example2.net", site_groups[1].FindKey("etldPlus1")->GetString()); diff --git a/chromium/chrome/browser/ui/webui/settings/tts_handler.cc b/chromium/chrome/browser/ui/webui/settings/tts_handler.cc index 605afeb6055..f17e4b3a742 100644 --- a/chromium/chrome/browser/ui/webui/settings/tts_handler.cc +++ b/chromium/chrome/browser/ui/webui/settings/tts_handler.cc @@ -66,7 +66,7 @@ void TtsHandler::HandleGetTtsExtensions(const base::ListValue* args) { extensions::OptionsPageInfo::GetOptionsPage(extension).spec()); } - responses.GetList().push_back(std::move(response)); + responses.Append(std::move(response)); } FireWebUIListener("tts-extensions-updated", responses); @@ -100,7 +100,7 @@ void TtsHandler::OnVoicesChanged() { response.SetString("fullLanguageCode", voice.lang); response.SetInteger("languageScore", language_score); response.SetString("extensionId", voice.engine_id); - responses.GetList().push_back(std::move(response)); + responses.Append(std::move(response)); } AllowJavascript(); FireWebUIListener("all-voice-data-updated", responses); @@ -139,7 +139,7 @@ void TtsHandler::HandlePreviewTtsVoice(const base::ListValue* args) { json->GetString("name", &name); json->GetString("extension", &extension_id); - content::TtsUtterance* utterance = + std::unique_ptr utterance = content::TtsUtterance::Create((Profile::FromWebUI(web_ui()))); utterance->SetText(text); utterance->SetVoiceName(name); @@ -151,7 +151,7 @@ void TtsHandler::HandlePreviewTtsVoice(const base::ListValue* args) { base::Value result(true /* preview started */); FireWebUIListener("tts-preview-state-changed", result); - content::TtsController::GetInstance()->SpeakOrEnqueue(utterance); + content::TtsController::GetInstance()->SpeakOrEnqueue(std::move(utterance)); } void TtsHandler::RegisterMessages() { diff --git a/chromium/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.cc b/chromium/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.cc index 0086f6c69f5..177391f3c3c 100644 --- a/chromium/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.cc +++ b/chromium/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.cc @@ -9,6 +9,7 @@ #include "base/bind.h" #include "base/location.h" #include "base/logging.h" +#include "base/macros.h" #include "base/metrics/histogram_macros.h" #include "base/metrics/user_metrics.h" #include "base/metrics/user_metrics_action.h" @@ -19,6 +20,8 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/policy/cloud/user_policy_signin_service.h" #include "chrome/browser/policy/cloud/user_policy_signin_service_factory.h" +#include "chrome/browser/policy/policy_conversions.h" +#include "chrome/browser/policy/profile_policy_connector.h" #include "chrome/browser/profiles/profile_attributes_storage.h" #include "chrome/browser/profiles/profile_avatar_icon_util.h" #include "chrome/browser/profiles/profile_manager.h" @@ -31,6 +34,7 @@ #include "chrome/browser/unified_consent/unified_consent_service_factory.h" #include "components/keyed_service/content/browser_context_keyed_service_shutdown_notifier_factory.h" #include "components/policy/core/browser/browser_policy_connector.h" +#include "components/policy/core/common/cloud/user_cloud_policy_manager.h" #include "components/prefs/pref_service.h" #include "components/signin/public/base/signin_metrics.h" #include "components/signin/public/base/signin_pref_names.h" @@ -72,7 +76,7 @@ class DiceTurnSyncOnHelperShutdownNotifierFactory }; AccountInfo GetAccountInfo(signin::IdentityManager* identity_manager, - const std::string& account_id) { + const CoreAccountId& account_id) { auto maybe_account_info = identity_manager ->FindExtendedAccountInfoForAccountWithRefreshTokenByAccountId( @@ -104,7 +108,6 @@ class TokensLoadedCallbackRunner : public signin::IdentityManager::Observer { KeyedServiceShutdownNotifier* shutdown_notifier, base::OnceClosure callback) : identity_manager_(identity_manager), - scoped_identity_manager_observer_(this), callback_(std::move(callback)), shutdown_subscription_(shutdown_notifier->Subscribe( base::Bind(&TokensLoadedCallbackRunner::OnShutdown, @@ -122,11 +125,13 @@ class TokensLoadedCallbackRunner : public signin::IdentityManager::Observer { void OnShutdown() { delete this; } signin::IdentityManager* identity_manager_; - ScopedObserver - scoped_identity_manager_observer_; + ScopedObserver + scoped_identity_manager_observer_{this}; base::OnceClosure callback_; std::unique_ptr shutdown_subscription_; + + DISALLOW_COPY_AND_ASSIGN(TokensLoadedCallbackRunner); }; } // namespace @@ -136,7 +141,7 @@ DiceTurnSyncOnHelper::DiceTurnSyncOnHelper( signin_metrics::AccessPoint signin_access_point, signin_metrics::PromoAction signin_promo_action, signin_metrics::Reason signin_reason, - const std::string& account_id, + const CoreAccountId& account_id, SigninAbortedMode signin_aborted_mode, std::unique_ptr delegate, base::OnceClosure callback) @@ -199,7 +204,7 @@ DiceTurnSyncOnHelper::DiceTurnSyncOnHelper( signin_metrics::AccessPoint signin_access_point, signin_metrics::PromoAction signin_promo_action, signin_metrics::Reason signin_reason, - const std::string& account_id, + const CoreAccountId& account_id, SigninAbortedMode signin_aborted_mode) : DiceTurnSyncOnHelper( profile, @@ -346,17 +351,38 @@ void DiceTurnSyncOnHelper::OnPolicyFetchComplete(bool success) { // PrimaryAccountMutator::ClearPrimaryAccount() here instead. DLOG_IF(ERROR, !success) << "Error fetching policy for user"; DVLOG_IF(1, success) << "Policy fetch successful - completing signin"; + if (VLOG_IS_ON(2)) { + // User cloud policies have been fetched from the server. Dump all policy + // values into log once these new policies are merged. + profile_->GetProfilePolicyConnector() + ->policy_service() + ->AddProviderUpdateObserver(this); + } SigninAndShowSyncConfirmationUI(); } +void DiceTurnSyncOnHelper::OnProviderUpdatePropagated( + policy::ConfigurationPolicyProvider* provider) { + if (provider != profile_->GetUserCloudPolicyManager()) + return; + VLOG(2) << "Policies after sign in:"; + VLOG(2) << policy::DictionaryPolicyConversions() + .WithBrowserContext(profile_) + .ToJSON(); + profile_->GetProfilePolicyConnector() + ->policy_service() + ->RemoveProviderUpdateObserver(this); +} + void DiceTurnSyncOnHelper::CreateNewSignedInProfile() { // Create a new profile and have it call back when done so we can start the // signin flow. - size_t icon_index = g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .ChooseAvatarIconIndexForNewProfile(); + ProfileAttributesStorage& storage = + g_browser_process->profile_manager()->GetProfileAttributesStorage(); + size_t icon_index = storage.ChooseAvatarIconIndexForNewProfile(); + ProfileManager::CreateMultiProfileAsync( - base::UTF8ToUTF16(account_info_.email), + storage.ChooseNameForNewProfile(icon_index), profiles::GetDefaultAvatarIconUrl(icon_index), base::BindRepeating(&DiceTurnSyncOnHelper::OnNewProfileCreated, weak_pointer_factory_.GetWeakPtr())); @@ -490,7 +516,8 @@ void DiceTurnSyncOnHelper::FinishSyncSetupAndDelete( case LoginUIService::SYNC_WITH_DEFAULT_SETTINGS: { syncer::SyncService* sync_service = GetSyncService(); if (sync_service) - sync_service->GetUserSettings()->SetFirstSetupComplete(); + sync_service->GetUserSettings()->SetFirstSetupComplete( + syncer::SyncFirstSetupCompleteSource::BASIC_FLOW); if (consent_service) consent_service->SetUrlKeyedAnonymizedDataCollectionEnabled(true); break; diff --git a/chromium/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.h b/chromium/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.h index 59e334ddc00..66f5dce0a9e 100644 --- a/chromium/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.h +++ b/chromium/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.h @@ -16,6 +16,7 @@ #include "chrome/browser/sync/sync_startup_tracker.h" #include "chrome/browser/ui/webui/signin/login_ui_service.h" #include "components/keyed_service/core/keyed_service_shutdown_notifier.h" +#include "components/policy/core/common/policy_service.h" #include "components/signin/public/base/signin_metrics.h" #include "components/signin/public/identity_manager/account_info.h" @@ -32,7 +33,9 @@ class SyncSetupInProgressHandle; // Handles details of setting the primary account with IdentityManager and // turning on sync for an account for which there is already a refresh token. -class DiceTurnSyncOnHelper : public SyncStartupTracker::Observer { +class DiceTurnSyncOnHelper + : public SyncStartupTracker::Observer, + public policy::PolicyService::ProviderUpdateObserver { public: // Behavior when the signin is aborted (by an error or cancelled by the user). enum class SigninAbortedMode { @@ -99,7 +102,7 @@ class DiceTurnSyncOnHelper : public SyncStartupTracker::Observer { signin_metrics::AccessPoint signin_access_point, signin_metrics::PromoAction signin_promo_action, signin_metrics::Reason signin_reason, - const std::string& account_id, + const CoreAccountId& account_id, SigninAbortedMode signin_aborted_mode, std::unique_ptr delegate, base::OnceClosure callback); @@ -110,7 +113,7 @@ class DiceTurnSyncOnHelper : public SyncStartupTracker::Observer { signin_metrics::AccessPoint signin_access_point, signin_metrics::PromoAction signin_promo_action, signin_metrics::Reason signin_reason, - const std::string& account_id, + const CoreAccountId& account_id, SigninAbortedMode signin_aborted_mode); // SyncStartupTracker::Observer: @@ -160,6 +163,10 @@ class DiceTurnSyncOnHelper : public SyncStartupTracker::Observer { // true if policy was successfully fetched. void OnPolicyFetchComplete(bool success); + // policy::PolicyService::ProviderUpdateObserver + void OnProviderUpdatePropagated( + policy::ConfigurationPolicyProvider* provider) override; + // Called to create a new profile, which is then signed in with the // in-progress auth credentials currently stored in this object. void CreateNewSignedInProfile(); diff --git a/chromium/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_delegate_impl.cc b/chromium/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_delegate_impl.cc index 471ba9afc22..ab43eb03cb4 100644 --- a/chromium/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_delegate_impl.cc +++ b/chromium/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_delegate_impl.cc @@ -90,16 +90,15 @@ void DiceTurnSyncOnHelperDelegateImpl::SigninDialogDelegate:: DiceTurnSyncOnHelperDelegateImpl::DiceTurnSyncOnHelperDelegateImpl( Browser* browser) - : browser_(browser), - profile_(browser_->profile()), - scoped_browser_list_observer_(this), - scoped_login_ui_service_observer_(this) { + : browser_(browser), profile_(browser_->profile()) { DCHECK(browser); DCHECK(profile_); - scoped_browser_list_observer_.Add(BrowserList::GetInstance()); + BrowserList::AddObserver(this); } -DiceTurnSyncOnHelperDelegateImpl::~DiceTurnSyncOnHelperDelegateImpl() {} +DiceTurnSyncOnHelperDelegateImpl::~DiceTurnSyncOnHelperDelegateImpl() { + BrowserList::RemoveObserver(this); +} void DiceTurnSyncOnHelperDelegateImpl::ShowLoginError( const std::string& email, diff --git a/chromium/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_delegate_impl.h b/chromium/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_delegate_impl.h index cbbce5c5e98..61406114b71 100644 --- a/chromium/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_delegate_impl.h +++ b/chromium/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_delegate_impl.h @@ -14,7 +14,6 @@ #include "chrome/browser/ui/webui/signin/login_ui_service.h" class Browser; -class BrowserList; class Profile; // Default implementation for DiceTurnSyncOnHelper::Delegate. @@ -69,10 +68,8 @@ class DiceTurnSyncOnHelperDelegateImpl : public DiceTurnSyncOnHelper::Delegate, Profile* profile_; base::OnceCallback sync_confirmation_callback_; - ScopedObserver - scoped_browser_list_observer_; ScopedObserver - scoped_login_ui_service_observer_; + scoped_login_ui_service_observer_{this}; DISALLOW_COPY_AND_ASSIGN(DiceTurnSyncOnHelperDelegateImpl); }; diff --git a/chromium/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_unittest.cc b/chromium/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_unittest.cc index b3d39140ff4..c1b13af01e6 100644 --- a/chromium/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_unittest.cc +++ b/chromium/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_unittest.cc @@ -46,8 +46,6 @@ using ::testing::AtLeast; using ::testing::Return; -using namespace unified_consent; - class DiceTurnSyncOnHelperTestBase; namespace { @@ -103,10 +101,11 @@ class UnittestProfileManager : public ProfileManagerWithoutInit { : ProfileManagerWithoutInit(user_data_dir) {} protected: - Profile* CreateProfileHelper(const base::FilePath& file_path) override { - if (!base::PathExists(file_path) && !base::CreateDirectory(file_path)) + std::unique_ptr CreateProfileHelper( + const base::FilePath& path) override { + if (!base::PathExists(path) && !base::CreateDirectory(path)) return nullptr; - return BuildTestingProfile(file_path, /*delegate=*/nullptr).release(); + return BuildTestingProfile(path, /*delegate=*/nullptr); } std::unique_ptr CreateProfileAsyncHelper( @@ -140,7 +139,7 @@ class FakeUserPolicySigninService : public policy::UserPolicySigninService { void set_dm_token(const std::string& dm_token) { dm_token_ = dm_token; } void set_client_id(const std::string& client_id) { client_id_ = client_id; } - void set_account(const std::string& account_id, const std::string& email) { + void set_account(const CoreAccountId& account_id, const std::string& email) { account_id_ = account_id; email_ = email; } @@ -148,7 +147,7 @@ class FakeUserPolicySigninService : public policy::UserPolicySigninService { // policy::UserPolicySigninService: void RegisterForPolicyWithAccountId( const std::string& username, - const std::string& account_id, + const CoreAccountId& account_id, const PolicyRegistrationCallback& callback) override { EXPECT_EQ(email_, username); EXPECT_EQ(account_id_, account_id); @@ -168,7 +167,7 @@ class FakeUserPolicySigninService : public policy::UserPolicySigninService { private: std::string dm_token_; std::string client_id_; - std::string account_id_; + CoreAccountId account_id_; std::string email_; }; @@ -237,7 +236,7 @@ class DiceTurnSyncOnHelperTestBase : public testing::Test { signin::IdentityManager* identity_manager() { return identity_test_env()->identity_manager(); } - const std::string& account_id() { return account_id_; } + const CoreAccountId& account_id() { return account_id_; } FakeUserPolicySigninService* user_policy_signin_service() { return user_policy_signin_service_; } @@ -272,7 +271,7 @@ class DiceTurnSyncOnHelperTestBase : public testing::Test { user_policy_signin_service_->set_account(account_id_, kEnterpriseEmail); } - void UseInvalidAccount() { account_id_ = "invalid_account"; } + void UseInvalidAccount() { account_id_ = CoreAccountId("invalid_account"); } void SetExpectationsForSyncStartupCompleted() { syncer::MockSyncService* mock_sync_service = GetMockSyncService(); @@ -408,7 +407,7 @@ class DiceTurnSyncOnHelperTestBase : public testing::Test { content::BrowserTaskEnvironment task_environment_; base::ScopedTempDir temp_dir_; ScopedTestingLocalState local_state_; - std::string account_id_; + CoreAccountId account_id_; std::unique_ptr profile_; std::unique_ptr identity_test_env_profile_adaptor_; @@ -442,12 +441,13 @@ class DiceTurnSyncOnHelperTestWithUnifiedConsent : public DiceTurnSyncOnHelperTestBase { public: DiceTurnSyncOnHelperTestWithUnifiedConsent() - : scoped_unified_consent_(UnifiedConsentFeatureState::kEnabled) {} + : scoped_unified_consent_( + unified_consent::UnifiedConsentFeatureState::kEnabled) {} ~DiceTurnSyncOnHelperTestWithUnifiedConsent() override {} private: ScopedAccountConsistencyDice scoped_dice_; - ScopedUnifiedConsent scoped_unified_consent_; + unified_consent::ScopedUnifiedConsent scoped_unified_consent_; }; // TestDiceTurnSyncOnHelperDelegate implementation. @@ -654,8 +654,9 @@ TEST_F(DiceTurnSyncOnHelperTest, UndoSync) { // Set expectations. expected_sync_confirmation_shown_ = true; SetExpectationsForSyncStartupCompleted(); - EXPECT_CALL(*GetMockSyncService()->GetMockUserSettings(), - SetFirstSetupComplete()) + EXPECT_CALL( + *GetMockSyncService()->GetMockUserSettings(), + SetFirstSetupComplete(syncer::SyncFirstSetupCompleteSource::BASIC_FLOW)) .Times(0); // Signin flow. @@ -674,8 +675,9 @@ TEST_F(DiceTurnSyncOnHelperTest, ConfigureSync) { expected_sync_confirmation_shown_ = true; expected_sync_settings_shown_ = true; SetExpectationsForSyncStartupCompleted(); - EXPECT_CALL(*GetMockSyncService()->GetMockUserSettings(), - SetFirstSetupComplete()) + EXPECT_CALL( + *GetMockSyncService()->GetMockUserSettings(), + SetFirstSetupComplete(syncer::SyncFirstSetupCompleteSource::BASIC_FLOW)) .Times(0); // Configure the test. @@ -696,8 +698,9 @@ TEST_F(DiceTurnSyncOnHelperTest, StartSync) { // Set expectations. expected_sync_confirmation_shown_ = true; SetExpectationsForSyncStartupCompleted(); - EXPECT_CALL(*GetMockSyncService()->GetMockUserSettings(), - SetFirstSetupComplete()) + EXPECT_CALL( + *GetMockSyncService()->GetMockUserSettings(), + SetFirstSetupComplete(syncer::SyncFirstSetupCompleteSource::BASIC_FLOW)) .Times(1); // Configure the test. sync_confirmation_result_ = LoginUIService::SyncConfirmationUIClosedResult:: @@ -720,8 +723,9 @@ TEST_F(DiceTurnSyncOnHelperTest, ShowSyncDialogForEndConsumerAccount) { sync_confirmation_result_ = LoginUIService::SyncConfirmationUIClosedResult:: SYNC_WITH_DEFAULT_SETTINGS; SetExpectationsForSyncStartupCompleted(); - EXPECT_CALL(*GetMockSyncService()->GetMockUserSettings(), - SetFirstSetupComplete()) + EXPECT_CALL( + *GetMockSyncService()->GetMockUserSettings(), + SetFirstSetupComplete(syncer::SyncFirstSetupCompleteSource::BASIC_FLOW)) .Times(1); // Signin flow. @@ -738,21 +742,23 @@ TEST_F(DiceTurnSyncOnHelperTest, ShowSyncDialogForEndConsumerAccount) { // Tests that the user enabled unified consent, TEST_F(DiceTurnSyncOnHelperTestWithUnifiedConsent, ShowSyncDialogForEndConsumerAccount_UnifiedConsentEnabled) { - ASSERT_TRUE(IsUnifiedConsentFeatureEnabled()); + ASSERT_TRUE(unified_consent::IsUnifiedConsentFeatureEnabled()); // Set expectations. expected_sync_confirmation_shown_ = true; sync_confirmation_result_ = LoginUIService::SyncConfirmationUIClosedResult:: SYNC_WITH_DEFAULT_SETTINGS; SetExpectationsForSyncStartupCompleted(); - EXPECT_CALL(*GetMockSyncService()->GetMockUserSettings(), - SetFirstSetupComplete()) + EXPECT_CALL( + *GetMockSyncService()->GetMockUserSettings(), + SetFirstSetupComplete(syncer::SyncFirstSetupCompleteSource::BASIC_FLOW)) .Times(1); PrefService* pref_service = profile()->GetPrefs(); - std::unique_ptr - url_keyed_collection_helper = UrlKeyedDataCollectionConsentHelper:: - NewAnonymizedDataCollectionConsentHelper( - pref_service, - ProfileSyncServiceFactory::GetForProfile(profile())); + std::unique_ptr + url_keyed_collection_helper = + unified_consent::UrlKeyedDataCollectionConsentHelper:: + NewAnonymizedDataCollectionConsentHelper( + pref_service, + ProfileSyncServiceFactory::GetForProfile(profile())); EXPECT_FALSE(url_keyed_collection_helper->IsEnabled()); // Signin flow. @@ -792,8 +798,9 @@ TEST_F(DiceTurnSyncOnHelperTest, // Simulate that sync startup has completed. expected_sync_confirmation_shown_ = true; - EXPECT_CALL(*GetMockSyncService()->GetMockUserSettings(), - SetFirstSetupComplete()) + EXPECT_CALL( + *GetMockSyncService()->GetMockUserSettings(), + SetFirstSetupComplete(syncer::SyncFirstSetupCompleteSource::BASIC_FLOW)) .Times(1); sync_confirmation_result_ = LoginUIService::SyncConfirmationUIClosedResult:: SYNC_WITH_DEFAULT_SETTINGS; @@ -826,8 +833,9 @@ TEST_F(DiceTurnSyncOnHelperTest, // Simulate that sync startup has failed. expected_sync_confirmation_shown_ = true; - EXPECT_CALL(*GetMockSyncService()->GetMockUserSettings(), - SetFirstSetupComplete()) + EXPECT_CALL( + *GetMockSyncService()->GetMockUserSettings(), + SetFirstSetupComplete(syncer::SyncFirstSetupCompleteSource::BASIC_FLOW)) .Times(1); sync_confirmation_result_ = LoginUIService::SyncConfirmationUIClosedResult:: SYNC_WITH_DEFAULT_SETTINGS; diff --git a/chromium/chrome/browser/ui/webui/signin/inline_login_handler.cc b/chromium/chrome/browser/ui/webui/signin/inline_login_handler.cc index fb483f45025..f370580c44b 100644 --- a/chromium/chrome/browser/ui/webui/signin/inline_login_handler.cc +++ b/chromium/chrome/browser/ui/webui/signin/inline_login_handler.cc @@ -32,6 +32,7 @@ #include "content/public/browser/web_ui.h" #include "google_apis/gaia/gaia_urls.h" #include "net/base/url_util.h" +#include "services/network/public/mojom/cookie_manager.mojom.h" const char kSignInPromoQueryKeyShowAccountManagement[] = "showAccountManagement"; @@ -162,11 +163,9 @@ void InlineLoginHandler::HandleCompleteLoginMessage( content::BrowserContext::GetStoragePartitionForSite( contents->GetBrowserContext(), signin::GetSigninPartitionURL()); - net::CookieOptions cookie_options; - cookie_options.set_include_httponly(); - partition->GetCookieManagerForBrowserProcess()->GetCookieList( - GaiaUrls::GetInstance()->gaia_url(), cookie_options, + GaiaUrls::GetInstance()->gaia_url(), + net::CookieOptions::MakeAllInclusive(), base::BindOnce(&InlineLoginHandler::HandleCompleteLoginMessageWithCookies, weak_ptr_factory_.GetWeakPtr(), base::ListValue(args->GetList()))); diff --git a/chromium/chrome/browser/ui/webui/signin/inline_login_handler_chromeos.cc b/chromium/chrome/browser/ui/webui/signin/inline_login_handler_chromeos.cc index a127593b60e..9deb43dc90f 100644 --- a/chromium/chrome/browser/ui/webui/signin/inline_login_handler_chromeos.cc +++ b/chromium/chrome/browser/ui/webui/signin/inline_login_handler_chromeos.cc @@ -11,6 +11,7 @@ #include "base/threading/sequenced_task_runner_handle.h" #include "base/values.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/browser_process_platform_part.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser_commands.h" #include "chrome/browser/ui/webui/signin/inline_login_handler.h" diff --git a/chromium/chrome/browser/ui/webui/signin/inline_login_handler_dialog_chromeos.cc b/chromium/chrome/browser/ui/webui/signin/inline_login_handler_dialog_chromeos.cc index 3f4e4878ee9..773b7d1a78b 100644 --- a/chromium/chrome/browser/ui/webui/signin/inline_login_handler_dialog_chromeos.cc +++ b/chromium/chrome/browser/ui/webui/signin/inline_login_handler_dialog_chromeos.cc @@ -9,9 +9,14 @@ #include "base/logging.h" #include "base/macros.h" +#include "chrome/browser/chromeos/profiles/profile_helper.h" +#include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/ui/webui/chromeos/system_web_dialog_delegate.h" #include "chrome/common/webui_url_constants.h" +#include "chromeos/constants/chromeos_pref_names.h" +#include "components/prefs/pref_service.h" #include "components/web_modal/web_contents_modal_dialog_manager.h" +#include "google_apis/gaia/gaia_auth_util.h" #include "net/base/url_util.h" #include "ui/aura/window.h" #include "ui/display/display.h" @@ -27,6 +32,12 @@ InlineLoginHandlerDialogChromeOS* dialog = nullptr; constexpr int kSigninDialogWidth = 768; constexpr int kSigninDialogHeight = 640; +bool IsDeviceAccountEmail(const std::string& email) { + auto* active_user = user_manager::UserManager::Get()->GetActiveUser(); + return active_user && + gaia::AreEmailsSame(active_user->GetDisplayEmail(), email); +} + } // namespace // static @@ -36,10 +47,20 @@ void InlineLoginHandlerDialogChromeOS::Show(const std::string& email) { return; } - GURL url(chrome::kChromeUIChromeSigninURL); - if (!email.empty()) { - url = net::AppendQueryParameter(url, "email", email); - url = net::AppendQueryParameter(url, "readOnlyEmail", "true"); + GURL url; + if (ProfileManager::GetActiveUserProfile()->GetPrefs()->GetBoolean( + chromeos::prefs::kSecondaryGoogleAccountSigninAllowed) || + IsDeviceAccountEmail(email)) { + // Addition of secondary Google Accounts is allowed OR it's a primary + // account re-auth. + url = GURL(chrome::kChromeUIChromeSigninURL); + if (!email.empty()) { + url = net::AppendQueryParameter(url, "email", email); + url = net::AppendQueryParameter(url, "readOnlyEmail", "true"); + } + } else { + // Addition of secondary Google Accounts is not allowed. + url = GURL(chrome::kChromeUIAccountManagerErrorURL); } // Will be deleted by |SystemWebDialogDelegate::OnDialogClosed|. diff --git a/chromium/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc b/chromium/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc index 08092d21e0c..2b8e201ce88 100644 --- a/chromium/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc +++ b/chromium/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc @@ -448,7 +448,7 @@ void InlineSigninHelper::CreateSyncStarter(const std::string& refresh_token) { } Browser* browser = chrome::FindLastActiveWithProfile(profile_); - std::string account_id = + CoreAccountId account_id = identity_manager->GetAccountsMutator()->AddOrUpdateAccount( gaia_id_, email_, refresh_token, /*is_under_advanced_protection=*/false, diff --git a/chromium/chrome/browser/ui/webui/signin/login_ui_test_utils.cc b/chromium/chrome/browser/ui/webui/signin/login_ui_test_utils.cc index a32321ef2ed..ed915c86e1c 100644 --- a/chromium/chrome/browser/ui/webui/signin/login_ui_test_utils.cc +++ b/chromium/chrome/browser/ui/webui/signin/login_ui_test_utils.cc @@ -298,7 +298,7 @@ bool SignInWithUI(Browser* browser, return false; #else SignInObserver signin_observer; - ScopedObserver + ScopedObserver scoped_signin_observer(&signin_observer); scoped_signin_observer.Add( IdentityManagerFactory::GetForProfile(browser->profile())); diff --git a/chromium/chrome/browser/ui/webui/signin/signin_email_confirmation_ui.cc b/chromium/chrome/browser/ui/webui/signin/signin_email_confirmation_ui.cc index fbdc4b44378..b8bf3ffe9b6 100644 --- a/chromium/chrome/browser/ui/webui/signin/signin_email_confirmation_ui.cc +++ b/chromium/chrome/browser/ui/webui/signin/signin_email_confirmation_ui.cc @@ -27,7 +27,8 @@ SigninEmailConfirmationUI::SigninEmailConfirmationUI(content::WebUI* web_ui) source->SetDefaultResource(IDR_SIGNIN_EMAIL_CONFIRMATION_HTML); source->AddResourcePath("signin_email_confirmation.js", IDR_SIGNIN_EMAIL_CONFIRMATION_JS); - source->AddResourcePath("signin_shared_css.html", IDR_SIGNIN_SHARED_CSS_HTML); + source->AddResourcePath("signin_shared_old_css.html", + IDR_SIGNIN_SHARED_OLD_CSS_HTML); static constexpr LocalizedString kStrings[] = { {"signinEmailConfirmationTitle", IDS_SIGNIN_EMAIL_CONFIRMATION_TITLE}, diff --git a/chromium/chrome/browser/ui/webui/signin/signin_error_ui.cc b/chromium/chrome/browser/ui/webui/signin/signin_error_ui.cc index 5a6f3effed4..cef433977bc 100644 --- a/chromium/chrome/browser/ui/webui/signin/signin_error_ui.cc +++ b/chromium/chrome/browser/ui/webui/signin/signin_error_ui.cc @@ -69,7 +69,8 @@ void SigninErrorUI::Initialize(Browser* browser, bool is_system_profile) { source->UseStringsJs(); source->SetDefaultResource(IDR_SIGNIN_ERROR_HTML); source->AddResourcePath("signin_error.js", IDR_SIGNIN_ERROR_JS); - source->AddResourcePath("signin_shared_css.html", IDR_SIGNIN_SHARED_CSS_HTML); + source->AddResourcePath("signin_shared_old_css.html", + IDR_SIGNIN_SHARED_OLD_CSS_HTML); source->AddBoolean("isSystemProfile", is_system_profile); // Retrieve the last signin error message and email used. @@ -132,6 +133,9 @@ void SigninErrorUI::Initialize(Browser* browser, bool is_system_profile) { .GetAllProfilesAttributes(); DCHECK(!email.empty()); for (const ProfileAttributesEntry* entry : entries) { + if (!entry->IsAuthenticated()) + continue; + if (gaia::AreEmailsSame(base::UTF16ToUTF8(email), base::UTF16ToUTF8(entry->GetUserName()))) { handler->set_duplicate_profile_path(entry->GetPath()); diff --git a/chromium/chrome/browser/ui/webui/signin/signin_utils_desktop.cc b/chromium/chrome/browser/ui/webui/signin/signin_utils_desktop.cc index 80d414cc9a3..9352d9826af 100644 --- a/chromium/chrome/browser/ui/webui/signin/signin_utils_desktop.cc +++ b/chromium/chrome/browser/ui/webui/signin/signin_utils_desktop.cc @@ -85,6 +85,9 @@ bool CanOfferSignin(Profile* profile, .GetAllProfilesAttributes(); for (const ProfileAttributesEntry* entry : entries) { + if (!entry->IsAuthenticated()) + continue; + // For backward compatibility, need to check also the username of the // profile, since the GAIA ID may not have been set yet in the // ProfileAttributesStorage. It will be set once the profile diff --git a/chromium/chrome/browser/ui/webui/signin/sync_confirmation_handler.cc b/chromium/chrome/browser/ui/webui/signin/sync_confirmation_handler.cc index 2ae8e584e01..841ba4a67ac 100644 --- a/chromium/chrome/browser/ui/webui/signin/sync_confirmation_handler.cc +++ b/chromium/chrome/browser/ui/webui/signin/sync_confirmation_handler.cc @@ -117,7 +117,7 @@ void SyncConfirmationHandler::HandleAccountImageRequest( void SyncConfirmationHandler::RecordConsent(const base::ListValue* args) { CHECK_EQ(2U, args->GetSize()); - const std::vector& consent_description = + base::span consent_description = args->GetList()[0].GetList(); const std::string& consent_confirmation = args->GetList()[1].GetString(); @@ -211,6 +211,8 @@ void SyncConfirmationHandler::CloseModalSigninWindow( void SyncConfirmationHandler::HandleInitializedWithSize( const base::ListValue* args) { + AllowJavascript(); + if (!browser_) return; @@ -237,5 +239,5 @@ void SyncConfirmationHandler::HandleInitializedWithSize( // TODO(anthonyvd): Figure out why this is needed on Mac and not other // platforms and if there's a way to start unfocused while avoiding this // workaround. - web_ui()->CallJavascriptFunctionUnsafe("sync.confirmation.clearFocus"); + FireWebUIListener("clear-focus"); } diff --git a/chromium/chrome/browser/ui/webui/signin/sync_confirmation_handler_unittest.cc b/chromium/chrome/browser/ui/webui/signin/sync_confirmation_handler_unittest.cc index a38f485d26e..635e26153b6 100644 --- a/chromium/chrome/browser/ui/webui/signin/sync_confirmation_handler_unittest.cc +++ b/chromium/chrome/browser/ui/webui/signin/sync_confirmation_handler_unittest.cc @@ -225,8 +225,9 @@ TEST_F(SyncConfirmationHandlerTest, TestSetImageIfPrimaryAccountReady) { handler()->HandleInitializedWithSize(&args); ExpectAccountImageChanged(*web_ui()->call_data()[0]); - EXPECT_EQ("sync.confirmation.clearFocus", + EXPECT_EQ("cr.webUIListenerCallback", web_ui()->call_data()[1]->function_name()); + EXPECT_EQ("clear-focus", web_ui()->call_data()[1]->arg1()->GetString()); } TEST_F(SyncConfirmationHandlerTest, TestSetImageIfPrimaryAccountReadyLater) { @@ -236,8 +237,9 @@ TEST_F(SyncConfirmationHandlerTest, TestSetImageIfPrimaryAccountReadyLater) { EXPECT_EQ(2U, web_ui()->call_data().size()); ExpectAccountImageChanged(*web_ui()->call_data()[0]); - EXPECT_EQ("sync.confirmation.clearFocus", + EXPECT_EQ("cr.webUIListenerCallback", web_ui()->call_data()[1]->function_name()); + EXPECT_EQ("clear-focus", web_ui()->call_data()[1]->arg1()->GetString()); identity_test_env()->SimulateSuccessfulFetchOfAccountInfo( account_info_.account_id, account_info_.email, account_info_.gaia, "", @@ -293,11 +295,11 @@ TEST_F(SyncConfirmationHandlerTest, TestHandleUndo) { TEST_F(SyncConfirmationHandlerTest, TestHandleConfirm) { // The consent description consists of strings 1, 2, and 4. base::ListValue consent_description; - consent_description.GetList().push_back( + consent_description.Append( base::Value(SyncConfirmationHandlerTest::kConsentText1)); - consent_description.GetList().push_back( + consent_description.Append( base::Value(SyncConfirmationHandlerTest::kConsentText2)); - consent_description.GetList().push_back( + consent_description.Append( base::Value(SyncConfirmationHandlerTest::kConsentText4)); // The consent confirmation contains string 5. @@ -305,8 +307,8 @@ TEST_F(SyncConfirmationHandlerTest, TestHandleConfirm) { // These are passed as parameters to HandleConfirm(). base::ListValue args; - args.GetList().push_back(std::move(consent_description)); - args.GetList().push_back(std::move(consent_confirmation)); + args.Append(std::move(consent_description)); + args.Append(std::move(consent_confirmation)); handler()->HandleConfirm(&args); did_user_explicitly_interact = true; @@ -334,11 +336,11 @@ TEST_F(SyncConfirmationHandlerTest, TestHandleConfirm) { TEST_F(SyncConfirmationHandlerTest, TestHandleConfirmWithAdvancedSyncSettings) { // The consent description consists of strings 2, 3, and 5. base::ListValue consent_description; - consent_description.GetList().push_back( + consent_description.Append( base::Value(SyncConfirmationHandlerTest::kConsentText2)); - consent_description.GetList().push_back( + consent_description.Append( base::Value(SyncConfirmationHandlerTest::kConsentText3)); - consent_description.GetList().push_back( + consent_description.Append( base::Value(SyncConfirmationHandlerTest::kConsentText5)); // The consent confirmation contains string 2. @@ -346,8 +348,8 @@ TEST_F(SyncConfirmationHandlerTest, TestHandleConfirmWithAdvancedSyncSettings) { // These are passed as parameters to HandleGoToSettings(). base::ListValue args; - args.GetList().push_back(std::move(consent_description)); - args.GetList().push_back(std::move(consent_confirmation)); + args.Append(std::move(consent_description)); + args.Append(std::move(consent_confirmation)); handler()->HandleGoToSettings(&args); did_user_explicitly_interact = true; diff --git a/chromium/chrome/browser/ui/webui/signin/sync_confirmation_ui.cc b/chromium/chrome/browser/ui/webui/signin/sync_confirmation_ui.cc index 233b67c2b9d..ba5d2d29219 100644 --- a/chromium/chrome/browser/ui/webui/signin/sync_confirmation_ui.cc +++ b/chromium/chrome/browser/ui/webui/signin/sync_confirmation_ui.cc @@ -24,6 +24,7 @@ #include "content/public/browser/web_ui_data_source.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/webui/web_ui_util.h" +#include "ui/resources/grit/webui_resources.h" SyncConfirmationUI::SyncConfirmationUI(content::WebUI* web_ui) : SigninWebDialogUI(web_ui) { @@ -34,20 +35,29 @@ SyncConfirmationUI::SyncConfirmationUI(content::WebUI* web_ui) content::WebUIDataSource* source = content::WebUIDataSource::Create(chrome::kChromeUISyncConfirmationHost); source->UseStringsJs(); - source->AddResourcePath("signin_shared_css.html", IDR_SIGNIN_SHARED_CSS_HTML); + source->EnableReplaceI18nInJS(); if (is_sync_allowed) { + source->AddResourcePath("test_loader.js", IDR_WEBUI_JS_TEST_LOADER); + source->AddResourcePath("test_loader.html", IDR_WEBUI_HTML_TEST_LOADER); + source->OverrideContentSecurityPolicyScriptSrc( + "script-src chrome://resources chrome://test 'self';"); + source->SetDefaultResource(IDR_SYNC_CONFIRMATION_HTML); - source->AddResourcePath("sync_confirmation_browser_proxy.html", - IDR_SYNC_CONFIRMATION_BROWSER_PROXY_HTML); + source->AddResourcePath("signin_shared_css.js", IDR_SIGNIN_SHARED_CSS_JS); source->AddResourcePath("sync_confirmation_browser_proxy.js", IDR_SYNC_CONFIRMATION_BROWSER_PROXY_JS); - source->AddResourcePath("sync_confirmation_app.html", - IDR_SYNC_CONFIRMATION_APP_HTML); source->AddResourcePath("sync_confirmation_app.js", IDR_SYNC_CONFIRMATION_APP_JS); source->AddResourcePath("sync_confirmation.js", IDR_SYNC_CONFIRMATION_JS); + source->AddResourcePath( + "images/sync_confirmation_illustration.svg", + IDR_SYNC_CONFIRMATION_IMAGES_SYNC_CONFIRMATION_ILLUSTRATION_SVG); + source->AddResourcePath( + "images/sync_confirmation_illustration_dark.svg", + IDR_SYNC_CONFIRMATION_IMAGES_SYNC_CONFIRMATION_ILLUSTRATION_DARK_SVG); + AddStringResource(source, "syncConfirmationTitle", IDS_SYNC_CONFIRMATION_TITLE); AddStringResource(source, "syncConfirmationSyncInfoTitle", @@ -81,6 +91,8 @@ SyncConfirmationUI::SyncConfirmationUI(content::WebUI* web_ui) source->AddString("accountPictureUrl", custom_picture_url); } else { source->SetDefaultResource(IDR_SYNC_DISABLED_CONFIRMATION_HTML); + source->AddResourcePath("signin_shared_old_css.html", + IDR_SIGNIN_SHARED_OLD_CSS_HTML); source->AddResourcePath("sync_disabled_confirmation.js", IDR_SYNC_DISABLED_CONFIRMATION_JS); diff --git a/chromium/chrome/browser/ui/webui/signin/user_manager_screen_handler.h b/chromium/chrome/browser/ui/webui/signin/user_manager_screen_handler.h index 0e405c571b0..87dc7337a26 100644 --- a/chromium/chrome/browser/ui/webui/signin/user_manager_screen_handler.h +++ b/chromium/chrome/browser/ui/webui/signin/user_manager_screen_handler.h @@ -69,7 +69,6 @@ class UserManagerScreenHandler : public content::WebUIMessageHandler, void HandleRemoveUser(const base::ListValue* args); void HandleAreAllProfilesLocked(const base::ListValue* args); void HandleRemoveUserWarningLoadStats(const base::ListValue* args); - void HandleGetRemoveWarningDialogMessage(const base::ListValue* args); // Function used to gather statistics from a profile. void GatherStatistics(base::Time start_time, Profile* profile); diff --git a/chromium/chrome/browser/ui/webui/site_settings_helper.cc b/chromium/chrome/browser/ui/webui/site_settings_helper.cc index 3430d836de6..0cacb0bdfd0 100644 --- a/chromium/chrome/browser/ui/webui/site_settings_helper.cc +++ b/chromium/chrome/browser/ui/webui/site_settings_helper.cc @@ -92,13 +92,13 @@ const ContentSettingsTypeNameEntry kContentSettingsTypeGroupNames[] = { {CONTENT_SETTINGS_TYPE_HID_CHOOSER_DATA, kHidChooserDataGroupType}, {CONTENT_SETTINGS_TYPE_NATIVE_FILE_SYSTEM_WRITE_GUARD, "native-file-system-write"}, + {CONTENT_SETTINGS_TYPE_MIXEDSCRIPT, "mixed-script"}, // Add new content settings here if a corresponding Javascript string // representation for it is not required. Note some exceptions do have UI in // Content Settings but do not require a separate string. {CONTENT_SETTINGS_TYPE_DEFAULT, nullptr}, {CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE, nullptr}, - {CONTENT_SETTINGS_TYPE_MIXEDSCRIPT, nullptr}, {CONTENT_SETTINGS_TYPE_SSL_CERT_DECISIONS, nullptr}, {CONTENT_SETTINGS_TYPE_APP_BANNER, nullptr}, {CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT, nullptr}, @@ -658,7 +658,7 @@ base::Value CreateChooserExceptionObject( base::Value sites(base::Value::Type::LIST); for (auto& one_provider_sites : all_provider_sites) { for (auto& site : one_provider_sites) { - sites.GetList().push_back(std::move(site)); + sites.Append(std::move(site)); } } @@ -712,7 +712,7 @@ base::Value GetChooserExceptionListFromProfile( const base::Value& object = all_chooser_objects_entry.first.second; const ChooserExceptionDetails& chooser_exception_details = all_chooser_objects_entry.second; - exceptions.GetList().push_back(CreateChooserExceptionObject( + exceptions.Append(CreateChooserExceptionObject( name, object, chooser_type.name, chooser_exception_details)); } diff --git a/chromium/chrome/browser/ui/webui/snippets_internals/snippets_internals.mojom b/chromium/chrome/browser/ui/webui/snippets_internals/snippets_internals.mojom index 1ce7954869d..4f37896e8d9 100644 --- a/chromium/chrome/browser/ui/webui/snippets_internals/snippets_internals.mojom +++ b/chromium/chrome/browser/ui/webui/snippets_internals/snippets_internals.mojom @@ -26,7 +26,8 @@ struct SuggestionItem { }; interface PageHandlerFactory { - CreatePageHandler(Page page) => (PageHandler handler); + CreatePageHandler(pending_remote page) => + (pending_remote handler); }; // Browser interface. diff --git a/chromium/chrome/browser/ui/webui/snippets_internals/snippets_internals_page_handler.cc b/chromium/chrome/browser/ui/webui/snippets_internals/snippets_internals_page_handler.cc index 2bcda35f859..46a0bbcd778 100644 --- a/chromium/chrome/browser/ui/webui/snippets_internals/snippets_internals_page_handler.cc +++ b/chromium/chrome/browser/ui/webui/snippets_internals/snippets_internals_page_handler.cc @@ -15,6 +15,7 @@ #include "base/strings/string_number_conversions.h" #include "base/strings/stringprintf.h" #include "base/strings/utf_string_conversions.h" +#include "chrome/browser/ui/webui/snippets_internals/snippets_internals.mojom.h" #include "chrome/common/pref_names.h" #include "components/ntp_snippets/category_info.h" #include "components/ntp_snippets/features.h" @@ -106,11 +107,11 @@ snippets_internals::mojom::SuggestionItemPtr PrepareContentSuggestionItem( // TODO: Add browser tests. SnippetsInternalsPageHandler::SnippetsInternalsPageHandler( - snippets_internals::mojom::PageHandlerRequest request, - snippets_internals::mojom::PagePtr page, + mojo::PendingReceiver receiver, + mojo::PendingRemote page, ntp_snippets::ContentSuggestionsService* content_suggestions_service, PrefService* pref_service) - : binding_(this, std::move(request)), + : receiver_(this, std::move(receiver)), content_suggestions_service_observer_(this), content_suggestions_service_(content_suggestions_service), remote_suggestions_provider_( diff --git a/chromium/chrome/browser/ui/webui/snippets_internals/snippets_internals_page_handler.h b/chromium/chrome/browser/ui/webui/snippets_internals/snippets_internals_page_handler.h index 7702050a60e..bf02e04c414 100644 --- a/chromium/chrome/browser/ui/webui/snippets_internals/snippets_internals_page_handler.h +++ b/chromium/chrome/browser/ui/webui/snippets_internals/snippets_internals_page_handler.h @@ -15,7 +15,10 @@ #include "components/ntp_snippets/content_suggestions_service.h" #include "components/ntp_snippets/remote/remote_suggestions_provider.h" #include "components/prefs/pref_service.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" +#include "mojo/public/cpp/bindings/remote.h" // TODO: Write tests for this. class SnippetsInternalsPageHandler @@ -23,8 +26,8 @@ class SnippetsInternalsPageHandler public ntp_snippets::ContentSuggestionsService::Observer { public: explicit SnippetsInternalsPageHandler( - snippets_internals::mojom::PageHandlerRequest request, - snippets_internals::mojom::PagePtr, + mojo::PendingReceiver receiver, + mojo::PendingRemote page, ntp_snippets::ContentSuggestionsService* content_suggestions_service, PrefService* pref_service); ~SnippetsInternalsPageHandler() override; @@ -67,8 +70,8 @@ class SnippetsInternalsPageHandler GetSuggestionsByCategoryCallback callback, std::vector suggestions); - // Binding from the mojo interface to concrete impl. - mojo::Binding binding_; + // Receiver from the mojo interface to concrete impl. + mojo::Receiver receiver_; // Observer to notify frontend of dirty data. ScopedObserver page_; base::WeakPtrFactory weak_ptr_factory_{this}; diff --git a/chromium/chrome/browser/ui/webui/snippets_internals/snippets_internals_ui.cc b/chromium/chrome/browser/ui/webui/snippets_internals/snippets_internals_ui.cc index 89f723083ee..7df14607805 100644 --- a/chromium/chrome/browser/ui/webui/snippets_internals/snippets_internals_ui.cc +++ b/chromium/chrome/browser/ui/webui/snippets_internals/snippets_internals_ui.cc @@ -4,20 +4,25 @@ #include "chrome/browser/ui/webui/snippets_internals/snippets_internals_ui.h" +#include +#include + #include "base/bind.h" #include "chrome/browser/ntp_snippets/content_suggestions_service_factory.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/webui/snippets_internals/snippets_internals.mojom.h" #include "chrome/browser/ui/webui/snippets_internals/snippets_internals_page_handler.h" #include "chrome/common/url_constants.h" #include "chrome/grit/browser_resources.h" #include "content/public/browser/web_ui_data_source.h" +#include "mojo/public/cpp/bindings/pending_remote.h" #if defined(OS_ANDROID) #include "chrome/browser/android/chrome_feature_list.h" #endif SnippetsInternalsUI::SnippetsInternalsUI(content::WebUI* web_ui) - : ui::MojoWebUIController(web_ui), binding_(this) { + : ui::MojoWebUIController(web_ui) { content::WebUIDataSource* source = content::WebUIDataSource::Create(chrome::kChromeUISnippetsInternalsHost); source->OverrideContentSecurityPolicyScriptSrc( @@ -41,20 +46,20 @@ SnippetsInternalsUI::SnippetsInternalsUI(content::WebUI* web_ui) SnippetsInternalsUI::~SnippetsInternalsUI() {} void SnippetsInternalsUI::BindSnippetsInternalsPageHandlerFactory( - snippets_internals::mojom::PageHandlerFactoryRequest request) { - if (binding_.is_bound()) - binding_.Unbind(); + mojo::PendingReceiver + receiver) { + receiver_.reset(); - binding_.Bind(std::move(request)); + receiver_.Bind(std::move(receiver)); } void SnippetsInternalsUI::CreatePageHandler( - snippets_internals::mojom::PagePtr page, + mojo::PendingRemote page, CreatePageHandlerCallback callback) { DCHECK(page); - snippets_internals::mojom::PageHandlerPtr handler; + mojo::PendingRemote handler; page_handler_ = std::make_unique( - mojo::MakeRequest(&handler), std::move(page), + handler.InitWithNewPipeAndPassReceiver(), std::move(page), content_suggestions_service_, pref_service_); std::move(callback).Run(std::move(handler)); diff --git a/chromium/chrome/browser/ui/webui/snippets_internals/snippets_internals_ui.h b/chromium/chrome/browser/ui/webui/snippets_internals/snippets_internals_ui.h index 6ed63699616..524b74fe032 100644 --- a/chromium/chrome/browser/ui/webui/snippets_internals/snippets_internals_ui.h +++ b/chromium/chrome/browser/ui/webui/snippets_internals/snippets_internals_ui.h @@ -10,7 +10,9 @@ #include "chrome/browser/ui/webui/snippets_internals/snippets_internals.mojom.h" #include "components/ntp_snippets/content_suggestions_service.h" #include "components/prefs/pref_service.h" -#include "mojo/public/cpp/bindings/binding.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" +#include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver.h" #include "ui/webui/mojo_web_ui_controller.h" class SnippetsInternalsPageHandler; @@ -23,19 +25,21 @@ class SnippetsInternalsUI explicit SnippetsInternalsUI(content::WebUI* web_ui); ~SnippetsInternalsUI() override; - void CreatePageHandler(snippets_internals::mojom::PagePtr page, - CreatePageHandlerCallback callback) override; + void CreatePageHandler( + mojo::PendingRemote page, + CreatePageHandlerCallback callback) override; private: void BindSnippetsInternalsPageHandlerFactory( - snippets_internals::mojom::PageHandlerFactoryRequest request); + mojo::PendingReceiver + receiver); std::unique_ptr page_handler_; ntp_snippets::ContentSuggestionsService* content_suggestions_service_; PrefService* pref_service_; - // Binding from the mojo interface to concrete impl. - mojo::Binding binding_; + // Receiver from the mojo interface to concrete impl. + mojo::Receiver receiver_{this}; DISALLOW_COPY_AND_ASSIGN(SnippetsInternalsUI); }; diff --git a/chromium/chrome/browser/ui/webui/supervised_user_internals_message_handler.cc b/chromium/chrome/browser/ui/webui/supervised_user_internals_message_handler.cc index be07aad14bc..e2f74452ace 100644 --- a/chromium/chrome/browser/ui/webui/supervised_user_internals_message_handler.cc +++ b/chromium/chrome/browser/ui/webui/supervised_user_internals_message_handler.cc @@ -15,10 +15,10 @@ #include "base/strings/utf_string_conversions.h" #include "base/values.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/profiles/profile_key.h" #include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/browser/supervised_user/child_accounts/child_account_service.h" #include "chrome/browser/supervised_user/supervised_user_error_page/supervised_user_error_page.h" -#include "chrome/browser/supervised_user/supervised_user_service.h" #include "chrome/browser/supervised_user/supervised_user_service_factory.h" #include "chrome/browser/supervised_user/supervised_user_settings_service.h" #include "chrome/browser/supervised_user/supervised_user_settings_service_factory.h" @@ -117,12 +117,11 @@ std::string FilteringBehaviorReasonToString( } // namespace -SupervisedUserInternalsMessageHandler::SupervisedUserInternalsMessageHandler() - : scoped_observer_(this) {} +SupervisedUserInternalsMessageHandler::SupervisedUserInternalsMessageHandler() = + default; SupervisedUserInternalsMessageHandler:: - ~SupervisedUserInternalsMessageHandler() { -} + ~SupervisedUserInternalsMessageHandler() = default; void SupervisedUserInternalsMessageHandler::RegisterMessages() { DCHECK_CURRENTLY_ON(BrowserThread::UI); @@ -193,8 +192,6 @@ void SupervisedUserInternalsMessageHandler::SendBasicInfo() { std::unique_ptr section_list(new base::ListValue); base::ListValue* section_general = AddSection(section_list.get(), "General"); - AddSectionEntry(section_general, "Chrome version", - chrome::GetVersionString()); AddSectionEntry(section_general, "Child detection enabled", ChildAccountService::IsChildAccountDetectionEnabled()); diff --git a/chromium/chrome/browser/ui/webui/supervised_user_internals_message_handler.h b/chromium/chrome/browser/ui/webui/supervised_user_internals_message_handler.h index f257eaac9ec..619b580ba1d 100644 --- a/chromium/chrome/browser/ui/webui/supervised_user_internals_message_handler.h +++ b/chromium/chrome/browser/ui/webui/supervised_user_internals_message_handler.h @@ -10,6 +10,7 @@ #include "base/memory/weak_ptr.h" #include "base/scoped_observer.h" #include "chrome/browser/supervised_user/supervised_user_error_page/supervised_user_error_page.h" +#include "chrome/browser/supervised_user/supervised_user_service.h" #include "chrome/browser/supervised_user/supervised_user_service_observer.h" #include "chrome/browser/supervised_user/supervised_user_url_filter.h" #include "content/public/browser/web_ui_message_handler.h" @@ -18,8 +19,6 @@ namespace base { class ListValue; } // namespace base -class SupervisedUserService; - // The implementation for the chrome://supervised-user-internals page. class SupervisedUserInternalsMessageHandler : public content::WebUIMessageHandler, @@ -63,7 +62,7 @@ class SupervisedUserInternalsMessageHandler user_settings_subscription_; ScopedObserver - scoped_observer_; + scoped_observer_{this}; base::WeakPtrFactory weak_factory_{ this}; diff --git a/chromium/chrome/browser/ui/webui/sync_file_system_internals/extension_statuses_handler.cc b/chromium/chrome/browser/ui/webui/sync_file_system_internals/extension_statuses_handler.cc index d21278ee6f6..678c7cf9822 100644 --- a/chromium/chrome/browser/ui/webui/sync_file_system_internals/extension_statuses_handler.cc +++ b/chromium/chrome/browser/ui/webui/sync_file_system_internals/extension_statuses_handler.cc @@ -52,7 +52,7 @@ void ConvertExtensionStatusToDictionary( // Join with human readable extension name. const extensions::Extension* extension = extension_registry->GetExtensionById( - extension_id, extensions::ExtensionRegistry::COMPATIBILITY); + extension_id, extensions::ExtensionRegistry::EVERYTHING); if (!extension) continue; diff --git a/chromium/chrome/browser/ui/webui/sync_internals_message_handler.cc b/chromium/chrome/browser/ui/webui/sync_internals_message_handler.cc index 69dc7e8f23e..40880e73df6 100644 --- a/chromium/chrome/browser/ui/webui/sync_internals_message_handler.cc +++ b/chromium/chrome/browser/ui/webui/sync_internals_message_handler.cc @@ -311,7 +311,8 @@ void SyncInternalsMessageHandler::HandleRequestStart( // If the service was previously stopped via StopAndClear(), then the // "first-setup-complete" bit was also cleared, and now the service wouldn't // fully start up. So set that too. - service->GetUserSettings()->SetFirstSetupComplete(); + service->GetUserSettings()->SetFirstSetupComplete( + syncer::SyncFirstSetupCompleteSource::BASIC_FLOW); } void SyncInternalsMessageHandler::HandleRequestStopKeepData( diff --git a/chromium/chrome/browser/ui/webui/sync_internals_ui.cc b/chromium/chrome/browser/ui/webui/sync_internals_ui.cc index d4d18359242..ed5f6af5ed0 100644 --- a/chromium/chrome/browser/ui/webui/sync_internals_ui.cc +++ b/chromium/chrome/browser/ui/webui/sync_internals_ui.cc @@ -9,7 +9,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/webui/sync_internals_message_handler.h" #include "chrome/common/url_constants.h" -#include "components/grit/components_resources.h" +#include "components/grit/sync_driver_resources.h" #include "components/sync/driver/about_sync_util.h" #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_data_source.h" diff --git a/chromium/chrome/browser/ui/webui/tab_strip/tab_strip_ui.cc b/chromium/chrome/browser/ui/webui/tab_strip/tab_strip_ui.cc index f294f8d2890..98fa0fb51e5 100644 --- a/chromium/chrome/browser/ui/webui/tab_strip/tab_strip_ui.cc +++ b/chromium/chrome/browser/ui/webui/tab_strip/tab_strip_ui.cc @@ -10,26 +10,43 @@ #include #include "base/base64.h" +#include "base/bind.h" +#include "base/strings/string_piece.h" #include "base/values.h" #include "chrome/browser/extensions/extension_tab_util.h" +#include "chrome/browser/favicon/favicon_utils.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/themes/theme_properties.h" +#include "chrome/browser/themes/theme_service.h" +#include "chrome/browser/themes/theme_service_factory.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/tabs/tab_menu_model.h" +#include "chrome/browser/ui/tabs/tab_network_state.h" +#include "chrome/browser/ui/tabs/tab_renderer_data.h" +#include "chrome/browser/ui/tabs/tab_strip_model.h" +#include "chrome/browser/ui/tabs/tab_strip_model_observer.h" #include "chrome/browser/ui/webui/favicon_source.h" +#include "chrome/browser/ui/webui/theme_handler.h" #include "chrome/common/webui_url_constants.h" #include "chrome/grit/tab_strip_resources.h" #include "chrome/grit/tab_strip_resources_map.h" #include "components/favicon_base/favicon_url_parser.h" +#include "content/public/browser/favicon_status.h" +#include "content/public/browser/navigation_entry.h" #include "content/public/browser/url_data_source.h" #include "content/public/browser/web_ui_data_source.h" #include "content/public/browser/web_ui_message_handler.h" #include "third_party/skia/include/core/SkImageEncoder.h" #include "third_party/skia/include/core/SkStream.h" +#include "ui/base/models/simple_menu_model.h" +#include "ui/base/theme_provider.h" +#include "ui/gfx/color_utils.h" +#include "ui/gfx/geometry/point_conversions.h" namespace { // Writes bytes to a std::vector that can be fetched. This is used to record the // output of skia image encoding. -// -// TODO(crbug.com/991393): remove this when we no longer transcode images here. class BufferWStream : public SkWStream { public: BufferWStream() = default; @@ -51,25 +68,279 @@ class BufferWStream : public SkWStream { std::vector result_; }; -class TabStripUIHandler : public content::WebUIMessageHandler { +std::string MakeDataURIForImage(base::span image_data, + base::StringPiece mime_subtype) { + std::string result = "data:image/"; + result.append(mime_subtype.begin(), mime_subtype.end()); + result += ";base64,"; + result += base::Base64Encode(image_data); + return result; +} + +std::string EncodePNGAndMakeDataURI(gfx::ImageSkia image, float scale_factor) { + const SkBitmap& bitmap = image.GetRepresentation(scale_factor).GetBitmap(); + BufferWStream stream; + const bool encoding_succeeded = + SkEncodeImage(&stream, bitmap, SkEncodedImageFormat::kPNG, 100); + DCHECK(encoding_succeeded); + return MakeDataURIForImage( + base::as_bytes(base::make_span(stream.GetBuffer())), "png"); +} + +class WebUITabContextMenu : public ui::SimpleMenuModel::Delegate, + public TabMenuModel { + public: + WebUITabContextMenu(TabStripModel* tab_strip_model, int tab_index) + : TabMenuModel(this, tab_strip_model, tab_index), + tab_strip_model_(tab_strip_model), + tab_index_(tab_index) {} + ~WebUITabContextMenu() override = default; + + void ExecuteCommand(int command_id, int event_flags) override { + DCHECK_LT(tab_index_, tab_strip_model_->count()); + tab_strip_model_->ExecuteContextMenuCommand( + tab_index_, static_cast(command_id)); + } + + private: + TabStripModel* const tab_strip_model_; + const int tab_index_; +}; + +class TabStripUIHandler : public content::WebUIMessageHandler, + public TabStripModelObserver { public: - explicit TabStripUIHandler(Profile* profile) - : profile_(profile), + explicit TabStripUIHandler(Browser* browser, TabStripUI::Embedder* embedder) + : browser_(browser), + embedder_(embedder), thumbnail_tracker_(base::Bind(&TabStripUIHandler::HandleThumbnailUpdate, base::Unretained(this))) {} ~TabStripUIHandler() override = default; + void OnJavascriptAllowed() override { + browser_->tab_strip_model()->AddObserver(this); + } + + // TabStripModelObserver: + void OnTabStripModelChanged( + TabStripModel* tab_strip_model, + const TabStripModelChange& change, + const TabStripSelectionChange& selection) override { + if (tab_strip_model->empty()) + return; + + switch (change.type()) { + case TabStripModelChange::kInserted: { + for (const auto& contents : change.GetInsert()->contents) { + FireWebUIListener("tab-created", + GetTabData(contents.contents, contents.index)); + } + break; + } + case TabStripModelChange::kRemoved: { + for (const auto& contents : change.GetRemove()->contents) { + FireWebUIListener("tab-removed", + base::Value(extensions::ExtensionTabUtil::GetTabId( + contents.contents))); + } + break; + } + case TabStripModelChange::kMoved: { + auto* move = change.GetMove(); + FireWebUIListener( + "tab-moved", + base::Value(extensions::ExtensionTabUtil::GetTabId(move->contents)), + base::Value(move->to_index)); + break; + } + + case TabStripModelChange::kReplaced: + case TabStripModelChange::kGroupChanged: + case TabStripModelChange::kSelectionOnly: + // Not yet implemented. + break; + } + + if (selection.active_tab_changed()) { + content::WebContents* new_contents = selection.new_contents; + int index = selection.new_model.active(); + if (new_contents && index != TabStripModel::kNoTab) { + FireWebUIListener( + "tab-active-changed", + base::Value(extensions::ExtensionTabUtil::GetTabId(new_contents))); + } + } + } + + void TabChangedAt(content::WebContents* contents, + int index, + TabChangeType change_type) override { + FireWebUIListener("tab-updated", GetTabData(contents, index)); + } + + void TabPinnedStateChanged(TabStripModel* tab_strip_model, + content::WebContents* contents, + int index) override { + FireWebUIListener("tab-updated", GetTabData(contents, index)); + } + + void TabBlockedStateChanged(content::WebContents* contents, + int index) override { + FireWebUIListener("tab-updated", GetTabData(contents, index)); + } + protected: + // content::WebUIMessageHandler: void RegisterMessages() override { + web_ui()->RegisterMessageCallback( + "getTabs", + base::Bind(&TabStripUIHandler::HandleGetTabs, base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "getThemeColors", base::Bind(&TabStripUIHandler::HandleGetThemeColors, + base::Unretained(this))); web_ui()->RegisterMessageCallback( "addTrackedTab", base::Bind(&TabStripUIHandler::AddTrackedTab, base::Unretained(this))); web_ui()->RegisterMessageCallback( "removeTrackedTab", base::Bind(&TabStripUIHandler::RemoveTrackedTab, base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "closeContainer", base::Bind(&TabStripUIHandler::HandleCloseContainer, + base::Unretained(this))); + web_ui()->RegisterMessageCallback( + "showTabContextMenu", + base::Bind(&TabStripUIHandler::HandleShowTabContextMenu, + base::Unretained(this))); } private: + base::DictionaryValue GetTabData(content::WebContents* contents, int index) { + base::DictionaryValue tab_data; + + tab_data.SetBoolean("active", + browser_->tab_strip_model()->active_index() == index); + tab_data.SetInteger("id", extensions::ExtensionTabUtil::GetTabId(contents)); + tab_data.SetInteger("index", index); + + TabRendererData tab_renderer_data = + TabRendererData::FromTabInModel(browser_->tab_strip_model(), index); + tab_data.SetBoolean("pinned", tab_renderer_data.pinned); + tab_data.SetString("title", tab_renderer_data.title); + tab_data.SetString("url", tab_renderer_data.visible_url.GetContent()); + + if (!tab_renderer_data.favicon.isNull()) { + tab_data.SetString("favIconUrl", EncodePNGAndMakeDataURI( + tab_renderer_data.favicon, + web_ui()->GetDeviceScaleFactor())); + tab_data.SetBoolean("isDefaultFavicon", + tab_renderer_data.favicon.BackedBySameObjectAs( + favicon::GetDefaultFavicon().AsImageSkia())); + } else { + tab_data.SetBoolean("isDefaultFavicon", true); + } + tab_data.SetBoolean("showIcon", tab_renderer_data.show_icon); + tab_data.SetInteger("networkState", + static_cast(tab_renderer_data.network_state)); + tab_data.SetBoolean("shouldHideThrobber", + tab_renderer_data.should_hide_throbber); + tab_data.SetBoolean("blocked", tab_renderer_data.blocked); + tab_data.SetBoolean("crashed", tab_renderer_data.IsCrashed()); + // TODO(johntlee): Add the rest of TabRendererData + + return tab_data; + } + + void HandleGetTabs(const base::ListValue* args) { + AllowJavascript(); + const base::Value& callback_id = args->GetList()[0]; + + base::ListValue tabs; + TabStripModel* tab_strip_model = browser_->tab_strip_model(); + for (int i = 0; i < tab_strip_model->count(); ++i) { + tabs.Append(GetTabData(tab_strip_model->GetWebContentsAt(i), i)); + } + ResolveJavascriptCallback(callback_id, tabs); + } + + void HandleGetThemeColors(const base::ListValue* args) { + AllowJavascript(); + const base::Value& callback_id = args->GetList()[0]; + + const ui::ThemeProvider& tp = + ThemeService::GetThemeProviderForProfile(browser_->profile()); + + // This should return an object of CSS variables to rgba values so that + // the WebUI can use the CSS variables to color the tab strip + base::DictionaryValue colors; + colors.SetString("--tabstrip-background-color", + color_utils::SkColorToRgbaString( + tp.GetColor(ThemeProperties::COLOR_FRAME))); + colors.SetString("--tabstrip-tab-background-color", + color_utils::SkColorToRgbaString( + tp.GetColor(ThemeProperties::COLOR_TOOLBAR))); + colors.SetString("--tabstrip-tab-text-color", + color_utils::SkColorToRgbaString( + tp.GetColor(ThemeProperties::COLOR_TAB_TEXT))); + colors.SetString("--tabstrip-tab-separator-color", + color_utils::SkColorToRgbaString(SkColorSetA( + tp.GetColor(ThemeProperties::COLOR_TAB_TEXT), + /* 16% opacity */ 0.16 * 255))); + + colors.SetString("--tabstrip-tab-loading-spinning-color", + color_utils::SkColorToRgbaString(tp.GetColor( + ThemeProperties::COLOR_TAB_THROBBER_SPINNING))); + colors.SetString("--tabstrip-tab-waiting-spinning-color", + color_utils::SkColorToRgbaString(tp.GetColor( + ThemeProperties::COLOR_TAB_THROBBER_WAITING))); + colors.SetString("--tabstrip-indicator-recording-color", + color_utils::SkColorToRgbaString(tp.GetColor( + ThemeProperties::COLOR_TAB_ALERT_RECORDING))); + colors.SetString("--tabstrip-indicator-pip-color", + color_utils::SkColorToRgbaString( + tp.GetColor(ThemeProperties::COLOR_TAB_PIP_PLAYING))); + colors.SetString("--tabstrip-indicator-capturing-color", + color_utils::SkColorToRgbaString(tp.GetColor( + ThemeProperties::COLOR_TAB_ALERT_CAPTURING))); + colors.SetString("--tabstrip-tab-blocked-color", + color_utils::SkColorToRgbaString( + ui::NativeTheme::GetInstanceForWeb()->GetSystemColor( + ui::NativeTheme::kColorId_ProminentButtonColor))); + + ResolveJavascriptCallback(callback_id, colors); + } + + void HandleCloseContainer(const base::ListValue* args) { + DCHECK(embedder_); + embedder_->CloseContainer(); + } + + void HandleShowTabContextMenu(const base::ListValue* args) { + int tab_id = 0; + args->GetInteger(0, &tab_id); + + gfx::PointF point; + { + double x = 0; + args->GetDouble(1, &x); + double y = 0; + args->GetDouble(2, &y); + point = gfx::PointF(x, y); + } + + TabStripModel* tab_strip_model = nullptr; + int tab_index = -1; + const bool got_tab = extensions::ExtensionTabUtil::GetTabById( + tab_id, browser_->profile(), true /* include_incognito */, nullptr, + &tab_strip_model, nullptr, &tab_index); + DCHECK(got_tab); + DCHECK_EQ(tab_strip_model, browser_->tab_strip_model()); + + DCHECK(embedder_); + embedder_->ShowContextMenuAtPoint( + gfx::ToRoundedPoint(point), + std::make_unique(tab_strip_model, tab_index)); + } + void AddTrackedTab(const base::ListValue* args) { AllowJavascript(); @@ -78,8 +349,8 @@ class TabStripUIHandler : public content::WebUIMessageHandler { return; content::WebContents* tab = nullptr; - if (!extensions::ExtensionTabUtil::GetTabById(tab_id, profile_, true, - &tab)) { + if (!extensions::ExtensionTabUtil::GetTabById(tab_id, browser_->profile(), + true, &tab)) { // ID didn't refer to a valid tab. DVLOG(1) << "Invalid tab ID"; return; @@ -98,36 +369,20 @@ class TabStripUIHandler : public content::WebUIMessageHandler { // Callback passed to |thumbnail_tracker_|. Called when a tab's thumbnail // changes, or when we start watching the tab. - void HandleThumbnailUpdate(content::WebContents* tab, gfx::ImageSkia image) { - const SkBitmap& bitmap = - image.GetRepresentation(web_ui()->GetDeviceScaleFactor()).GetBitmap(); - BufferWStream stream; - const bool encoding_succeeded = - SkEncodeImage(&stream, bitmap, SkEncodedImageFormat::kJPEG, 100); - DCHECK(encoding_succeeded); - const std::vector image_data = stream.GetBuffer(); - + void HandleThumbnailUpdate(content::WebContents* tab, + ThumbnailTracker::CompressedThumbnailData image) { // Send base-64 encoded image to JS side. - // - // TODO(crbug.com/991393): streamline the process from tab capture to - // sending the image. Currently, a frame is captured, sent to - // ThumbnailImage, encoded to JPEG (w/ a copy), decoded to a raw bitmap - // (another copy), and sent to observers. Here, we then re-encode the image - // to a JPEG (another copy), encode to base64 (another copy), append the - // base64 header (another copy), and send it (another copy). This is 6 - // copies of essentially the same image, and it is de-encoded and re-encoded - // to the same format. We can reduce the number of copies and avoid the - // redundant encoding. - std::string encoded_image = - base::Base64Encode(base::as_bytes(base::make_span(image_data))); - encoded_image = "data:image/jpeg;base64," + encoded_image; + std::string data_uri = + MakeDataURIForImage(base::make_span(image->data), "jpeg"); const int tab_id = extensions::ExtensionTabUtil::GetTabId(tab); FireWebUIListener("tab-thumbnail-updated", base::Value(tab_id), - base::Value(encoded_image)); + base::Value(data_uri)); } - Profile* profile_; + Browser* const browser_; + TabStripUI::Embedder* const embedder_; + ThumbnailTracker thumbnail_tracker_; DISALLOW_COPY_AND_ASSIGN(TabStripUIHandler); @@ -154,13 +409,28 @@ TabStripUI::TabStripUI(content::WebUI* web_ui) html_source->SetDefaultResource(IDR_TAB_STRIP_HTML); + // Add a load time string for the frame color to allow the tab strip to paint + // a background color that matches the frame before any content loads + const ui::ThemeProvider& tp = + ThemeService::GetThemeProviderForProfile(profile); + html_source->AddString("frameColor", + color_utils::SkColorToRgbaString( + tp.GetColor(ThemeProperties::COLOR_FRAME))); + content::WebUIDataSource::Add(profile, html_source); content::URLDataSource::Add( profile, std::make_unique( profile, chrome::FaviconUrlFormat::kFavicon2)); - web_ui->AddMessageHandler(std::make_unique(profile)); + web_ui->AddMessageHandler(std::make_unique()); } TabStripUI::~TabStripUI() {} + +void TabStripUI::Initialize(Browser* browser, Embedder* embedder) { + content::WebUI* const web_ui = TabStripUI::web_ui(); + DCHECK_EQ(Profile::FromWebUI(web_ui), browser->profile()); + web_ui->AddMessageHandler( + std::make_unique(browser, embedder)); +} diff --git a/chromium/chrome/browser/ui/webui/tab_strip/tab_strip_ui.h b/chromium/chrome/browser/ui/webui/tab_strip/tab_strip_ui.h index 8e8b31d9ddf..6f126eeb482 100644 --- a/chromium/chrome/browser/ui/webui/tab_strip/tab_strip_ui.h +++ b/chromium/chrome/browser/ui/webui/tab_strip/tab_strip_ui.h @@ -5,19 +5,50 @@ #ifndef CHROME_BROWSER_UI_WEBUI_TAB_STRIP_TAB_STRIP_UI_H_ #define CHROME_BROWSER_UI_WEBUI_TAB_STRIP_TAB_STRIP_UI_H_ +#include + #include "base/macros.h" #include "chrome/browser/ui/webui/tab_strip/thumbnail_tracker.h" #include "content/public/browser/web_ui_controller.h" +class Browser; + +namespace gfx { +class Point; +} + +namespace ui { +class MenuModel; +} + // The WebUI version of the tab strip in the browser. It is currently only // supported on ChromeOS in tablet mode. class TabStripUI : public content::WebUIController { public: + // Interface to be implemented by the embedder. Provides native UI + // functionality such as showing context menus. + class Embedder { + public: + Embedder() = default; + virtual ~Embedder() {} + + virtual void CloseContainer() = 0; + + virtual void ShowContextMenuAtPoint( + gfx::Point point, + std::unique_ptr menu_model) = 0; + }; + explicit TabStripUI(content::WebUI* web_ui); ~TabStripUI() override; + // Initialize TabStripUI with its embedder and the Browser it's running in. + // Must be called exactly once. The WebUI won't work until this is called. + void Initialize(Browser* browser, Embedder* embedder); + private: - void HandleThumbnailUpdate(int extension_tab_id, gfx::ImageSkia image); + void HandleThumbnailUpdate(int extension_tab_id, + ThumbnailTracker::CompressedThumbnailData image); DISALLOW_COPY_AND_ASSIGN(TabStripUI); }; diff --git a/chromium/chrome/browser/ui/webui/tab_strip/tab_strip_ui_browsertest.cc b/chromium/chrome/browser/ui/webui/tab_strip/tab_strip_ui_browsertest.cc new file mode 100644 index 00000000000..5df49d77874 --- /dev/null +++ b/chromium/chrome/browser/ui/webui/tab_strip/tab_strip_ui_browsertest.cc @@ -0,0 +1,118 @@ +// Copyright 2019 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/tab_strip/tab_strip_ui.h" + +#include + +#include "base/json/json_reader.h" +#include "base/json/json_writer.h" +#include "base/strings/string_piece.h" +#include "base/test/scoped_feature_list.h" +#include "base/values.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/ui_features.h" +#include "chrome/common/chrome_isolated_world_ids.h" +#include "chrome/common/webui_url_constants.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "content/public/browser/navigation_controller.h" +#include "content/public/browser/render_view_host.h" +#include "content/public/browser/web_contents.h" +#include "content/public/test/browser_test_utils.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "ui/base/models/menu_model.h" +#include "ui/gfx/geometry/point.h" +#include "ui/gfx/geometry/point_conversions.h" +#include "ui/gfx/geometry/point_f.h" +#include "ui/gfx/geometry/rect_f.h" + +namespace { + +class MockTabStripUIEmbedder : public TabStripUI::Embedder { + public: + MOCK_METHOD(void, CloseContainer, (), (override)); + MOCK_METHOD(void, + ShowContextMenuAtPoint, + (gfx::Point point, std::unique_ptr menu_model), + (override)); +}; + +} // namespace + +class TabStripUIBrowserTest : public InProcessBrowserTest { + public: + void SetUp() override { + // In this test, we create our own TabStripUI instance with a mock + // Embedder. Disable the production one to avoid conflicting with + // it. + feature_override_.InitAndDisableFeature(features::kWebUITabStrip); + InProcessBrowserTest::SetUp(); + } + + void TearDown() override { + InProcessBrowserTest::TearDown(); + feature_override_.Reset(); + } + + void SetUpOnMainThread() override { + webui_contents_ = content::WebContents::Create( + content::WebContents::CreateParams(browser()->profile())); + + // Start loading WebUI, injecting our TabStripUI::Embedder immediately + // after. + webui_contents_->GetController().LoadURLWithParams( + content::NavigationController::LoadURLParams( + GURL(chrome::kChromeUITabStripURL))); + TabStripUI* const tab_strip_ui = + static_cast(webui_contents_->GetWebUI()->GetController()); + tab_strip_ui->Initialize(browser(), &mock_embedder_); + + // Finish loading after initializing TabStripUI. + ASSERT_TRUE(content::WaitForLoadStop(webui_contents_.get())); + } + + void TearDownOnMainThread() override { webui_contents_.reset(); } + + protected: + static const std::string tab_query_js; + + ::testing::NiceMock mock_embedder_; + std::unique_ptr webui_contents_; + + private: + base::test::ScopedFeatureList feature_override_; +}; + +// static +const std::string TabStripUIBrowserTest::tab_query_js( + "document.querySelector('tabstrip-tab-list')" + " .shadowRoot.querySelector('tabstrip-tab')"); + +IN_PROC_BROWSER_TEST_F(TabStripUIBrowserTest, ActivatingTabClosesEmbedder) { + const std::string activate_tab_js = tab_query_js + ".click()"; + + EXPECT_CALL(mock_embedder_, CloseContainer()).Times(1); + ASSERT_TRUE(content::ExecJs(webui_contents_.get(), activate_tab_js, + content::EXECUTE_SCRIPT_DEFAULT_OPTIONS, + ISOLATED_WORLD_ID_CHROME_INTERNAL)); +} + +// Checks that the contextmenu event on a tab gets forwarded to the +// TabStripUI::Embedder. +IN_PROC_BROWSER_TEST_F(TabStripUIBrowserTest, + InvokesEmbedderContextMenuForTab) { + using ::testing::_; + + const std::string invoke_menu_js = + "const event =" + " new MouseEvent('contextmenu', { clientX: 100, clientY: 50 });" + + tab_query_js + ".dispatchEvent(event)"; + + EXPECT_CALL(mock_embedder_, ShowContextMenuAtPoint(gfx::Point(100, 50), _)) + .Times(1); + ASSERT_TRUE(content::ExecJs(webui_contents_.get(), invoke_menu_js, + content::EXECUTE_SCRIPT_DEFAULT_OPTIONS, + ISOLATED_WORLD_ID_CHROME_INTERNAL)); +} diff --git a/chromium/chrome/browser/ui/webui/tab_strip/thumbnail_tracker.cc b/chromium/chrome/browser/ui/webui/tab_strip/thumbnail_tracker.cc index 6c74dd96578..4ec05c2513a 100644 --- a/chromium/chrome/browser/ui/webui/tab_strip/thumbnail_tracker.cc +++ b/chromium/chrome/browser/ui/webui/tab_strip/thumbnail_tracker.cc @@ -7,9 +7,9 @@ #include #include +#include "base/macros.h" #include "base/scoped_observer.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/ui/thumbnails/thumbnail_image.h" #include "chrome/browser/ui/thumbnails/thumbnail_tab_helper.h" #include "content/public/browser/web_contents_observer.h" @@ -19,9 +19,7 @@ class ThumbnailTracker::ContentsData : public content::WebContentsObserver, public ThumbnailImage::Observer { public: ContentsData(ThumbnailTracker* parent, content::WebContents* contents) - : content::WebContentsObserver(contents), - parent_(parent), - observer_(this) { + : content::WebContentsObserver(contents), parent_(parent) { thumbnail_ = parent_->thumbnail_getter_.Run(contents); if (thumbnail_) observer_.Add(thumbnail_.get()); @@ -29,7 +27,7 @@ class ThumbnailTracker::ContentsData : public content::WebContentsObserver, void RequestThumbnail() { if (thumbnail_) - thumbnail_->RequestThumbnailImage(); + thumbnail_->RequestCompressedThumbnailData(); } // content::WebContents: @@ -46,14 +44,17 @@ class ThumbnailTracker::ContentsData : public content::WebContentsObserver, } // ThumbnailImage::Observer: - void OnThumbnailImageAvailable(gfx::ImageSkia thumbnail_image) override { + void OnCompressedThumbnailDataAvailable( + CompressedThumbnailData thumbnail_image) override { parent_->ThumbnailUpdated(web_contents(), thumbnail_image); } private: ThumbnailTracker* parent_; scoped_refptr thumbnail_; - ScopedObserver observer_; + ScopedObserver observer_{this}; + + DISALLOW_COPY_AND_ASSIGN(ContentsData); }; ThumbnailTracker::ThumbnailTracker(ThumbnailUpdatedCallback callback) @@ -78,7 +79,7 @@ void ThumbnailTracker::WatchTab(content::WebContents* contents) { } void ThumbnailTracker::ThumbnailUpdated(content::WebContents* contents, - gfx::ImageSkia image) { + CompressedThumbnailData image) { callback_.Run(contents, image); } diff --git a/chromium/chrome/browser/ui/webui/tab_strip/thumbnail_tracker.h b/chromium/chrome/browser/ui/webui/tab_strip/thumbnail_tracker.h index 2d64d3d8ecc..feb174dcee1 100644 --- a/chromium/chrome/browser/ui/webui/tab_strip/thumbnail_tracker.h +++ b/chromium/chrome/browser/ui/webui/tab_strip/thumbnail_tracker.h @@ -9,19 +9,20 @@ #include "base/containers/flat_map.h" #include "base/memory/scoped_refptr.h" +#include "chrome/browser/ui/thumbnails/thumbnail_image.h" #include "ui/gfx/image/image_skia.h" namespace content { class WebContents; } -class ThumbnailImage; - // Tracks the thumbnails of a set of WebContentses. This set is dynamically // managed, and WebContents closure is handled gracefully. The user is notified // of any thumbnail change via a callback specified on construction. class ThumbnailTracker { public: + using CompressedThumbnailData = ThumbnailImage::CompressedThumbnailData; + // Should return the ThumbnailImage instance for a WebContents. using GetThumbnailCallback = base::RepeatingCallback( @@ -29,7 +30,8 @@ class ThumbnailTracker { // Handles a thumbnail update for a tab. using ThumbnailUpdatedCallback = - base::RepeatingCallback; + base::RepeatingCallback; explicit ThumbnailTracker(ThumbnailUpdatedCallback callback); // Specifies how to get a ThumbnailImage for a WebContents. This is intended @@ -44,7 +46,8 @@ class ThumbnailTracker { void WatchTab(content::WebContents* contents); private: - void ThumbnailUpdated(content::WebContents* contents, gfx::ImageSkia image); + void ThumbnailUpdated(content::WebContents* contents, + CompressedThumbnailData image); void ContentsClosed(content::WebContents* contents); // The default |GetThumbnailCallback| implementation. diff --git a/chromium/chrome/browser/ui/webui/tab_strip/thumbnail_tracker_unittest.cc b/chromium/chrome/browser/ui/webui/tab_strip/thumbnail_tracker_unittest.cc index eac65cc2104..714296013a5 100644 --- a/chromium/chrome/browser/ui/webui/tab_strip/thumbnail_tracker_unittest.cc +++ b/chromium/chrome/browser/ui/webui/tab_strip/thumbnail_tracker_unittest.cc @@ -99,11 +99,9 @@ TEST_F(ThumbnailTrackerTest, WatchTabGetsCurrentThumbnail) { // Verify that WatchTab() gets the current image, waiting for the decoding to // happen. EXPECT_CALL(thumbnail_updated_callback_, Run(contents.get(), _)).Times(1); - base::RunLoop notify_loop; thumbnail->set_async_operation_finished_callback_for_testing( - notify_loop.QuitClosure()); + base::RepeatingClosure()); thumbnail_tracker_.WatchTab(contents.get()); - notify_loop.Run(); } TEST_F(ThumbnailTrackerTest, PropagatesThumbnailUpdate) { diff --git a/chromium/chrome/browser/ui/webui/test_data_source.cc b/chromium/chrome/browser/ui/webui/test_data_source.cc index 3c2b5ac0d41..1fbe67324c0 100644 --- a/chromium/chrome/browser/ui/webui/test_data_source.cc +++ b/chromium/chrome/browser/ui/webui/test_data_source.cc @@ -25,6 +25,19 @@ namespace { const char kModuleQuery[] = "module="; } // namespace +TestDataSource::TestDataSource(std::string root) { + base::FilePath test_data; + CHECK(base::PathService::Get(chrome::DIR_TEST_DATA, &test_data)); + src_root_ = test_data.AppendASCII(root).NormalizePathSeparators(); + DCHECK(test_data.IsParent(src_root_)); + + base::FilePath exe_dir; + base::PathService::Get(base::DIR_EXE, &exe_dir); + gen_root_ = exe_dir.AppendASCII("gen/chrome/test/data/" + root) + .NormalizePathSeparators(); + DCHECK(exe_dir.IsParent(gen_root_)); +} + std::string TestDataSource::GetSource() { return "test"; } @@ -33,6 +46,15 @@ void TestDataSource::StartDataRequest( const std::string& path, const content::WebContents::Getter& wc_getter, const content::URLDataSource::GotDataCallback& callback) { + if (path == "strings.m.js") { + std::string output = "import {loadTimeData} from "; + output.append("'chrome://resources/js/load_time_data.m.js';\n"); + output.append("loadTimeData.data = {};"); + scoped_refptr response = + base::RefCountedString::TakeString(&output); + callback.Run(response.get()); + return; + } base::PostTask( FROM_HERE, {base::ThreadPool(), base::MayBlock(), base::TaskPriority::USER_BLOCKING}, @@ -48,7 +70,9 @@ std::string TestDataSource::GetMimeType(const std::string& path) { return "text/html"; } // The test data source currently only serves HTML and JS. - CHECK(base::EndsWith(path, ".js", base::CompareCase::INSENSITIVE_ASCII)); + CHECK(base::EndsWith(path, ".js", base::CompareCase::INSENSITIVE_ASCII)) + << "Tried to read file with unexpected type from test data source: " + << path; return "application/javascript"; } @@ -72,22 +96,6 @@ GURL TestDataSource::GetURLForPath(const std::string& path) { void TestDataSource::ReadFile( const std::string& path, const content::URLDataSource::GotDataCallback& callback) { - if (src_root_.empty()) { - base::FilePath test_data; - CHECK(base::PathService::Get(chrome::DIR_TEST_DATA, &test_data)); - src_root_ = test_data.Append(FILE_PATH_LITERAL("webui")); - } - - if (gen_root_.empty()) { - std::string gen_path = "gen/chrome/test/data/webui/"; -#if defined(OS_WIN) - base::ReplaceChars(gen_path, "//", "\\", &gen_path); -#endif - base::FilePath exe_dir; - base::PathService::Get(base::DIR_EXE, &exe_dir); - gen_root_ = exe_dir.AppendASCII(gen_path); - } - std::string content; GURL url = GetURLForPath(path); diff --git a/chromium/chrome/browser/ui/webui/test_data_source.h b/chromium/chrome/browser/ui/webui/test_data_source.h index 86816587eb2..e4c6ea6360e 100644 --- a/chromium/chrome/browser/ui/webui/test_data_source.h +++ b/chromium/chrome/browser/ui/webui/test_data_source.h @@ -12,10 +12,10 @@ #include "content/public/browser/url_data_source.h" #include "url/gurl.h" -// Serves files at chrome://test/ from //src/chrome/test/data/webui. +// Serves files at chrome://test/ from //src/chrome/test/data/. class TestDataSource : public content::URLDataSource { public: - TestDataSource() = default; + explicit TestDataSource(std::string root); ~TestDataSource() override = default; private: diff --git a/chromium/chrome/browser/ui/webui/theme_handler.cc b/chromium/chrome/browser/ui/webui/theme_handler.cc index 033a87dbafe..a1d7401a815 100644 --- a/chromium/chrome/browser/ui/webui/theme_handler.cc +++ b/chromium/chrome/browser/ui/webui/theme_handler.cc @@ -16,14 +16,12 @@ #include "chrome/grit/theme_resources.h" #include "content/public/browser/notification_service.h" #include "content/public/browser/web_ui.h" -#include "ui/native_theme/native_theme.h" /////////////////////////////////////////////////////////////////////////////// // ThemeHandler -ThemeHandler::ThemeHandler() : theme_observer_(this) {} - -ThemeHandler::~ThemeHandler() {} +ThemeHandler::ThemeHandler() = default; +ThemeHandler::~ThemeHandler() = default; void ThemeHandler::RegisterMessages() { // These are not actual message registrations, but can't be done in the @@ -73,7 +71,7 @@ void ThemeHandler::SendThemeChanged() { // TODO(dbeam): why does this need to be a dictionary? base::DictionaryValue dictionary; dictionary.SetBoolean("hasCustomBackground", has_custom_bg); - CallJavascriptFunction("ntp.themeChanged", dictionary); + FireWebUIListener("theme-changed", dictionary); } void ThemeHandler::InitializeCSSCaches() { diff --git a/chromium/chrome/browser/ui/webui/theme_handler.h b/chromium/chrome/browser/ui/webui/theme_handler.h index 5e52e81d1cd..5de97849396 100644 --- a/chromium/chrome/browser/ui/webui/theme_handler.h +++ b/chromium/chrome/browser/ui/webui/theme_handler.h @@ -10,6 +10,7 @@ #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" #include "content/public/browser/web_ui_message_handler.h" +#include "ui/native_theme/native_theme.h" #include "ui/native_theme/native_theme_observer.h" class Profile; @@ -53,7 +54,8 @@ class ThemeHandler : public content::WebUIMessageHandler, content::NotificationRegistrar registrar_; - ScopedObserver theme_observer_; + ScopedObserver theme_observer_{ + this}; DISALLOW_COPY_AND_ASSIGN(ThemeHandler); }; diff --git a/chromium/chrome/browser/ui/webui/theme_source.cc b/chromium/chrome/browser/ui/webui/theme_source.cc index cc006a1e38e..80b40ae2105 100644 --- a/chromium/chrome/browser/ui/webui/theme_source.cc +++ b/chromium/chrome/browser/ui/webui/theme_source.cc @@ -7,6 +7,7 @@ #include "base/bind.h" #include "base/memory/ref_counted_memory.h" #include "base/strings/string_number_conversions.h" +#include "base/strings/string_util.h" #include "base/task/post_task.h" #include "build/branding_buildflags.h" #include "chrome/browser/profiles/profile.h" @@ -24,6 +25,8 @@ #include "components/version_info/version_info.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" +#include "content/public/browser/url_data_source.h" +#include "content/public/common/url_constants.h" #include "net/url_request/url_request.h" #include "ui/base/layout.h" #include "ui/base/resource/resource_bundle.h" @@ -239,3 +242,15 @@ void ThemeSource::SendThemeImage( base::BindOnce(callback, data)); } } + +std::string ThemeSource::GetAccessControlAllowOriginForOrigin( + const std::string& origin) { + std::string allowed_origin_prefix = content::kChromeUIScheme; + allowed_origin_prefix += "://"; + if (base::StartsWith(origin, allowed_origin_prefix, + base::CompareCase::SENSITIVE)) { + return origin; + } + + return content::URLDataSource::GetAccessControlAllowOriginForOrigin(origin); +} diff --git a/chromium/chrome/browser/ui/webui/theme_source.h b/chromium/chrome/browser/ui/webui/theme_source.h index 321ea0b8fbd..4ebcc707019 100644 --- a/chromium/chrome/browser/ui/webui/theme_source.h +++ b/chromium/chrome/browser/ui/webui/theme_source.h @@ -33,6 +33,8 @@ class ThemeSource : public content::URLDataSource { bool ShouldServiceRequest(const GURL& url, content::ResourceContext* resource_context, int render_process_id) override; + std::string GetAccessControlAllowOriginForOrigin( + const std::string& origin) override; private: // Fetches and sends the theme bitmap. diff --git a/chromium/chrome/browser/ui/webui/theme_source_unittest.cc b/chromium/chrome/browser/ui/webui/theme_source_unittest.cc index 55ee176f9b1..a17b7b45fa1 100644 --- a/chromium/chrome/browser/ui/webui/theme_source_unittest.cc +++ b/chromium/chrome/browser/ui/webui/theme_source_unittest.cc @@ -94,3 +94,15 @@ TEST_F(WebUISourcesTest, ThemeSourceCSS) { EXPECT_EQ(result_data_size_, empty_size); #endif } + +TEST_F(WebUISourcesTest, ThemeAllowedOrigin) { + EXPECT_EQ( + theme_source()->GetAccessControlAllowOriginForOrigin("chrome://settings"), + "chrome://settings"); + EXPECT_EQ(theme_source()->GetAccessControlAllowOriginForOrigin( + "chrome-extensions://some-id"), + ""); + EXPECT_EQ( + theme_source()->GetAccessControlAllowOriginForOrigin("http://google.com"), + ""); +} diff --git a/chromium/chrome/browser/ui/webui/usb_internals/usb_internals_ui.cc b/chromium/chrome/browser/ui/webui/usb_internals/usb_internals_ui.cc index 7b8d5847b99..7b1e5bc4d09 100644 --- a/chromium/chrome/browser/ui/webui/usb_internals/usb_internals_ui.cc +++ b/chromium/chrome/browser/ui/webui/usb_internals/usb_internals_ui.cc @@ -9,6 +9,7 @@ #include "chrome/browser/ui/webui/usb_internals/usb_internals_page_handler.h" #include "chrome/common/url_constants.h" #include "chrome/grit/browser_resources.h" +#include "chrome/grit/usb_internals_resources.h" #include "content/public/browser/web_ui_data_source.h" UsbInternalsUI::UsbInternalsUI(content::WebUI* web_ui) diff --git a/chromium/chrome/browser/ui/webui/web_ui_test_handler.cc b/chromium/chrome/browser/ui/webui/web_ui_test_handler.cc index 24e7b897e06..b9787445885 100644 --- a/chromium/chrome/browser/ui/webui/web_ui_test_handler.cc +++ b/chromium/chrome/browser/ui/webui/web_ui_test_handler.cc @@ -19,6 +19,7 @@ #include "content/public/browser/web_contents.h" #include "content/public/browser/web_ui.h" #include "content/public/test/test_utils.h" +#include "mojo/public/cpp/bindings/associated_remote.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h" @@ -35,7 +36,7 @@ WebUITestHandler::~WebUITestHandler() {} void WebUITestHandler::PreloadJavaScript(const base::string16& js_text, RenderViewHost* preload_host) { DCHECK(preload_host); - chrome::mojom::ChromeRenderFrameAssociatedPtr chrome_render_frame; + mojo::AssociatedRemote chrome_render_frame; preload_host->GetMainFrame()->GetRemoteAssociatedInterfaces()->GetInterface( &chrome_render_frame); chrome_render_frame->ExecuteWebUIJavaScript(js_text); diff --git a/chromium/chrome/browser/ui/webui/webapks_handler.cc b/chromium/chrome/browser/ui/webui/webapks_handler.cc index 58ef4180aac..e7417b006aa 100644 --- a/chromium/chrome/browser/ui/webui/webapks_handler.cc +++ b/chromium/chrome/browser/ui/webui/webapks_handler.cc @@ -60,7 +60,7 @@ void WebApksHandler::OnWebApkInfoRetrieved(const WebApkInfo& webapk_info) { result.SetString("manifestUrl", webapk_info.manifest_url); result.SetString("manifestStartUrl", webapk_info.manifest_start_url); result.SetString("displayMode", - blink::WebDisplayModeToString(webapk_info.display)); + blink::DisplayModeToString(webapk_info.display)); result.SetString("orientation", blink::WebScreenOrientationLockTypeToString( webapk_info.orientation)); result.SetString("themeColor", @@ -78,5 +78,5 @@ void WebApksHandler::OnWebApkInfoRetrieved(const WebApkInfo& webapk_info) { webapk_info.is_backing_browser ? webapk_info.update_status : "Current browser doesn't own this WebAPK."); - CallJavascriptFunction("returnWebApkInfo", result); + FireWebUIListener("web-apk-info", result); } diff --git a/chromium/chrome/browser/ui/webui/webui_load_timer.cc b/chromium/chrome/browser/ui/webui/webui_load_timer.cc index 9bfadd5fb83..c09c69b8af4 100644 --- a/chromium/chrome/browser/ui/webui/webui_load_timer.cc +++ b/chromium/chrome/browser/ui/webui/webui_load_timer.cc @@ -47,7 +47,7 @@ void WebuiLoadTimer::DidStartNavigation( timer_ = std::make_unique(); } -void WebuiLoadTimer::DocumentLoadedInFrame( +void WebuiLoadTimer::DOMContentLoaded( content::RenderFrameHost* render_frame_host) { // See comment in DocumentOnLoadCompletedInMainFrame. if (!timer_ || render_frame_host != web_contents()->GetMainFrame()) diff --git a/chromium/chrome/browser/ui/webui/webui_load_timer.h b/chromium/chrome/browser/ui/webui/webui_load_timer.h index 5474b646af3..83e089c370a 100644 --- a/chromium/chrome/browser/ui/webui/webui_load_timer.h +++ b/chromium/chrome/browser/ui/webui/webui_load_timer.h @@ -20,7 +20,7 @@ class WebuiLoadTimer : public content::WebContentsObserver { public: // Load times are reported to UMA using the provided strings which // must not be empty. - // * |document_initial_load_uma_id| - corresponds to DocumentLoadedInFrame + // * |document_initial_load_uma_id| - corresponds to DOMContentLoaded // * |document_load_completed_uma_id| - corresponds to // DocumentOnLoadCompletedInMainFrame WebuiLoadTimer(content::WebContents* web_contents, @@ -31,8 +31,7 @@ class WebuiLoadTimer : public content::WebContentsObserver { // WebContentsObserver void DidStartNavigation( content::NavigationHandle* navigation_handle) override; - void DocumentLoadedInFrame( - content::RenderFrameHost* render_frame_host) override; + void DOMContentLoaded(content::RenderFrameHost* render_frame_host) override; void DocumentOnLoadCompletedInMainFrame() override; private: diff --git a/chromium/chrome/browser/ui/webui/welcome/helpers.cc b/chromium/chrome/browser/ui/webui/welcome/helpers.cc index 0fe4562325e..7800809ecf0 100644 --- a/chromium/chrome/browser/ui/webui/welcome/helpers.cc +++ b/chromium/chrome/browser/ui/webui/welcome/helpers.cc @@ -109,7 +109,12 @@ bool CanShowSigninModule(const policy::PolicyMap& policies) { policy::BrowserSigninMode::kDisabled; } -#if defined(GOOGLE_CHROME_BUILD) && defined(OS_WIN) +// Welcome experiments depend on Google being the default search provider. +static bool CanExperimentWithVariations(Profile* profile) { + return search::DefaultSearchProviderIsGoogle(profile); +} + +#if BUILDFLAG(GOOGLE_CHROME_BRANDING) && defined(OS_WIN) // These feature flags are used to tie our experiment to specific studies. // go/navi-app-variation for details. // TODO(hcarmona): find a solution that scales better. @@ -121,21 +126,14 @@ const base::Feature kNaviNTPVariationEnabled = { "NaviNTPVariationEnabled", base::FEATURE_DISABLED_BY_DEFAULT}; const base::Feature kNaviShortcutVariationEnabled = { "NaviShortcutVariationEnabled", base::FEATURE_DISABLED_BY_DEFAULT}; -#endif // BUILDFLAG(GOOGLE_CHROME_BRANDING) && defined(OS_WIN) -// Welcome experiments depend on Google being the default search provider. -bool CanExperimentWithVariations(Profile* profile) { - return search::DefaultSearchProviderIsGoogle(profile); -} - -#if BUILDFLAG(GOOGLE_CHROME_BRANDING) && defined(OS_WIN) // Get the group for users who onboard in this experiment. // Groups are: // - Specified by study // - The same for all experiments in study // - Incremented with each new version // - Not reused -std::string GetOnboardingGroup(Profile* profile) { +static std::string GetOnboardingGroup(Profile* profile) { if (!CanExperimentWithVariations(profile)) { // If we cannot run any variations, we bucket the users into a separate // synthetic group that we will ignore data for. @@ -148,8 +146,10 @@ std::string GetOnboardingGroup(Profile* profile) { // "NaviOnboarding" match study name in configs. return base::GetFieldTrialParamValue("NaviOnboarding", "onboarding-group"); } +#endif // BUILDFLAG(GOOGLE_CHROME_BRANDING) && defined(OS_WIN) void JoinOnboardingGroup(Profile* profile) { +#if BUILDFLAG(GOOGLE_CHROME_BRANDING) && defined(OS_WIN) PrefService* prefs = profile->GetPrefs(); std::string group; @@ -180,17 +180,17 @@ void JoinOnboardingGroup(Profile* profile) { base::FeatureList::IsEnabled(kNaviNTPVariationEnabled); else if (group.compare("ShortcutVariationSynthetic-008") == 0) base::FeatureList::IsEnabled(kNaviShortcutVariationEnabled); -} #endif // BUILDFLAG(GOOGLE_CHROME_BRANDING) && defined(OS_WIN) +} bool IsEnabled(Profile* profile) { -#if defined(GOOGLE_CHROME_BUILD) +#if BUILDFLAG(GOOGLE_CHROME_BRANDING) return base::FeatureList::IsEnabled(welcome::kFeature) || base::FeatureList::IsEnabled(welcome::kForceEnabled); #else // Allow enabling outside official builds for testing purposes. return base::FeatureList::IsEnabled(welcome::kForceEnabled); -#endif // defined(GOOGLE_CHROME_BUILD) +#endif // BUILDFLAG(GOOGLE_CHROME_BRANDING) } bool IsAppVariationEnabled() { diff --git a/chromium/chrome/browser/ui/webui/welcome/helpers.h b/chromium/chrome/browser/ui/webui/welcome/helpers.h index 258c956b80c..43db2f3e477 100644 --- a/chromium/chrome/browser/ui/webui/welcome/helpers.h +++ b/chromium/chrome/browser/ui/webui/welcome/helpers.h @@ -23,13 +23,12 @@ class PolicyMap; class Profile; namespace welcome { -#if defined(GOOGLE_CHROME_BUILD) && defined(OS_WIN) + // Onboarding groups are used for running field trials related to first run // experience. This will make a new profile join whatever group is currently // active. Any profile that is already part of an onboarding group will remain // in that group. void JoinOnboardingGroup(Profile* profile); -#endif // defined(GOOGLE_CHROME_BUILD) && defined(OS_WIN) bool IsEnabled(Profile* profile); diff --git a/chromium/chrome/browser/ui/webui/welcome/ntp_background_fetcher.cc b/chromium/chrome/browser/ui/webui/welcome/ntp_background_fetcher.cc index 33ff4884574..9a5026c9601 100644 --- a/chromium/chrome/browser/ui/webui/welcome/ntp_background_fetcher.cc +++ b/chromium/chrome/browser/ui/webui/welcome/ntp_background_fetcher.cc @@ -6,6 +6,7 @@ #include +#include "base/memory/ref_counted_memory.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/net/system_network_context_manager.h" #include "chrome/browser/search/background/ntp_backgrounds.h" diff --git a/chromium/chrome/browser/ui/webui/welcome/welcome_ui.cc b/chromium/chrome/browser/ui/webui/welcome/welcome_ui.cc index d0b69ca81d4..d143915f42a 100644 --- a/chromium/chrome/browser/ui/webui/welcome/welcome_ui.cc +++ b/chromium/chrome/browser/ui/webui/welcome/welcome_ui.cc @@ -25,6 +25,7 @@ #include "components/signin/public/base/signin_pref_names.h" #include "components/strings/grit/components_strings.h" #include "net/base/url_util.h" +#include "ui/resources/grit/webui_resources.h" #if defined(OS_WIN) #include "base/win/windows_version.h" @@ -127,15 +128,26 @@ WelcomeUI::WelcomeUI(content::WebUI* web_ui, const GURL& url) content::WebUIDataSource* html_source = content::WebUIDataSource::Create(url.host()); + html_source->OverrideContentSecurityPolicyScriptSrc( + "script-src chrome://resources chrome://test 'self';"); // Add welcome strings. AddStrings(html_source); // Add all welcome resources. + std::string generated_path = + "@out_folder@/gen/chrome/browser/resources/welcome/"; + for (size_t i = 0; i < kWelcomeResourcesSize; ++i) { - html_source->AddResourcePath(kWelcomeResources[i].name, - kWelcomeResources[i].value); + std::string path = kWelcomeResources[i].name; + if (path.rfind(generated_path, 0) == 0) { + path = path.substr(generated_path.length()); + } + + html_source->AddResourcePath(path, kWelcomeResources[i].value); } + html_source->AddResourcePath("test_loader.js", IDR_WEBUI_JS_TEST_LOADER); + html_source->AddResourcePath("test_loader.html", IDR_WEBUI_HTML_TEST_LOADER); #if BUILDFLAG(GOOGLE_CHROME_BRANDING) // Load unscaled images. @@ -202,6 +214,7 @@ WelcomeUI::WelcomeUI(content::WebUI* web_ui, const GURL& url) base::BindRepeating(&HandleRequestCallback, weak_ptr_factory_.GetWeakPtr())); html_source->UseStringsJs(); + html_source->EnableReplaceI18nInJS(); content::WebUIDataSource::Add(profile, html_source); } -- cgit v1.2.3