summaryrefslogtreecommitdiffstats
path: root/chromium/chrome/browser/ui
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-01-23 17:21:03 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-01-23 16:25:15 +0000
commitc551f43206405019121bd2b2c93714319a0a3300 (patch)
tree1f48c30631c421fd4bbb3c36da20183c8a2ed7d7 /chromium/chrome/browser/ui
parent7961cea6d1041e3e454dae6a1da660b453efd238 (diff)
BASELINE: Update Chromium to 79.0.3945.139
Change-Id: I336b7182fab9bca80b709682489c07db112eaca5 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/chrome/browser/ui')
-rw-r--r--chromium/chrome/browser/ui/BUILD.gn192
-rw-r--r--chromium/chrome/browser/ui/android/widget/BUILD.gn95
-rw-r--r--chromium/chrome/browser/ui/app_list/search/cros_action_history/BUILD.gn11
-rw-r--r--chromium/chrome/browser/ui/app_list/search/search_result_ranker/BUILD.gn6
-rw-r--r--chromium/chrome/browser/ui/libgtkui/BUILD.gn54
-rw-r--r--chromium/chrome/browser/ui/webui/about_ui.cc5
-rw-r--r--chromium/chrome/browser/ui/webui/android/dev_ui_loader/dev_ui_loader_message_handler.cc85
-rw-r--r--chromium/chrome/browser/ui/webui/android/dev_ui_loader/dev_ui_loader_message_handler.h65
-rw-r--r--chromium/chrome/browser/ui/webui/android/dev_ui_loader/dev_ui_loader_ui.cc30
-rw-r--r--chromium/chrome/browser/ui/webui/android/dev_ui_loader/dev_ui_loader_ui.h32
-rw-r--r--chromium/chrome/browser/ui/webui/app_management/app_management.mojom3
-rw-r--r--chromium/chrome/browser/ui/webui/app_management/app_management_page_handler.cc66
-rw-r--r--chromium/chrome/browser/ui/webui/app_management/app_management_page_handler.h28
-rw-r--r--chromium/chrome/browser/ui/webui/app_management/app_management_shelf_delegate_chromeos.cc94
-rw-r--r--chromium/chrome/browser/ui/webui/app_management/app_management_ui.cc140
-rw-r--r--chromium/chrome/browser/ui/webui/app_management/app_management_ui.h41
-rw-r--r--chromium/chrome/browser/ui/webui/bluetooth_internals/BUILD.gn4
-rw-r--r--chromium/chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals.mojom19
-rw-r--r--chromium/chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals_handler.cc55
-rw-r--r--chromium/chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals_handler.h32
-rw-r--r--chromium/chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals_ui.cc13
-rw-r--r--chromium/chrome/browser/ui/webui/bluetooth_internals/bluetooth_internals_ui.h3
-rw-r--r--chromium/chrome/browser/ui/webui/browser_switch/browser_switch_ui.cc7
-rw-r--r--chromium/chrome/browser/ui/webui/certificate_viewer_webui.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/certificates_handler.cc4
-rw-r--r--chromium/chrome/browser/ui/webui/chrome_web_contents_handler.cc5
-rw-r--r--chromium/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc80
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/account_manager_error_ui.cc54
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/account_manager_error_ui.h27
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.cc14
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.h9
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_metrics_recorder_browsertest.cc5
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.cc91
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui.h12
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_ui_browsertest.cc242
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/add_supervision/confirm_signout_dialog.cc35
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/add_supervision/confirm_signout_dialog.h7
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/arc_graphics_tracing/arc_graphics_tracing_handler.cc18
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/arc_graphics_tracing/arc_graphics_tracing_handler.h4
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_ui.cc20
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_utils.cc8
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/camera/camera_ui.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/crostini_installer/BUILD.gn (renamed from chromium/chrome/browser/ui/app_list/search/logging/BUILD.gn)6
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/crostini_installer/OWNERS2
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer.mojom34
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_dialog.cc44
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_dialog.h27
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_page_handler.cc64
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_page_handler.h60
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_ui.cc78
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/crostini_installer/crostini_installer_ui.h51
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/drive_internals_ui.cc381
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/first_run/first_run_handler.cc1
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/internet_config_dialog.cc14
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/internet_config_dialog.h9
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/internet_detail_dialog.cc7
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/internet_detail_dialog.h6
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/login/OWNERS10
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/login/assistant_optin_flow_screen_handler.cc51
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/login/assistant_optin_flow_screen_handler.h9
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc33
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.h18
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/login/enable_debugging_screen_handler.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/login/enrollment_screen_handler.cc10
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/login/error_screen_handler.cc4
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/login/error_screen_handler.h4
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/login/fake_update_required_screen_handler.cc14
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/login/fake_update_required_screen_handler.h48
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/login/fingerprint_setup_screen_handler.cc8
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/login/fingerprint_setup_screen_handler.h7
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.cc139
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h25
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/login/network_state_informer.cc1
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/login/oobe_display_chooser.cc9
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/login/oobe_display_chooser.h14
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/login/oobe_display_chooser_unittest.cc25
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc22
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/login/oobe_ui.h14
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/login/recommend_apps_screen_handler.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/login/signin_screen_handler.cc9
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/login/supervision_transition_screen_handler.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/login/update_required_screen_handler.cc65
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/login/update_required_screen_handler.h33
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.cc16
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.h13
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_page_handler.mojom7
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_ui.cc7
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/machine_learning/machine_learning_internals_ui.h3
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_dialog.cc13
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/multidevice_setup/multidevice_setup_dialog.h6
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/network_element_localized_strings_provider.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/network_ui.cc41
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/network_ui.h5
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/set_time_ui.cc11
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/smb_shares/smb_handler.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/smb_shares/smb_shares_localized_strings_provider.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/sys_internals/sys_internals_message_handler.cc4
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/system_web_dialog_browsertest.cc28
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/system_web_dialog_delegate.cc4
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/terminal/terminal_source.cc17
-rw-r--r--chromium/chrome/browser/ui/webui/chromeos/terminal/terminal_source.h7
-rw-r--r--chromium/chrome/browser/ui/webui/conflicts/conflicts_data_fetcher.cc1
-rw-r--r--chromium/chrome/browser/ui/webui/constrained_web_dialog_delegate_base.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/crashes_ui.cc33
-rw-r--r--chromium/chrome/browser/ui/webui/devtools_ui_data_source.cc101
-rw-r--r--chromium/chrome/browser/ui/webui/devtools_ui_data_source.h13
-rw-r--r--chromium/chrome/browser/ui/webui/devtools_ui_data_source_unittest.cc45
-rw-r--r--chromium/chrome/browser/ui/webui/discards/BUILD.gn3
-rw-r--r--chromium/chrome/browser/ui/webui/discards/DEPS10
-rw-r--r--chromium/chrome/browser/ui/webui/discards/discards.mojom81
-rw-r--r--chromium/chrome/browser/ui/webui/discards/discards_ui.cc87
-rw-r--r--chromium/chrome/browser/ui/webui/discards/discards_ui.h10
-rw-r--r--chromium/chrome/browser/ui/webui/discards/graph_dump_impl.cc396
-rw-r--r--chromium/chrome/browser/ui/webui/discards/graph_dump_impl.h187
-rw-r--r--chromium/chrome/browser/ui/webui/discards/graph_dump_impl_unittest.cc224
-rw-r--r--chromium/chrome/browser/ui/webui/domain_reliability_internals_ui.cc1
-rw-r--r--chromium/chrome/browser/ui/webui/download_internals/download_internals_ui_message_handler.cc1
-rw-r--r--chromium/chrome/browser/ui/webui/downloads/OWNERS1
-rw-r--r--chromium/chrome/browser/ui/webui/downloads/downloads.mojom3
-rw-r--r--chromium/chrome/browser/ui/webui/downloads/downloads_dom_handler.cc11
-rw-r--r--chromium/chrome/browser/ui/webui/downloads/downloads_dom_handler.h17
-rw-r--r--chromium/chrome/browser/ui/webui/downloads/downloads_dom_handler_unittest.cc22
-rw-r--r--chromium/chrome/browser/ui/webui/downloads/downloads_list_tracker.cc18
-rw-r--r--chromium/chrome/browser/ui/webui/downloads/downloads_list_tracker.h8
-rw-r--r--chromium/chrome/browser/ui/webui/downloads/downloads_list_tracker_unittest.cc9
-rw-r--r--chromium/chrome/browser/ui/webui/downloads/downloads_ui.cc19
-rw-r--r--chromium/chrome/browser/ui/webui/downloads/downloads_ui.h14
-rw-r--r--chromium/chrome/browser/ui/webui/downloads/mock_downloads_page.cc15
-rw-r--r--chromium/chrome/browser/ui/webui/downloads/mock_downloads_page.h8
-rw-r--r--chromium/chrome/browser/ui/webui/engagement/site_engagement_ui.cc15
-rw-r--r--chromium/chrome/browser/ui/webui/engagement/site_engagement_ui.h3
-rw-r--r--chromium/chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_page_handler.cc8
-rw-r--r--chromium/chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_page_handler.h8
-rw-r--r--chromium/chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_ui.cc8
-rw-r--r--chromium/chrome/browser/ui/webui/explore_sites_internals/explore_sites_internals_ui.h4
-rw-r--r--chromium/chrome/browser/ui/webui/extensions/extension_icon_source.cc7
-rw-r--r--chromium/chrome/browser/ui/webui/extensions/extensions_internals_source.cc38
-rw-r--r--chromium/chrome/browser/ui/webui/extensions/extensions_ui.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/feed_internals/feed_internals_page_handler.cc7
-rw-r--r--chromium/chrome/browser/ui/webui/feed_internals/feed_internals_page_handler.h13
-rw-r--r--chromium/chrome/browser/ui/webui/feed_internals/feed_internals_ui.cc6
-rw-r--r--chromium/chrome/browser/ui/webui/feed_internals/feed_internals_ui.h4
-rw-r--r--chromium/chrome/browser/ui/webui/fileicon_source_unittest.cc1
-rw-r--r--chromium/chrome/browser/ui/webui/flags_ui.cc14
-rw-r--r--chromium/chrome/browser/ui/webui/flags_ui_unittest.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/help/version_updater.h8
-rw-r--r--chromium/chrome/browser/ui/webui/help/version_updater_chromeos.cc70
-rw-r--r--chromium/chrome/browser/ui/webui/help/version_updater_chromeos.h16
-rw-r--r--chromium/chrome/browser/ui/webui/help/version_updater_chromeos_unittest.cc19
-rw-r--r--chromium/chrome/browser/ui/webui/history_ui.cc1
-rw-r--r--chromium/chrome/browser/ui/webui/inspect_ui.cc19
-rw-r--r--chromium/chrome/browser/ui/webui/inspect_ui.h3
-rw-r--r--chromium/chrome/browser/ui/webui/interstitials/interstitial_ui.cc14
-rw-r--r--chromium/chrome/browser/ui/webui/interstitials/interstitial_ui_browsertest.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals.mojom2
-rw-r--r--chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler.cc13
-rw-r--r--chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler.h14
-rw-r--r--chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals_page_handler_unittest.cc30
-rw-r--r--chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals_ui.cc7
-rw-r--r--chromium/chrome/browser/ui/webui/interventions_internals/interventions_internals_ui.h3
-rw-r--r--chromium/chrome/browser/ui/webui/local_discovery/local_discovery_ui_browsertest.cc1
-rw-r--r--chromium/chrome/browser/ui/webui/management_ui.cc7
-rw-r--r--chromium/chrome/browser/ui/webui/management_ui_browsertest.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/management_ui_handler.cc48
-rw-r--r--chromium/chrome/browser/ui/webui/management_ui_handler.h2
-rw-r--r--chromium/chrome/browser/ui/webui/management_ui_handler_unittest.cc50
-rw-r--r--chromium/chrome/browser/ui/webui/media/media_engagement_ui.cc18
-rw-r--r--chromium/chrome/browser/ui/webui/media/media_engagement_ui.h6
-rw-r--r--chromium/chrome/browser/ui/webui/media_router/media_router_internals_webui_message_handler.cc10
-rw-r--r--chromium/chrome/browser/ui/webui/media_router/media_router_internals_webui_message_handler.h2
-rw-r--r--chromium/chrome/browser/ui/webui/memory_internals_ui.cc7
-rw-r--r--chromium/chrome/browser/ui/webui/net_export_ui.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/net_internals/net_internals_ui.cc3
-rw-r--r--chromium/chrome/browser/ui/webui/net_internals/net_internals_ui_browsertest.cc21
-rw-r--r--chromium/chrome/browser/ui/webui/notifications_internals/notifications_internals_ui_message_handler.cc1
-rw-r--r--chromium/chrome/browser/ui/webui/ntp/app_launcher_handler.cc51
-rw-r--r--chromium/chrome/browser/ui/webui/ntp/cookie_controls_handler.cc117
-rw-r--r--chromium/chrome/browser/ui/webui/ntp/cookie_controls_handler.h65
-rw-r--r--chromium/chrome/browser/ui/webui/ntp/cookie_controls_handler_unittest.cc51
-rw-r--r--chromium/chrome/browser/ui/webui/ntp/new_tab_ui.cc5
-rw-r--r--chromium/chrome/browser/ui/webui/ntp/ntp_resource_cache.cc19
-rw-r--r--chromium/chrome/browser/ui/webui/ntp/ntp_resource_cache.h8
-rw-r--r--chromium/chrome/browser/ui/webui/offline/offline_internals_ui_message_handler.cc3
-rw-r--r--chromium/chrome/browser/ui/webui/omnibox/omnibox.mojom5
-rw-r--r--chromium/chrome/browser/ui/webui/omnibox/omnibox_page_handler.cc44
-rw-r--r--chromium/chrome/browser/ui/webui/omnibox/omnibox_page_handler.h15
-rw-r--r--chromium/chrome/browser/ui/webui/omnibox/omnibox_ui.cc8
-rw-r--r--chromium/chrome/browser/ui/webui/omnibox/omnibox_ui.h4
-rw-r--r--chromium/chrome/browser/ui/webui/policy_ui_browsertest.cc3
-rw-r--r--chromium/chrome/browser/ui/webui/policy_ui_handler.cc4
-rw-r--r--chromium/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos.cc8
-rw-r--r--chromium/chrome/browser/ui/webui/print_preview/local_printer_handler_chromeos_unittest.cc6
-rw-r--r--chromium/chrome/browser/ui/webui/print_preview/pdf_printer_handler.cc29
-rw-r--r--chromium/chrome/browser/ui/webui/print_preview/policy_settings.cc3
-rw-r--r--chromium/chrome/browser/ui/webui/print_preview/print_preview_handler.cc56
-rw-r--r--chromium/chrome/browser/ui/webui/print_preview/print_preview_handler.h10
-rw-r--r--chromium/chrome/browser/ui/webui/print_preview/print_preview_handler_unittest.cc140
-rw-r--r--chromium/chrome/browser/ui/webui/print_preview/print_preview_ui.cc80
-rw-r--r--chromium/chrome/browser/ui/webui/print_preview/print_preview_ui.h5
-rw-r--r--chromium/chrome/browser/ui/webui/print_preview/print_preview_utils.cc7
-rw-r--r--chromium/chrome/browser/ui/webui/print_preview/print_preview_utils_unittest.cc3
-rw-r--r--chromium/chrome/browser/ui/webui/profile_helper_browsertest.cc39
-rw-r--r--chromium/chrome/browser/ui/webui/quota_internals/OWNERS4
-rw-r--r--chromium/chrome/browser/ui/webui/reset_password/reset_password_ui.cc17
-rw-r--r--chromium/chrome/browser/ui/webui/reset_password/reset_password_ui.h4
-rw-r--r--chromium/chrome/browser/ui/webui/sandbox/OWNERS3
-rw-r--r--chromium/chrome/browser/ui/webui/sandbox/sandbox_handler.cc134
-rw-r--r--chromium/chrome/browser/ui/webui/sandbox/sandbox_handler.h52
-rw-r--r--chromium/chrome/browser/ui/webui/sandbox/sandbox_internals_ui.cc (renamed from chromium/chrome/browser/ui/webui/sandbox_internals_ui.cc)12
-rw-r--r--chromium/chrome/browser/ui/webui/sandbox/sandbox_internals_ui.h (renamed from chromium/chrome/browser/ui/webui/sandbox_internals_ui.h)6
-rw-r--r--chromium/chrome/browser/ui/webui/settings/about_handler.cc90
-rw-r--r--chromium/chrome/browser/ui/webui/settings/about_handler.h23
-rw-r--r--chromium/chrome/browser/ui/webui/settings/browser_lifetime_handler.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/account_manager_handler.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/android_apps_handler.h2
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/app_management/app_management_page_handler_factory.cc29
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/app_management/app_management_page_handler_factory.h19
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/app_management/app_management_uma.h31
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/change_picture_handler.cc31
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/change_picture_handler.h15
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/crostini_handler.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler.cc22
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/cups_printers_handler_unittest.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/date_time_handler.cc1
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/device_keyboard_handler.cc4
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/device_keyboard_handler.h8
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/device_power_handler.cc3
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/device_power_handler.h4
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.cc48
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/device_storage_handler.h13
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/device_stylus_handler.cc4
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/device_stylus_handler.h10
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/fingerprint_handler.cc14
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/fingerprint_handler.h14
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/internet_handler.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/kerberos_accounts_handler.cc6
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/kerberos_accounts_handler.h2
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/os_settings_ui.cc22
-rw-r--r--chromium/chrome/browser/ui/webui/settings/chromeos/os_settings_ui.h6
-rw-r--r--chromium/chrome/browser/ui/webui/settings/font_handler.cc7
-rw-r--r--chromium/chrome/browser/ui/webui/settings/font_handler.h4
-rw-r--r--chromium/chrome/browser/ui/webui/settings/incompatible_applications_handler_win.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/settings/people_handler.cc42
-rw-r--r--chromium/chrome/browser/ui/webui/settings/people_handler.h9
-rw-r--r--chromium/chrome/browser/ui/webui/settings/people_handler_unittest.cc44
-rw-r--r--chromium/chrome/browser/ui/webui/settings/profile_info_handler.cc12
-rw-r--r--chromium/chrome/browser/ui/webui/settings/profile_info_handler.h8
-rw-r--r--chromium/chrome/browser/ui/webui/settings/search_engines_handler.cc13
-rw-r--r--chromium/chrome/browser/ui/webui/settings/settings_cookies_view_handler.cc64
-rw-r--r--chromium/chrome/browser/ui/webui/settings/settings_cookies_view_handler.h4
-rw-r--r--chromium/chrome/browser/ui/webui/settings/settings_cookies_view_handler_unittest.cc65
-rw-r--r--chromium/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc193
-rw-r--r--chromium/chrome/browser/ui/webui/settings/settings_localized_strings_provider.h4
-rw-r--r--chromium/chrome/browser/ui/webui/settings/settings_manage_profile_handler.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/settings/settings_manage_profile_handler.h3
-rw-r--r--chromium/chrome/browser/ui/webui/settings/settings_security_key_handler.cc94
-rw-r--r--chromium/chrome/browser/ui/webui/settings/settings_security_key_handler.h13
-rw-r--r--chromium/chrome/browser/ui/webui/settings/settings_ui.cc45
-rw-r--r--chromium/chrome/browser/ui/webui/settings/settings_ui.h6
-rw-r--r--chromium/chrome/browser/ui/webui/settings/site_settings_handler.cc12
-rw-r--r--chromium/chrome/browser/ui/webui/settings/site_settings_handler.h7
-rw-r--r--chromium/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc24
-rw-r--r--chromium/chrome/browser/ui/webui/settings/tts_handler.cc8
-rw-r--r--chromium/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.cc49
-rw-r--r--chromium/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.h13
-rw-r--r--chromium/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_delegate_impl.cc11
-rw-r--r--chromium/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_delegate_impl.h5
-rw-r--r--chromium/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_unittest.cc74
-rw-r--r--chromium/chrome/browser/ui/webui/signin/inline_login_handler.cc7
-rw-r--r--chromium/chrome/browser/ui/webui/signin/inline_login_handler_chromeos.cc1
-rw-r--r--chromium/chrome/browser/ui/webui/signin/inline_login_handler_dialog_chromeos.cc29
-rw-r--r--chromium/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/signin/login_ui_test_utils.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/signin/signin_email_confirmation_ui.cc3
-rw-r--r--chromium/chrome/browser/ui/webui/signin/signin_error_ui.cc6
-rw-r--r--chromium/chrome/browser/ui/webui/signin/signin_utils_desktop.cc3
-rw-r--r--chromium/chrome/browser/ui/webui/signin/sync_confirmation_handler.cc6
-rw-r--r--chromium/chrome/browser/ui/webui/signin/sync_confirmation_handler_unittest.cc26
-rw-r--r--chromium/chrome/browser/ui/webui/signin/sync_confirmation_ui.cc22
-rw-r--r--chromium/chrome/browser/ui/webui/signin/user_manager_screen_handler.h1
-rw-r--r--chromium/chrome/browser/ui/webui/site_settings_helper.cc6
-rw-r--r--chromium/chrome/browser/ui/webui/snippets_internals/snippets_internals.mojom3
-rw-r--r--chromium/chrome/browser/ui/webui/snippets_internals/snippets_internals_page_handler.cc7
-rw-r--r--chromium/chrome/browser/ui/webui/snippets_internals/snippets_internals_page_handler.h15
-rw-r--r--chromium/chrome/browser/ui/webui/snippets_internals/snippets_internals_ui.cc21
-rw-r--r--chromium/chrome/browser/ui/webui/snippets_internals/snippets_internals_ui.h16
-rw-r--r--chromium/chrome/browser/ui/webui/supervised_user_internals_message_handler.cc11
-rw-r--r--chromium/chrome/browser/ui/webui/supervised_user_internals_message_handler.h5
-rw-r--r--chromium/chrome/browser/ui/webui/sync_file_system_internals/extension_statuses_handler.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/sync_internals_message_handler.cc3
-rw-r--r--chromium/chrome/browser/ui/webui/sync_internals_ui.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/tab_strip/tab_strip_ui.cc334
-rw-r--r--chromium/chrome/browser/ui/webui/tab_strip/tab_strip_ui.h33
-rw-r--r--chromium/chrome/browser/ui/webui/tab_strip/tab_strip_ui_browsertest.cc118
-rw-r--r--chromium/chrome/browser/ui/webui/tab_strip/thumbnail_tracker.cc17
-rw-r--r--chromium/chrome/browser/ui/webui/tab_strip/thumbnail_tracker.h11
-rw-r--r--chromium/chrome/browser/ui/webui/tab_strip/thumbnail_tracker_unittest.cc4
-rw-r--r--chromium/chrome/browser/ui/webui/test_data_source.cc42
-rw-r--r--chromium/chrome/browser/ui/webui/test_data_source.h4
-rw-r--r--chromium/chrome/browser/ui/webui/theme_handler.cc8
-rw-r--r--chromium/chrome/browser/ui/webui/theme_handler.h4
-rw-r--r--chromium/chrome/browser/ui/webui/theme_source.cc15
-rw-r--r--chromium/chrome/browser/ui/webui/theme_source.h2
-rw-r--r--chromium/chrome/browser/ui/webui/theme_source_unittest.cc12
-rw-r--r--chromium/chrome/browser/ui/webui/usb_internals/usb_internals_ui.cc1
-rw-r--r--chromium/chrome/browser/ui/webui/web_ui_test_handler.cc3
-rw-r--r--chromium/chrome/browser/ui/webui/webapks_handler.cc4
-rw-r--r--chromium/chrome/browser/ui/webui/webui_load_timer.cc2
-rw-r--r--chromium/chrome/browser/ui/webui/webui_load_timer.h5
-rw-r--r--chromium/chrome/browser/ui/webui/welcome/helpers.cc24
-rw-r--r--chromium/chrome/browser/ui/webui/welcome/helpers.h3
-rw-r--r--chromium/chrome/browser/ui/webui/welcome/ntp_background_fetcher.cc1
-rw-r--r--chromium/chrome/browser/ui/webui/welcome/welcome_ui.cc17
313 files changed, 5626 insertions, 2675 deletions
diff --git a/chromium/chrome/browser/ui/BUILD.gn b/chromium/chrome/browser/ui/BUILD.gn
index 1826b714b2e..b0ff168a4ec 100644
--- a/chromium/chrome/browser/ui/BUILD.gn
+++ b/chromium/chrome/browser/ui/BUILD.gn
@@ -9,7 +9,6 @@ import("//build/config/features.gni")
import("//build/config/jumbo.gni")
import("//build/config/linux/gtk/gtk.gni")
import("//build/config/ui.gni")
-import("//build/split_static_library.gni")
import("//chrome/common/features.gni")
import("//chromeos/assistant/assistant.gni")
import("//components/feature_engagement/features.gni")
@@ -28,23 +27,14 @@ import("//ui/views/features.gni")
# Use a static library here because many test binaries depend on this but don't
# require many files from it. This makes linking more efficient.
-jumbo_split_static_library("ui") {
- # Split into multiple static libraries on Windows builds. We have hit size
- # limits on Windows official builds and on goma builds when symbol_level = 2
- # is selected. Always splitting on Windows builds is simpler than trying to
- # perfectly calculate the scenarios where it is required.
- if (is_win) {
- split_count = 5
- } else {
- split_count = 1
- }
-
+jumbo_static_library("ui") {
sources = [
"accelerator_utils.h",
"app_list/app_list_util.cc",
"app_list/app_list_util.h",
# All other browser/ui/app_list files go under enable_app_list below.
+ "autofill/autofill_bubble_handler.h",
"autofill/autofill_popup_controller.h",
"autofill/autofill_popup_controller_impl.cc",
"autofill/autofill_popup_controller_impl.h",
@@ -58,8 +48,6 @@ jumbo_split_static_library("ui") {
"autofill/chrome_autofill_client.h",
"autofill/payments/autofill_dialog_models.cc",
"autofill/payments/autofill_dialog_models.h",
- "autofill/payments/autofill_ui_util.cc",
- "autofill/payments/autofill_ui_util.h",
"autofill/payments/create_card_unmask_prompt_view.h",
"autofill/payments/credit_card_scanner_controller.cc",
"autofill/payments/credit_card_scanner_controller.h",
@@ -72,6 +60,8 @@ jumbo_split_static_library("ui") {
"autofill/popup_controller_common.h",
"autofill/popup_view_common.cc",
"autofill/popup_view_common.h",
+ "autofill/test/test_autofill_bubble_handler.cc",
+ "autofill/test/test_autofill_bubble_handler.h",
"blocked_content/blocked_window_params.cc",
"blocked_content/blocked_window_params.h",
"blocked_content/list_item_position.cc",
@@ -137,8 +127,6 @@ jumbo_split_static_library("ui") {
"page_info/page_info_ui.h",
"passwords/account_avatar_fetcher.cc",
"passwords/account_avatar_fetcher.h",
- "passwords/credential_leak_dialog_utils.cc",
- "passwords/credential_leak_dialog_utils.h",
"passwords/manage_passwords_state.cc",
"passwords/manage_passwords_state.h",
"passwords/manage_passwords_view_utils.cc",
@@ -382,11 +370,13 @@ jumbo_split_static_library("ui") {
"//components/sync_user_events",
"//components/translate/content/browser",
"//content/public/browser",
+ "//mojo/public/cpp/bindings",
]
deps = [
"//base",
"//base:i18n",
"//base/allocator:buildflags",
+ "//build:branding_buildflags",
"//cc/paint",
"//chrome:extra_resources",
"//chrome:resources",
@@ -403,6 +393,8 @@ jumbo_split_static_library("ui") {
"//chrome/browser/media:mojo_bindings",
"//chrome/browser/notifications/scheduler/public",
"//chrome/browser/profiling_host",
+ "//chrome/browser/resources/omnibox:resources",
+ "//chrome/browser/resources/usb_internals:resources",
"//chrome/browser/safe_browsing",
"//chrome/browser/ssl:proto",
"//chrome/browser/ui/webui/bluetooth_internals",
@@ -430,7 +422,6 @@ jumbo_split_static_library("ui") {
"//components/data_reduction_proxy/core/browser",
"//components/device_event_log",
"//components/dom_distiller/content/browser",
- "//components/dom_distiller/webui",
"//components/domain_reliability",
"//components/download/content/factory",
"//components/download/content/public",
@@ -473,6 +464,7 @@ jumbo_split_static_library("ui") {
"//components/payments/content/icon",
"//components/payments/core:error_strings",
"//components/pdf/browser",
+ "//components/performance_manager",
"//components/policy/core/browser",
"//components/pref_registry",
"//components/previews/content",
@@ -511,6 +503,7 @@ jumbo_split_static_library("ui") {
"//components/subresource_filter/content/browser",
"//components/subresource_filter/core/browser",
"//components/sync",
+ "//components/sync/driver:resources",
"//components/sync_preferences",
"//components/sync_sessions",
"//components/tracing:startup_tracing",
@@ -615,10 +608,17 @@ jumbo_split_static_library("ui") {
]
}
- if (is_android || is_linux) {
+ if (is_win || is_android || is_linux) {
+ sources += [
+ "webui/sandbox/sandbox_internals_ui.cc",
+ "webui/sandbox/sandbox_internals_ui.h",
+ ]
+ }
+
+ if (is_win) {
sources += [
- "webui/sandbox_internals_ui.cc",
- "webui/sandbox_internals_ui.h",
+ "webui/sandbox/sandbox_handler.cc",
+ "webui/sandbox/sandbox_handler.h",
]
}
@@ -930,10 +930,13 @@ jumbo_split_static_library("ui") {
"global_error/global_error_service_factory.h",
"global_media_controls/media_dialog_delegate.cc",
"global_media_controls/media_dialog_delegate.h",
+ "global_media_controls/media_notification_container_impl.h",
+ "global_media_controls/media_notification_container_observer.h",
"global_media_controls/media_toolbar_button_controller.cc",
"global_media_controls/media_toolbar_button_controller.h",
"global_media_controls/media_toolbar_button_controller_delegate.cc",
"global_media_controls/media_toolbar_button_controller_delegate.h",
+ "global_media_controls/media_toolbar_button_observer.h",
"hats/hats_helper.cc",
"hats/hats_helper.h",
"hats/hats_service.cc",
@@ -963,7 +966,6 @@ jumbo_split_static_library("ui") {
"intent_picker_tab_helper.h",
"layout_constants.cc",
"layout_constants.h",
- "location_bar/location_bar.cc",
"location_bar/location_bar.h",
"managed_ui.cc",
"managed_ui.h",
@@ -1006,7 +1008,7 @@ jumbo_split_static_library("ui") {
"omnibox/clipboard_utils.h",
"omnibox/omnibox_theme.cc",
"omnibox/omnibox_theme.h",
- "page_action/page_action_icon_container.h",
+ "page_action/page_action_icon_type.h",
"page_info/page_info_dialog.cc",
"page_info/page_info_dialog.h",
"page_info/page_info_infobar_delegate.cc",
@@ -1119,6 +1121,8 @@ jumbo_split_static_library("ui") {
"tabs/tab_menu_model.h",
"tabs/tab_network_state.cc",
"tabs/tab_network_state.h",
+ "tabs/tab_renderer_data.cc",
+ "tabs/tab_renderer_data.h",
"tabs/tab_strip_model.cc",
"tabs/tab_strip_model.h",
"tabs/tab_strip_model_delegate.cc",
@@ -1187,8 +1191,6 @@ jumbo_split_static_library("ui") {
"webui/app_management/app_management_page_handler.h",
"webui/app_management/app_management_shelf_delegate_chromeos.cc",
"webui/app_management/app_management_shelf_delegate_chromeos.h",
- "webui/app_management/app_management_ui.cc",
- "webui/app_management/app_management_ui.h",
"webui/bookmarks/bookmarks_message_handler.cc",
"webui/bookmarks/bookmarks_message_handler.h",
"webui/bookmarks/bookmarks_ui.cc",
@@ -1245,6 +1247,8 @@ jumbo_split_static_library("ui") {
"webui/ntp/app_launcher_handler.h",
"webui/ntp/app_resource_cache_factory.cc",
"webui/ntp/app_resource_cache_factory.h",
+ "webui/ntp/cookie_controls_handler.cc",
+ "webui/ntp/cookie_controls_handler.h",
"webui/ntp/core_app_launcher_handler.cc",
"webui/ntp/core_app_launcher_handler.h",
"webui/ntp/new_tab_ui.cc",
@@ -1352,7 +1356,6 @@ jumbo_split_static_library("ui") {
]
deps += [
"//base/util/values:values_util",
- "//build:branding_buildflags",
"//chrome/app/vector_icons",
"//chrome/browser:theme_properties",
"//chrome/browser/media/router",
@@ -1368,6 +1371,7 @@ jumbo_split_static_library("ui") {
"//components/feedback/proto",
"//components/keep_alive_registry",
"//components/network_session_configurator/common",
+ "//components/page_load_metrics/browser",
"//components/profile_metrics",
"//components/ui_metrics",
"//components/url_formatter",
@@ -1602,6 +1606,8 @@ jumbo_split_static_library("ui") {
"views/touch_selection_menu_chromeos.h",
"views/touch_selection_menu_runner_chromeos.cc",
"views/touch_selection_menu_runner_chromeos.h",
+ "webui/chromeos/account_manager_error_ui.cc",
+ "webui/chromeos/account_manager_error_ui.h",
"webui/chromeos/account_manager_welcome_dialog.cc",
"webui/chromeos/account_manager_welcome_dialog.h",
"webui/chromeos/account_manager_welcome_ui.cc",
@@ -1646,6 +1652,12 @@ jumbo_split_static_library("ui") {
"webui/chromeos/cellular_setup/mobile_setup_ui.h",
"webui/chromeos/certificate_manager_dialog_ui.cc",
"webui/chromeos/certificate_manager_dialog_ui.h",
+ "webui/chromeos/crostini_installer/crostini_installer_dialog.cc",
+ "webui/chromeos/crostini_installer/crostini_installer_dialog.h",
+ "webui/chromeos/crostini_installer/crostini_installer_page_handler.cc",
+ "webui/chromeos/crostini_installer/crostini_installer_page_handler.h",
+ "webui/chromeos/crostini_installer/crostini_installer_ui.cc",
+ "webui/chromeos/crostini_installer/crostini_installer_ui.h",
"webui/chromeos/cryptohome_ui.cc",
"webui/chromeos/cryptohome_ui.h",
"webui/chromeos/cryptohome_web_ui_handler.cc",
@@ -1890,6 +1902,7 @@ jumbo_split_static_library("ui") {
"webui/version_handler_chromeos.h",
"window_sizer/window_sizer_ash.cc",
]
+
deps += [
"//ash",
"//ash/components/shortcut_viewer",
@@ -1902,12 +1915,14 @@ jumbo_split_static_library("ui") {
"//chrome/browser/resources/chromeos:camera_resources",
"//chrome/browser/ui/webui/app_management:mojo_bindings",
"//chrome/browser/ui/webui/chromeos/add_supervision:mojo_bindings",
+ "//chrome/browser/ui/webui/chromeos/crostini_installer:mojo_bindings",
"//chrome/browser/ui/webui/chromeos/machine_learning:mojo_bindings",
"//chrome/services/file_util/public/cpp",
"//chromeos",
"//chromeos/assistant:buildflags",
"//chromeos/audio",
"//chromeos/components/account_manager",
+ "//chromeos/components/media_app_ui",
"//chromeos/components/multidevice",
"//chromeos/components/multidevice/debug_webui",
"//chromeos/components/multidevice/logging",
@@ -1947,7 +1962,6 @@ jumbo_split_static_library("ui") {
"//components/arc",
"//components/captive_portal",
"//components/consent_auditor:consent_auditor",
- "//components/drive:drive_chromeos",
"//components/exo",
"//components/login",
"//components/session_manager/core",
@@ -1980,13 +1994,25 @@ jumbo_split_static_library("ui") {
if (is_win || is_mac || is_desktop_linux || is_chromeos) {
sources += [
- "autofill/payments/webauthn_offer_dialog.h",
- "autofill/payments/webauthn_offer_dialog_controller.cc",
+ "autofill/payments/verify_pending_dialog_controller.h",
+ "autofill/payments/verify_pending_dialog_controller_impl.cc",
+ "autofill/payments/verify_pending_dialog_controller_impl.h",
+ "autofill/payments/verify_pending_dialog_view.h",
"autofill/payments/webauthn_offer_dialog_controller.h",
+ "autofill/payments/webauthn_offer_dialog_controller_impl.cc",
+ "autofill/payments/webauthn_offer_dialog_controller_impl.h",
+ "autofill/payments/webauthn_offer_dialog_model.cc",
+ "autofill/payments/webauthn_offer_dialog_model.h",
+ "autofill/payments/webauthn_offer_dialog_model_observer.h",
+ "autofill/payments/webauthn_offer_dialog_view.h",
"frame/window_frame_util.cc",
"frame/window_frame_util.h",
- "views/autofill/payments/webauthn_offer_dialog_view.cc",
- "views/autofill/payments/webauthn_offer_dialog_view.h",
+ "tab_contents/chrome_web_contents_view_handle_drop.cc",
+ "tab_contents/chrome_web_contents_view_handle_drop.h",
+ "views/autofill/payments/verify_pending_dialog_view_impl.cc",
+ "views/autofill/payments/verify_pending_dialog_view_impl.h",
+ "views/autofill/payments/webauthn_offer_dialog_view_impl.cc",
+ "views/autofill/payments/webauthn_offer_dialog_view_impl.h",
"views/close_bubble_on_tab_activation_helper.cc",
"views/close_bubble_on_tab_activation_helper.h",
"views/hats/hats_bubble_view.cc",
@@ -1999,6 +2025,8 @@ jumbo_split_static_library("ui") {
"views/profiles/profile_menu_view_base.h",
"webui/discards/discards_ui.cc",
"webui/discards/discards_ui.h",
+ "webui/discards/graph_dump_impl.cc",
+ "webui/discards/graph_dump_impl.h",
"webui/signin/inline_login_handler.cc",
"webui/signin/inline_login_handler.h",
"webui/signin/inline_login_ui.cc",
@@ -2268,6 +2296,8 @@ jumbo_split_static_library("ui") {
"cocoa/touchbar/web_textfield_touch_bar_controller.mm",
"cocoa/window_size_autosaver.h",
"cocoa/window_size_autosaver.mm",
+ "content_settings/media_authorization_wrapper_test.h",
+ "content_settings/media_authorization_wrapper_test.mm",
"views/apps/chrome_app_window_client_views_mac.mm",
"views/certificate_viewer_mac_views.mm",
"views/dropdown_bar_host_mac.mm",
@@ -2455,8 +2485,6 @@ jumbo_split_static_library("ui") {
if (use_x11) {
sources += [
- "views/frame/browser_desktop_window_tree_host_x11.cc",
- "views/frame/browser_desktop_window_tree_host_x11.h",
"views/frame/global_menu_bar_registrar_x11.cc",
"views/frame/global_menu_bar_registrar_x11.h",
"views/frame/global_menu_bar_x11.cc",
@@ -2478,12 +2506,20 @@ jumbo_split_static_library("ui") {
]
}
if (use_ozone) {
+ if (!is_desktop_linux) {
+ sources += [
+ "views/frame/browser_desktop_window_tree_host_platform.cc",
+ "views/frame/browser_desktop_window_tree_host_platform.h",
+ ]
+ }
+ sources += [ "views/frame/native_browser_frame_factory_ozone.cc" ]
+ deps += [ "//ui/platform_window" ]
+ }
+ if (is_desktop_linux) {
sources += [
- "views/frame/browser_desktop_window_tree_host_platform.cc",
- "views/frame/browser_desktop_window_tree_host_platform.h",
- "views/frame/native_browser_frame_factory_ozone.cc",
+ "views/frame/browser_desktop_window_tree_host_linux.cc",
+ "views/frame/browser_desktop_window_tree_host_linux.h",
]
- deps += [ "//ui/platform_window" ]
}
if (use_gtk) {
# This is the only component that can interact with gtk.
@@ -2541,6 +2577,9 @@ jumbo_split_static_library("ui") {
"cookie_controls/cookie_controls_view.h",
"manifest_web_app_browser_controller.cc",
"manifest_web_app_browser_controller.h",
+ "qrcode_generator/qrcode_generator_bubble_controller.cc",
+ "qrcode_generator/qrcode_generator_bubble_controller.h",
+ "qrcode_generator/qrcode_generator_bubble_view.h",
"send_tab_to_self/send_tab_to_self_bubble_controller.cc",
"send_tab_to_self/send_tab_to_self_bubble_controller.h",
"send_tab_to_self/send_tab_to_self_bubble_view.h",
@@ -2566,8 +2605,12 @@ jumbo_split_static_library("ui") {
"views/apps/app_info_dialog/app_info_permissions_panel.h",
"views/apps/app_info_dialog/app_info_summary_panel.cc",
"views/apps/app_info_dialog/app_info_summary_panel.h",
+ "views/apps/app_uninstall_dialog_view.cc",
+ "views/apps/app_uninstall_dialog_view.h",
"views/apps/chrome_native_app_window_views.cc",
"views/apps/chrome_native_app_window_views.h",
+ "views/autofill/autofill_bubble_handler_impl.cc",
+ "views/autofill/autofill_bubble_handler_impl.h",
"views/autofill/autofill_popup_base_view.cc",
"views/autofill/autofill_popup_base_view.h",
"views/autofill/autofill_popup_view_native_views.cc",
@@ -2616,6 +2659,7 @@ jumbo_split_static_library("ui") {
"views/bookmarks/bookmark_menu_controller_views.h",
"views/bookmarks/bookmark_menu_delegate.cc",
"views/bookmarks/bookmark_menu_delegate.h",
+ "views/browser_commands_views.cc",
"views/browser_dialogs_views.cc",
"views/bubble_anchor_util_views.cc",
"views/bubble_anchor_util_views.h",
@@ -2742,12 +2786,6 @@ jumbo_split_static_library("ui") {
"views/frame/contents_layout_manager.h",
"views/frame/contents_web_view.cc",
"views/frame/contents_web_view.h",
- "views/frame/hosted_app_button_container.cc",
- "views/frame/hosted_app_button_container.h",
- "views/frame/hosted_app_menu_button.cc",
- "views/frame/hosted_app_menu_button.h",
- "views/frame/hosted_app_origin_text.cc",
- "views/frame/hosted_app_origin_text.h",
"views/frame/immersive_mode_controller.cc",
"views/frame/immersive_mode_controller.h",
"views/frame/immersive_mode_controller_factory_views.cc",
@@ -2765,6 +2803,8 @@ jumbo_split_static_library("ui") {
"views/frame/terminal_system_app_menu_button_chromeos.cc",
"views/frame/terminal_system_app_menu_button_chromeos.h",
"views/frame/toolbar_button_provider.h",
+ "views/frame/top_container_background.cc",
+ "views/frame/top_container_background.h",
"views/frame/top_container_view.cc",
"views/frame/top_container_view.h",
"views/frame/top_controls_slide_controller.h",
@@ -2785,8 +2825,9 @@ jumbo_split_static_library("ui") {
"views/global_error_bubble_view.h",
"views/global_media_controls/media_dialog_view.cc",
"views/global_media_controls/media_dialog_view.h",
- "views/global_media_controls/media_notification_container_impl.cc",
- "views/global_media_controls/media_notification_container_impl.h",
+ "views/global_media_controls/media_dialog_view_observer.h",
+ "views/global_media_controls/media_notification_container_impl_view.cc",
+ "views/global_media_controls/media_notification_container_impl_view.h",
"views/global_media_controls/media_notification_list_view.cc",
"views/global_media_controls/media_notification_list_view.h",
"views/global_media_controls/media_toolbar_button_view.cc",
@@ -2811,8 +2852,6 @@ jumbo_split_static_library("ui") {
"views/infobars/infobar_view.h",
"views/javascript_dialog_views.cc",
"views/javascript_dialog_views.h",
- "views/layout/animating_layout_manager.cc",
- "views/layout/animating_layout_manager.h",
"views/layout/interpolating_layout_manager.cc",
"views/layout/interpolating_layout_manager.h",
"views/load_complete_listener.cc",
@@ -2919,8 +2958,10 @@ jumbo_split_static_library("ui") {
"views/overlay/skip_ad_label_button.h",
"views/overlay/track_image_button.cc",
"views/overlay/track_image_button.h",
- "views/page_action/omnibox_page_action_icon_container_view.cc",
- "views/page_action/omnibox_page_action_icon_container_view.h",
+ "views/page_action/page_action_icon_container_view.cc",
+ "views/page_action/page_action_icon_container_view.h",
+ "views/page_action/page_action_icon_loading_indicator_view.cc",
+ "views/page_action/page_action_icon_loading_indicator_view.h",
"views/page_action/page_action_icon_view.cc",
"views/page_action/page_action_icon_view.h",
"views/page_action/pwa_install_view.cc",
@@ -3018,6 +3059,10 @@ jumbo_split_static_library("ui") {
"views/permission_bubble/permission_prompt_impl_views.cc",
"views/profiles/avatar_toolbar_button.cc",
"views/profiles/avatar_toolbar_button.h",
+ "views/qrcode_generator/qrcode_generator_bubble.cc",
+ "views/qrcode_generator/qrcode_generator_bubble.h",
+ "views/qrcode_generator/qrcode_generator_icon_view.cc",
+ "views/qrcode_generator/qrcode_generator_icon_view.h",
"views/reader_mode/reader_mode_icon_view.cc",
"views/reader_mode/reader_mode_icon_view.h",
"views/relaunch_notification/relaunch_notification_controller.cc",
@@ -3032,6 +3077,8 @@ jumbo_split_static_library("ui") {
"views/relaunch_notification/wall_clock_timer.h",
"views/sad_tab_view.cc",
"views/sad_tab_view.h",
+ "views/safe_browsing/deep_scanning_modal_dialog.cc",
+ "views/safe_browsing/deep_scanning_modal_dialog.h",
"views/safe_browsing/password_reuse_modal_warning_dialog.cc",
"views/safe_browsing/password_reuse_modal_warning_dialog.h",
"views/send_tab_to_self/send_tab_to_self_bubble_device_button.cc",
@@ -3092,12 +3139,12 @@ jumbo_split_static_library("ui") {
"views/tabs/tab_group_editor_bubble_view.h",
"views/tabs/tab_group_header.cc",
"views/tabs/tab_group_header.h",
+ "views/tabs/tab_group_underline.cc",
+ "views/tabs/tab_group_underline.h",
"views/tabs/tab_hover_card_bubble_view.cc",
"views/tabs/tab_hover_card_bubble_view.h",
"views/tabs/tab_icon.cc",
"views/tabs/tab_icon.h",
- "views/tabs/tab_renderer_data.cc",
- "views/tabs/tab_renderer_data.h",
"views/tabs/tab_slot_view.h",
"views/tabs/tab_strip.cc",
"views/tabs/tab_strip.h",
@@ -3130,6 +3177,8 @@ jumbo_split_static_library("ui") {
"views/toolbar/home_button.h",
"views/toolbar/reload_button.cc",
"views/toolbar/reload_button.h",
+ "views/toolbar/toolbar_account_icon_container_view.cc",
+ "views/toolbar/toolbar_account_icon_container_view.h",
"views/toolbar/toolbar_action_view.cc",
"views/toolbar/toolbar_action_view.h",
"views/toolbar/toolbar_action_view_delegate_views.h",
@@ -3141,8 +3190,6 @@ jumbo_split_static_library("ui") {
"views/toolbar/toolbar_icon_container_view.h",
"views/toolbar/toolbar_ink_drop_util.cc",
"views/toolbar/toolbar_ink_drop_util.h",
- "views/toolbar/toolbar_page_action_icon_container_view.cc",
- "views/toolbar/toolbar_page_action_icon_container_view.h",
"views/toolbar/toolbar_view.cc",
"views/toolbar/toolbar_view.h",
"views/touch_uma/touch_uma.cc",
@@ -3153,6 +3200,12 @@ jumbo_split_static_library("ui") {
"views/translate/translate_icon_view.h",
"views/update_recommended_message_box.cc",
"views/update_recommended_message_box.h",
+ "views/web_apps/web_app_frame_toolbar_view.cc",
+ "views/web_apps/web_app_frame_toolbar_view.h",
+ "views/web_apps/web_app_menu_button.cc",
+ "views/web_apps/web_app_menu_button.h",
+ "views/web_apps/web_app_origin_text.cc",
+ "views/web_apps/web_app_origin_text.h",
"views/webauthn/authenticator_ble_pin_entry_sheet_view.cc",
"views/webauthn/authenticator_ble_pin_entry_sheet_view.h",
"views/webauthn/authenticator_client_pin_entry_sheet_view.cc",
@@ -3197,7 +3250,6 @@ jumbo_split_static_library("ui") {
"webauthn/transport_utils.h",
]
deps += [
- "//build:branding_buildflags",
"//chrome/browser/ui/views",
"//components/constrained_window",
"//components/media_message_center",
@@ -3465,14 +3517,14 @@ jumbo_split_static_library("ui") {
"app_list/search/common/file_icon_util.h",
"app_list/search/common/url_icon_source.cc",
"app_list/search/common/url_icon_source.h",
+ "app_list/search/cros_action_history/cros_action_recorder.cc",
+ "app_list/search/cros_action_history/cros_action_recorder.h",
"app_list/search/drive_quick_access_provider.cc",
"app_list/search/drive_quick_access_provider.h",
"app_list/search/drive_quick_access_result.cc",
"app_list/search/drive_quick_access_result.h",
"app_list/search/extension_app_result.cc",
"app_list/search/extension_app_result.h",
- "app_list/search/logging/search_ranking_event_logger.cc",
- "app_list/search/logging/search_ranking_event_logger.h",
"app_list/search/mixer.cc",
"app_list/search/mixer.h",
"app_list/search/omnibox_provider.cc",
@@ -3517,8 +3569,12 @@ jumbo_split_static_library("ui") {
"app_list/search/search_result_ranker/recurrence_ranker.h",
"app_list/search/search_result_ranker/recurrence_ranker_util.cc",
"app_list/search/search_result_ranker/recurrence_ranker_util.h",
+ "app_list/search/search_result_ranker/search_ranking_event_logger.cc",
+ "app_list/search/search_result_ranker/search_ranking_event_logger.h",
"app_list/search/search_result_ranker/search_result_ranker.cc",
"app_list/search/search_result_ranker/search_result_ranker.h",
+ "app_list/search/search_utils/fuzzy_tokenized_string_match.cc",
+ "app_list/search/search_utils/fuzzy_tokenized_string_match.h",
"app_list/search/search_utils/sequence_matcher.cc",
"app_list/search/search_utils/sequence_matcher.h",
"app_list/search/settings_shortcut/settings_shortcut_metadata.cc",
@@ -3538,11 +3594,12 @@ jumbo_split_static_library("ui") {
"//ash/app_list",
"//ash/public/cpp/app_list/vector_icons",
"//ash/resources/vector_icons",
- "//chrome/browser/ui/app_list/search/logging:search_ranking_event_proto",
+ "//chrome/browser/ui/app_list/search/cros_action_history:cros_action_proto",
"//chrome/browser/ui/app_list/search/search_result_ranker:app_launch_event_logger_proto",
"//chrome/browser/ui/app_list/search/search_result_ranker:app_launch_predictor_proto",
"//chrome/browser/ui/app_list/search/search_result_ranker:app_list_launch_recorder_proto",
"//chrome/browser/ui/app_list/search/search_result_ranker:recurrence_ranker_proto",
+ "//chrome/browser/ui/app_list/search/search_result_ranker:search_ranking_event_proto",
"//components/assist_ranker",
"//components/assist_ranker/proto",
"//ui/file_manager:file_manager",
@@ -3551,12 +3608,12 @@ jumbo_split_static_library("ui") {
if (is_chromeos) {
sources += [
"app_icon_loader_delegate.h",
- "app_list/app_service_app_icon_loader.cc",
- "app_list/app_service_app_icon_loader.h",
- "app_list/app_service_app_item.cc",
- "app_list/app_service_app_item.h",
- "app_list/app_service_app_model_builder.cc",
- "app_list/app_service_app_model_builder.h",
+ "app_list/app_service/app_service_app_icon_loader.cc",
+ "app_list/app_service/app_service_app_icon_loader.h",
+ "app_list/app_service/app_service_app_item.cc",
+ "app_list/app_service/app_service_app_item.h",
+ "app_list/app_service/app_service_app_model_builder.cc",
+ "app_list/app_service/app_service_app_model_builder.h",
"app_list/arc/arc_app_context_menu.cc",
"app_list/arc/arc_app_context_menu.h",
"app_list/arc/arc_app_dialog.h",
@@ -3633,8 +3690,6 @@ jumbo_split_static_library("ui") {
"app_list/search/arc_app_result.h",
"app_list/search/crostini_app_result.cc",
"app_list/search/crostini_app_result.h",
- "app_list/search/internal_app_result.cc",
- "app_list/search/internal_app_result.h",
"ash/launcher/app_window_base.cc",
"ash/launcher/app_window_base.h",
"ash/launcher/arc_app_shelf_id.cc",
@@ -3671,10 +3726,14 @@ jumbo_split_static_library("ui") {
"ash/launcher/shelf_spinner_item_controller.h",
"views/arc_app_dialog_view.cc",
"views/arc_data_removal_dialog_view.cc",
+ "views/crostini/crostini_ansible_software_config_view.cc",
+ "views/crostini/crostini_ansible_software_config_view.h",
"views/crostini/crostini_app_restart_view.cc",
"views/crostini/crostini_app_restart_view.h",
"views/crostini/crostini_app_uninstaller_view.cc",
"views/crostini/crostini_app_uninstaller_view.h",
+ "views/crostini/crostini_force_close_view.cc",
+ "views/crostini/crostini_force_close_view.h",
"views/crostini/crostini_installer_view.cc",
"views/crostini/crostini_installer_view.h",
"views/crostini/crostini_uninstaller_view.cc",
@@ -3687,6 +3746,7 @@ jumbo_split_static_library("ui") {
"views/plugin_vm/plugin_vm_launcher_view.h",
]
deps += [
+ "//chrome/browser/chromeos/crostini:crostini_installer_types_mojom",
"//chrome/services/app_service/public/cpp:app_update",
"//chrome/services/app_service/public/cpp:icon_loader",
"//components/services/app_service/public/cpp:app_file_handling",
@@ -3694,7 +3754,7 @@ jumbo_split_static_library("ui") {
}
}
- if (enable_cros_assistant) {
+ if (is_chromeos) {
deps += [
"//ash/public/cpp",
"//chromeos/services/assistant:lib",
@@ -3718,6 +3778,8 @@ jumbo_split_static_library("ui") {
"ash/assistant/assistant_service_connection.h",
"ash/assistant/assistant_setup.cc",
"ash/assistant/assistant_setup.h",
+ "ash/assistant/assistant_state_client.cc",
+ "ash/assistant/assistant_state_client.h",
"ash/assistant/device_actions.cc",
"ash/assistant/device_actions.h",
"ash/assistant/proactive_suggestions_client_impl.cc",
diff --git a/chromium/chrome/browser/ui/android/widget/BUILD.gn b/chromium/chrome/browser/ui/android/widget/BUILD.gn
index 13fa251ecb6..eb23453f841 100644
--- a/chromium/chrome/browser/ui/android/widget/BUILD.gn
+++ b/chromium/chrome/browser/ui/android/widget/BUILD.gn
@@ -3,21 +3,64 @@
# found in the LICENSE file.
import("//build/config/android/rules.gni")
+import("//ui/android/features.gni")
android_library("java") {
java_files = [
+ "java/src/org/chromium/chrome/browser/ui/widget/AlwaysDismissedDialog.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/BoundedLinearLayout.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/ClipDrawableProgressBar.java",
"java/src/org/chromium/chrome/browser/ui/widget/CompositeTouchDelegate.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/ContextMenuDialog.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/DualControlLayout.java",
"java/src/org/chromium/chrome/browser/ui/widget/FadingShadow.java",
"java/src/org/chromium/chrome/browser/ui/widget/FadingShadowView.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/FadingEdgeScrollView.java",
"java/src/org/chromium/chrome/browser/ui/widget/ListMenuButton.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/LoadingView.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/PaddedFrameLayout.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/PromoDialog.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/PromoDialogLayout.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/MaterialProgressBar.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/RadioButtonLayout.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/RadioButtonWithDescription.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/RoundedCornerImageView.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/RoundedIconGenerator.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/TintedDrawable.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/ViewResourceFrameLayout.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/animation/AnimatorProperties.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/animation/CancelAwareAnimatorListener.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/animation/FocusAnimator.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/animation/Interpolators.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/displaystyle/DisplayStyleObserver.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/displaystyle/DisplayStyleObserverAdapter.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/displaystyle/HorizontalDisplayStyle.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/displaystyle/UiConfig.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/displaystyle/VerticalDisplayStyle.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/displaystyle/ViewResizer.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/dragreorder/DragReorderableListAdapter.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/dragreorder/DragStateDelegate.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/highlight/PulseDrawable.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/highlight/PulseInterpolator.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/highlight/ViewHighlighter.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/text/AccessibleTextView.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/text/AlertDialogEditText.java",
"java/src/org/chromium/chrome/browser/ui/widget/text/TextViewWithCompoundDrawables.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/text/VerticallyFixedEditText.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/textbubble/ArrowBubbleDrawable.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/textbubble/ImageTextBubble.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/textbubble/TextBubble.java",
]
deps = [
":ui_widget_java_resources",
"//base:base_java",
+ "//chrome/browser/util/android:java",
+ "//third_party/android_deps:android_support_v4_java",
"//third_party/android_deps:android_support_v7_appcompat_java",
"//third_party/android_deps:com_android_support_design_java",
+ "//third_party/android_deps:com_android_support_interpolator_java",
+ "//third_party/android_deps:com_android_support_recyclerview_v7_java",
"//ui/android:ui_java",
]
}
@@ -27,8 +70,13 @@ android_resources("ui_widget_java_resources") {
resource_dirs = [ "java/res" ]
deps = [
":ui_widget_strings_grd",
+ "//third_party/android_deps:com_android_support_design_java",
"//ui/android:ui_java_resources",
]
+
+ if (enable_android_night_mode) {
+ resource_dirs += [ "java/res_night" ]
+ }
}
java_strings_grd("ui_widget_strings_grd") {
@@ -90,8 +138,53 @@ java_strings_grd("ui_widget_strings_grd") {
]
}
+android_library("test_support_java") {
+ testonly = true
+
+ java_files = [ "test/java/src/org/chromium/chrome/browser/ui/widget/highlight/ViewHighlighterTestUtils.java" ]
+ deps = [
+ ":java",
+ "//content/public/test/android:content_java_test_support",
+ ]
+}
+
+android_library("ui_widget_java_tests") {
+ testonly = true
+
+ java_files = [
+ "java/src/org/chromium/chrome/browser/ui/widget/DualControlLayoutTest.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/PromoDialogTest.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/RadioButtonLayoutTest.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/RoundedIconGeneratorTest.java",
+ "java/src/org/chromium/chrome/browser/ui/widget/highlight/ViewHighlighterTest.java",
+ ]
+ deps = [
+ ":java",
+ ":test_support_java",
+ ":ui_widget_java_resources",
+ ":ui_widget_java_test_resources",
+ "//base:base_java_test_support",
+ "//chrome/test/android:chrome_java_test_support",
+ "//content/public/test/android:content_java_test_support",
+ "//third_party/android_deps:com_android_support_support_compat_java",
+ "//third_party/android_support_test_runner:rules_java",
+ "//third_party/android_support_test_runner:runner_java",
+ "//third_party/junit",
+ ]
+}
+
+android_resources("ui_widget_java_test_resources") {
+ custom_package = "org.chromium.chrome.browser.ui.widget.test"
+ resource_dirs = [ "test/java/res" ]
+ deps = [
+ ":ui_widget_java_resources",
+ ":ui_widget_strings_grd",
+ "//ui/android:ui_java_resources",
+ ]
+}
+
junit_binary("ui_widget_junit_tests") {
- java_files = [ "junit/src/org/chromium/chrome//browser/ui/widget/CompositeTouchDelegateTest.java" ]
+ java_files = [ "java/src/org/chromium/chrome/browser/ui/widget/CompositeTouchDelegateUnitTest.java" ]
deps = [
":java",
"//base:base_java",
diff --git a/chromium/chrome/browser/ui/app_list/search/cros_action_history/BUILD.gn b/chromium/chrome/browser/ui/app_list/search/cros_action_history/BUILD.gn
new file mode 100644
index 00000000000..19d6c05846e
--- /dev/null
+++ b/chromium/chrome/browser/ui/app_list/search/cros_action_history/BUILD.gn
@@ -0,0 +1,11 @@
+# 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.
+
+import("//third_party/protobuf/proto_library.gni")
+
+proto_library("cros_action_proto") {
+ sources = [
+ "cros_action.proto",
+ ]
+}
diff --git a/chromium/chrome/browser/ui/app_list/search/search_result_ranker/BUILD.gn b/chromium/chrome/browser/ui/app_list/search/search_result_ranker/BUILD.gn
index d23cd7bca16..f3737af729b 100644
--- a/chromium/chrome/browser/ui/app_list/search/search_result_ranker/BUILD.gn
+++ b/chromium/chrome/browser/ui/app_list/search/search_result_ranker/BUILD.gn
@@ -30,3 +30,9 @@ proto_library("recurrence_ranker_proto") {
"recurrence_ranker_config.proto",
]
}
+
+proto_library("search_ranking_event_proto") {
+ sources = [
+ "search_ranking_event.proto",
+ ]
+}
diff --git a/chromium/chrome/browser/ui/libgtkui/BUILD.gn b/chromium/chrome/browser/ui/libgtkui/BUILD.gn
index 7895f25952d..b1b8e33e8b3 100644
--- a/chromium/chrome/browser/ui/libgtkui/BUILD.gn
+++ b/chromium/chrome/browser/ui/libgtkui/BUILD.gn
@@ -8,24 +8,18 @@ import("//build/config/features.gni")
import("//build/config/jumbo.gni")
import("//build/config/linux/gtk/gtk.gni")
import("//printing/buildflags/buildflags.gni")
+import("//ui/ozone/ozone.gni")
jumbo_component("libgtkui") {
sources = [
- "app_indicator_icon.cc",
- "app_indicator_icon.h",
- "app_indicator_icon_menu.cc",
- "app_indicator_icon_menu.h",
- "gtk_background_painter.cc",
- "gtk_background_painter.h",
"gtk_key_bindings_handler.cc",
"gtk_key_bindings_handler.h",
"gtk_ui.cc",
"gtk_ui.h",
"gtk_util.cc",
"gtk_util.h",
- "libgtkui_export.h",
- "menu_util.cc",
- "menu_util.h",
+ "input_method_context_impl_gtk.cc",
+ "input_method_context_impl_gtk.h",
"native_theme_gtk.cc",
"native_theme_gtk.h",
"nav_button_provider_gtk.cc",
@@ -42,23 +36,9 @@ jumbo_component("libgtkui") {
"settings_provider.h",
"settings_provider_gtk.cc",
"settings_provider_gtk.h",
- "skia_utils_gtk.cc",
- "skia_utils_gtk.h",
- "unity_service.cc",
- "unity_service.h",
]
- if (gtk_version <= 3) {
- sources += [
- "gtk_status_icon.cc",
- "gtk_status_icon.h",
- ]
- }
-
- configs += [
- "//build/config/linux/pangocairo",
- "//build/config/linux:x11",
- ]
+ configs += [ "//build/config/linux/pangocairo" ]
if (use_gio) {
sources += [
@@ -72,25 +52,15 @@ jumbo_component("libgtkui") {
configs += [ "//printing:cups" ]
}
- defines = [ "LIBGTKUI_IMPLEMENTATION" ]
+ defines = [ "IS_LIBGTKUI_IMPL" ]
deps = [
"//base",
- "//base:i18n",
- "//base/third_party/dynamic_annotations",
"//build/config/linux/gtk",
"//build/config/linux/gtk:gtkprint",
- "//cc/paint",
- "//chrome:extra_resources",
- "//chrome:resources",
- "//chrome:strings",
- "//chrome/app:command_ids",
- "//chrome/app/theme:theme_resources",
"//chrome/browser/ui/views",
- "//chrome/common:buildflags",
"//chrome/common:constants",
"//components/prefs",
- "//components/resources",
"//content/public/browser",
"//printing",
"//skia",
@@ -107,11 +77,9 @@ jumbo_component("libgtkui") {
"//ui/events",
"//ui/events:dom_keyboard_layout",
"//ui/events:dom_keycode_converter",
- "//ui/events:events_base",
"//ui/gfx",
"//ui/gfx/geometry",
"//ui/native_theme",
- "//ui/resources",
"//ui/shell_dialogs",
"//ui/strings",
"//ui/views",
@@ -120,17 +88,23 @@ jumbo_component("libgtkui") {
"//chrome/browser:theme_properties",
]
- if (use_x11) {
+ if (use_x11 || ozone_platform_x11) {
sources += [
"gtk_event_loop_x11.cc",
"gtk_event_loop_x11.h",
- "x11_input_method_context_impl_gtk.cc",
- "x11_input_method_context_impl_gtk.h",
]
+ configs += [ "//build/config/linux:x11" ]
+
+ defines += [ "USE_GTK_EVENT_LOOP_X11" ]
+
deps += [
"//ui/events/platform/x11",
"//ui/gfx/x",
]
}
+
+ if (use_ozone) {
+ deps += [ "//ui/ozone" ]
+ }
}
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 <string>
-
-#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<DevUiLoaderMessageHandler> 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 <memory>
-#include <utility>
-
-#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<content::WebUIDataSource> 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<DevUiLoaderMessageHandler>());
-}
-
-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<DevUiLoaderUI> 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> page,
+ pending_receiver<PageHandler> 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<app_management::mojom::PageHandler> receiver,
+ mojo::PendingRemote<app_management::mojom::Page> 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<app_management::mojom::AppPtr> 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<uint32_t, apps::mojom::PermissionPtr> permissions;
for (const auto& permission : update.Permissions()) {
+ if (static_cast<app_management::mojom::ArcPermissionType>(
+ 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<app_management::mojom::PageHandler> receiver,
+ mojo::PendingRemote<app_management::mojom::Page> 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<app_management::mojom::PageHandler> binding_;
+ mojo::Receiver<app_management::mojom::PageHandler> receiver_;
- app_management::mojom::PagePtr page_;
+ mojo::Remote<app_management::mojom::Page> page_;
Profile* profile_;
#if defined(OS_CHROMEOS)
- ScopedObserver<ArcAppListPrefs, AppManagementPageHandler>
- arc_app_list_prefs_observer_;
- AppManagementShelfDelegate shelf_delegate_;
+ ScopedObserver<ArcAppListPrefs, ArcAppListPrefs::Observer>
+ 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 <memory>
-#include <utility>
-
-#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<PluralStringHandler>();
- 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<AppManagementPageHandler>(
- 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 <memory>
-
-#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<AppManagementPageHandler> page_handler_;
- mojo::Binding<app_management::mojom::PageHandlerFactory>
- 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<bluetooth.mojom.Adapter>? 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<mojom::BluetoothInternalsHandler> 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<device::BluetoothAdapter> adapter) {
- bluetooth::mojom::AdapterPtr adapter_ptr;
- mojo::MakeStrongBinding(std::make_unique<bluetooth::Adapter>(adapter),
- mojo::MakeRequest(&adapter_ptr));
- std::move(callback).Run(std::move(adapter_ptr));
+ mojo::PendingRemote<bluetooth::mojom::Adapter> pending_adapter;
+ mojo::MakeSelfOwnedReceiver(std::make_unique<bluetooth::Adapter>(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<mojom::BluetoothInternalsHandler> 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<device::BluetoothAdapter> adapter);
- mojo::Binding<mojom::BluetoothInternalsHandler> binding_;
+ mojo::Receiver<mojom::BluetoothInternalsHandler> receiver_;
+
+#if defined(OS_CHROMEOS)
+ chromeos::bluetooth::DebugLogsManager* debug_logs_manager_ = nullptr;
+#endif
+
base::WeakPtrFactory<BluetoothInternalsHandler> 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<mojom::BluetoothInternalsHandler> receiver) {
page_handler_ =
- std::make_unique<BluetoothInternalsHandler>(std::move(request));
+ std::make_unique<BluetoothInternalsHandler>(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<mojom::BluetoothInternalsHandler> receiver);
std::unique_ptr<BluetoothInternalsHandler> 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<base::Value> RuleSetToDict(
const browser_switcher::RuleSet& ruleset) {
auto sitelist = std::make_unique<base::ListValue>();
for (const std::string& rule : ruleset.sitelist)
- sitelist->GetList().emplace_back(rule);
+ sitelist->Append(rule);
auto greylist = std::make_unique<base::ListValue>();
for (const std::string& rule : ruleset.greylist)
- greylist->GetList().emplace_back(rule);
+ greylist->Append(rule);
auto dict = std::make_unique<base::DictionaryValue>();
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 <utility>
+
#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<DevUiLoaderUI>(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<PageNotAvailableForGuestUI>(WebUI* web_ui,
@@ -310,21 +295,6 @@ WebUIController* NewWebUI<chromeos::multidevice::ProximityAuthUI>(
}
#endif
-// Special cases for DOM distiller.
-template <>
-WebUIController* NewWebUI<dom_distiller::DomDistillerUi>(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<WelcomeUI>(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<DevUiLoaderUI>;
-#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<VersionUI>;
#if !defined(OS_ANDROID)
- if (AppManagementUI::IsEnabled() &&
- url.host_piece() == chrome::kChromeUIAppManagementHost && profile &&
- !profile->IsGuestSession()) {
- return &NewWebUI<AppManagementUI>;
- }
-
#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<chromeos::UrgentPasswordExpiryNotificationUI>;
}
+ if (url.host_piece() == chrome::kChromeUIAccountManagerErrorHost)
+ return &NewWebUI<chromeos::AccountManagerErrorUI>;
if (url.host_piece() == chrome::kChromeUIAccountManagerWelcomeHost)
return &NewWebUI<chromeos::AccountManagerWelcomeUI>;
if (url.host_piece() == chrome::kChromeUIAccountMigrationWelcomeHost)
@@ -540,6 +498,9 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui,
return &NewWebUI<chromeos::cellular_setup::CellularSetupDialogUI>;
if (url.host_piece() == chrome::kChromeUICertificateManagerHost)
return &NewWebUI<chromeos::CertificateManagerDialogUI>;
+ if (chromeos::CrostiniInstallerUI::IsEnabled() &&
+ url.host_piece() == chrome::kChromeUICrostiniInstallerHost)
+ return &NewWebUI<chromeos::CrostiniInstallerUI>;
if (url.host_piece() == chrome::kChromeUICryptohomeHost)
return &NewWebUI<chromeos::CryptohomeUI>;
if (url.host_piece() == chrome::kChromeUIDriveInternalsHost)
@@ -560,6 +521,12 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui,
return &NewWebUI<chromeos::settings::OSSettingsUI>;
if (url.host_piece() == chrome::kChromeUIPowerHost)
return &NewWebUI<chromeos::PowerUI>;
+ if (base::FeatureList::IsEnabled(chromeos::features::kMediaApp)) {
+ if (url.host_piece() == chromeos::kChromeUIMediaAppHost)
+ return &NewWebUI<chromeos::MediaAppUI>;
+ if (url.host_piece() == chromeos::kChromeUIMediaAppGuestHost)
+ return &NewWebUI<chromeos::MediaAppGuestUI>;
+ }
if (url.host_piece() == chromeos::multidevice::kChromeUIProximityAuthHost)
return &NewWebUI<chromeos::multidevice::ProximityAuthUI>;
if (url.host_piece() == chrome::kChromeUIInternetConfigDialogHost)
@@ -702,7 +669,7 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui,
return &NewWebUI<CastUI>;
}
#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<SandboxInternalsUI>;
}
@@ -724,11 +691,6 @@ WebUIFactoryFunction GetWebUIFactoryFunction(WebUI* web_ui,
return &NewWebUI<security_interstitials::ConnectionHelpUI>;
}
- if (dom_distiller::IsDomDistillerEnabled() &&
- url.host_piece() == dom_distiller::kChromeUIDomDistillerHost) {
- return &NewWebUI<dom_distiller::DomDistillerUi>;
- }
-
if (SiteEngagementService::IsEnabled() &&
url.host_piece() == chrome::kChromeUISiteEngagementHost) {
return &NewWebUI<SiteEngagementUI>;
@@ -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<AccountManagerErrorUI> 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<add_supervision::mojom::AddSupervisionHandler>
+ 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<add_supervision::mojom::AddSupervisionHandler>
+ 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<signin::AccessTokenFetcher> oauth2_access_token_fetcher_;
- mojo::Binding<add_supervision::mojom::AddSupervisionHandler> binding_;
+ mojo::Receiver<add_supervision::mojom::AddSupervisionHandler> 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<add_supervision::mojom::AddSupervisionHandler>
+ receiver) {
+ signin::IdentityManager* identity_manager =
+ test_identity_manager_
+ ? test_identity_manager_
+ : IdentityManagerFactory::GetForProfile(Profile::FromWebUI(web_ui()));
+
+ mojo_api_handler_ = std::make_unique<AddSupervisionHandler>(
+ std::move(receiver), web_ui(), identity_manager, this);
+}
+
+void AddSupervisionUI::SetUpResources() {
Profile* profile = Profile::FromWebUI(web_ui());
std::unique_ptr<content::WebUIDataSource> 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<AddSupervisionHandler>(
- 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<add_supervision::mojom::AddSupervisionHandler>
+ receiver);
+ void SetUpResources();
+ GURL GetAddSupervisionURL();
std::unique_ptr<add_supervision::mojom::AddSupervisionHandler>
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 <string>
+
+#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<signin::IdentityTestEnvironment>();
+ 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<chromeos::AddSupervisionUI*>(
+ 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<signin::IdentityTestEnvironment> 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<std::string, std::string> 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<views::FillLayout>());
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<const base::DictionaryValue> metadata,
- base::RefCountedString* trace_data) {
+ std::unique_ptr<std::string> 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<const base::DictionaryValue> metadata,
- base::RefCountedString* trace_data);
+ void OnTracingStopped(std::unique_ptr<std::string> 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 <string>
#include <utility>
-#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/app_list/search/logging/BUILD.gn b/chromium/chrome/browser/ui/webui/chromeos/crostini_installer/BUILD.gn
index d2fbed1f694..998e86183ac 100644
--- a/chromium/chrome/browser/ui/app_list/search/logging/BUILD.gn
+++ b/chromium/chrome/browser/ui/webui/chromeos/crostini_installer/BUILD.gn
@@ -2,10 +2,10 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
-import("//third_party/protobuf/proto_library.gni")
+import("//mojo/public/tools/bindings/mojom.gni")
-proto_library("search_ranking_event_proto") {
+mojom("mojo_bindings") {
sources = [
- "search_ranking_event.proto",
+ "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> page,
+ pending_receiver<PageHandler> 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 <utility>
+
+#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<chromeos::crostini_installer::mojom::PageHandler>
+ pending_page_handler,
+ mojo::PendingRemote<chromeos::crostini_installer::mojom::Page> 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<chromeos::crostini_installer::mojom::PageHandler>
+ pending_page_handler,
+ mojo::PendingRemote<chromeos::crostini_installer::mojom::Page>
+ 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<chromeos::crostini_installer::mojom::PageHandler> receiver_;
+ mojo::Remote<chromeos::crostini_installer::mojom::Page> page_;
+ base::OnceClosure close_dialog_callback_;
+
+ base::WeakPtrFactory<CrostiniInstallerPageHandler> 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 <utility>
+
+#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<chromeos::crostini_installer::mojom::Page> pending_page,
+ mojo::PendingReceiver<chromeos::crostini_installer::mojom::PageHandler>
+ pending_page_handler) {
+ DCHECK(pending_page.is_valid());
+
+ page_handler_ = std::make_unique<CrostiniInstallerPageHandler>(
+ 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<chromeos::crostini_installer::mojom::Page>
+ pending_page,
+ mojo::PendingReceiver<chromeos::crostini_installer::mojom::PageHandler>
+ pending_page_handler) override;
+
+ std::unique_ptr<CrostiniInstallerPageHandler> page_handler_;
+ mojo::Receiver<chromeos::crostini_installer::mojom::PageHandlerFactory>
+ 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<base::ListValue, base::DictionaryValue> 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) {
@@ -335,22 +262,10 @@ class DriveInternalsWebUIHandler : public content::WebUIMessageHandler {
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,
weak_ptr_factory_.GetWeakPtr()));
@@ -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<google_apis::AboutResource> 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<std::string, drive::FileSystemMetadata>&
- team_drive_metadata) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
-
- auto items = std::make_unique<base::ListValue>();
- // Users default corpus first.
- auto app_data = std::make_unique<base::DictionaryValue>();
- 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<base::DictionaryValue>();
- 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<drive::JobInfo> 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<base::DictionaryValue>();
- 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<drive::ResourceEntry> 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<drive::ResourceEntryVector> 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() {
@@ -873,24 +553,6 @@ class DriveInternalsWebUIHandler : public content::WebUIMessageHandler {
}
// 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 <utility>
-#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<chromeos::network_config::mojom::CrosNetworkConfig>
+ 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 <string>
#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<chromeos::network_config::mojom::CrosNetworkConfig>
+ 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<chromeos::network_config::mojom::CrosNetworkConfig>
+ 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<chromeos::network_config::mojom::CrosNetworkConfig>
+ 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 <string>
#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<ash::mojom::CrosDisplayConfigController> cros_display_config_;
base::WeakPtrFactory<CoreOobeHandler> 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<int>(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 <string>
+
+#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<device::mojom::FingerprintObserver> binding_{this};
+ mojo::Remote<device::mojom::Fingerprint> fp_service_;
+ mojo::Receiver<device::mojom::FingerprintObserver> 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<chromeos::PublicSamlUrlFetcher>(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<AuthPolicyHelper>();
@@ -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<net::Error>(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<LoginClientCertUsageObserver>
extension_provided_client_cert_usage_observer_;
+ std::unique_ptr<chromeos::PublicSamlUrlFetcher> 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<ash::mojom::CrosDisplayConfigController>
+ 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<ui::DeviceDataManager, ui::InputDeviceEventObserver>
- scoped_observer_;
- ash::mojom::CrosDisplayConfigControllerPtr cros_display_config_ptr_;
+ scoped_observer_{this};
+ mojo::Remote<ash::mojom::CrosDisplayConfigController> cros_display_config_;
base::WeakPtrFactory<OobeDisplayChooser> 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 <vector>
#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<ash::mojom::CrosDisplayConfigController>
+ CreateRemoteAndBind() {
+ return receiver_.BindNewPipeAndPassRemote();
}
// ash::mojom::CrosDisplayConfigController:
- void AddObserver(ash::mojom::CrosDisplayConfigObserverAssociatedPtrInfo
- observer) override {}
+ void AddObserver(
+ mojo::PendingAssociatedRemote<ash::mojom::CrosDisplayConfigObserver>
+ 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<ash::mojom::CrosDisplayConfigController> binding_;
+ mojo::Receiver<ash::mojom::CrosDisplayConfigController> receiver_{this};
DISALLOW_COPY_AND_ASSIGN(TestCrosDisplayConfig);
};
@@ -88,8 +91,8 @@ class OobeDisplayChooserTest : public ChromeAshTestBase {
cros_display_config_ = std::make_unique<TestCrosDisplayConfig>();
display_chooser_ = std::make_unique<OobeDisplayChooser>();
- 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<multidevice_setup::mojom::MultiDeviceSetup>
+ 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<multidevice_setup::mojom::PrivilegedHostDeviceSetter>
+ 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<chromeos::network_config::mojom::CrosNetworkConfig>
+ 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<multidevice_setup::mojom::MultiDeviceSetup>
+ 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<chromeos::network_config::mojom::CrosNetworkConfig>
+ 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<int>(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<mojom::PageHandler> 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<mojom::Model> 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<mojom::PageHandler> receiver);
~MachineLearningInternalsPageHandler() override;
private:
// mojom::PageHandler:
- void LoadModel(mojom::ModelSpecPtr spec,
- mojom::ModelRequest request,
- LoadModelCallback callback) override;
+ void LoadBuiltinModel(mojom::BuiltinModelSpecPtr spec,
+ mojo::PendingReceiver<mojom::Model> receiver,
+ LoadBuiltinModelCallback callback) override;
- mojo::Binding<mojom::PageHandler> binding_;
+ mojo::Receiver<mojom::PageHandler> 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<Model> 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 <memory>
#include <utility>
#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<mojom::PageHandler> receiver) {
+ page_handler_ = std::make_unique<MachineLearningInternalsPageHandler>(
+ 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<mojom::PageHandler> receiver);
std::unique_ptr<MachineLearningInternalsPageHandler> 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<chromeos::multidevice_setup::mojom::MultiDeviceSetup>
+ 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";
@@ -107,6 +109,10 @@ class NetworkConfigMessageHandler : public content::WebUIMessageHandler {
&NetworkConfigMessageHandler::GetShillDeviceProperties,
base::Unretained(this)));
web_ui()->RegisterMessageCallback(
+ kGetEthernetEAP,
+ base::BindRepeating(&NetworkConfigMessageHandler::GetShillEthernetEAP,
+ base::Unretained(this)));
+ web_ui()->RegisterMessageCallback(
kOpenCellularActivationUi,
base::BindRepeating(
&NetworkConfigMessageHandler::OpenCellularActivationUi,
@@ -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<base::DictionaryValue> /* error_data */) {
NET_LOG(ERROR) << "Shill Error: " << error_name << " id=" << guid_or_type;
base::ListValue return_arg_list;
- std::unique_ptr<base::DictionaryValue> 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();
@@ -325,6 +353,9 @@ void NetworkUI::GetLocalizedStrings(base::DictionaryValue* localized_strings) {
"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));
localized_strings->SetString(
@@ -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<network_config::mojom::CrosNetworkConfig> 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<network_config::mojom::CrosNetworkConfig> 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<smb_client::SmbUrl>& 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<CpuInfo>& 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<const base::Value> 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 <root>/_locales only.
+ DCHECK(result || base::FilePath(kTerminalRoot)
+ .Append("_locales")
+ .AppendRelativePath(path, nullptr))
+ << path;
scoped_refptr<base::RefCountedString> 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 <string>
#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 <utility>
#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<base::RefCountedMemory> ReadFileForDebugDevTools(
+scoped_refptr<base::RefCountedMemory> ReadFileForDevTools(
const base::FilePath& path) {
std::string buffer;
if (!base::ReadFileToString(path, &buffer)) {
@@ -290,29 +296,26 @@ scoped_refptr<base::RefCountedMemory> 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<PendingRequest>::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(&copy_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<TabDiscardsInfo> 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<GraphChangeStream> 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<mojom::DiscardsDetailsProvider> request)
+ mojo::PendingReceiver<discards::mojom::DetailsProvider> 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<mojom::TabDiscardsInfoPtr> infos;
+ std::vector<discards::mojom::TabDiscardsInfoPtr> 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<mojom::DiscardsDetailsProvider> binding_;
+ mojo::Receiver<discards::mojom::DetailsProvider> 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<url::Origin> 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<int64_t> num_rows,
base::Optional<int64_t> 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<discards::mojom::DetailsProvider> receiver) {
ui_handler_ = std::make_unique<DiscardsDetailsProviderImpl>(
- 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<discards::mojom::GraphDump> 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 <memory>
#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<discards::mojom::DetailsProvider> receiver);
+ void BindDiscardsGraphDumpProvider(
+ mojo::PendingReceiver<discards::mojom::GraphDump> receiver);
- std::unique_ptr<mojom::DiscardsDetailsProvider> ui_handler_;
+ std::unique_ptr<discards::mojom::DetailsProvider> 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 <memory>
+#include <utility>
+
+#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<DiscardsGraphDumpImpl> graph_dump,
+ scoped_refptr<base::SequencedTaskRunner> 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<base::CancelableTaskTracker> cancelable_task_tracker_;
+
+ base::WeakPtr<DiscardsGraphDumpImpl> graph_dump_;
+ scoped_refptr<base::SequencedTaskRunner> task_runner_;
+
+ SEQUENCE_CHECKER(sequence_checker_);
+
+ DISALLOW_COPY_AND_ASSIGN(FaviconRequestHelper);
+};
+
+DiscardsGraphDumpImpl::FaviconRequestHelper::FaviconRequestHelper(
+ base::WeakPtr<DiscardsGraphDumpImpl> graph_dump,
+ scoped_refptr<base::SequencedTaskRunner> 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<base::CancelableTaskTracker>();
+
+ 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<discards::mojom::GraphDump> receiver,
+ performance_manager::Graph* graph) {
+ std::unique_ptr<DiscardsGraphDumpImpl> dump =
+ std::make_unique<DiscardsGraphDumpImpl>();
+
+ dump->BindWithGraph(graph, std::move(receiver));
+ graph->PassToGraph(std::move(dump));
+}
+
+void DiscardsGraphDumpImpl::BindWithGraph(
+ performance_manager::Graph* graph,
+ mojo::PendingReceiver<discards::mojom::GraphDump> receiver) {
+ receiver_.Bind(std::move(receiver));
+ receiver_.set_disconnect_handler(base::BindOnce(
+ &DiscardsGraphDumpImpl::OnConnectionError, base::Unretained(this)));
+}
+
+namespace {
+
+template <typename FunctionType>
+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<discards::mojom::GraphChangeStream> 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<FaviconRequestHelper>(
+ 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<base::RefCountedMemory> 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<const char*>(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<GraphOwned> 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 <memory>
+
+#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<discards::mojom::GraphDump> receiver,
+ performance_manager::Graph* graph);
+
+ // Exposed for testing.
+ void BindWithGraph(
+ performance_manager::Graph* graph,
+ mojo::PendingReceiver<discards::mojom::GraphDump> receiver);
+
+ protected:
+ // WebUIGraphDump implementation.
+ void SubscribeToChanges(
+ mojo::PendingRemote<discards::mojom::GraphChangeStream> 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<base::RefCountedMemory> bitmap_data);
+
+ static void BindOnPMSequence(
+ mojo::PendingReceiver<discards::mojom::GraphDump> receiver,
+ performance_manager::Graph* graph);
+ static void OnConnectionError(DiscardsGraphDumpImpl* impl);
+
+ performance_manager::Graph* graph_ = nullptr;
+
+ std::unique_ptr<FaviconRequestHelper> 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<discards::mojom::GraphChangeStream> change_subscriber_;
+ mojo::Receiver<discards::mojom::GraphDump> receiver_{this};
+
+ SEQUENCE_CHECKER(sequence_checker_);
+
+ base::WeakPtrFactory<DiscardsGraphDumpImpl> 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 <map>
+#include <set>
+#include <utility>
+
+#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<int64_t, discards::mojom::FrameInfoPtr>;
+ using PageMap = std::map<int64_t, discards::mojom::PageInfoPtr>;
+ using ProcessMap = std::map<int64_t, discards::mojom::ProcessInfoPtr>;
+ using IdSet = std::set<int64_t>;
+
+ TestChangeStream() {}
+
+ mojo::PendingRemote<discards::mojom::GraphChangeStream> GetRemote() {
+ mojo::PendingRemote<discards::mojom::GraphChangeStream> 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<discards::mojom::GraphChangeStream> 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<DiscardsGraphDumpImpl> impl =
+ std::make_unique<DiscardsGraphDumpImpl>();
+ DiscardsGraphDumpImpl* impl_raw = impl.get();
+ // Create a mojo remote to the impl.
+ mojo::Remote<discards::mojom::GraphDump> 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> page,
+ pending_receiver<PageHandler> 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 <functional>
#include <memory>
#include <string>
+#include <utility>
#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<downloads::mojom::PageHandler> receiver,
+ mojo::PendingRemote<downloads::mojom::Page> 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<downloads::mojom::PageHandler> receiver,
+ mojo::PendingRemote<downloads::mojom::Page> 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<downloads::mojom::PageHandler> binding_;
+ mojo::Receiver<downloads::mojom::PageHandler> receiver_;
base::WeakPtrFactory<DownloadsDOMHandler> 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<downloads::mojom::Page> page,
content::DownloadManager* download_manager,
content::WebUI* web_ui)
- : DownloadsDOMHandler(downloads::mojom::PageHandlerRequest(),
- std::move(page),
- download_manager,
- web_ui) {}
+ : DownloadsDOMHandler(
+ mojo::PendingReceiver<downloads::mojom::PageHandler>(),
+ 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<std::string>());
@@ -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 <iterator>
+#include <utility>
#include <vector>
#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<downloads::mojom::Page> 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<downloads::mojom::Page> page,
base::Callback<bool(const DownloadItem&)> 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<downloads::mojom::Page> 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<downloads::mojom::Page> page,
base::Callback<bool(const download::DownloadItem&)>);
// 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<download::AllDownloadItemNotifier> original_notifier_;
- downloads::mojom::PagePtr page_;
+ mojo::Remote<downloads::mojom::Page> 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 <stdint.h>
#include <memory>
+#include <utility>
#include <vector>
#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<downloads::mojom::Page> 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<MockPage> 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<MetricsHandler>());
@@ -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<downloads::mojom::PageHandlerFactory> 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<downloads::mojom::Page> page,
+ mojo::PendingReceiver<downloads::mojom::PageHandler> receiver) {
DCHECK(page);
Profile* profile = Profile::FromWebUI(web_ui());
DownloadManager* dlm = BrowserContext::GetDownloadManager(profile);
page_handler_ = std::make_unique<DownloadsDOMHandler>(
- 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<downloads::mojom::PageHandlerFactory> receiver);
// downloads::mojom::PageHandlerFactory:
- void CreatePageHandler(downloads::mojom::PagePtr page,
- downloads::mojom::PageHandlerRequest request) override;
+ void CreatePageHandler(
+ mojo::PendingRemote<downloads::mojom::Page> page,
+ mojo::PendingReceiver<downloads::mojom::PageHandler> receiver) override;
std::unique_ptr<DownloadsDOMHandler> page_handler_;
- mojo::Binding<downloads::mojom::PageHandlerFactory> page_factory_binding_;
+ mojo::Receiver<downloads::mojom::PageHandlerFactory> 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<downloads::mojom::Page> 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 <vector>
#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<downloads::mojom::Page> BindAndGetRemote();
MOCK_METHOD1(RemoveItem, void(int));
MOCK_METHOD2(UpdateItem, void(int, downloads::mojom::DataPtr));
MOCK_METHOD2(InsertItems, void(int, std::vector<downloads::mojom::DataPtr>));
MOCK_METHOD0(ClearAll, void());
- mojo::Binding<downloads::mojom::Page> binding_;
+ mojo::Receiver<downloads::mojom::Page> 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 <cmath>
+#include <memory>
#include <utility>
#include <vector>
#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<mojom::SiteEngagementDetailsProvider> request)
- : profile_(profile), binding_(this, std::move(request)) {
+ mojo::PendingReceiver<mojom::SiteEngagementDetailsProvider> 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<mojom::SiteEngagementDetailsProvider> binding_;
+ mojo::Receiver<mojom::SiteEngagementDetailsProvider> 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<mojom::SiteEngagementDetailsProvider> receiver) {
ui_handler_ = std::make_unique<SiteEngagementDetailsProviderImpl>(
- 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<mojom::SiteEngagementDetailsProvider> receiver);
std::unique_ptr<mojom::SiteEngagementDetailsProvider> 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 <string>
+#include <utility>
#include <vector>
#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<explore_sites_internals::mojom::PageHandler> 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<explore_sites_internals::mojom::PageHandler>
+ receiver,
ExploreSitesService* explore_sites_service,
Profile* profile);
~ExploreSitesInternalsPageHandler() override;
@@ -33,7 +35,7 @@ class ExploreSitesInternalsPageHandler
OverrideCountryCodeCallback) override;
void ForceNetworkRequest(ForceNetworkRequestCallback) override;
- mojo::Binding<explore_sites_internals::mojom::PageHandler> binding_;
+ mojo::Receiver<explore_sites_internals::mojom::PageHandler> 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<explore_sites_internals::mojom::PageHandler>
+ receiver) {
page_handler_ = std::make_unique<ExploreSitesInternalsPageHandler>(
- 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<explore_sites_internals::mojom::PageHandler>
+ receiver);
std::unique_ptr<ExploreSitesInternalsPageHandler> 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<feed_internals::mojom::PageHandler> 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<feed_internals::mojom::PageHandler> 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<feed_internals::mojom::PageHandler> binding_;
+ mojo::Receiver<feed_internals::mojom::PageHandler> 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<feed_internals::mojom::PageHandler> receiver) {
page_handler_ = std::make_unique<FeedInternalsPageHandler>(
- 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 <memory>
#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<feed_internals::mojom::PageHandler> 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 <class T>
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<void(const std::string&)> ChannelCallback;
- typedef base::OnceCallback<void(update_engine::EndOfLifeStatus status)>
- EolStatusCallback;
+ using EolInfoCallback =
+ base::OnceCallback<void(chromeos::UpdateEngineClient::EolInfo eol_info)>;
#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<int32_t> 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<int>(round(status.download_progress * 100));
+ case update_engine::Operation::DOWNLOADING:
+ progress = static_cast<int>(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<int32_t> 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 <utility>
+
#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<base::DictionaryValue>();
- 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 <map>
#include <memory>
+#include <string>
#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<PreviewsFlag> flags);
// Inject the client side page object.
- SetClientPage(InterventionsInternalsPage page);
+ SetClientPage(pending_remote<InterventionsInternalsPage> 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<mojom::InterventionsInternalsPageHandler> 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<mojom::InterventionsInternalsPage> 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<mojom::InterventionsInternalsPageHandler> 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<mojom::InterventionsInternalsPage> page) override;
void SetIgnorePreviewsBlacklistDecision(bool ignore) override;
// previews::PreviewsLoggerObserver:
@@ -49,7 +53,7 @@ class InterventionsInternalsPageHandler
void OnEffectiveConnectionTypeChanged(
net::EffectiveConnectionType type) override;
- mojo::Binding<mojom::InterventionsInternalsPageHandler> binding_;
+ mojo::Receiver<mojom::InterventionsInternalsPageHandler> 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<mojom::InterventionsInternalsPage> 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<mojom::InterventionsInternalsPage> 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<mojom::InterventionsInternalsPage> binding_;
+ mojo::Receiver<mojom::InterventionsInternalsPage> receiver_;
// The MessageLogPtr passed in LogNewMessage method.
std::unique_ptr<mojom::MessageLogPtr> 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<mojom::InterventionsInternalsPageHandler>
+ handler_receiver =
+ mojo::PendingRemote<mojom::InterventionsInternalsPageHandler>()
+ .InitWithNewPipeAndPassReceiver();
page_handler_ = std::make_unique<InterventionsInternalsPageHandler>(
- 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<mojom::InterventionsInternalsPage> page;
+ mojo::PendingReceiver<mojom::InterventionsInternalsPage> page_receiver =
+ page.InitWithNewPipeAndPassReceiver();
page_ = std::make_unique<TestInterventionsInternalsPage>(
- 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<base::test::ScopedFeatureList>();
}
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 <memory>
#include <string>
#include <utility>
#include <vector>
@@ -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<mojom::InterventionsInternalsPageHandler> receiver) {
DCHECK(previews_ui_service_);
page_handler_ = std::make_unique<InterventionsInternalsPageHandler>(
- 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<mojom::InterventionsInternalsPageHandler> 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<std::string> 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 <memory>
+#include <utility>
#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<media::mojom::MediaEngagementScoreDetailsProvider>
- request)
+ mojo::PendingReceiver<media::mojom::MediaEngagementScoreDetailsProvider>
+ 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<media::mojom::MediaEngagementScoreDetailsProvider> binding_;
+ mojo::Receiver<media::mojom::MediaEngagementScoreDetailsProvider> 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<media::mojom::MediaEngagementScoreDetailsProvider>
+ receiver) {
ui_handler_ = std::make_unique<MediaEngagementScoreDetailsProviderImpl>(
- 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 <memory>
+
#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<media::mojom::MediaEngagementScoreDetailsProvider>
+ receiver);
std::unique_ptr<media::mojom::MediaEngagementScoreDetailsProvider>
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<const base::Value> 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<void(base::Value*)>;
- DnsLookupClient(network::mojom::ResolveHostClientRequest request,
- Callback callback)
- : binding_(this, std::move(request)), callback_(std::move(callback)) {
- binding_.set_connection_error_handler(
+ DnsLookupClient(
+ mojo::PendingReceiver<network::mojom::ResolveHostClient> 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<network::mojom::ResolveHostClient> binding_;
+ mojo::Receiver<network::mojom::ResolveHostClient> 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<network::mojom::ResolveHostClient> 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<const std::string>(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<bool> 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 <utility>
+
+#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<policy::PolicyChangeRegistrar>(
+ 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<int>(
+ 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<int>(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 <memory>
+
+#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::PolicyChangeRegistrar> 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<CookieControlsHandler>();
+ handler_->set_web_ui(&web_ui_);
+ }
+
+ void TearDown() override {
+ handler_->set_web_ui(nullptr);
+ ChromeRenderViewHostTestHarness::TearDown();
+ }
+
+ protected:
+ content::TestWebUI web_ui_;
+ std::unique_ptr<CookieControlsHandler> handler_;
+};
+
+TEST_F(CookieControlsHandlerTest, HandleCookieControlsToggleChanged) {
+ EXPECT_EQ(
+ static_cast<int>(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<int>(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<int>(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<ThemeHandler>());
+ web_ui->AddMessageHandler(std::make_unique<CookieControlsHandler>());
+ }
// content::URLDataSource assumes the ownership of the html source.
content::URLDataSource::Add(profile, std::make_unique<NewTabHTMLSource>(
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<ThemeService>(
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<ui::NativeTheme, NTPResourceCache> theme_observer_;
+ ScopedObserver<ui::NativeTheme, ui::NativeThemeObserver> 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<OmniboxPage> 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<mojom::AutocompleteResultsForProviderPtr,
OmniboxPageHandler::OmniboxPageHandler(
Profile* profile,
- mojo::InterfaceRequest<mojom::OmniboxPageHandler> request)
- : profile_(profile), binding_(this, std::move(request)), observer_(this) {
+ mojo::PendingReceiver<mojom::OmniboxPageHandler> 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<mojom::OmniboxPage> 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<metrics::OmniboxEventProto::PageClassification>(
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<mojom::OmniboxPageHandler> request);
+ mojo::PendingReceiver<mojom::OmniboxPageHandler> 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<mojom::OmniboxPage> 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<mojom::OmniboxPage> page_;
// The Profile* handed to us in our constructor.
Profile* profile_;
- mojo::Binding<mojom::OmniboxPageHandler> binding_;
+ mojo::Receiver<mojom::OmniboxPageHandler> receiver_;
ScopedObserver<OmniboxControllerEmitter, OmniboxControllerEmitter::Observer>
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<mojom::OmniboxPageHandler> receiver) {
+ omnibox_handler_ = std::make_unique<OmniboxPageHandler>(
+ 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<mojom::OmniboxPageHandler> receiver);
std::unique_ptr<OmniboxPageHandler> 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<base::DictionaryValue>();
object_value->SetKey("objectProperty", base::Value(true));
auto array_value = std::make_unique<base::ListValue>();
- 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<base::DictionaryValue>();
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<base::Value>(0));
prefs->SetUserPref(prefs::kPrintingAllowedPinModes,
std::make_unique<base::Value>(1));
+ prefs->SetUserPref(prefs::kPrintingAllowedBackgroundGraphicsModes,
+ std::make_unique<base::Value>(2));
prefs->SetUserPref(prefs::kPrintingColorDefault,
std::make_unique<base::Value>(2));
prefs->SetUserPref(prefs::kPrintingDuplexDefault,
std::make_unique<base::Value>(4));
prefs->SetUserPref(prefs::kPrintingPinDefault,
std::make_unique<base::Value>(0));
+ prefs->SetUserPref(prefs::kPrintingBackgroundGraphicsDefault,
+ std::make_unique<base::Value>(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<ScalingType>(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<PrinterType>(
+ 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<gaia::ListedAccount>& 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<gaia::ListedAccount>& 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<base::ListValue> 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<base::ListValue> 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<base::ListValue> 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<const base::Value> 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<base::ListValue> 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<base::ListValue> 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<base::ListValue> 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<base::ListValue> 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<base::ListValue> 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<int> 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<int> 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<base::ListValue> 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<ThemeSource>(profile));
@@ -574,6 +569,7 @@ void PrintPreviewUI::SetInitialParams(
PrintPreviewUI* print_preview_ui = static_cast<PrintPreviewUI*>(
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<const base::Value> 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<BrowserList, BrowserListObserver> 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 <memory>
+#include <utility>
+
#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<mojom::ResetPasswordHandler> request)
- : web_contents_(web_contents),
- binding_(this, std::move(request)) {
+ mojo::PendingReceiver<mojom::ResetPasswordHandler> 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<mojom::ResetPasswordHandler> binding_;
+ mojo::Receiver<mojom::ResetPasswordHandler> 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<mojom::ResetPasswordHandler> receiver) {
ui_handler_ = std::make_unique<ResetPasswordHandlerImpl>(
- 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<mojom::ResetPasswordHandler> 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 <utility>
+
+#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<double>(
+ 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<double>(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<SandboxHandler> 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_internals_ui.cc b/chromium/chrome/browser/ui/webui/sandbox/sandbox_internals_ui.cc
index e09f9d4a1e9..9c3783b3791 100644
--- a/chromium/chrome/browser/ui/webui/sandbox_internals_ui.cc
+++ b/chromium/chrome/browser/ui/webui/sandbox/sandbox_internals_ui.cc
@@ -2,7 +2,7 @@
// 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 "chrome/browser/ui/webui/sandbox/sandbox_internals_ui.h"
#include <string>
@@ -15,6 +15,10 @@
#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"
@@ -79,6 +83,10 @@ content::WebUIDataSource* CreateDataSource() {
SandboxInternalsUI::SandboxInternalsUI(content::WebUI* web_ui)
: content::WebUIController(web_ui) {
+#if defined(OS_WIN)
+ web_ui->AddMessageHandler(
+ std::make_unique<sandbox_handler::SandboxHandler>());
+#endif
Profile* profile = Profile::FromWebUI(web_ui);
content::WebUIDataSource::Add(profile, CreateDataSource());
}
@@ -86,7 +94,7 @@ SandboxInternalsUI::SandboxInternalsUI(content::WebUI* web_ui)
void SandboxInternalsUI::RenderFrameCreated(
content::RenderFrameHost* render_frame_host) {
#if defined(OS_ANDROID)
- chrome::mojom::SandboxStatusExtensionAssociatedPtr sandbox_status;
+ mojo::AssociatedRemote<chrome::mojom::SandboxStatusExtension> sandbox_status;
render_frame_host->GetRemoteAssociatedInterfaces()->GetInterface(
&sandbox_status);
sandbox_status->AddSandboxStatusExtension();
diff --git a/chromium/chrome/browser/ui/webui/sandbox_internals_ui.h b/chromium/chrome/browser/ui/webui/sandbox/sandbox_internals_ui.h
index c8c59692774..5fbd2ea41f0 100644
--- a/chromium/chrome/browser/ui/webui/sandbox_internals_ui.h
+++ b/chromium/chrome/browser/ui/webui/sandbox/sandbox_internals_ui.h
@@ -2,8 +2,8 @@
// 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_
+#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"
@@ -28,4 +28,4 @@ class SandboxInternalsUI : public content::WebUIController {
DISALLOW_COPY_AND_ASSIGN(SandboxInternalsUI);
};
-#endif // CHROME_BROWSER_UI_WEBUI_SANDBOX_INTERNALS_UI_H_
+#endif // CHROME_BROWSER_UI_WEBUI_SANDBOX_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<base::DictionaryValue> GetVersionInfo() {
- std::unique_ptr<base::DictionaryValue> 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()));
@@ -405,9 +380,6 @@ void AboutHandler::RegisterMessages() {
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,
base::Unretained(this)));
@@ -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<base::DictionaryValue> 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<base::DictionaryValue> 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<const base::Value> 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<app_management::mojom::PageHandlerFactory> 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<app_management::mojom::Page> page,
+ mojo::PendingReceiver<app_management::mojom::PageHandler> receiver) {
DCHECK(page);
page_handler_ = std::make_unique<AppManagementPageHandler>(
- 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<app_management::mojom::PageHandlerFactory>
+ 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<app_management::mojom::Page> page,
+ mojo::PendingReceiver<app_management::mojom::PageHandler> receiver)
+ override;
std::unique_ptr<AppManagementPageHandler> page_handler_;
- mojo::Binding<app_management::mojom::PageHandlerFactory>
- page_factory_binding_;
+ mojo::Receiver<app_management::mojom::PageHandlerFactory>
+ 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<base::RefCountedBytes> user_photo_data_;
- ScopedObserver<user_manager::UserManager, ChangePictureHandler>
- user_manager_observer_;
- ScopedObserver<CameraPresenceNotifier, ChangePictureHandler> camera_observer_;
+ ScopedObserver<user_manager::UserManager, user_manager::UserManager::Observer>
+ user_manager_observer_{this};
+ ScopedObserver<CameraPresenceNotifier, CameraPresenceNotifier::Observer>
+ camera_observer_{this};
+
+ base::WeakPtrFactory<ChangePictureHandler> 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<Printer>& 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<std::string>& 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<std::string>& 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<ui::DeviceDataManager, KeyboardHandler> observer_;
+ ScopedObserver<ui::DeviceDataManager, ui::InputDeviceEventObserver> 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<PrefChangeRegistrar> pref_change_registrar_;
- ScopedObserver<PowerManagerClient, PowerHandler>
- power_manager_client_observer_;
+ ScopedObserver<PowerManagerClient, PowerManagerClient::Observer>
+ 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),
@@ -128,10 +127,6 @@ void StorageHandler::RegisterMessages() {
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,
base::Unretained(this)));
@@ -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<int64_t>::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<std::string> note_taking_app_ids_;
// Observer registration.
- ScopedObserver<NoteTakingHelper, NoteTakingHelper::Observer> note_observer_;
+ ScopedObserver<NoteTakingHelper, NoteTakingHelper::Observer> note_observer_{
+ this};
ScopedObserver<ui::DeviceDataManager, ui::InputDeviceEventObserver>
- 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<base::DictionaryValue> 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<std::string> fingerprints_paths_;
std::string user_id_;
- device::mojom::FingerprintPtr fp_service_;
- mojo::Binding<device::mojom::FingerprintObserver> binding_;
+ mojo::Remote<device::mojom::Fingerprint> fp_service_;
+ mojo::Receiver<device::mojom::FingerprintObserver> receiver_{this};
ScopedObserver<session_manager::SessionManager,
session_manager::SessionManagerObserver>
- session_observer_;
+ session_observer_{this};
base::WeakPtrFactory<FingerprintHandler> 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<KerberosCredentialsManager,
KerberosCredentialsManager::Observer>
- credentials_manager_observer_;
+ credentials_manager_observer_{this};
base::WeakPtrFactory<KerberosAccountsHandler> 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<PluralStringHandler>();
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<network_config::mojom::CrosNetworkConfig> receiver) {
+ ash::GetNetworkConfigService(std::move(receiver));
}
void OSSettingsUI::BindAppManagementPageHandlerFactory(
- app_management::mojom::PageHandlerFactoryRequest request) {
+ mojo::PendingReceiver<app_management::mojom::PageHandlerFactory> receiver) {
if (!app_management_page_handler_factory_) {
app_management_page_handler_factory_ =
std::make_unique<AppManagementPageHandlerFactory>(
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<content::WebUIMessageHandler> handler);
void BindCrosNetworkConfig(
- network_config::mojom::CrosNetworkConfigRequest request);
+ mojo::PendingReceiver<network_config::mojom::CrosNetworkConfig> receiver);
void BindAppManagementPageHandlerFactory(
- app_management::mojom::PageHandlerFactoryRequest request);
+ mojo::PendingReceiver<app_management::mojom::PageHandlerFactory>
+ 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<extensions::ExtensionRegistry,
extensions::ExtensionRegistryObserver>
- 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<signin::IdentityManager, PeopleHandler>
- identity_manager_observer_;
- ScopedObserver<syncer::SyncService, PeopleHandler> sync_service_observer_;
+ ScopedObserver<signin::IdentityManager, signin::IdentityManager::Observer>
+ identity_manager_observer_{this};
+ ScopedObserver<syncer::SyncService, syncer::SyncServiceObserver>
+ sync_service_observer_{this};
#if defined(OS_CHROMEOS)
base::WeakPtrFactory<PeopleHandler> 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<const base::Value> 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::UserManager, ProfileInfoHandler>
- user_manager_observer_;
+ ScopedObserver<user_manager::UserManager, user_manager::UserManager::Observer>
+ user_manager_observer_{this};
#endif
- ScopedObserver<ProfileAttributesStorage, ProfileInfoHandler>
- profile_observer_;
+ ScopedObserver<ProfileAttributesStorage, ProfileAttributesStorage::Observer>
+ profile_observer_{this};
// Used to cancel callbacks when JavaScript becomes disallowed.
base::WeakPtrFactory<ProfileInfoHandler> 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<base::ListValue> defaults =
- std::make_unique<base::ListValue>();
+ auto defaults = std::make_unique<base::ListValue>();
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<base::ListValue> others = std::make_unique<base::ListValue>();
+ auto others = std::make_unique<base::ListValue>();
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<base::ListValue> extensions =
- std::make_unique<base::ListValue>();
+ auto extensions = std::make_unique<base::ListValue>();
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<base::DictionaryValue> search_engines_info(
- new base::DictionaryValue);
+ auto search_engines_info = std::make_unique<base::DictionaryValue>();
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<base::DictionaryValue> dict(new base::DictionaryValue());
+ auto dict = std::make_unique<base::DictionaryValue>();
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 <memory>
+#include <string>
+
+#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<content::TestWebUI>();
+ web_ui_->set_web_contents(web_contents());
+ handler_ = std::make_unique<CookiesViewHandler>();
+ 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<content::TestWebUI> web_ui_;
+ std::unique_ptr<CookiesViewHandler> 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},
@@ -3059,10 +3108,6 @@ void AddSiteSettingsStrings(content::WebUIDataSource* html_source,
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<ProfileAttributesStorage, ManageProfileHandler> observer_;
+ ScopedObserver<ProfileAttributesStorage, ProfileAttributesStorage::Observer>
+ observer_{this};
// For generating weak pointers to itself for callbacks.
base::WeakPtrFactory<ManageProfileHandler> 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<uint8_t>& 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);
@@ -543,6 +552,10 @@ void SecurityKeysBioEnrollmentHandler::RegisterMessages() {
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,
base::Unretained(this)));
@@ -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<uint8_t> template_id) {
+ DCHECK_EQ(state_, State::kEnrolling);
+ DCHECK(!callback_id_.empty());
+ if (code == device::CtapDeviceResponseCode::kCtap2ErrKeepAliveCancel) {
+ base::DictionaryValue d;
+ d.SetIntKey("code", static_cast<int>(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<uint8_t> enrolled_template_id,
+ device::CtapDeviceResponseCode code,
+ base::Optional<std::map<std::vector<uint8_t>, 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<int>(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<uint8_t> 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<uint8_t> template_id);
+ void OnHavePostEnrollmentEnumeration(
+ std::vector<uint8_t> enrolled_template_id,
+ device::CtapDeviceResponseCode code,
+ base::Optional<std::map<std::vector<uint8_t>, 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<IncompatibleApplicationsHandler>());
#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<ChangePasswordHandler>(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<chromeos::network_config::mojom::CrosNetworkConfig>
+ 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<content::WebUIMessageHandler> handler);
#if defined(OS_CHROMEOS)
void BindCrosNetworkConfig(
- chromeos::network_config::mojom::CrosNetworkConfigRequest request);
+ mojo::PendingReceiver<chromeos::network_config::mojom::CrosNetworkConfig>
+ 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<int>(
- 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<HostContentSettingsMap, content_settings::Observer> observer_;
+ ScopedObserver<HostContentSettingsMap, content_settings::Observer> observer_{
+ this};
// Change observer for chooser permissions.
ScopedObserver<ChooserContextBase, ChooserContextBase::PermissionObserver>
- chooser_observer_;
+ chooser_observer_{this};
// Change observer for prefs.
std::unique_ptr<PrefChangeRegistrar> 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<const base::Value> 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<const base::Value> 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<const base::Value> 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<const base::Value> 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<const base::Value> 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<const base::Value> 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<const base::Value> 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<const base::Value> 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<const base::Value> 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<content::TtsUtterance> 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<signin::IdentityManager, TokensLoadedCallbackRunner>
- scoped_identity_manager_observer_;
+ ScopedObserver<signin::IdentityManager, signin::IdentityManager::Observer>
+ scoped_identity_manager_observer_{this};
base::OnceClosure callback_;
std::unique_ptr<KeyedServiceShutdownNotifier::Subscription>
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> 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> 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<void(LoginUIService::SyncConfirmationUIClosedResult)>
sync_confirmation_callback_;
- ScopedObserver<BrowserList, BrowserListObserver>
- scoped_browser_list_observer_;
ScopedObserver<LoginUIService, LoginUIService::Observer>
- 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<Profile> 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<Profile> 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<TestingProfile> profile_;
std::unique_ptr<IdentityTestEnvironmentProfileAdaptor>
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<UrlKeyedDataCollectionConsentHelper>
- url_keyed_collection_helper = UrlKeyedDataCollectionConsentHelper::
- NewAnonymizedDataCollectionConsentHelper(
- pref_service,
- ProfileSyncServiceFactory::GetForProfile(profile()));
+ std::unique_ptr<unified_consent::UrlKeyedDataCollectionConsentHelper>
+ 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<signin::IdentityManager, SignInObserver>
+ ScopedObserver<signin::IdentityManager, signin::IdentityManager::Observer>
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<base::Value>& consent_description =
+ base::span<const base::Value> 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> page) =>
+ (pending_remote<PageHandler> 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<snippets_internals::mojom::PageHandler> receiver,
+ mojo::PendingRemote<snippets_internals::mojom::Page> 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<snippets_internals::mojom::PageHandler> receiver,
+ mojo::PendingRemote<snippets_internals::mojom::Page> page,
ntp_snippets::ContentSuggestionsService* content_suggestions_service,
PrefService* pref_service);
~SnippetsInternalsPageHandler() override;
@@ -67,8 +70,8 @@ class SnippetsInternalsPageHandler
GetSuggestionsByCategoryCallback callback,
std::vector<ntp_snippets::ContentSuggestion> suggestions);
- // Binding from the mojo interface to concrete impl.
- mojo::Binding<snippets_internals::mojom::PageHandler> binding_;
+ // Receiver from the mojo interface to concrete impl.
+ mojo::Receiver<snippets_internals::mojom::PageHandler> receiver_;
// Observer to notify frontend of dirty data.
ScopedObserver<ntp_snippets::ContentSuggestionsService,
@@ -90,7 +93,7 @@ class SnippetsInternalsPageHandler
base::OneShotTimer suggestion_fetch_timer_;
// Handle back to the page by which we can update.
- snippets_internals::mojom::PagePtr page_;
+ mojo::Remote<snippets_internals::mojom::Page> page_;
base::WeakPtrFactory<SnippetsInternalsPageHandler> 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 <memory>
+#include <utility>
+
#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<snippets_internals::mojom::PageHandlerFactory>
+ receiver) {
+ receiver_.reset();
- binding_.Bind(std::move(request));
+ receiver_.Bind(std::move(receiver));
}
void SnippetsInternalsUI::CreatePageHandler(
- snippets_internals::mojom::PagePtr page,
+ mojo::PendingRemote<snippets_internals::mojom::Page> page,
CreatePageHandlerCallback callback) {
DCHECK(page);
- snippets_internals::mojom::PageHandlerPtr handler;
+ mojo::PendingRemote<snippets_internals::mojom::PageHandler> handler;
page_handler_ = std::make_unique<SnippetsInternalsPageHandler>(
- 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<snippets_internals::mojom::Page> page,
+ CreatePageHandlerCallback callback) override;
private:
void BindSnippetsInternalsPageHandlerFactory(
- snippets_internals::mojom::PageHandlerFactoryRequest request);
+ mojo::PendingReceiver<snippets_internals::mojom::PageHandlerFactory>
+ receiver);
std::unique_ptr<SnippetsInternalsPageHandler> page_handler_;
ntp_snippets::ContentSuggestionsService* content_suggestions_service_;
PrefService* pref_service_;
- // Binding from the mojo interface to concrete impl.
- mojo::Binding<snippets_internals::mojom::PageHandlerFactory> binding_;
+ // Receiver from the mojo interface to concrete impl.
+ mojo::Receiver<snippets_internals::mojom::PageHandlerFactory> 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<base::ListValue> 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<SupervisedUserURLFilter, SupervisedUserURLFilter::Observer>
- scoped_observer_;
+ scoped_observer_{this};
base::WeakPtrFactory<SupervisedUserInternalsMessageHandler> 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 <vector>
#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<unsigned char> result_;
};
-class TabStripUIHandler : public content::WebUIMessageHandler {
+std::string MakeDataURIForImage(base::span<const uint8_t> 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<TabStripModel::ContextMenuCommand>(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<int>(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<WebUITabContextMenu>(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<unsigned char> 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<FaviconSource>(
profile, chrome::FaviconUrlFormat::kFavicon2));
- web_ui->AddMessageHandler(std::make_unique<TabStripUIHandler>(profile));
+ web_ui->AddMessageHandler(std::make_unique<ThemeHandler>());
}
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<TabStripUIHandler>(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 <memory>
+
#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<ui::MenuModel> 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 <memory>
+
+#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<ui::MenuModel> 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<TabStripUI*>(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<MockTabStripUIEmbedder> mock_embedder_;
+ std::unique_ptr<content::WebContents> 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 <memory>
#include <utility>
+#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<ThumbnailImage> thumbnail_;
- ScopedObserver<ThumbnailImage, ContentsData> observer_;
+ ScopedObserver<ThumbnailImage, ThumbnailImage::Observer> 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<scoped_refptr<ThumbnailImage>(
@@ -29,7 +30,8 @@ class ThumbnailTracker {
// Handles a thumbnail update for a tab.
using ThumbnailUpdatedCallback =
- base::RepeatingCallback<void(content::WebContents*, gfx::ImageSkia)>;
+ base::RepeatingCallback<void(content::WebContents*,
+ CompressedThumbnailData)>;
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<base::RefCountedString> 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/<root>.
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<ui::NativeTheme, ThemeHandler> theme_observer_;
+ ScopedObserver<ui::NativeTheme, ui::NativeThemeObserver> 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::mojom::ChromeRenderFrame> 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<base::ElapsedTimer>();
}
-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 <utility>
+#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);
}