Version in base suite: 116.0.5845.180-1~deb11u1 Version in overlay suite: 119.0.6045.105-1~deb11u1 Base version: chromium_119.0.6045.105-1~deb11u1 Target version: chromium_119.0.6045.159-1~deb11u1 Base file: /srv/ftp-master.debian.org/ftp/pool/main/c/chromium/chromium_119.0.6045.105-1~deb11u1.dsc Target file: /srv/ftp-master.debian.org/policy/pool/main/c/chromium/chromium_119.0.6045.159-1~deb11u1.dsc DEPS | 14 ash/ambient/ambient_animation_ui_launcher.cc | 8 ash/ambient/ambient_animation_ui_launcher.h | 2 ash/ambient/ambient_controller.cc | 8 ash/ambient/ambient_controller.h | 14 ash/ambient/ambient_controller_unittest.cc | 67 - ash/ambient/ambient_managed_slideshow_ui_launcher.cc | 4 ash/ambient/ambient_managed_slideshow_ui_launcher.h | 1 ash/ambient/ambient_slideshow_ui_launcher.cc | 8 ash/ambient/ambient_slideshow_ui_launcher.h | 2 ash/ambient/ambient_ui_launcher.h | 3 ash/ambient/ambient_video_ui_launcher.cc | 8 ash/ambient/ambient_video_ui_launcher.h | 2 ash/app_list/views/app_list_item_view_pixeltest.cc | 28 ash/app_list/views/app_list_view_pixeltest.cc | 27 ash/constants/ash_features.cc | 19 ash/constants/ash_features.h | 6 ash/glanceables/glanceables_pixeltest.cc | 2 ash/public/cpp/external_arc/message_center/arc_notification_content_view.cc | 3 ash/shelf/scrollable_shelf_view_pixeltest.cc | 2 ash/shortcut_viewer/strings/shortcut_viewer_strings_eu.xtb | 8 ash/strings/ash_strings_ar.xtb | 2 ash/strings/ash_strings_as.xtb | 2 ash/strings/ash_strings_ca.xtb | 2 ash/strings/ash_strings_eu.xtb | 10 ash/strings/ash_strings_fi.xtb | 2 ash/strings/ash_strings_or.xtb | 2 ash/system/accessibility/accessibility_detailed_view_pixeltest.cc | 2 ash/system/audio/audio_detailed_view_pixeltest.cc | 4 ash/system/bluetooth/bluetooth_detailed_view_impl_pixeltest.cc | 2 ash/system/bluetooth/bluetooth_detailed_view_legacy_pixeltest.cc | 2 ash/system/brightness/display_detailed_view_pixeltest.cc | 2 ash/system/cast/cast_detailed_view_pixeltest.cc | 2 ash/system/cast/cast_zero_state_view_pixeltest.cc | 2 ash/system/ime/ime_detailed_view_pixeltest.cc | 2 ash/system/locale/locale_detailed_view_pixeltest.cc | 2 ash/system/network/network_detailed_network_view_pixeltest.cc | 2 ash/system/network/vpn_detailed_view_pixeltest.cc | 4 ash/system/status_area_pixeltest.cc | 4 ash/system/time/calendar_view_pixeltest.cc | 4 ash/system/unified/quick_settings_footer_pixeltest.cc | 4 ash/system/video_conference/bubble/bubble_view_pixeltest.cc | 14 ash/system/video_conference/video_conference_tray.cc | 2 ash/system/video_conference/video_conference_tray_controller.cc | 60 - ash/system/video_conference/video_conference_tray_controller.h | 3 ash/webui/camera_app_ui/camera_app_ui.cc | 8 ash/wm/session_state_animator.h | 2 ash/wm/session_state_animator_impl.cc | 17 ash/wm/session_state_animator_impl_unittest.cc | 43 ash/wm/wm_pixel_diff_test.cc | 2 base/enterprise_util_mac.mm | 29 build/util/LASTCHANGE | 2 build/util/LASTCHANGE.committime | 2 chrome/LACROS_QA_QUALIFIED_VERSION | 2 chrome/VERSION | 2 chrome/app/resources/chromium_strings_as.xtb | 2 chrome/app/resources/chromium_strings_eu.xtb | 4 chrome/app/resources/chromium_strings_fa.xtb | 2 chrome/app/resources/generated_resources_ar.xtb | 3 chrome/app/resources/generated_resources_as.xtb | 4 chrome/app/resources/generated_resources_cs.xtb | 6 chrome/app/resources/generated_resources_es-419.xtb | 8 chrome/app/resources/generated_resources_eu.xtb | 26 chrome/app/resources/generated_resources_fa.xtb | 24 chrome/app/resources/generated_resources_fr.xtb | 2 chrome/app/resources/generated_resources_hi.xtb | 6 chrome/app/resources/generated_resources_hr.xtb | 6 chrome/app/resources/generated_resources_id.xtb | 8 chrome/app/resources/generated_resources_iw.xtb | 4 chrome/app/resources/generated_resources_ja.xtb | 4 chrome/app/resources/generated_resources_kk.xtb | 2 chrome/app/resources/generated_resources_mk.xtb | 2 chrome/app/resources/generated_resources_my.xtb | 2 chrome/app/resources/generated_resources_no.xtb | 44 chrome/app/resources/generated_resources_or.xtb | 2 chrome/app/resources/generated_resources_pa.xtb | 2 chrome/app/resources/generated_resources_pl.xtb | 2 chrome/app/resources/generated_resources_ru.xtb | 4 chrome/app/resources/generated_resources_sv.xtb | 2 chrome/app/resources/generated_resources_ta.xtb | 4 chrome/app/resources/generated_resources_uk.xtb | 4 chrome/app/resources/generated_resources_uz.xtb | 2 chrome/app/resources/generated_resources_vi.xtb | 4 chrome/app/resources/generated_resources_zh-CN.xtb | 2 chrome/app/resources/generated_resources_zh-HK.xtb | 14 chrome/app/resources/generated_resources_zh-TW.xtb | 2 chrome/app/resources/google_chrome_strings_eu.xtb | 4 chrome/app/resources/google_chrome_strings_fa.xtb | 2 chrome/app/resources/google_chrome_strings_pl.xtb | 2 chrome/browser/about_flags.cc | 49 chrome/browser/ash/BUILD.gn | 2 chrome/browser/ash/crosapi/browser_manager.cc | 1 chrome/browser/ash/crosapi/browser_manager.h | 10 chrome/browser/ash/crosapi/browser_manager_unittest.cc | 59 chrome/browser/ash/crosapi/browser_util.cc | 23 chrome/browser/ash/crosapi/browser_util.h | 7 chrome/browser/ash/crosapi/browser_util_unittest.cc | 14 chrome/browser/ash/login/app_mode/kiosk_launch_controller.cc | 7 chrome/browser/ash/login/app_mode/kiosk_launch_controller_unittest.cc | 17 chrome/browser/ash/login/demo_mode/demo_mode_window_closer.cc | 85 + chrome/browser/ash/login/demo_mode/demo_mode_window_closer.h | 32 chrome/browser/ash/login/demo_mode/demo_session.cc | 7 chrome/browser/ash/login/demo_mode/demo_session.h | 4 chrome/browser/ash/login/wizard_controller.cc | 22 chrome/browser/ash/login/wizard_controller.h | 4 chrome/browser/ash/phonehub/attestation_certificate_generator_impl.cc | 82 + chrome/browser/ash/phonehub/attestation_certificate_generator_impl.h | 16 chrome/browser/ash/phonehub/attestation_certificate_generator_impl_unittest.cc | 90 + chrome/browser/back_press/android/java/src/org/chromium/chrome/browser/back_press/BackPressManager.java | 9 chrome/browser/extensions/api/developer_private/extension_info_generator_unittest.cc | 54 chrome/browser/extensions/api/scripting/scripting_apitest.cc | 3 chrome/browser/extensions/api/settings_overrides/settings_overrides_api.cc | 19 chrome/browser/extensions/api/settings_overrides/settings_overrides_api.h | 3 chrome/browser/extensions/api/settings_overrides/settings_overrides_browsertest.cc | 67 - chrome/browser/extensions/api/tabs/tabs_apitest.cc | 7 chrome/browser/first_party_sets/first_party_sets_policy_service.cc | 14 chrome/browser/first_party_sets/first_party_sets_policy_service_factory.cc | 2 chrome/browser/first_party_sets/first_party_sets_policy_service_factory_unittest.cc | 18 chrome/browser/first_party_sets/first_party_sets_policy_service_unittest.cc | 33 chrome/browser/flag-metadata.json | 5 chrome/browser/flag_descriptions.cc | 6 chrome/browser/flag_descriptions.h | 3 chrome/browser/google/google_update_win_unittest.cc | 18 chrome/browser/k_anonymity_service/k_anonymity_service_factory.cc | 4 chrome/browser/net/sandboxed_network_change_notifier_win_browsertest.cc | 10 chrome/browser/optimization_guide/android/java/src/org/chromium/chrome/browser/optimization_guide/OptimizationGuideBridge.java | 1 chrome/browser/optimization_guide/hints_fetcher_browsertest.cc | 4 chrome/browser/performance_manager/chrome_browser_main_extra_parts_performance_manager.cc | 6 chrome/browser/privacy_sandbox/privacy_sandbox_settings_delegate.cc | 52 chrome/browser/privacy_sandbox/privacy_sandbox_settings_delegate_unittest.cc | 115 + chrome/browser/renderer_context_menu/render_view_context_menu_unittest.cc | 25 chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gu.xtb | 6 chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hy.xtb | 2 chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kk.xtb | 2 chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_no.xtb | 2 chrome/browser/ssl/https_upgrades_interceptor.cc | 24 chrome/browser/ssl/https_upgrades_interceptor.h | 3 chrome/browser/supervised_user/linux_mac_windows/supervised_user_extension_browsertest.cc | 154 ++ chrome/browser/supervised_user/supervised_user_extension_browsertest.cc | 145 -- chrome/browser/supervised_user/supervised_user_extension_unittest.cc | 77 - chrome/browser/supervised_user/supervised_user_extensions_manager.cc | 3 chrome/browser/supervised_user/supervised_user_service_browsertest.cc | 11 chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_hi.xtb | 2 chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_no.xtb | 8 chrome/browser/tpcd/experiment/eligibility_service_unittest.cc | 10 chrome/browser/tpcd/experiment/experiment_manager_impl.cc | 2 chrome/browser/tpcd/experiment/tpcd_experiment_features.cc | 47 chrome/browser/tpcd/experiment/tpcd_experiment_features.h | 31 chrome/browser/ui/android/page_insights/BUILD.gn | 18 chrome/browser/ui/android/page_insights/java/res/layout/page_insights_sheet_content.xml | 179 +-- chrome/browser/ui/android/page_insights/java/res/layout/page_insights_sheet_toolbar.xml | 107 - chrome/browser/ui/android/page_insights/java/res/values/dimens.xml | 2 chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsActivator.java | 130 -- chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsActivatorUnitTest.java | 109 - chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsCoordinator.java | 27 chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsCoordinatorTest.java | 54 chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsDataLoader.java | 8 chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsDataLoaderTest.java | 39 chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsMediator.java | 233 ++- chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsMediatorTest.java | 437 ++++++- chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsSheetContent.java | 297 ++++ chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsSheetContentTest.java | 478 ++++++-- chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/TapInterceptingLinearLayout.java | 35 chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/proto/config.proto | 17 chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb | 6 chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb | 2 chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb | 4 chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb | 2 chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb | 2 chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb | 2 chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb | 2 chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb | 2 chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb | 2 chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb | 2 chrome/browser/ui/ash/desks/desks_client.cc | 13 chrome/browser/ui/ash/projector/pending_screencast_manager.cc | 2 chrome/browser/ui/ash/projector/pending_screencast_manager_browsertest.cc | 15 chrome/browser/ui/views/permissions/chip_controller.cc | 6 chrome/browser/ui/webui/policy/policy_test_ui_browsertest.cc | 40 chrome/browser/ui/webui/settings/ash/multidevice_section.cc | 8 chrome/browser/ui/webui/signin/enterprise_profile_welcome_handler.cc | 121 +- chrome/browser/ui/webui/signin/enterprise_profile_welcome_handler.h | 19 chrome/browser/ui/webui/signin/enterprise_profile_welcome_handler_unittest.cc | 232 +++ chrome/credential_provider/gaiacp/strings/gaia_resources_as.xtb | 4 chrome/test/BUILD.gn | 2 chromeos/CHROMEOS_LKGM | 2 chromeos/ash/components/network/metrics/connection_results.cc | 191 ++- chromeos/ash/components/network/metrics/connection_results.h | 42 chromeos/ash/components/network/metrics/network_metrics_helper.cc | 3 chromeos/ash/components/network/metrics/network_metrics_helper_unittest.cc | 12 chromeos/ash/components/phonehub/BUILD.gn | 1 chromeos/ash/components/phonehub/cros_state_sender.cc | 60 - chromeos/ash/components/phonehub/cros_state_sender.h | 12 chromeos/ash/components/phonehub/cros_state_sender_unittest.cc | 17 chromeos/ash/components/phonehub/fake_attestation_certificate_generator.cc | 6 chromeos/ash/components/phonehub/fake_attestation_certificate_generator.h | 4 chromeos/ash/components/phonehub/public/cpp/attestation_certificate_generator.cc | 28 chromeos/ash/components/phonehub/public/cpp/attestation_certificate_generator.h | 33 chromeos/profiles/arm-exp.afdo.newest.txt | 2 chromeos/profiles/arm.afdo.newest.txt | 2 chromeos/profiles/atom.afdo.newest.txt | 2 chromeos/profiles/bigcore.afdo.newest.txt | 2 chromeos/strings/chromeos_strings_eu.xtb | 2 chromeos/strings/chromeos_strings_ja.xtb | 2 components/autofill/content/renderer/form_autofill_util.cc | 8 components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb | 2 components/browser_ui/strings/android/translations/browser_ui_strings_fa.xtb | 2 components/browser_ui/strings/android/translations/browser_ui_strings_gu.xtb | 4 components/browser_ui/strings/android/translations/browser_ui_strings_hr.xtb | 6 components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb | 2 components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb | 2 components/browser_ui/strings/android/translations/browser_ui_strings_no.xtb | 2 components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb | 2 components/browser_ui/strings/android/translations/browser_ui_strings_uk.xtb | 2 components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb | 2 components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/gesture/BackPressHandler.java | 55 components/browsing_topics/annotator_impl.cc | 45 components/browsing_topics/annotator_impl.h | 7 components/browsing_topics/annotator_impl_unittest.cc | 74 - components/browsing_topics/browsing_topics_calculator_unittest.cc | 43 components/browsing_topics/test_util.cc | 12 components/browsing_topics/test_util.h | 7 components/certificate_transparency/data/log_list.json | 4 components/optimization_guide/core/hints_fetcher.cc | 29 components/optimization_guide/core/hints_fetcher.h | 4 components/optimization_guide/core/hints_fetcher_unittest.cc | 2 components/optimization_guide/core/hints_manager.cc | 10 components/optimization_guide/core/hints_manager.h | 3 components/optimization_guide/core/optimization_guide_features.cc | 4 components/optimization_guide/core/optimization_guide_features.h | 3 components/optimization_guide/core/optimization_guide_features_unittest.cc | 33 components/optimization_guide/core/optimization_guide_util.cc | 9 components/optimization_guide/core/optimization_guide_util.h | 5 components/optimization_guide/proto/common_types.proto | 6 components/password_manager/core/browser/features/password_features.cc | 2 components/performance_manager/embedder/graph_features.h | 1 components/performance_manager/graph_features_unittest.cc | 4 components/policy/resources/policy_templates_es-419.xtb | 4 components/policy/resources/policy_templates_fr.xtb | 12 components/policy/resources/policy_templates_ru.xtb | 2 components/policy/resources/policy_templates_vi.xtb | 2 components/search_engines/template_url_prepopulate_data.cc | 41 components/search_engines/template_url_prepopulate_data.h | 11 components/search_engines/template_url_prepopulate_data_unittest.cc | 26 components/signin/public/identity_manager/access_token_constants.cc | 3 components/strings/components_strings_ar.xtb | 2 components/strings/components_strings_as.xtb | 2 components/strings/components_strings_ca.xtb | 6 components/strings/components_strings_de.xtb | 4 components/strings/components_strings_eu.xtb | 4 components/strings/components_strings_fa.xtb | 10 components/strings/components_strings_hi.xtb | 2 components/strings/components_strings_hr.xtb | 2 components/strings/components_strings_id.xtb | 2 components/strings/components_strings_iw.xtb | 2 components/strings/components_strings_ne.xtb | 2 components/strings/components_strings_nl.xtb | 2 components/strings/components_strings_no.xtb | 10 components/strings/components_strings_pa.xtb | 2 components/strings/components_strings_pl.xtb | 2 components/strings/components_strings_pt-BR.xtb | 8 components/strings/components_strings_pt-PT.xtb | 8 components/strings/components_strings_ru.xtb | 4 components/strings/components_strings_th.xtb | 2 components/strings/components_strings_uk.xtb | 6 components/supervised_user/core/browser/supervised_user_pref_store.cc | 4 components/supervised_user/core/browser/supervised_user_pref_store_unittest.cc | 26 content/browser/interest_group/ad_auction_service_impl.cc | 4 content/browser/interest_group/ad_auction_service_impl_unittest.cc | 8 content/browser/loader/navigation_url_loader_impl.cc | 4 debian/changelog | 29 debian/control | 2 debian/copyright | 39 debian/patches/ppc64le/fixes/fix-breakpad-compile.patch | 16 debian/patches/series | 1 debian/patches/system/convertutf.patch | 247 ---- debian/scripts/chromium | 30 google_apis/gaia/gaia_constants.cc | 4 google_apis/gaia/gaia_constants.h | 4 gpu/config/gpu_driver_bug_list.json | 20 gpu/config/gpu_lists_version.h | 2 infra/config/generated/testing/variants.pyl | 86 - infra/config/targets/cros-skylab-variants.json | 108 - infra/config/targets/lacros-version-skew-variants.json | 32 media/audio/cras/cras_input.cc | 13 media/base/media_switches.cc | 4 media/base/media_switches.h | 1 media/gpu/chromeos/video_decoder_pipeline.cc | 7 net/http/transport_security_state_static.pins | 4 net/http/transport_security_state_static_pins.json | 2 remoting/resources/remoting_strings_as.xtb | 2 sandbox/policy/features.cc | 14 sandbox/policy/features.h | 5 sandbox/policy/linux/sandbox_linux.cc | 9 sandbox/policy/linux/sandbox_seccomp_bpf_linux.cc | 21 sandbox/policy/linux/sandbox_seccomp_bpf_linux.h | 7 services/network/oblivious_http_request_handler.cc | 2 skia/config/SkUserConfig.h | 2 skia/ext/skia_commit_hash.h | 2 testing/buildbot/chrome.json | 24 testing/buildbot/chromium.chromiumos.json | 96 - testing/buildbot/chromium.coverage.json | 96 - testing/buildbot/chromium.fyi.json | 224 +-- testing/buildbot/chromium.memory.json | 96 - testing/buildbot/internal.chromeos.fyi.json | 32 testing/buildbot/variants.pyl | 86 - third_party/blink/renderer/core/css/css_primitive_value_mappings.h | 63 - third_party/blink/renderer/core/css/css_value_keywords.json5 | 5 third_party/blink/renderer/core/editing/frame_selection.cc | 7 third_party/blink/renderer/core/fetch/body.cc | 7 third_party/blink/renderer/modules/webaudio/realtime_audio_destination_handler.cc | 19 third_party/blink/renderer/platform/theme_types.h | 3 third_party/breakpad/breakpad/src/common/convert_UTF.cc | 595 ++++++++++ third_party/breakpad/breakpad/src/common/convert_UTF.h | 159 ++ third_party/devtools-frontend/src/front_end/panels/console/consoleView.css | 4 third_party/devtools-frontend/src/front_end/panels/emulation/deviceModeView.css | 11 third_party/devtools-frontend/src/front_end/ui/legacy/themeColors.css | 2 third_party/perfetto/src/tracing/internal/tracing_muxer_impl.cc | 16 third_party/perfetto/src/tracing/test/api_integrationtest.cc | 161 ++ third_party/skia/gm/blurs.cpp | 39 third_party/skia/src/gpu/ganesh/GrBlurUtils.cpp | 66 - tools/metrics/histograms/enums.xml | 63 - tools/metrics/histograms/metadata/ios/histograms.xml | 10 tools/metrics/histograms/metadata/optimization/histograms.xml | 2 tools/metrics/histograms/metadata/others/histograms.xml | 12 ui/file_manager/file_manager/containers/nudge_container.ts | 6 ui/strings/translations/ax_strings_gu.xtb | 2 327 files changed, 5957 insertions(+), 2601 deletions(-) diff -Nru chromium-119.0.6045.105/DEPS chromium-119.0.6045.159/DEPS --- chromium-119.0.6045.105/DEPS 2023-11-01 18:10:02.000000000 +0000 +++ chromium-119.0.6045.159/DEPS 2023-11-14 22:56:16.000000000 +0000 @@ -310,11 +310,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'src_internal_revision': '05e32f0f4ea613e7a2e327f2cbfef1b22b196693', + 'src_internal_revision': '4ead11887996518e596b5f0a555810ccfd3f2b4e', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': 'ab212df482c8fd5b1c1fb302717876d542549624', + 'skia_revision': '96270e0be6b3acdbd59e5931a122be16958c9c1e', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. @@ -405,7 +405,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling devtools-frontend # and whatever else without interference from each other. - 'devtools_frontend_revision': 'fa727c5e31709a4447a79a2270157b7ba86414c4', + 'devtools_frontend_revision': '91b90b0f12222df90a8eef829c4c8dd4a8bfb73e', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libprotobuf-mutator # and whatever else without interference from each other. @@ -845,7 +845,7 @@ 'src/clank': { 'url': Var('chrome_git') + '/clank/internal/apps.git' + '@' + - 'ff998867a5150b2a99ce2b727e5a7a42abb26853', + '478c95ccdd64d66b2d3e5853746d5c131fc13e1d', 'condition': 'checkout_android and checkout_src_internal', }, @@ -1301,7 +1301,7 @@ Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'), 'src/third_party/devtools-frontend-internal': { - 'url': Var('chrome_git') + '/devtools/devtools-internal.git' + '@' + 'a98d77182a9ecdc33ce991901d032a14c5fde4e6', + 'url': Var('chrome_git') + '/devtools/devtools-internal.git' + '@' + 'b5fd85723637ab7571dc67c4eecc53d2f631e875', 'condition': 'checkout_src_internal', }, @@ -1790,7 +1790,7 @@ Var('pdfium_git') + '/pdfium.git' + '@' + Var('pdfium_revision'), 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + 'a3d4c1de9bcf2a0471ab183c45cf111efd29571e', + Var('android_git') + '/platform/external/perfetto.git' + '@' + '137c5a9438e785c3680be977e88c0f91bf73e065', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3', @@ -4137,7 +4137,7 @@ 'src/ios_internal': { 'url': Var('chrome_git') + '/chrome/ios_internal.git' + '@' + - '1af975cde59b2026e48da6f1defa7bf77bb4ec73', + 'd48e3910bbbc43ebd5943e145eb844de29c2db21', 'condition': 'checkout_ios and checkout_src_internal', }, diff -Nru chromium-119.0.6045.105/ash/ambient/ambient_animation_ui_launcher.cc chromium-119.0.6045.159/ash/ambient/ambient_animation_ui_launcher.cc --- chromium-119.0.6045.105/ash/ambient/ambient_animation_ui_launcher.cc 2023-11-01 18:10:02.000000000 +0000 +++ chromium-119.0.6045.159/ash/ambient/ambient_animation_ui_launcher.cc 2023-11-14 22:56:16.000000000 +0000 @@ -57,8 +57,6 @@ void AmbientAnimationUiLauncher::Initialize(InitializationCallback on_done) { CHECK(on_done); initialization_callback_ = std::move(on_done); - CHECK(!is_active_); - is_active_ = true; weather_refresher_ = Shell::Get() ->ambient_controller() ->ambient_weather_controller() @@ -73,7 +71,6 @@ } std::unique_ptr AmbientAnimationUiLauncher::CreateView() { - CHECK(is_active_); return std::make_unique( view_delegate_, &progress_tracker_, AmbientAnimationStaticResources::Create(current_ui_settings_, @@ -86,7 +83,6 @@ ambient_backend_model_observer_.Reset(); weather_refresher_.reset(); animation_metrics_recorder_.reset(); - is_active_ = false; } AmbientBackendModel* AmbientAnimationUiLauncher::GetAmbientBackendModel() { @@ -98,8 +94,4 @@ return &photo_controller_; } -bool AmbientAnimationUiLauncher::IsActive() { - return is_active_; -} - } // namespace ash diff -Nru chromium-119.0.6045.105/ash/ambient/ambient_animation_ui_launcher.h chromium-119.0.6045.159/ash/ambient/ambient_animation_ui_launcher.h --- chromium-119.0.6045.105/ash/ambient/ambient_animation_ui_launcher.h 2023-11-01 18:10:02.000000000 +0000 +++ chromium-119.0.6045.159/ash/ambient/ambient_animation_ui_launcher.h 2023-11-14 22:56:16.000000000 +0000 @@ -50,13 +50,11 @@ void Finalize() override; AmbientBackendModel* GetAmbientBackendModel() override; AmbientPhotoController* GetAmbientPhotoController() override; - bool IsActive() override; private: const scoped_refptr animation_; const raw_ptr view_delegate_; - bool is_active_ = false; InitializationCallback initialization_callback_; AmbientPhotoController photo_controller_; AmbientUiSettings current_ui_settings_; diff -Nru chromium-119.0.6045.105/ash/ambient/ambient_controller.cc chromium-119.0.6045.159/ash/ambient/ambient_controller.cc --- chromium-119.0.6045.105/ash/ambient/ambient_controller.cc 2023-11-01 18:10:02.000000000 +0000 +++ chromium-119.0.6045.159/ash/ambient/ambient_controller.cc 2023-11-14 22:56:16.000000000 +0000 @@ -1167,7 +1167,7 @@ std::unique_ptr AmbientController::CreateWidget( aura::Window* container) { - if (!ShouldShowAmbientUi()) { + if (ui_launcher_state_ != AmbientUiLauncherState::kRendering) { return nullptr; } @@ -1224,6 +1224,7 @@ SetUiVisibilityClosed(); return; } + ui_launcher_state_ = AmbientUiLauncherState::kRendering; CreateAndShowWidgets(); } @@ -1243,6 +1244,7 @@ CloseAllWidgets(close_widgets_immediately_); session_metrics_recorder_.reset(); ui_launcher_init_callback_.Cancel(); + ui_launcher_state_ = AmbientUiLauncherState::kInactive; ambient_ui_launcher_->Finalize(); } @@ -1266,6 +1268,7 @@ ui_launcher_init_callback_.Reset( base::BindOnce(&AmbientController::OnUiLauncherInitialized, weak_ptr_factory_.GetWeakPtr())); + ui_launcher_state_ = AmbientUiLauncherState::kInitializing; ambient_ui_launcher_->Initialize(ui_launcher_init_callback_.callback()); } @@ -1333,11 +1336,12 @@ } void AmbientController::DestroyUiLauncher() { + ui_launcher_state_ = AmbientUiLauncherState::kInactive; ambient_ui_launcher_.reset(); } bool AmbientController::IsUiLauncherActive() const { - return ambient_ui_launcher_ && ambient_ui_launcher_->IsActive(); + return ui_launcher_state_ != AmbientUiLauncherState::kInactive; } void AmbientController::OnReadyStateChanged(bool is_ready) { diff -Nru chromium-119.0.6045.105/ash/ambient/ambient_controller.h chromium-119.0.6045.159/ash/ambient/ambient_controller.h --- chromium-119.0.6045.105/ash/ambient/ambient_controller.h 2023-11-01 18:10:02.000000000 +0000 +++ chromium-119.0.6045.159/ash/ambient/ambient_controller.h 2023-11-14 22:56:16.000000000 +0000 @@ -202,6 +202,18 @@ // by `OnLoginLockScreenStateChanged` method as a parameter to pass // the correct information to the method. enum LockScreenState { kLogin, kLocked, kUnlocked }; + + // Tracks the progression of states with `AmbientUiLauncher`. + enum class AmbientUiLauncherState { + // Waiting for `Initialize()` to finish. + kInitializing, + // `Initialize()` has completed successfully. + kRendering, + // After `Finalize()` (not in the middle of launching or rendering an + // ambient session). + kInactive, + }; + friend class AmbientAshTestBase; friend class AmbientControllerTest; FRIEND_TEST_ALL_PREFIXES(AmbientControllerTest, @@ -363,6 +375,8 @@ // `ash::Shell`. bool is_receiving_pretarget_events_ = false; + AmbientUiLauncherState ui_launcher_state_ = AmbientUiLauncherState::kInactive; + std::unique_ptr session_metrics_recorder_; // The policy handler for downloading policy set images. This lives in the diff -Nru chromium-119.0.6045.105/ash/ambient/ambient_controller_unittest.cc chromium-119.0.6045.159/ash/ambient/ambient_controller_unittest.cc --- chromium-119.0.6045.105/ash/ambient/ambient_controller_unittest.cc 2023-11-01 18:10:02.000000000 +0000 +++ chromium-119.0.6045.159/ash/ambient/ambient_controller_unittest.cc 2023-11-14 22:56:16.000000000 +0000 @@ -151,6 +151,31 @@ base::RepeatingClosure run_loop_quit_closure_; }; +// UpdateDisplay triggers a rogue MouseEvent that cancels Ambient mode when +// testing with Xvfb. A corresponding MouseEvent is not fired on a real device +// when an external display is added. Ignore this MouseEvent for testing. +// Store the old |ShouldIgnoreNativePlatformEvents| value and reset it at the +// end of the test. +class ScopedIgnoreNativePlatformEvents { + public: + ScopedIgnoreNativePlatformEvents() + : old_should_ignore_events_( + ui::PlatformEventSource::ShouldIgnoreNativePlatformEvents()) { + ui::PlatformEventSource::SetIgnoreNativePlatformEvents(true); + } + ScopedIgnoreNativePlatformEvents(const ScopedIgnoreNativePlatformEvents&) = + delete; + ScopedIgnoreNativePlatformEvents& operator=( + const ScopedIgnoreNativePlatformEvents&) = delete; + ~ScopedIgnoreNativePlatformEvents() { + ui::PlatformEventSource::SetIgnoreNativePlatformEvents( + old_should_ignore_events_); + } + + private: + const bool old_should_ignore_events_; +}; + } // namespace class AmbientControllerTest : public AmbientAshTestBase { @@ -1235,14 +1260,7 @@ } TEST_P(AmbientControllerTestForAnyUiSettings, RespondsToDisplayAdded) { - // UpdateDisplay triggers a rogue MouseEvent that cancels Ambient mode when - // testing with Xvfb. A corresponding MouseEvent is not fired on a real device - // when an external display is added. Ignore this MouseEvent for testing. - // Store the old |ShouldIgnoreNativePlatformEvents| value and reset it at the - // end of the test. - bool old_should_ignore_events = - ui::PlatformEventSource::ShouldIgnoreNativePlatformEvents(); - ui::PlatformEventSource::SetIgnoreNativePlatformEvents(true); + ScopedIgnoreNativePlatformEvents ignore_native_platform_events; UpdateDisplay("800x600"); SetAmbientShownAndWaitForWidgets(); @@ -1260,9 +1278,38 @@ for (auto* ctrl : RootWindowController::root_window_controllers()) EXPECT_TRUE(ctrl->ambient_widget_for_testing() && ctrl->ambient_widget_for_testing()->IsVisible()); +} + +TEST_F(AmbientControllerTest, RespondsToDisplayAddedWhileInitializing) { + static constexpr base::TimeDelta kPhotoDownloadDelay = base::Seconds(2); + + ScopedIgnoreNativePlatformEvents ignore_native_platform_events; + + SetAmbientTheme(AmbientTheme::kSlideshow); + SetPhotoDownloadDelay(kPhotoDownloadDelay); + + UpdateDisplay("800x600"); + ambient_controller()->SetUiVisibilityShouldShow(); + + // First photo is downloaded, but the minimum required to start + // `kSlideshow` is two, so `AmbientPhotoController` should attempt to + // download another before starting the ui. + task_environment()->FastForwardBy(kPhotoDownloadDelay); + ASSERT_TRUE(GetContainerViews().empty()); + + // Now user plugs in second display. + UpdateDisplay("800x600,800x600"); + + task_environment()->FastForwardBy(kPhotoDownloadDelay); + FastForwardTiny(); - ui::PlatformEventSource::SetIgnoreNativePlatformEvents( - old_should_ignore_events); + EXPECT_TRUE(ambient_controller()->IsShowing()); + EXPECT_EQ(display::Screen::GetScreen()->GetNumDisplays(), 2); + EXPECT_EQ(GetContainerViews().size(), 2u); + for (auto* ctrl : RootWindowController::root_window_controllers()) { + EXPECT_TRUE(ctrl->ambient_widget_for_testing() && + ctrl->ambient_widget_for_testing()->IsVisible()); + } } TEST_P(AmbientControllerTestForAnyUiSettings, HandlesDisplayRemoved) { diff -Nru chromium-119.0.6045.105/ash/ambient/ambient_managed_slideshow_ui_launcher.cc chromium-119.0.6045.159/ash/ambient/ambient_managed_slideshow_ui_launcher.cc --- chromium-119.0.6045.105/ash/ambient/ambient_managed_slideshow_ui_launcher.cc 2023-11-01 18:10:02.000000000 +0000 +++ chromium-119.0.6045.159/ash/ambient/ambient_managed_slideshow_ui_launcher.cc 2023-11-14 22:56:16.000000000 +0000 @@ -94,10 +94,6 @@ return nullptr; } -bool AmbientManagedSlideshowUiLauncher::IsActive() { - return photo_controller_.IsScreenUpdateActive(); -} - bool AmbientManagedSlideshowUiLauncher::ComputeReadyState() { return LockScreen::HasInstance() && !photo_controller_.HasScreenUpdateErrors(); diff -Nru chromium-119.0.6045.105/ash/ambient/ambient_managed_slideshow_ui_launcher.h chromium-119.0.6045.159/ash/ambient/ambient_managed_slideshow_ui_launcher.h --- chromium-119.0.6045.105/ash/ambient/ambient_managed_slideshow_ui_launcher.h 2023-11-01 18:10:02.000000000 +0000 +++ chromium-119.0.6045.159/ash/ambient/ambient_managed_slideshow_ui_launcher.h 2023-11-14 22:56:16.000000000 +0000 @@ -51,7 +51,6 @@ void Finalize() override; AmbientBackendModel* GetAmbientBackendModel() override; AmbientPhotoController* GetAmbientPhotoController() override; - bool IsActive() override; std::unique_ptr CreateMetricsDelegate(AmbientUiSettings current_ui_settings) override; diff -Nru chromium-119.0.6045.105/ash/ambient/ambient_slideshow_ui_launcher.cc chromium-119.0.6045.159/ash/ambient/ambient_slideshow_ui_launcher.cc --- chromium-119.0.6045.105/ash/ambient/ambient_slideshow_ui_launcher.cc 2023-11-01 18:10:02.000000000 +0000 +++ chromium-119.0.6045.159/ash/ambient/ambient_slideshow_ui_launcher.cc 2023-11-14 22:56:16.000000000 +0000 @@ -42,8 +42,6 @@ void AmbientSlideshowUiLauncher::Initialize(InitializationCallback on_done) { CHECK(on_done); initialization_callback_ = std::move(on_done); - CHECK(!is_active_); - is_active_ = true; weather_refresher_ = Shell::Get() ->ambient_controller() ->ambient_weather_controller() @@ -54,7 +52,6 @@ } std::unique_ptr AmbientSlideshowUiLauncher::CreateView() { - CHECK(is_active_); return std::make_unique(view_delegate_); } @@ -62,7 +59,6 @@ photo_controller_.StopScreenUpdate(); ambient_backend_model_observer_.Reset(); weather_refresher_.reset(); - is_active_ = false; } AmbientBackendModel* AmbientSlideshowUiLauncher::GetAmbientBackendModel() { @@ -74,8 +70,4 @@ return &photo_controller_; } -bool AmbientSlideshowUiLauncher::IsActive() { - return is_active_; -} - } // namespace ash diff -Nru chromium-119.0.6045.105/ash/ambient/ambient_slideshow_ui_launcher.h chromium-119.0.6045.159/ash/ambient/ambient_slideshow_ui_launcher.h --- chromium-119.0.6045.105/ash/ambient/ambient_slideshow_ui_launcher.h 2023-11-01 18:10:02.000000000 +0000 +++ chromium-119.0.6045.159/ash/ambient/ambient_slideshow_ui_launcher.h 2023-11-14 22:56:16.000000000 +0000 @@ -39,10 +39,8 @@ void Finalize() override; AmbientBackendModel* GetAmbientBackendModel() override; AmbientPhotoController* GetAmbientPhotoController() override; - bool IsActive() override; private: - bool is_active_ = false; InitializationCallback initialization_callback_; AmbientPhotoController photo_controller_; base::ScopedObservation diff -Nru chromium-119.0.6045.105/ash/ambient/ambient_ui_launcher.h chromium-119.0.6045.159/ash/ambient/ambient_ui_launcher.h --- chromium-119.0.6045.105/ash/ambient/ambient_ui_launcher.h 2023-11-01 18:10:02.000000000 +0000 +++ chromium-119.0.6045.159/ash/ambient/ambient_ui_launcher.h 2023-11-14 22:56:16.000000000 +0000 @@ -58,9 +58,6 @@ // dependency from the ambient controller. virtual AmbientPhotoController* GetAmbientPhotoController() = 0; - // Returns whether an ambient UI session is active. - virtual bool IsActive() = 0; - // Returns whether an ambient UI session is ready to be started and the // `Intiailize` method can be called. Note: This can potentially disable // ambient mode until the next lock/unlock event if this is false on the lock diff -Nru chromium-119.0.6045.105/ash/ambient/ambient_video_ui_launcher.cc chromium-119.0.6045.159/ash/ambient/ambient_video_ui_launcher.cc --- chromium-119.0.6045.105/ash/ambient/ambient_video_ui_launcher.cc 2023-11-01 18:10:02.000000000 +0000 +++ chromium-119.0.6045.159/ash/ambient/ambient_video_ui_launcher.cc 2023-11-14 22:56:16.000000000 +0000 @@ -45,8 +45,6 @@ void AmbientVideoUiLauncher::Initialize(InitializationCallback on_done) { CHECK(on_done); - CHECK(!is_active_); - is_active_ = true; AmbientUiSettings ui_settings = AmbientUiSettings::ReadFromPrefService(*pref_service_); CHECK(ui_settings.video()) @@ -63,7 +61,6 @@ } std::unique_ptr AmbientVideoUiLauncher::CreateView() { - CHECK(is_active_); CHECK(!video_html_path_.empty()); return std::make_unique(GetVideoFile(current_video_), video_html_path_, current_video_, @@ -73,7 +70,6 @@ void AmbientVideoUiLauncher::Finalize() { weak_factory_.InvalidateWeakPtrs(); weather_refresher_.reset(); - is_active_ = false; } AmbientBackendModel* AmbientVideoUiLauncher::GetAmbientBackendModel() { @@ -84,10 +80,6 @@ return nullptr; } -bool AmbientVideoUiLauncher::IsActive() { - return is_active_; -} - void AmbientVideoUiLauncher::SetVideoHtmlPath(InitializationCallback on_done, base::FilePath video_html_path) { video_html_path_ = std::move(video_html_path); diff -Nru chromium-119.0.6045.105/ash/ambient/ambient_video_ui_launcher.h chromium-119.0.6045.159/ash/ambient/ambient_video_ui_launcher.h --- chromium-119.0.6045.105/ash/ambient/ambient_video_ui_launcher.h 2023-11-01 18:10:02.000000000 +0000 +++ chromium-119.0.6045.159/ash/ambient/ambient_video_ui_launcher.h 2023-11-14 22:56:16.000000000 +0000 @@ -36,13 +36,11 @@ void Finalize() override; AmbientBackendModel* GetAmbientBackendModel() override; AmbientPhotoController* GetAmbientPhotoController() override; - bool IsActive() override; private: void SetVideoHtmlPath(InitializationCallback on_done, base::FilePath video_html_path); - bool is_active_ = false; AmbientVideo current_video_; const raw_ptr pref_service_; const raw_ptr view_delegate_; diff -Nru chromium-119.0.6045.105/ash/app_list/views/app_list_item_view_pixeltest.cc chromium-119.0.6045.159/ash/app_list/views/app_list_item_view_pixeltest.cc --- chromium-119.0.6045.105/ash/app_list/views/app_list_item_view_pixeltest.cc 2023-11-01 18:10:02.000000000 +0000 +++ chromium-119.0.6045.159/ash/app_list/views/app_list_item_view_pixeltest.cc 2023-11-14 22:56:16.000000000 +0000 @@ -216,17 +216,9 @@ CreateFoldersContainingDifferentNumOfItems(max_items_in_folder); ShowAppList(); - if (jelly_enabled()) { - EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( - GenerateScreenshotName(), /*revision_number=*/4, GetItemViewAt(0), - GetItemViewAt(1), GetItemViewAt(2), GetItemViewAt(3), - GetItemViewAt(4))); - } else { - EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( - GenerateScreenshotName(), /*revision_number=*/5, GetItemViewAt(0), - GetItemViewAt(1), GetItemViewAt(2), GetItemViewAt(3), - GetItemViewAt(4))); - } + EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( + GenerateScreenshotName(), /*revision_number=*/8, GetItemViewAt(0), + GetItemViewAt(1), GetItemViewAt(2), GetItemViewAt(3), GetItemViewAt(4))); } // Verifies the folder icon is extended when an app is dragged upon it. @@ -261,17 +253,9 @@ GetItemViewAt(i)->OnDraggedViewEnter(); } - if (jelly_enabled()) { - EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( - GenerateScreenshotName(), /*revision_number=*/4, GetItemViewAt(0), - GetItemViewAt(1), GetItemViewAt(2), GetItemViewAt(3), - GetItemViewAt(4))); - } else { - EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( - GenerateScreenshotName(), /*revision_number=*/5, GetItemViewAt(0), - GetItemViewAt(1), GetItemViewAt(2), GetItemViewAt(3), - GetItemViewAt(4))); - } + EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( + GenerateScreenshotName(), /*revision_number=*/8, GetItemViewAt(0), + GetItemViewAt(1), GetItemViewAt(2), GetItemViewAt(3), GetItemViewAt(4))); // Reset the states. for (int i = 0; i < max_items_in_folder; ++i) { diff -Nru chromium-119.0.6045.105/ash/app_list/views/app_list_view_pixeltest.cc chromium-119.0.6045.159/ash/app_list/views/app_list_view_pixeltest.cc --- chromium-119.0.6045.105/ash/app_list/views/app_list_view_pixeltest.cc 2023-11-01 18:10:02.000000000 +0000 +++ chromium-119.0.6045.159/ash/app_list/views/app_list_view_pixeltest.cc 2023-11-14 22:56:16.000000000 +0000 @@ -231,8 +231,7 @@ UseFixedPlaceholderTextAndHideCursor(test_helper->GetSearchBoxView()); EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( - "bubble_launcher_answer_card_search_results", - /*revision_number=*/JellyEnabled() ? 9 : 7, + "bubble_launcher_answer_card_search_results", 12, GetAppListTestHelper()->GetBubbleView(), GetPrimaryShelf()->navigation_widget())); } @@ -254,8 +253,7 @@ UseFixedPlaceholderTextAndHideCursor(test_helper->GetSearchBoxView()); EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( - "bubble_launcher_url_search_results", - /*revision_number=*/JellyEnabled() ? 8 : 6, + "bubble_launcher_url_search_results", 11, GetAppListTestHelper()->GetBubbleView(), GetPrimaryShelf()->navigation_widget())); } @@ -277,7 +275,7 @@ UseFixedPlaceholderTextAndHideCursor(test_helper->GetSearchBoxView()); EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( - "bubble_launcher_ks_search_results", /*revision_number=*/0, + "bubble_launcher_ks_search_results", /*revision_number=*/3, GetAppListTestHelper()->GetBubbleView())); } @@ -290,9 +288,7 @@ UseFixedPlaceholderTextAndHideCursor( GetAppListTestHelper()->GetSearchBoxView()); EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( - "bubble_launcher_basics", - /*revision_number=*/JellyEnabled() ? 8 : 6, - GetAppListTestHelper()->GetBubbleView(), + "bubble_launcher_basics", 11, GetAppListTestHelper()->GetBubbleView(), GetPrimaryShelf()->navigation_widget())); } @@ -313,8 +309,7 @@ /*position=*/20); EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( - "bubble_launcher_gradient_zone", - /*revision_number=*/JellyEnabled() ? 8 : 6, + "bubble_launcher_gradient_zone", 11, GetAppListTestHelper()->GetBubbleView(), GetPrimaryShelf()->navigation_widget())); } @@ -426,8 +421,7 @@ // Verifies the default layout for tablet mode launcher. TEST_P(AppListViewTabletPixelTest, Basic) { EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( - "tablet_launcher_basics", - /*revision_number=*/IsJellyEnabled() ? 7 : 6, + "tablet_launcher_basics", 13, GetAppListTestHelper()->GetAppsContainerView())); } @@ -448,8 +442,7 @@ generator->MoveTouchBy(0, -40); EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( - "tablet_launcher_top_gradient_zone", - /*revision_number=*/IsJellyEnabled() ? 6 : 5, + "tablet_launcher_top_gradient_zone", 11, GetAppListTestHelper()->GetAppsContainerView())); } @@ -470,8 +463,7 @@ generator->MoveTouchBy(0, -90); EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( - "tablet_launcher_bottom_gradient_zone", - /*revision_number=*/IsJellyEnabled() ? 7 : 6, + "tablet_launcher_bottom_gradient_zone", 13, GetAppListTestHelper()->GetAppsContainerView())); } @@ -481,8 +473,7 @@ search_box_view->SetSearchBoxActive(true, ui::EventType::ET_UNKNOWN); EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( - "search_box_view_active", - /*revision_number=*/IsJellyEnabled() ? 4 : 3, search_box_view)); + "search_box_view_active", 7, search_box_view)); } class AppListViewAssistantZeroStateTest diff -Nru chromium-119.0.6045.105/ash/constants/ash_features.cc chromium-119.0.6045.159/ash/constants/ash_features.cc --- chromium-119.0.6045.105/ash/constants/ash_features.cc 2023-11-01 18:10:03.000000000 +0000 +++ chromium-119.0.6045.159/ash/constants/ash_features.cc 2023-11-14 22:56:17.000000000 +0000 @@ -2047,6 +2047,11 @@ // and perform phone-side actions within ChromeOS. BASE_FEATURE(kPhoneHub, "PhoneHub", base::FEATURE_ENABLED_BY_DEFAULT); +// Retry generating attestation certificates when there are failures. +BASE_FEATURE(kPhoneHubAttestationRetries, + "PhoneHubAttestationRetries", + base::FEATURE_ENABLED_BY_DEFAULT); + // Enables the Camera Roll feature in Phone Hub, which allows users to access // recent photos and videos taken on a connected Android device BASE_FEATURE(kPhoneHubCameraRoll, @@ -2477,6 +2482,12 @@ "FeatureManagementFeatureAwareDeviceDemoMode", base::FEATURE_DISABLED_BY_DEFAULT); +// Enabled the demo mode session to close GMSCore windows which disrupt +// the attract loop videos. +BASE_FEATURE(kDemoModeGMSCoreWindowCloser, + "DemoModeGMSCoreWindowCloser", + base::FEATURE_ENABLED_BY_DEFAULT); + // Enables the shutdown confirmation bubble from the login shelf view. BASE_FEATURE(kShutdownConfirmationBubble, "ShutdownConfirmationBubble", @@ -3245,6 +3256,10 @@ return base::FeatureList::IsEnabled(kAudioSourceFetcherResampling); } +bool IsDemoModeGMSCoreWindowCloserEnabled() { + return base::FeatureList::IsEnabled(kDemoModeGMSCoreWindowCloser); +} + bool IsEcheSWAEnabled() { return base::FeatureList::IsEnabled(kEcheSWA); } @@ -3897,6 +3912,10 @@ return base::FeatureList::IsEnabled(kPhoneHub); } +bool IsPhoneHubAttestationRetriesEnabled() { + return base::FeatureList::IsEnabled(kPhoneHubAttestationRetries); +} + bool IsPhoneHubCallNotificationEnabled() { return base::FeatureList::IsEnabled(kPhoneHubCallNotification); } diff -Nru chromium-119.0.6045.105/ash/constants/ash_features.h chromium-119.0.6045.159/ash/constants/ash_features.h --- chromium-119.0.6045.105/ash/constants/ash_features.h 2023-11-01 18:10:03.000000000 +0000 +++ chromium-119.0.6045.159/ash/constants/ash_features.h 2023-11-14 22:56:17.000000000 +0000 @@ -605,6 +605,8 @@ COMPONENT_EXPORT(ASH_CONSTANTS) COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kPerUserMetrics); COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kPhoneHub); +COMPONENT_EXPORT(ASH_CONSTANTS) +BASE_DECLARE_FEATURE(kPhoneHubAttestationRetries); COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kPhoneHubCameraRoll); COMPONENT_EXPORT(ASH_CONSTANTS) extern const base::FeatureParam @@ -735,6 +737,8 @@ COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kFeatureManagementFeatureAwareDeviceDemoMode); COMPONENT_EXPORT(ASH_CONSTANTS) +BASE_DECLARE_FEATURE(kDemoModeGMSCoreWindowCloser); +COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kShutdownConfirmationBubble); COMPONENT_EXPORT(ASH_CONSTANTS) BASE_DECLARE_FEATURE(kSideAlignedToasts); COMPONENT_EXPORT(ASH_CONSTANTS) @@ -902,6 +906,7 @@ bool IsCryptauthAttestationSyncingEnabled(); COMPONENT_EXPORT(ASH_CONSTANTS) bool IsCryptohomeRecoveryEnabled(); COMPONENT_EXPORT(ASH_CONSTANTS) bool IsDeepLinkingEnabled(); +COMPONENT_EXPORT(ASH_CONSTANTS) bool IsDemoModeGMSCoreWindowCloserEnabled(); COMPONENT_EXPORT(ASH_CONSTANTS) bool IsDeskButtonEnabled(); COMPONENT_EXPORT(ASH_CONSTANTS) bool IsDeskTemplateSyncEnabled(); COMPONENT_EXPORT(ASH_CONSTANTS) bool IsInputDeviceSettingsSplitEnabled(); @@ -1097,6 +1102,7 @@ COMPONENT_EXPORT(ASH_CONSTANTS) bool IsPhoneHubPingOnBubbleOpenEnabled(); COMPONENT_EXPORT(ASH_CONSTANTS) bool IsPhoneHubEnabled(); +COMPONENT_EXPORT(ASH_CONSTANTS) bool IsPhoneHubAttestationRetriesEnabled(); COMPONENT_EXPORT(ASH_CONSTANTS) bool IsPhoneHubCallNotificationEnabled(); COMPONENT_EXPORT(ASH_CONSTANTS) bool IsPinAutosubmitBackfillFeatureEnabled(); COMPONENT_EXPORT(ASH_CONSTANTS) bool IsPinAutosubmitFeatureEnabled(); diff -Nru chromium-119.0.6045.105/ash/glanceables/glanceables_pixeltest.cc chromium-119.0.6045.159/ash/glanceables/glanceables_pixeltest.cc --- chromium-119.0.6045.105/ash/glanceables/glanceables_pixeltest.cc 2023-11-01 18:10:03.000000000 +0000 +++ chromium-119.0.6045.159/ash/glanceables/glanceables_pixeltest.cc 2023-11-14 22:56:17.000000000 +0000 @@ -115,7 +115,7 @@ GetGlanceableTrayBubble()->GetTasksView()->ScrollViewToVisible(); EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( - "glanceables_zero_state", /*revision_number=*/3, + "glanceables_zero_state", /*revision_number=*/5, GetGlanceableTrayBubble()->GetBubbleView())); } diff -Nru chromium-119.0.6045.105/ash/public/cpp/external_arc/message_center/arc_notification_content_view.cc chromium-119.0.6045.159/ash/public/cpp/external_arc/message_center/arc_notification_content_view.cc --- chromium-119.0.6045.105/ash/public/cpp/external_arc/message_center/arc_notification_content_view.cc 2023-11-01 18:10:03.000000000 +0000 +++ chromium-119.0.6045.159/ash/public/cpp/external_arc/message_center/arc_notification_content_view.cc 2023-11-14 22:56:17.000000000 +0000 @@ -105,8 +105,9 @@ return; views::Widget* widget = owner_->GetWidget(); - if (!widget) + if (!widget || !widget->GetNativeWindow()) { return; + } // Forward the events to the containing widget, except for: // 1. Touches, because View should no longer receive touch events. diff -Nru chromium-119.0.6045.105/ash/shelf/scrollable_shelf_view_pixeltest.cc chromium-119.0.6045.159/ash/shelf/scrollable_shelf_view_pixeltest.cc --- chromium-119.0.6045.105/ash/shelf/scrollable_shelf_view_pixeltest.cc 2023-11-01 18:10:03.000000000 +0000 +++ chromium-119.0.6045.159/ash/shelf/scrollable_shelf_view_pixeltest.cc 2023-11-14 22:56:17.000000000 +0000 @@ -113,7 +113,7 @@ // Verify the shelf context menu and the shelf. EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( "shelf_context_menu", - /*revision_number=*/11, + /*revision_number=*/16, GetPrimaryShelf() ->shelf_widget() ->shelf_view_for_testing() diff -Nru chromium-119.0.6045.105/ash/shortcut_viewer/strings/shortcut_viewer_strings_eu.xtb chromium-119.0.6045.159/ash/shortcut_viewer/strings/shortcut_viewer_strings_eu.xtb --- chromium-119.0.6045.105/ash/shortcut_viewer/strings/shortcut_viewer_strings_eu.xtb 2023-11-01 18:10:03.000000000 +0000 +++ chromium-119.0.6045.159/ash/shortcut_viewer/strings/shortcut_viewer_strings_eu.xtb 2023-11-14 22:56:17.000000000 +0000 @@ -38,7 +38,7 @@ aldia Ezin da erabili teklatuak daukan diseinuarekin Erakutsi Chrome-ko menua -Aktibatu eta desaktibatu maiuskula-blokeoa +Aktibatu eta desaktibatu maiuskulen blokeoa Joan azkar leiho batetik bestera Bistaratzea txikitzea Aktibatu eta desaktibatu ChromeVox (ahozko argibideak) @@ -57,7 +57,7 @@ Ainguratu leiho bat eskuineko aldean Joan hurrengo orrira Trukatu monitore nagusia -Erakutsi edo ezkutatu garatzaileen tresnen panela +Erakutsi edo ezkutatu garatzaileentzako tresnen panela Aktibatu/Desaktibatu pantaila osoko modua Lasterbideak Nabarmendu apaleko hurrengo elementua @@ -130,7 +130,7 @@ Ireki esteka fitxan Txikitu teklatuaren distira (hondoko argia duten teklatuetan bakarrik) Ezabatu aurreko hitza -Erakutsi edo ezkutatu garatzaileen tresnen kontsola +Erakutsi edo ezkutatu garatzaileentzako tresnen kontsola Aktibatu edo desaktibatu pribatutasun-pantaila Biratu leihoa Atera pantaila osoaren argazkia @@ -189,7 +189,7 @@ edo Biratu pantaila 90 gradu eskuineko kako zuzena -Erakutsi edo ezkutatu garatzaileen tresnen inspektorea +Erakutsi edo ezkutatu garatzaileentzako tresnen inspektorea Ireki Deskargak orria Arrastatu esteka fitxen zintako zuriune batera Ireki beste leiho bat diff -Nru chromium-119.0.6045.105/ash/strings/ash_strings_ar.xtb chromium-119.0.6045.159/ash/strings/ash_strings_ar.xtb --- chromium-119.0.6045.105/ash/strings/ash_strings_ar.xtb 2023-11-01 18:10:03.000000000 +0000 +++ chromium-119.0.6045.159/ash/strings/ash_strings_ar.xtb 2023-11-14 22:56:17.000000000 +0000 @@ -1876,7 +1876,7 @@ ‏بدأ التسجيل. بعد بدء التسجيل، يمكنك استخدام Alt + Shift + L للانتقال إلى الرف والبحث عن زر إيقاف التسجيل. التركيز على نافذة ميزة "نافذة ضمن النافذة" تفعيل/إيقاف ميزة "الإملاء" (الكتابة باستخدام الصوت) -مُقفَلة من خلال مشغّل الشبكة +مُقفَل من خلال مشغّل الشبكة اختيار الكلمة السابقة أو الحرف السابق تبديل مستوى الصوت. تصوير الشاشة بأكملها diff -Nru chromium-119.0.6045.105/ash/strings/ash_strings_as.xtb chromium-119.0.6045.159/ash/strings/ash_strings_as.xtb --- chromium-119.0.6045.105/ash/strings/ash_strings_as.xtb 2023-11-01 18:10:03.000000000 +0000 +++ chromium-119.0.6045.159/ash/strings/ash_strings_as.xtb 2023-11-14 22:56:17.000000000 +0000 @@ -1311,7 +1311,7 @@ Screencast পৃষ্ঠাৰ উৎস চাওক ৰিজ'লিউশ্বন সলনি হ'ল -এজন অভিভাৱকৰ অনুমতি লৈ পাছত পুনৰ যোগ কৰিব পৰা যায়। +এগৰাকী অভিভাৱকৰ অনুমতি লৈ পাছত পুনৰ যোগ কৰিব পৰা যায়। চাৰ্জ হৈ থকা নাই শ্বেল্ফৰ ১ৰ পৰা ৮ নম্বৰ চিহ্নত ক্লিক কৰক অথবা টিপক Voice diff -Nru chromium-119.0.6045.105/ash/strings/ash_strings_ca.xtb chromium-119.0.6045.159/ash/strings/ash_strings_ca.xtb --- chromium-119.0.6045.105/ash/strings/ash_strings_ca.xtb 2023-11-01 18:10:03.000000000 +0000 +++ chromium-119.0.6045.159/ash/strings/ash_strings_ca.xtb 2023-11-14 22:56:17.000000000 +0000 @@ -48,7 +48,7 @@ Permet l'accés a totes les aplicacions i tots els llocs web amb permisos per accedir a la càmera i al micròfon. Inici No m'interessa aquest suggeriment -Aquesta xarxa no admet les aplicacions de reproducció en continu del telèfon. Prova d'utilitzar el punt d'accés Wi-Fi del telèfon. +Aquesta xarxa no admet les aplicacions de reproducció en línia del telèfon. Prova d'utilitzar el punt d'accés Wi-Fi del telèfon. Introdueix la contrasenya o el PIN per augmentar la seguretat Toca en qualsevol lloc per capturar la pantalla completa Centre de notificacions diff -Nru chromium-119.0.6045.105/ash/strings/ash_strings_eu.xtb chromium-119.0.6045.159/ash/strings/ash_strings_eu.xtb --- chromium-119.0.6045.105/ash/strings/ash_strings_eu.xtb 2023-11-01 18:10:03.000000000 +0000 +++ chromium-119.0.6045.159/ash/strings/ash_strings_eu.xtb 2023-11-14 22:56:17.000000000 +0000 @@ -526,7 +526,7 @@ {NUM_DEVICES,plural, =1{Gailu batera konektatuta}other{# gailutara konektatuta}} Ezarri tenporizadore bat Erabilerraztasun-osagarria gaitu da -Aktibatu/Desaktibatu maiuskula-blokeoa +Aktibatu/Desaktibatu maiuskulen blokeoa Erabiltzaile-ezarpenak Aplikazioa Gorde esteka laster-marka gisa @@ -1135,7 +1135,7 @@ memoria Liburutegia Arrastatu argazkian agertzea nahi duzun eremua hautatzeko -Mikrofonoa desaktibatuta dagoelako abisua aktibatuta dago. Audioa desaktibatuta daukazunean hitz egiten baduzu, jakinarazpen bat jasoko duzu. +Mikrofonoa desaktibatuaren abisua aktibatuta dago. Audioa desaktibatuta daukazunean hitz egiten baduzu, jakinarazpen bat jasoko duzu. Aukera gehiago , Lasterbidea desaktibatuta dago @@ -1554,7 +1554,7 @@ Grabatu leihoa -tik daude erabilgarri Mikrofonoa erabiltzeko baimena aktibatzen du halakorik baduten aplikazio eta webgune guztietan -Maiuskula-blokeoa aktibatuta dago. +Maiuskulen blokeoa aktibatuta dago. Konektatu kode bat erabilita Arrastatu grabatu nahi duzun eremua hautatzeko Multimedia-edukia kontrolatzeko aukerak @@ -1616,7 +1616,7 @@ Bilatu edo aldatu PUZaren erabileraren laburpena: % . Tenperatura:  gradu Celsius. Oraingo abiadura:  GHz. Ikusi jakinarazpen guztiak -Mikrofonoa desaktibatuta dagoelako abisua aktibatu nahi duzu? +Mikrofonoa desaktibatuaren abisua aktibatu nahi duzu? Pausatuta Egutegiko ikuspegia, , Konektatu egin da berriro kamera. @@ -1787,7 +1787,7 @@ Ahula Aurreko menua Beta -Blok Maius aktibatuta dago +Maiuskulen blokeoa aktibatuta dago Aktibatzen… leihoa dago hautatuta diff -Nru chromium-119.0.6045.105/ash/strings/ash_strings_fi.xtb chromium-119.0.6045.159/ash/strings/ash_strings_fi.xtb --- chromium-119.0.6045.105/ash/strings/ash_strings_fi.xtb 2023-11-01 18:10:03.000000000 +0000 +++ chromium-119.0.6045.159/ash/strings/ash_strings_fi.xtb 2023-11-14 22:56:17.000000000 +0000 @@ -376,7 +376,7 @@ hidas laite Vedä välilehteä ja paina samalla Kopioi valittu sisältö leikepöydälle -Paranna valaistusta +Valaistuksen parantaminen Aloita tallennus Google Assistantia ei voi käyttää julkisella käyttökerralla. kiinnitetty näytön suurentaja diff -Nru chromium-119.0.6045.105/ash/strings/ash_strings_or.xtb chromium-119.0.6045.159/ash/strings/ash_strings_or.xtb --- chromium-119.0.6045.105/ash/strings/ash_strings_or.xtb 2023-11-01 18:10:03.000000000 +0000 +++ chromium-119.0.6045.159/ash/strings/ash_strings_or.xtb 2023-11-14 22:56:17.000000000 +0000 @@ -335,7 +335,7 @@ ୱାଇ-ଫାଇକୁ ଟୋଗଲ କରନ୍ତୁ। ଆପଣଙ୍କ Chromebookରେ ସାଇନ୍ ଇନ୍ କରାଯାଇପାରିବ ନାହିଁ ଆପ୍ସ ଦେଖାନ୍ତୁ -ଚୀନୀୟ ଭାଷାରେ "ନମସ୍କାର" +ଚୀନୀୟ ଭାଷାରେ "ହେଲୋ" କାଷ୍ଟିଂକୁ ବର୍ତ୍ତମାନ ବିରତ କରାଯାଇଛି। ଆପଣ ଯେ କୌଣସି ସମୟରେ କାଷ୍ଟିଂ ପୁଣି ଆରମ୍ଭ କରିପାରିବେ କିମ୍ବା କାଷ୍ଟିଂକୁ ବନ୍ଦ କରିପାରିବେ। ପୃଷ୍ଠାରେ ଥିବା ସବୁକିଛି ଚୟନ କରନ୍ତୁ Chrome ମେନୁ ଦେଖାନ୍ତୁ diff -Nru chromium-119.0.6045.105/ash/system/accessibility/accessibility_detailed_view_pixeltest.cc chromium-119.0.6045.159/ash/system/accessibility/accessibility_detailed_view_pixeltest.cc --- chromium-119.0.6045.105/ash/system/accessibility/accessibility_detailed_view_pixeltest.cc 2023-11-01 18:10:04.000000000 +0000 +++ chromium-119.0.6045.159/ash/system/accessibility/accessibility_detailed_view_pixeltest.cc 2023-11-14 22:56:18.000000000 +0000 @@ -61,7 +61,7 @@ EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( "check_view", - /*revision_number=*/5, detailed_view_container)); + /*revision_number=*/8, detailed_view_container)); } } // namespace ash diff -Nru chromium-119.0.6045.105/ash/system/audio/audio_detailed_view_pixeltest.cc chromium-119.0.6045.159/ash/system/audio/audio_detailed_view_pixeltest.cc --- chromium-119.0.6045.105/ash/system/audio/audio_detailed_view_pixeltest.cc 2023-11-01 18:10:04.000000000 +0000 +++ chromium-119.0.6045.159/ash/system/audio/audio_detailed_view_pixeltest.cc 2023-11-14 22:56:18.000000000 +0000 @@ -58,7 +58,7 @@ EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( "qs_audio_detailed_view", - /*revision_number=*/8, detailed_view)); + /*revision_number=*/11, detailed_view)); } TEST_F(AudioDetailedViewPixelTest, ShowNoiseCancellationButton) { @@ -93,7 +93,7 @@ EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( "qs_audio_detailed_view", - /*revision_number=*/2, detailed_view)); + /*revision_number=*/5, detailed_view)); } } // namespace ash diff -Nru chromium-119.0.6045.105/ash/system/bluetooth/bluetooth_detailed_view_impl_pixeltest.cc chromium-119.0.6045.159/ash/system/bluetooth/bluetooth_detailed_view_impl_pixeltest.cc --- chromium-119.0.6045.105/ash/system/bluetooth/bluetooth_detailed_view_impl_pixeltest.cc 2023-11-01 18:10:04.000000000 +0000 +++ chromium-119.0.6045.159/ash/system/bluetooth/bluetooth_detailed_view_impl_pixeltest.cc 2023-11-14 22:56:18.000000000 +0000 @@ -95,7 +95,7 @@ // Compare pixels. EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( "check_view", - /*revision_number=*/5, detailed_view)); + /*revision_number=*/8, detailed_view)); } } // namespace diff -Nru chromium-119.0.6045.105/ash/system/bluetooth/bluetooth_detailed_view_legacy_pixeltest.cc chromium-119.0.6045.159/ash/system/bluetooth/bluetooth_detailed_view_legacy_pixeltest.cc --- chromium-119.0.6045.105/ash/system/bluetooth/bluetooth_detailed_view_legacy_pixeltest.cc 2023-11-01 18:10:04.000000000 +0000 +++ chromium-119.0.6045.159/ash/system/bluetooth/bluetooth_detailed_view_legacy_pixeltest.cc 2023-11-14 22:56:18.000000000 +0000 @@ -95,7 +95,7 @@ // Compare pixels. EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( "bluetooth_detailed_view_legacy", - /*revision_number=*/4, detailed_view_container)); + /*revision_number=*/5, detailed_view_container)); } } // namespace ash diff -Nru chromium-119.0.6045.105/ash/system/brightness/display_detailed_view_pixeltest.cc chromium-119.0.6045.159/ash/system/brightness/display_detailed_view_pixeltest.cc --- chromium-119.0.6045.105/ash/system/brightness/display_detailed_view_pixeltest.cc 2023-11-01 18:10:04.000000000 +0000 +++ chromium-119.0.6045.159/ash/system/brightness/display_detailed_view_pixeltest.cc 2023-11-14 22:56:18.000000000 +0000 @@ -51,7 +51,7 @@ EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( "qs_display_detailed_view", - /*revision_number=*/7, detailed_view)); + /*revision_number=*/10, detailed_view)); } } // namespace ash diff -Nru chromium-119.0.6045.105/ash/system/cast/cast_detailed_view_pixeltest.cc chromium-119.0.6045.159/ash/system/cast/cast_detailed_view_pixeltest.cc --- chromium-119.0.6045.105/ash/system/cast/cast_detailed_view_pixeltest.cc 2023-11-01 18:10:04.000000000 +0000 +++ chromium-119.0.6045.159/ash/system/cast/cast_detailed_view_pixeltest.cc 2023-11-14 22:56:18.000000000 +0000 @@ -68,7 +68,7 @@ ASSERT_TRUE(detailed_view); EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( "check_view", - /*revision_number=*/6, detailed_view)); + /*revision_number=*/9, detailed_view)); } } // namespace diff -Nru chromium-119.0.6045.105/ash/system/cast/cast_zero_state_view_pixeltest.cc chromium-119.0.6045.159/ash/system/cast/cast_zero_state_view_pixeltest.cc --- chromium-119.0.6045.105/ash/system/cast/cast_zero_state_view_pixeltest.cc 2023-11-01 18:10:04.000000000 +0000 +++ chromium-119.0.6045.159/ash/system/cast/cast_zero_state_view_pixeltest.cc 2023-11-14 22:56:18.000000000 +0000 @@ -53,7 +53,7 @@ EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( "cast_zero_state_view", - /*revision_number=*/8, detailed_view)); + /*revision_number=*/11, detailed_view)); } } // namespace ash diff -Nru chromium-119.0.6045.105/ash/system/ime/ime_detailed_view_pixeltest.cc chromium-119.0.6045.159/ash/system/ime/ime_detailed_view_pixeltest.cc --- chromium-119.0.6045.105/ash/system/ime/ime_detailed_view_pixeltest.cc 2023-11-01 18:10:04.000000000 +0000 +++ chromium-119.0.6045.159/ash/system/ime/ime_detailed_view_pixeltest.cc 2023-11-14 22:56:18.000000000 +0000 @@ -77,7 +77,7 @@ ASSERT_TRUE(detailed_view); EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( "check_view", - /*revision_number=*/7, detailed_view)); + /*revision_number=*/10, detailed_view)); } } // namespace diff -Nru chromium-119.0.6045.105/ash/system/locale/locale_detailed_view_pixeltest.cc chromium-119.0.6045.159/ash/system/locale/locale_detailed_view_pixeltest.cc --- chromium-119.0.6045.105/ash/system/locale/locale_detailed_view_pixeltest.cc 2023-11-01 18:10:04.000000000 +0000 +++ chromium-119.0.6045.159/ash/system/locale/locale_detailed_view_pixeltest.cc 2023-11-14 22:56:18.000000000 +0000 @@ -62,7 +62,7 @@ ASSERT_TRUE(detailed_view); EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( "check_view", - /*revision_number=*/6, detailed_view)); + /*revision_number=*/9, detailed_view)); } } // namespace diff -Nru chromium-119.0.6045.105/ash/system/network/network_detailed_network_view_pixeltest.cc chromium-119.0.6045.159/ash/system/network/network_detailed_network_view_pixeltest.cc --- chromium-119.0.6045.105/ash/system/network/network_detailed_network_view_pixeltest.cc 2023-11-01 18:10:04.000000000 +0000 +++ chromium-119.0.6045.159/ash/system/network/network_detailed_network_view_pixeltest.cc 2023-11-14 22:56:18.000000000 +0000 @@ -136,7 +136,7 @@ // Compare pixels. EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( "check_view", - /*revision_number=*/6, detailed_view)); + /*revision_number=*/9, detailed_view)); } } // namespace diff -Nru chromium-119.0.6045.105/ash/system/network/vpn_detailed_view_pixeltest.cc chromium-119.0.6045.159/ash/system/network/vpn_detailed_view_pixeltest.cc --- chromium-119.0.6045.105/ash/system/network/vpn_detailed_view_pixeltest.cc 2023-11-01 18:10:04.000000000 +0000 +++ chromium-119.0.6045.159/ash/system/network/vpn_detailed_view_pixeltest.cc 2023-11-14 22:56:18.000000000 +0000 @@ -129,7 +129,7 @@ // Compare pixels. EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( "check_view", - /*revision_number=*/6, vpn_detailed_view_)); + /*revision_number=*/9, vpn_detailed_view_)); } TEST_F(VpnDetailedViewPixelTest, MultipleVpns) { @@ -138,7 +138,7 @@ // Compare pixels. EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( "check_view", - /*revision_number=*/6, vpn_detailed_view_)); + /*revision_number=*/9, vpn_detailed_view_)); } } // namespace ash diff -Nru chromium-119.0.6045.105/ash/system/status_area_pixeltest.cc chromium-119.0.6045.159/ash/system/status_area_pixeltest.cc --- chromium-119.0.6045.105/ash/system/status_area_pixeltest.cc 2023-11-01 18:10:04.000000000 +0000 +++ chromium-119.0.6045.159/ash/system/status_area_pixeltest.cc 2023-11-14 22:56:18.000000000 +0000 @@ -136,7 +136,7 @@ system_tray->SetIsActive(IsActive()); EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( - "system_tray" + GetScreenshotNameSuffix(), /*revision_number=*/1, + "system_tray" + GetScreenshotNameSuffix(), /*revision_number=*/3, system_tray)); } @@ -149,7 +149,7 @@ date_tray->SetIsActive(IsActive()); EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( - "date_tray" + GetScreenshotNameSuffix(), /*revision_number=*/1, + "date_tray" + GetScreenshotNameSuffix(), /*revision_number=*/3, date_tray)); } diff -Nru chromium-119.0.6045.105/ash/system/time/calendar_view_pixeltest.cc chromium-119.0.6045.159/ash/system/time/calendar_view_pixeltest.cc --- chromium-119.0.6045.105/ash/system/time/calendar_view_pixeltest.cc 2023-11-01 18:10:04.000000000 +0000 +++ chromium-119.0.6045.159/ash/system/time/calendar_view_pixeltest.cc 2023-11-14 22:56:18.000000000 +0000 @@ -111,7 +111,7 @@ EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( "calendar_view", - /*revision_number=*/3, GetCalendarView())); + /*revision_number=*/6, GetCalendarView())); } TEST_F(CalendarViewPixelTest, EventList) { @@ -141,7 +141,7 @@ EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( "event_list_view", - /*revision_number=*/5, GetEventListView())); + /*revision_number=*/7, GetEventListView())); } } // namespace ash diff -Nru chromium-119.0.6045.105/ash/system/unified/quick_settings_footer_pixeltest.cc chromium-119.0.6045.159/ash/system/unified/quick_settings_footer_pixeltest.cc --- chromium-119.0.6045.105/ash/system/unified/quick_settings_footer_pixeltest.cc 2023-11-01 18:10:04.000000000 +0000 +++ chromium-119.0.6045.159/ash/system/unified/quick_settings_footer_pixeltest.cc 2023-11-14 22:56:18.000000000 +0000 @@ -71,7 +71,7 @@ InitPowerStatusAndOpenBubble(); EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( "with_no_extra_button", - /*revision_number=*/3, GetFooter())); + /*revision_number=*/5, GetFooter())); CloseBubble(); // Regression test for b/293484037: The settings button is missing when @@ -80,7 +80,7 @@ InitPowerStatusAndOpenBubble(); EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( "with_exit_button", - /*revision_number=*/3, GetFooter())); + /*revision_number=*/5, GetFooter())); CloseBubble(); } diff -Nru chromium-119.0.6045.105/ash/system/video_conference/bubble/bubble_view_pixeltest.cc chromium-119.0.6045.159/ash/system/video_conference/bubble/bubble_view_pixeltest.cc --- chromium-119.0.6045.105/ash/system/video_conference/bubble/bubble_view_pixeltest.cc 2023-11-01 18:10:04.000000000 +0000 +++ chromium-119.0.6045.159/ash/system/video_conference/bubble/bubble_view_pixeltest.cc 2023-11-14 22:56:18.000000000 +0000 @@ -191,7 +191,7 @@ EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( "video_conference_bubble_view_basic", - /*revision_number=*/2, bubble_view())); + /*revision_number=*/8, bubble_view())); } // Pixel test that tests toggled on/off and focused/not focused for the toggle @@ -215,14 +215,14 @@ EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( "video_conference_bubble_view_no_focus_not_toggled", - /*revision_number=*/5, toggle_effect_button_container)); + /*revision_number=*/11, toggle_effect_button_container)); // Toggle the first button, the UI should change. LeftClickOn(first_toggle_effect_button); ASSERT_EQ(1, office_bunny()->num_activations_for_testing()); EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( "video_conference_bubble_view_no_focus_toggled", - /*revision_number=*/5, toggle_effect_button_container)); + /*revision_number=*/7, toggle_effect_button_container)); // Un-toggle the button, then keyboard focus it. LeftClickOn(first_toggle_effect_button); @@ -234,7 +234,7 @@ EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( "video_conference_bubble_view_with_focus_not_toggled", - /*revision_number=*/5, toggle_effect_button_container)); + /*revision_number=*/11, toggle_effect_button_container)); // Re-toggle the button. event_generator->PressAndReleaseKey(ui::KeyboardCode::VKEY_RETURN); @@ -243,7 +243,7 @@ EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( "video_conference_bubble_view_with_focus_toggled", - /*revision_number=*/5, toggle_effect_button_container)); + /*revision_number=*/9, toggle_effect_button_container)); } // Pixel test that tests the expanded/collapsed state of the return to app panel @@ -310,7 +310,7 @@ EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( "video_conference_tray_linux_bubble_one_app", - /*revision_number=*/5, video_conference_tray()->GetBubbleView())); + /*revision_number=*/7, video_conference_tray()->GetBubbleView())); controller()->AddMediaApp(CreateFakeMediaApp( /*is_capturing_camera=*/true, /*is_capturing_microphone=*/true, @@ -325,7 +325,7 @@ EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( "video_conference_tray_linux_bubble_two_app", - /*revision_number=*/5, video_conference_tray()->GetBubbleView())); + /*revision_number=*/7, video_conference_tray()->GetBubbleView())); } TEST_F(BubbleViewPixelTest, OneToggleEffects) { diff -Nru chromium-119.0.6045.105/ash/system/video_conference/video_conference_tray.cc chromium-119.0.6045.159/ash/system/video_conference/video_conference_tray.cc --- chromium-119.0.6045.105/ash/system/video_conference/video_conference_tray.cc 2023-11-01 18:10:04.000000000 +0000 +++ chromium-119.0.6045.159/ash/system/video_conference/video_conference_tray.cc 2023-11-14 22:56:18.000000000 +0000 @@ -352,7 +352,7 @@ auto* controller = VideoConferenceTrayController::Get(); controller->MaybeRunNudgeRequest(); - controller->MaybeShowSpeakOnMuteOptInNudge(this); + controller->MaybeShowSpeakOnMuteOptInNudge(); } bool VideoConferenceTray::ShouldEnterPushedState(const ui::Event& event) { diff -Nru chromium-119.0.6045.105/ash/system/video_conference/video_conference_tray_controller.cc chromium-119.0.6045.159/ash/system/video_conference/video_conference_tray_controller.cc --- chromium-119.0.6045.105/ash/system/video_conference/video_conference_tray_controller.cc 2023-11-01 18:10:04.000000000 +0000 +++ chromium-119.0.6045.159/ash/system/video_conference/video_conference_tray_controller.cc 2023-11-14 22:56:18.000000000 +0000 @@ -109,10 +109,22 @@ } VideoConferenceTray* GetVcTrayInActiveWindow() { - return RootWindowController::ForWindow( - Shell::Get()->GetRootWindowForNewWindows()) - ->GetStatusAreaWidget() - ->video_conference_tray(); + auto* window = Shell::Get()->GetRootWindowForNewWindows(); + if (!window) { + return nullptr; + } + + auto* root_window_controller = RootWindowController::ForWindow(window); + if (!root_window_controller) { + return nullptr; + } + + auto* status_area_widget = root_window_controller->GetStatusAreaWidget(); + if (!status_area_widget) { + return nullptr; + } + + return status_area_widget->video_conference_tray(); } } // namespace @@ -182,13 +194,13 @@ } requested_nudge_data_ = std::move(nudge_data); - auto* tray = GetVcTrayInActiveWindow(); - if (!tray) { + auto* active_vc_tray = GetVcTrayInActiveWindow(); + if (!active_vc_tray) { return; } // Attempt showing the nudge immediately if tray is not animating. - if (!tray->layer()->GetAnimator()->is_animating()) { + if (!active_vc_tray->layer()->GetAnimator()->is_animating()) { MaybeRunNudgeRequest(); } } @@ -201,13 +213,15 @@ requested_nudge_data_.reset(); } -void VideoConferenceTrayController::MaybeShowSpeakOnMuteOptInNudge( - VideoConferenceTray* video_conference_tray) { +void VideoConferenceTrayController::MaybeShowSpeakOnMuteOptInNudge() { + auto* active_vc_tray = GetVcTrayInActiveWindow(); + if (!active_vc_tray) { + return; + } + // Only attempt to show the speak-on-mute opt-in nudge if the tray is visible // preferred in the active display, and microphone input is muted. - if (!video_conference_tray->visible_preferred() || - GetVcTrayInActiveWindow() != video_conference_tray || - !GetMicrophoneMuted()) { + if (!active_vc_tray->visible_preferred() || !GetMicrophoneMuted()) { return; } @@ -228,7 +242,7 @@ // Close all previously shown VC nudges, if any. CloseAllVcNudges(); - views::View* anchor_view = GetVcTrayInActiveWindow()->audio_icon(); + views::View* anchor_view = active_vc_tray->audio_icon(); if (!anchor_view->GetVisible()) { return; } @@ -517,7 +531,7 @@ speak_on_mute_nudge_shown_count_ = 0; // Attempt showing the speak-on-mute opt-in nudge when input is muted. - MaybeShowSpeakOnMuteOptInNudge(GetVcTrayInActiveWindow()); + MaybeShowSpeakOnMuteOptInNudge(); } else { auto* nudge_manager = AnchoredNudgeManager::Get(); @@ -552,6 +566,11 @@ return; } + auto* active_vc_tray = GetVcTrayInActiveWindow(); + if (!active_vc_tray) { + return; + } + const base::TimeTicks current_time = base::TimeTicks::Now(); // Only shows "Speak on mute" nudge if one of the following conditions meets: @@ -568,7 +587,7 @@ NudgeCatalogName::kVideoConferenceTraySpeakOnMuteDetected, l10n_util::GetStringUTF16( IDS_ASH_VIDEO_CONFERENCE_TOAST_SPEAK_ON_MUTE_DETECTED), - /*anchor_view=*/GetVcTrayInActiveWindow()->audio_icon()); + /*anchor_view=*/active_vc_tray->audio_icon()); // Opens the privacy hub settings page with the mute nudge focused when // clicking on the nudge. nudge_data.click_callback = base::BindRepeating([]() -> void { @@ -806,6 +825,11 @@ return; } + auto* active_vc_tray = GetVcTrayInActiveWindow(); + if (!active_vc_tray) { + return; + } + std::u16string device_name; int text_id; NudgeCatalogName catalog_name; @@ -826,7 +850,7 @@ catalog_name = NudgeCatalogName::kVideoConferenceTrayMicrophoneUseWhileSWDisabled; } - anchor_view = GetVcTrayInActiveWindow()->audio_icon(); + anchor_view = active_vc_tray->audio_icon(); break; case VideoConferenceTrayController::UsedWhileDisabledNudgeType::kCamera: device_name = @@ -842,7 +866,7 @@ catalog_name = NudgeCatalogName::kVideoConferenceTrayCameraUseWhileSWDisabled; } - anchor_view = GetVcTrayInActiveWindow()->camera_icon(); + anchor_view = active_vc_tray->camera_icon(); break; case VideoConferenceTrayController::UsedWhileDisabledNudgeType::kBoth: device_name = l10n_util::GetStringUTF16( @@ -851,7 +875,7 @@ nudge_id = kVideoConferenceTrayBothUseWhileDisabledNudgeId; catalog_name = NudgeCatalogName:: kVideoConferenceTrayCameraMicrophoneUseWhileDisabled; - anchor_view = GetVcTrayInActiveWindow()->audio_icon(); + anchor_view = active_vc_tray->audio_icon(); break; default: NOTREACHED(); diff -Nru chromium-119.0.6045.105/ash/system/video_conference/video_conference_tray_controller.h chromium-119.0.6045.159/ash/system/video_conference/video_conference_tray_controller.h --- chromium-119.0.6045.105/ash/system/video_conference/video_conference_tray_controller.h 2023-11-01 18:10:04.000000000 +0000 +++ chromium-119.0.6045.159/ash/system/video_conference/video_conference_tray_controller.h 2023-11-14 22:56:18.000000000 +0000 @@ -101,8 +101,7 @@ void MaybeRunNudgeRequest(); // Attempts showing the speak-on-mute opt-in nudge. - void MaybeShowSpeakOnMuteOptInNudge( - VideoConferenceTray* video_conference_tray); + void MaybeShowSpeakOnMuteOptInNudge(); // Callback used to update prefs whenever a user opts in or out of the // speak-on-mute feature. An `opt_in` value of false means the user opted out. diff -Nru chromium-119.0.6045.105/ash/webui/camera_app_ui/camera_app_ui.cc chromium-119.0.6045.159/ash/webui/camera_app_ui/camera_app_ui.cc --- chromium-119.0.6045.105/ash/webui/camera_app_ui/camera_app_ui.cc 2023-11-01 18:10:04.000000000 +0000 +++ chromium-119.0.6045.159/ash/webui/camera_app_ui/camera_app_ui.cc 2023-11-14 22:56:18.000000000 +0000 @@ -308,8 +308,12 @@ void CameraAppUI::BindInterface( mojo::PendingReceiver receiver) { views::Widget* widget = views::Widget::GetWidgetForNativeWindow(window()); - // Camera app is always dark. - widget->SetColorModeOverride(ui::ColorProviderKey::ColorMode::kDark); + if (widget) { + // Camera app is always dark. + widget->SetColorModeOverride(ui::ColorProviderKey::ColorMode::kDark); + } else { + LOG(ERROR) << "Can't find widget for CCA window."; + } color_provider_handler_ = std::make_unique( web_ui()->GetWebContents(), std::move(receiver)); diff -Nru chromium-119.0.6045.105/ash/wm/session_state_animator.h chromium-119.0.6045.159/ash/wm/session_state_animator.h --- chromium-119.0.6045.105/ash/wm/session_state_animator.h 2023-11-01 18:10:04.000000000 +0000 +++ chromium-119.0.6045.159/ash/wm/session_state_animator.h 2023-11-14 22:56:18.000000000 +0000 @@ -144,6 +144,8 @@ // called. virtual void OnAnimationAborted(); + bool sequence_ended() const { return sequence_ended_; } + private: // Destroys this and calls the callback if the contained animations // completed successfully. diff -Nru chromium-119.0.6045.105/ash/wm/session_state_animator_impl.cc chromium-119.0.6045.159/ash/wm/session_state_animator_impl.cc --- chromium-119.0.6045.105/ash/wm/session_state_animator_impl.cc 2023-11-01 18:10:04.000000000 +0000 +++ chromium-119.0.6045.159/ash/wm/session_state_animator_impl.cc 2023-11-14 22:56:18.000000000 +0000 @@ -352,20 +352,33 @@ animator_->StartAnimationInSequence(container_mask, type, speed, this); } + void EndSequence() override { + SessionStateAnimator::AnimationSequence::EndSequence(); + + // Mark animation completed if there are no pending ones at the end in + // case it is skipped during animation setup because the sequence is not + // marked as ended.. + if (sequences_completed_ == sequences_attached_) { + OnAnimationCompleted(); + } + } + private: ~AnimationSequence() override = default; // ui::LayerAnimationObserver: void OnLayerAnimationEnded(ui::LayerAnimationSequence* sequence) override { sequences_completed_++; - if (sequences_completed_ == sequences_attached_) + if (sequence_ended() && sequences_completed_ == sequences_attached_) { OnAnimationCompleted(); + } } void OnLayerAnimationAborted(ui::LayerAnimationSequence* sequence) override { sequences_completed_++; - if (sequences_completed_ == sequences_attached_) + if (sequence_ended() && sequences_completed_ == sequences_attached_) { OnAnimationAborted(); + } } void OnLayerAnimationScheduled( diff -Nru chromium-119.0.6045.105/ash/wm/session_state_animator_impl_unittest.cc chromium-119.0.6045.159/ash/wm/session_state_animator_impl_unittest.cc --- chromium-119.0.6045.105/ash/wm/session_state_animator_impl_unittest.cc 2023-11-01 18:10:04.000000000 +0000 +++ chromium-119.0.6045.159/ash/wm/session_state_animator_impl_unittest.cc 2023-11-14 22:56:18.000000000 +0000 @@ -10,6 +10,7 @@ #include "ash/wm/session_state_animator.h" #include "base/functional/bind.h" #include "base/run_loop.h" +#include "base/test/bind.h" #include "ui/aura/client/aura_constants.h" namespace ash { @@ -101,4 +102,46 @@ EXPECT_EQ(1, callback_count); } +// Tests that AnimationSequence is not released prematurely because +// LayerCopyAnimator aborts animations due to display size change. +TEST_F(SessionStateAnimatiorImplContainersTest, + AnimationSequenceAndLayerCopyAnimator) { + UpdateDisplay("300x200,500x400"); + base::RunLoop().RunUntilIdle(); + + // Create windows in containers of all displays so that the containers will + // be animated. + auto window_1 = CreateTestWindow(gfx::Rect(0, 0, 30, 20)); + auto window_2 = CreateTestWindow(gfx::Rect(600, 0, 30, 20)); + + SessionStateAnimatorImpl animator; + + // Creates LayerCopyAnimator on containers. + animator.StartAnimation(SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, + SessionStateAnimator::ANIMATION_COPY_LAYER, + SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE); + + // Simulate display changes that cause LayerCopyAnimators of first part of + // containers list to fail. + UpdateDisplay("600x500,500x400"); + + base::RunLoop animation_wait_loop; + auto animation_ended = [&](bool) { animation_wait_loop.Quit(); }; + + // Start a ANIMATION_DROP sequence. + SessionStateAnimator::AnimationSequence* animation_sequence = + animator.BeginAnimationSequence( + base::BindLambdaForTesting(animation_ended)); + animation_sequence->StartAnimation( + SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, + SessionStateAnimator::ANIMATION_DROP, + SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS); + animation_sequence->EndSequence(); + + // Wait for `animation_ended` to be called. + animation_wait_loop.Run(); + + // No crash or use-after-free should happen. +} + } // namespace ash diff -Nru chromium-119.0.6045.105/ash/wm/wm_pixel_diff_test.cc chromium-119.0.6045.159/ash/wm/wm_pixel_diff_test.cc --- chromium-119.0.6045.105/ash/wm/wm_pixel_diff_test.cc 2023-11-01 18:10:04.000000000 +0000 +++ chromium-119.0.6045.159/ash/wm/wm_pixel_diff_test.cc 2023-11-14 22:56:18.000000000 +0000 @@ -160,7 +160,7 @@ EXPECT_TRUE(GetPixelDiffer()->CompareUiComponentsOnPrimaryScreen( "window_cycle_basic", - /*revision_number=*/8, widget)); + /*revision_number=*/14, widget)); } } // namespace ash diff -Nru chromium-119.0.6045.105/base/enterprise_util_mac.mm chromium-119.0.6045.159/base/enterprise_util_mac.mm --- chromium-119.0.6045.105/base/enterprise_util_mac.mm 2023-11-01 18:10:05.000000000 +0000 +++ chromium-119.0.6045.159/base/enterprise_util_mac.mm 2023-11-14 22:56:18.000000000 +0000 @@ -112,7 +112,8 @@ DeviceUserDomainJoinState AreDeviceAndUserJoinedToDomain() { static DeviceUserDomainJoinState state = [] { - DeviceUserDomainJoinState state{false, false}; + DeviceUserDomainJoinState state{.device_joined = false, + .user_joined = false}; @autoreleasepool { ODSession* session = [ODSession defaultSession]; @@ -121,27 +122,23 @@ return state; } + // Machines that are domain-joined have nodes under "/LDAPv3" or "/Active + // Directory". See https://stackoverflow.com/questions/32470557/ and + // https://stackoverflow.com/questions/69093499/, respectively, for + // examples. NSError* error = nil; - - NSArray* all_node_names = - [session nodeNamesAndReturnError:&error]; - if (!all_node_names) { + NSArray* node_names = [session nodeNamesAndReturnError:&error]; + if (!node_names) { DLOG(WARNING) << "ODSession failed to give node names: " << error.localizedDescription.UTF8String; return state; } - NSUInteger num_nodes = all_node_names.count; - if (num_nodes < 3) { - DLOG(WARNING) << "ODSession returned too few node names: " - << all_node_names.description.UTF8String; - return state; - } - - if (num_nodes > 3) { - // Non-enterprise machines have:"/Search", "/Search/Contacts", - // "/Local/Default". Everything else would be enterprise management. - state.device_joined = true; + for (NSString* node_name in node_names) { + if ([node_name hasPrefix:@"/LDAPv3"] || + [node_name hasPrefix:@"/Active Directory"]) { + state.device_joined = true; + } } ODNode* node = [ODNode nodeWithSession:session diff -Nru chromium-119.0.6045.105/build/util/LASTCHANGE chromium-119.0.6045.159/build/util/LASTCHANGE --- chromium-119.0.6045.105/build/util/LASTCHANGE 2023-11-01 18:15:55.000000000 +0000 +++ chromium-119.0.6045.159/build/util/LASTCHANGE 2023-11-14 22:59:27.000000000 +0000 @@ -1,2 +1,2 @@ -LASTCHANGE=38c72552c5e15ba9b3117c0967a0fd105072d7c6-refs/branch-heads/6045@{#1103} +LASTCHANGE=eaa767197fa7dd412133d1b84f7eb60da43409c9-refs/branch-heads/6045@{#1327} LASTCHANGE_YEAR=2023 diff -Nru chromium-119.0.6045.105/build/util/LASTCHANGE.committime chromium-119.0.6045.159/build/util/LASTCHANGE.committime --- chromium-119.0.6045.105/build/util/LASTCHANGE.committime 2023-11-01 18:15:55.000000000 +0000 +++ chromium-119.0.6045.159/build/util/LASTCHANGE.committime 2023-11-14 22:59:27.000000000 +0000 @@ -1 +1 @@ -1698683262 \ No newline at end of file +1699894977 \ No newline at end of file diff -Nru chromium-119.0.6045.105/chrome/LACROS_QA_QUALIFIED_VERSION chromium-119.0.6045.159/chrome/LACROS_QA_QUALIFIED_VERSION --- chromium-119.0.6045.105/chrome/LACROS_QA_QUALIFIED_VERSION 2023-11-01 18:10:05.000000000 +0000 +++ chromium-119.0.6045.159/chrome/LACROS_QA_QUALIFIED_VERSION 2023-11-14 22:56:19.000000000 +0000 @@ -1 +1 @@ -119.0.6045.59 \ No newline at end of file +119.0.6045.123 \ No newline at end of file diff -Nru chromium-119.0.6045.105/chrome/VERSION chromium-119.0.6045.159/chrome/VERSION --- chromium-119.0.6045.105/chrome/VERSION 2023-11-01 18:10:05.000000000 +0000 +++ chromium-119.0.6045.159/chrome/VERSION 2023-11-14 22:56:19.000000000 +0000 @@ -1,4 +1,4 @@ MAJOR=119 MINOR=0 BUILD=6045 -PATCH=105 +PATCH=159 diff -Nru chromium-119.0.6045.105/chrome/app/resources/chromium_strings_as.xtb chromium-119.0.6045.159/chrome/app/resources/chromium_strings_as.xtb --- chromium-119.0.6045.105/chrome/app/resources/chromium_strings_as.xtb 2023-11-01 18:10:06.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/chromium_strings_as.xtb 2023-11-14 22:56:20.000000000 +0000 @@ -193,7 +193,7 @@ যদি আপুনি Chromium ব্যৱহাৰ কৰাৰ ৰিপ’ৰ্টও শ্বেয়াৰ কৰে, সেই ৰিপ’ৰ্টত আপুনি চোৱা URLসমূহ অন্তৰ্ভুক্ত হয় অন্য কোনো কম্পিউটাৰত () অন্য Chromium প্ৰক্ৰিয়াৰ () দ্বাৰা প্ৰ'ফাইলটো ব্যৱহাৰ হৈ থকা যেন লাগিছে। প্ৰ'ফাইলটো ক্ষতিগ্ৰস্থ নহ'বলৈ Chromiumএ ইয়াক অৱৰোধ কৰিছে। যদি অন্য কোনো প্ৰক্ৰিয়াই এই প্ৰ'ফাইলটো ব্যৱহাৰ কৰি থকা নাই বুলি আপুনি নিশ্চিত হয় তেন্তে আপুনি প্ৰ'ফাইলটো আনলক কৰি Chromium পুনৰ লঞ্চ কৰিব পাৰে। ইনষ্টল কৰাটো বাতিল কৰক -অন্য কোনো লোকে আগতে এই কম্পিউটাৰটোৰ Chromiumত হিচাপে ছাইন ইন কৰিছিল। আপোনাৰ তথ্যখিনি পৃথক কৰি ৰাখিবলৈ অনুগ্ৰহ কৰি Chromiumত এজন নতুন ব্যৱহাৰকাৰী সৃষ্টি কৰক। +অন্য কোনো লোকে আগতে এই কম্পিউটাৰটোৰ Chromiumত হিচাপে ছাইন ইন কৰিছিল। আপোনাৰ তথ্যখিনি পৃথক কৰি ৰাখিবলৈ অনুগ্ৰহ কৰি Chromiumত এগৰাকী নতুন ব্যৱহাৰকাৰী সৃষ্টি কৰক। যিয়েই কি নহ’লেও Chromium বন্ধ কৰিবনে? Chromiumৰ এটা বিশেষ সুৰক্ষা আপডে’ট এইমাত্ৰ প্ৰয়োগ কৰা হৈছে। এতিয়াই ৰিষ্টাৰ্ট কৰক আৰু আমি আপোনাৰ টেববোৰ পুনঃস্থাপন কৰিম। আপুনি যিকোনো সময়তে Chromiumৰ ছেটিঙত নিজৰ সিদ্ধান্ত সলনি কৰিব পাৰে। ট্ৰায়েলসমূহ বৰ্তমান বিজ্ঞাপনবোৰ দেখুওৱাৰ সমান্তৰালকৈ চলে, সেয়েহে আপুনি লগে লগে সালসলনিসমূহ দেখা নাপাব। diff -Nru chromium-119.0.6045.105/chrome/app/resources/chromium_strings_eu.xtb chromium-119.0.6045.159/chrome/app/resources/chromium_strings_eu.xtb --- chromium-119.0.6045.105/chrome/app/resources/chromium_strings_eu.xtb 2023-11-01 18:10:06.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/chromium_strings_eu.xtb 2023-11-14 22:56:20.000000000 +0000 @@ -314,7 +314,7 @@ "" elementuak malwarea duela hauteman du Chromium-ek Chromium eguneratu da baina ez duzu erabili 30 egunetan gutxienez. Chromium-ek Bluetootha erabiltzeko baimena behar du parekatzen jarraitzeko. -Probak abian diren bitartean, iragarkien neurketari esker, bisitatzen dituzun webguneek Chromium-i informazioa eska diezaiokete. Informazio horren bidez, webguneek beren iragarkien errendimendua neur dezakete. Webguneen artean ahalik eta informazio gutxien transferituta mugatzen du iragarkien neurketak webguneen arteko jarraipena. +Probak abian diren bitartean, iragarkien neurketari esker, bisitatzen dituzun webguneek Chromium-i informazioa eska diezaiokete. Informazio horren bidez, webguneek beren iragarkien errendimendua neur dezakete. Webguneen artean ahalik eta informazio gutxien transferituta mugatzen du iragarkien neurketak webgunearteko jarraipena. Beranduago, bisitatzen duzun webgune batek zure interesak ikusteko eska diezaioke Chromium-i, agertzen zaizkizun iragarkiak pertsonalizatze aldera. Chromium-ek hiru interes parteka ditzake gehienez. Ireki esteka Chromium-eko &ezkutuko moduko leiho batean Seguruak ez diren pasahitzak erraz asmatzen dira. Utzi Chromium-i pasahitz konplexuak sortzen eta gogoratzen. @@ -332,7 +332,7 @@ Erabili Chromium mezu, dokumentu edo beste aplikazioetako estekak sakatzean Ataza-kudeatzailea - Chromium Chromium-ek estimatu dizkizun interesak -Iragarkien neurketari esker, bisitatzen dituzun webguneek Chromium-i informazioa eska diezaiokete. Informazio horren bidez, webguneek beren iragarkien errendimendua neur dezakete. Webguneen artean ahalik eta informazio gutxien transferituta mugatzen du iragarkien neurketak webguneen arteko jarraipena. +Iragarkien neurketari esker, bisitatzen dituzun webguneek Chromium-i informazioa eska diezaiokete. Informazio horren bidez, webguneek beren iragarkien errendimendua neur dezakete. Webguneen artean ahalik eta informazio gutxien transferituta mugatzen du iragarkien neurketak webgunearteko jarraipena. Chromium eguneratzen Hobespenen fitxategia hondatuta dago edo ez da baliozkoa. diff -Nru chromium-119.0.6045.105/chrome/app/resources/chromium_strings_fa.xtb chromium-119.0.6045.159/chrome/app/resources/chromium_strings_fa.xtb --- chromium-119.0.6045.105/chrome/app/resources/chromium_strings_fa.xtb 2023-11-01 18:10:06.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/chromium_strings_fa.xtb 2023-11-14 22:56:20.000000000 +0000 @@ -55,7 +55,7 @@ ‏‫Chromium این بارگیری را مسدود کرد زیرا این فایل فریب‌دهنده است و ممکن است تغییرات غیرمنتظره‌ای در دستگاهتان ایجاد کند ‏اطلاعات مربوط به اینکه Chromium چگونه گواهینامه‌های ریشه‌اش را مدیریت می‌کند {COUNT,plural, =1{‏اگر به‌مدت یک دقیقه از Chromium استفاده نشود، سازمانتان داده‌های مرور را به‌طور خودکار حذف می‌کند. این داده‌ها می‌تواند شامل سابقه، تکمیل خودکار، و بارگیری‌ها شود. برگه‌هایتان باز خواهد ماند.}one{‏اگر به‌مدت # دقیقه از Chromium استفاده نشود، سازمانتان داده‌های مرور را به‌طور خودکار حذف می‌کند. این داده‌ها می‌تواند شامل سابقه، تکمیل خودکار، و بارگیری‌ها شود. برگه‌هایتان باز خواهد ماند.}other{‏اگر به‌مدت # دقیقه از Chromium استفاده نشود، سازمانتان داده‌های مرور را به‌طور خودکار حذف می‌کند. این داده‌ها می‌تواند شامل سابقه، تکمیل خودکار، و بارگیری‌ها شود. برگه‌هایتان باز خواهد ماند.}} -‏‫Chromium این بارگیری را مسدود کرد زیرا این سایت از اتصال امن استفاده نمی‌کند و ممکن است فایل دستکاری شده باشد +‏‫Chromium این بارگیری را مسدود کرد زیرا این سایت از اتصال ایمن استفاده نمی‌کند و ممکن است فایل دستکاری شده باشد ‏سفارشی کردن Chromium نصب کامل نیست. مطمئنید می‌خواهید آن را لغو کنید؟ ‏Chromium - ورود به سیستم شبکه - diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_ar.xtb chromium-119.0.6045.159/chrome/app/resources/generated_resources_ar.xtb --- chromium-119.0.6045.105/chrome/app/resources/generated_resources_ar.xtb 2023-11-01 18:10:07.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/generated_resources_ar.xtb 2023-11-14 22:56:21.000000000 +0000 @@ -1021,7 +1021,8 @@ لن تعمل الميزات التي تحتاج إلى استخدام الصوت. ‏يمكنك اللعب باستخدام لوحة مفاتيح Chromebook. ويمكنك تخصيص مفاتيح لتنفيذ إجراءات محدَّدة. ‏مفتاح البحث + O، ثم W -السكون عند غلق الغلاف +السكون عند غلق الغطاء + الصفحة لا تستجيب. يمكنك الانتظار أو الخروج منها. اللغة التي تريد الترجمة إليها إعادة تدريب diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_as.xtb chromium-119.0.6045.159/chrome/app/resources/generated_resources_as.xtb --- chromium-119.0.6045.105/chrome/app/resources/generated_resources_as.xtb 2023-11-01 18:10:07.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/generated_resources_as.xtb 2023-11-14 22:56:21.000000000 +0000 @@ -1465,7 +1465,7 @@ {COUNT,plural, =0{কুকিসমূহ অৱৰোধ কৰা হৈছে}=1{কুকিসমূহক অৱৰোধ কৰা হৈছে, ১ টা ব্যতিক্ৰম}one{কুকিসমূহ অৱৰোধ কৰা হৈছে, {COUNT} টা ব্যতিক্ৰম}other{কুকিসমূহ অৱৰোধ কৰা হৈছে, {COUNT} টা ব্যতিক্ৰম}} আকাৰ সলনি কৰক বেলেগ এটা ফাইল বাছনি কৰক -{1,plural, =1{এজন ব্যৱহাৰকাৰীয়ে হিচাপে মূল্যাংকন কৰিছে।}one{# জন ব্যৱহাৰকাৰীয়ে হিচাপে মূল্যাংকন কৰিছে।}other{# জন ব্যৱহাৰকাৰীয়ে হিচাপে মূল্যাংকন কৰিছে।}} +{1,plural, =1{এগৰাকী ব্যৱহাৰকাৰীয়ে হিচাপে মূল্যাংকন কৰিছে।}one{# জন ব্যৱহাৰকাৰীয়ে হিচাপে মূল্যাংকন কৰিছে।}other{# জন ব্যৱহাৰকাৰীয়ে হিচাপে মূল্যাংকন কৰিছে।}} আপোনাৰ প্ৰশাসকে ছিংক অক্ষম কৰিছে। কম শক্তিৰ চ্চাৰ্জাৰ সঘনতাৰ স্থিতি দখলৰ শতকৰা হাৰ @@ -2225,7 +2225,7 @@ সুৰক্ষা সম্পৰ্কীয় চাবিৰ অনুৰোধ আপগ্ৰে’ড কৰা এই কাৰ্যটোৱে আপোনাৰ Chromebook ৰিছেট কৰে আৰু ব্যৱহাৰকাৰীৰ বৰ্তমানৰ ডেটা আঁতৰ কৰে। ফাইল ছিংক কৰাৰ সুবিধাটো অন হৈ থকিলে ষ্ট’ৰেজৰ স্থান খালী কৰিব নোৱাৰি -এই ছেটিং কোনো এজন অভিভাৱকে পৰিচালনা কৰে। +এই ছেটিং কোনো এগৰাকী অভিভাৱকে পৰিচালনা কৰে। কাৰ্ছৰৰ সৰু-সুৰা চলাচল অগ্ৰাহ্য কৰক ৰাতিৰ পোহৰ এণ্টি-ভাইৰাছ ছফ্টৱেৰে এটা ভাইৰাছ ধৰা পেলাইছে। diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_cs.xtb chromium-119.0.6045.159/chrome/app/resources/generated_resources_cs.xtb --- chromium-119.0.6045.105/chrome/app/resources/generated_resources_cs.xtb 2023-11-01 18:10:07.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/generated_resources_cs.xtb 2023-11-14 22:56:21.000000000 +0000 @@ -1257,7 +1257,7 @@ Rozšířená nastavení Stejný zvuk na všech reproduktorech Chrome heslo uložil do tohoto zařízení, ale můžete ho místo toho uložit do svého účtu Google. Když budete přihlášeni, budou pak k dispozici i všechna hesla a přístupové klíče ve vašem účtu Google. -Odebrat... +Odstranit Přihlášení do zabezpečeného zařízení Velká úspora Chcete-li odemknout své zařízení , umístěte telefon blíže k němu. @@ -5048,7 +5048,7 @@ Zapnout Wi-Fi Příště tuto zprávu nezobrazovat E-mailový certifikát -Přidat rozšíření +Přidat Rozšíření jsou na tomto webu blokována Virtuální počítače se nepodařilo zkontrolovat Aplikace se stahují @@ -7588,7 +7588,7 @@ Skupina bez názvu – Zadejte název okna  položka -znalost vaší e-mailové adresy +Znát vaši e-mailovou adresu Teď do seznamu přidejte aktuální kartu Hesla nejsou shodná Chcete-li se ke svému účtu Google přihlašovat pomocí funkce Smart Lock, přejděte na Nastavení > Připojená zařízení > Váš telefon > Smart Lock. diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_es-419.xtb chromium-119.0.6045.159/chrome/app/resources/generated_resources_es-419.xtb --- chromium-119.0.6045.105/chrome/app/resources/generated_resources_es-419.xtb 2023-11-01 18:10:07.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/generated_resources_es-419.xtb 2023-11-14 22:56:21.000000000 +0000 @@ -4900,7 +4900,7 @@ Foro de la versión Beta El sitio puede usar la conexión Bluetooth Acción de inactividad mientras se usa la batería -No se puede habilitar +No se puede habilitar la Activar la predicción de palabra siguiente Esta acción borrará permanentemente los datos de navegación de este dispositivo. Buena (DVD) @@ -5848,7 +5848,7 @@ Selector de emojis Accede para usar las contraseñas Apps y servicios de Google Play -Se permiten cookies de terceros +Se permiten las cookies de terceros Tu administrador inhabilitó la opción Agregar conexión Hubo un error cuando se intentaba recuperar la política del servidor. Roaming con red móvil @@ -6958,7 +6958,7 @@ Utiliza las teclas de flecha hacia la izquierda y derecha para navegar. Elige si quieres sincronizar el historial Todavía no tiene una calificación de los usuarios. -Al parecer, ya configuraste Asistente de Google en otro dispositivo. Activa el contexto de la pantalla en este dispositivo para sacarle incluso más provecho a Asistente. +Al parecer, ya configuraste Asistente de Google en otro dispositivo. Activa el contexto en pantalla en este dispositivo para sacarle incluso más provecho a Asistente. Más herramientas ya administra . Para usar los controles parentales con otra Cuenta de Google, sal de tu cuenta después de finalizar la configuración y, luego, selecciona "Agregar persona" en la pantalla de acceso. Restablecer eSIM @@ -8454,7 +8454,7 @@ Estado Cerrar la sugerencia Búsqueda y Asistente -Al parecer, ya configuró Asistente de Google en otro dispositivo. puede activar el contexto de la pantalla de este dispositivo para sacarle incluso más provecho a Asistente. +Al parecer, ya configuró Asistente de Google en otro dispositivo. puede activar el contexto en pantalla de este dispositivo para sacarle incluso más provecho a Asistente. Permitir siempre que acceda a la cámara Se bloquearon las ventanas emergentes en esta página. El formato de tu entrada debe ser $dirección SM-DP+$ID para coincidencias opcional diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_eu.xtb chromium-119.0.6045.159/chrome/app/resources/generated_resources_eu.xtb --- chromium-119.0.6045.105/chrome/app/resources/generated_resources_eu.xtb 2023-11-01 18:10:07.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/generated_resources_eu.xtb 2023-11-14 22:56:21.000000000 +0000 @@ -401,7 +401,7 @@ Gordetako pasahitzak hemen agertuko dira. Pasahitzak zerbitzura inportatzeko gailu honetan, hautatu CSV fitxategi bat. Hauek kendu dira: , , Proxy-konfigurazio automatikoa -Maiuskula-blokeoa +Maiuskulen blokeoa Webgune guztietan amaituko da saioa, baita irekita dauden fitxetan ere Laster-markak, historia eta bestelako ezarpenak Google-ko kontuarekin sinkronizatuko dira. Ezabatu taldea @@ -873,7 +873,7 @@ Ezin da gehitu geratzen dira Ezin izan da aztertu. Baliteke fitxategi hau birusa edo malwarea izatea. -Garatzaileen tresnak +Garatzaileentzako tresnak Ziur irten nahi duzula? HTTParen errore bat bidali du kudeaketa-zerbitzuak. Testua ahots bihurtzeko eginbidearen ahots-ezarpenak @@ -1447,7 +1447,7 @@ Ikusi "Azkenaldiko aipagarriak" eta beste oroitzapen batzuk hemen Argazkiaren egilea: Ez da sartu SIM txartelik -Webguneak Bluetooth bidezko gailuetara konektatu ohi dira kontsumo txikiko kokapen-adierazle bat, osasunaren edo fitnessaren jarraipena egiteko gailu bat, edo bonbilla adimendun bat konfiguratzeko edo sinkronizatzeko, eta antzeko eginbideak eskaintzeko +Webguneak Bluetooth bidezko gailuetara konektatu ohi dira kontsumo txikiko kokapen-adierazle bat, osasunaren edo fitnessaren jarraipen-gailu bat, edo bonbilla adimendun bat konfiguratzeko edo sinkronizatzeko, eta antzeko eginbideak eskaintzeko Hurrengo diapositiba Arakatze segurua aktibatuta dago, eta webgune eta deskarga kaltegarrietatik babesten zaitu Jarduerak eta interakzioak @@ -3613,7 +3613,7 @@ Mikrofonoaren ezarpenean egindako aldaketa aplikatzeko, itxi egin behar da Linux. Aurrera egiteko, itxi Linux. Ezin izan da gehitu "" aplikazioa, "" aplikazioarekin gatazkan dagoelako. Ezin izan da leheneratu Linux-en babeskopia -Gailu honi eta hura erabiltzeko moduari buruzko informazio orokorra da hau (adibidez, bateria-maila, sistemako eta aplikazioetako jarduerak, eta erroreak). Android hobetzeko erabiliko dira datuok. Gainera, multzokatutako datu batzuk oso baliagarriak dira Google-ren aplikazioak hobetzeko eta bazkideei (adibidez, Android-en garatzaileei) euren aplikazio eta produktuak hobetzen laguntzeko. +Gailu honi eta hura erabiltzeko moduari buruzko informazio orokorra da hau (adibidez, bateria-maila, sistemako eta aplikazioetako jarduerak, eta erroreak). Android hobetzeko erabiliko dira datuok. Gainera, datu bateratu batzuk oso baliagarriak dira Google-ren aplikazioak hobetzeko eta bazkideei (adibidez, Android-en garatzaileei) euren aplikazio eta produktuak hobetzen laguntzeko. Dagozkion guztiak hauta ditzakezu. gailua konfiguratzen amaitzean, Ezarpenak atalean aurkituko dituzu aukera hauek. Ezin izan da kargatu luzapena orriaren jarraipena @@ -5718,7 +5718,7 @@ Atzera tekla Erabiltzaile-izena gorde nahi duzu? Abioan -Gailuari eta hura erabiltzeko moduari buruzko informazio orokorra da (adibidez, bateria-maila, sistemako eta aplikazioetako jarduerak, eta erroreak). Android hobetzeko erabiliko dira datuok. Gainera, multzokatutako datu batzuk oso baliagarriak dira Google-ren aplikazioak hobetzeko eta bazkideei (adibidez, Android garatzaileei) euren aplikazio eta produktuak hobetzen laguntzeko. +Gailuari eta hura erabiltzeko moduari buruzko informazio orokorra da (adibidez, bateria-maila, sistemako eta aplikazioetako jarduerak, eta erroreak). Android hobetzeko erabiliko dira datuok. Gainera, datu bateratu batzuk oso baliagarriak dira Google-ren aplikazioak hobetzeko eta bazkideei (adibidez, Android garatzaileei) euren aplikazio eta produktuak hobetzen laguntzeko. Eginbidea desaktibatuta ere, gailuak beharrezko informazioa bidaltzen jarraitu ahal izango du funtsezko zerbitzuak jasotzeko, hala nola sistemaren eguneratzeak eta segurtasun-neurriak. Jabeak kontrolatu nahi badu, atal honetara joan beharko du: Ezarpenak > Aurreratuak > Bidali Google-ri diagnostiko- eta erabilera-datuak automatikoki. Sareko eta aplikazioetako jarduera gehigarriak ezarpena aktibatuta badago, baliteke datu horiek Google-ko kontuan gordetzea. Zure datuak ikusi edo ezabatzeko eta kontuaren ezarpenak aldatzeko, joan account.google.com helbidera. @@ -5848,7 +5848,7 @@ Oraingo PPD fitxategia: Emoji-hautatzailea Hasi saioa pasahitzak erabiltzeko -Google Play aplikazioak eta zerbitzuak +Google Play-ko aplikazioak eta zerbitzuak Hirugarrenen cookieak erabil daitezke Administratzaileak desgaitu du konexioak gehitzeko aukera Errore bat gertatu da gidalerroa eskuratzean zerbitzaritik. @@ -6555,7 +6555,7 @@ gailura konektatzen Hautatu ziurtagiria zeure burua ostalarian egiaztatzeko Ireki aplikazioan -Audioa desaktibatuta edukitzearen abisua +Audioa desaktibatuaren abisua Webguneek jakinarazpenak bidaltzea eska dezakete Luzapena ainguratuta dago. Aukera gehiago ikusteko, hautatu hau Bidali sistemari eta aplikazioei buruzko informazioa eta estatistikak @@ -7179,7 +7179,7 @@ Segurtasun-giltza blokeatuta dago PINa gehiegitan idatzi delako oker. Segurtasun-giltza berrezarri beharko duzu. Erakutsi irakurketa-zerrenda Inportazioa amaitzeko, itxi Firefox-eko leiho guztiak. -maiuskulak aktibatuta daude +maiuskulen blokeoa aktibatuta dago plugina Tresna-barraren botoi ezkutuak Ezarpen orokorrak @@ -7598,7 +7598,7 @@ Gehitu interes edo webgune bat harekin erlazionatutako iragarkiak zuretzat erabilgarriak izango direla uste baduzu; Esleitu erabilerraztasun-etengailu bat "Aurrekoa" ekintzari Ez dira gordetzen erakundearen gidalerroak -Privacy Sandbox-aren probei esker, berdin arakatu ahalko dituzu webguneak datu gutxiago erabilita. Pribatutasun handiagoa izango duzula eta webguneen arteko jarraipena mugatuko dela esan nahi du horrek. Proba berriak gehituko ditugu kaleratzeko prest egon ahala. +Privacy Sandbox-aren probei esker, berdin arakatu ahalko dituzu webguneak datu gutxiago erabilita. Pribatutasun handiagoa izango duzula eta webgunearteko jarraipena mugatuko dela esan nahi du horrek. Proba berriak gehituko ditugu kaleratzeko prest egon ahala. Ezabatu Crostini Ziurtatu inprimagailua Chromebook-aren wifi-sare berera konektatuta dagoela, edo erabili USB kable bat. Lortu bateragarritasunari buruzko informazio gehiago Deskargen historia @@ -8189,7 +8189,7 @@ Kargatzen. Webguneek ordainketa-kudeatzaileak instalatu ohi dituzte ordainketa erraza eta antzeko erosketa-eginbideak eskaintzeko Aldatu grabatutako fitxara -maiuskulak desaktibatuta daude +maiuskulen blokeoa desaktibatuta dago Ikusi webguneetan gordetako baimenak eta datuak Fitxa berria ezkerrean Freskatze-abiadura @@ -9027,7 +9027,7 @@ {COUNT,plural, =1{Berriro exekutatu ondoren, ezkutuko moduko leihoa ez da irekiko}other{Berriro exekutatu ondoren, ezkutuko moduko {COUNT} leihoak ez dira irekiko}} Idazketa-metodo guztiak Gehitu inprimagailu bat -Gailuari eta hura erabiltzeko moduari buruzko informazio orokorra da (adibidez, bateria-maila, sistemako eta aplikazioetako jarduerak, eta erroreak). Android hobetzeko erabiliko dira datuok. Gainera, multzokatutako datu batzuk oso baliagarriak dira Google-ren aplikazioak hobetzeko eta bazkideei (adibidez, Android garatzaileei) euren aplikazio eta produktuak hobetzen laguntzeko. +Gailuari eta hura erabiltzeko moduari buruzko informazio orokorra da (adibidez, bateria-maila, sistemako eta aplikazioetako jarduerak, eta erroreak). Android hobetzeko erabiliko dira datuok. Gainera, datu bateratu batzuk oso baliagarriak dira Google-ren aplikazioak hobetzeko eta bazkideei (adibidez, Android garatzaileei) euren aplikazio eta produktuak hobetzen laguntzeko. Eginbidea desaktibatuta ere, gailuak beharrezko informazioa bidaltzen jarraitu ahal izango du funtsezko zerbitzuak jasotzeko, hala nola sistemaren eguneratzeak eta segurtasun-neurriak. Jabeak kontrolatu nahi badu, atal honetara joan beharko du: Ezarpenak > Aurreratuak > Bidali Google-ri diagnostiko- eta erabilera-datuak automatikoki. Sareko eta aplikazioetako jarduera gehigarriak ezarpena aktibatuta badago haurrarentzat, baliteke datu horiek haren Google-ko kontuan gordetzea. Lortu informazio gehiago ezarpenei eta haiek doitzeko moduari buruz families.google.com helbidean. @@ -9521,7 +9521,7 @@ Iragarkiak arakatzailean oinarrituta pertsonalizatzeari buruz Hobe daitezkeen pasahitzak dituzu pantaila osoan dago eta saguaren kurtsorea desgaitu du. -Webguneei spama eta iruzurrak saihesteko aukera gaitu bitartean webguneen arteko jarraipenak mugatzeko moduak arakatzen ari gara. +Webguneei spama eta iruzurrak saihesteko aukera gaitu bitartean webgunearteko jarraipenak mugatzeko moduak arakatzen ari gara. Baliteke gailuak behar bezala funtzionatzeari uztea eta segurtasun- eta errendimendu-arazoak izatea. Beroagoa Hona bizkor itzuli ahal izateko, instalatu instalatzeko botoia sakatuta @@ -9624,7 +9624,7 @@ ChromeOS Flex eguneratu egin behar da Erabilerraztasun-osagarria konfiguratzeko gida Instalazioak huts egin du, garbitzen -Gailuari eta hura erabiltzeko moduari buruzko informazio orokorra da hau (adibidez, bateria-maila, sistemako eta aplikazioetako jarduerak, eta erroreak). Android hobetzeko erabiliko dira datuok. Gainera, multzokatutako datu batzuk oso baliagarriak dira Google-ren aplikazioak hobetzeko eta bazkideei (adibidez, Android-en garatzaileei) euren aplikazio eta produktuak hobetzen laguntzeko. +Gailuari eta hura erabiltzeko moduari buruzko informazio orokorra da hau (adibidez, bateria-maila, sistemako eta aplikazioetako jarduerak, eta erroreak). Android hobetzeko erabiliko dira datuok. Gainera, datu bateratu batzuk oso baliagarriak dira Google-ren aplikazioak hobetzeko eta bazkideei (adibidez, Android-en garatzaileei) euren aplikazio eta produktuak hobetzen laguntzeko. Garapen-ingurune kudeatua () Romaji Ez du gailu honetan datuak gordetzeko baimenik diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_fa.xtb chromium-119.0.6045.159/chrome/app/resources/generated_resources_fa.xtb --- chromium-119.0.6045.105/chrome/app/resources/generated_resources_fa.xtb 2023-11-01 18:10:07.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/generated_resources_fa.xtb 2023-11-14 22:56:22.000000000 +0000 @@ -2355,7 +2355,7 @@ مرورگر جایگزین باز نشد از سیستم این سایت (ازجمله در برگه‌های باز) خارج خواهید شد دوربین خاموش است -پهلو به پهلو +پهلوبه‌پهلو همه چیز آماده است! ‏سیستم فایل رمزگذاری Microsoft برنامه‌ها @@ -3502,7 +3502,7 @@ سایت درحال استفاده از میکروفون شما است درحال ارسال محتوای صفحه تنظیم پین -‏به «دستیار Google» اجازه دهید برای کمک کردن، از اطلاعات روی صفحه استفاده کند +‏به «دستیار Google» اجازه دهید برای کمک کردن، از بافت صفحه استفاده کند سایت‌ها می‌توانند برای جستجوی دستگاه‌های بلوتوث درخواست دهند برداشتن سنجاق از «نوارابزار» سایتی یافت نشد @@ -4022,7 +4022,7 @@ می‌تواند از اطلاعاتتان درحین مرور استفاده کند می‌توانید ورود به سیستم را برای کاربران خاصی محدود کنید. با این کار، گزینه «افزودن شخص» در صفحه ورود به سیستم برداشته می‌شود. همچنین می‌توانید کاربران فعلی را نیز بردارید. صفحه‌نمایش -اطلاعات روی صفحه +بافت صفحه درباره تجربه بازی اخیرتان به ما بگویید نشانک‌ها را اینجا خواهید دید {NUM_TABS,plural, =1{‏۱ برگه}one{‏# برگه}other{‏# برگه}} @@ -5179,7 +5179,7 @@ درباره این کارت جستجو + پس‌بَر مشاهده تغییرات -شناسه اتصال امن: +شناسه اتصال ایمن: همگام‌سازی خاموش است مدیریت اتصالات شبکه دستگاهتان تحت کنترل سرپرست است @@ -6340,7 +6340,7 @@ بررسی زمان سیستم نگاشتن کلید - بخشی از گروه بدون نام -تعیین چگونگی اتصال به وب‌سایت‌ها ازطریق اتصالی ایمن +تعیین چگونگی اتصال به وب‌سایت‌ها ازطریق اتصال ایمن حسابی که به‌تأیید رساندید اجازه ندارد به این دستگاه دسترسی پیدا کند. سرپرست سیستم شما نصب کرده است. به‌دنبال صفحه درباره مرورگر هستید؟ از این پیوند استفاده کنید: @@ -6845,7 +6845,7 @@ مرتبط با برنامه: گواهینامه رسانه -نحوه اتصال به وب‌سایت‌ها ازطریق اتصالی ایمن را مشخص می‌کند. این ویژگی از رساننده خدمات تحت مدیریت استفاده می‌کند +نحوه اتصال به وب‌سایت‌ها ازطریق اتصال ایمن را مشخص می‌کند. این ویژگی از رساننده خدمات تحت مدیریت استفاده می‌کند ‏Chromebook را بازراه‌اندازی کنید و دوباره امتحان کنید توصیه می‌کنیم را حذف کنید تا افراد دیگری که از این دستگاه استفاده می‌کنند نتوانند گذرواژه‌هایتان را ببینند ‏اگر به شبکه دیگری وصل نباشید Google Chrome از داده‌های تلفن همراه استفاده خواهد کرد. @@ -6976,7 +6976,7 @@ از کلیدهای پیکان سمت راست و چپ برای پیمایش استفاده کنید. انتخاب کنید سابقه همگام‌سازی شود یا نه قبلاً هیچ کاربری رده‌بندی نکرده است. -به‌نظر می‌رسد قبلاً «دستیار» را در دستگاه دیگری راه‌اندازی کرده‌اید. با روشن کردن «اطلاعات روی صفحه» در این دستگاه، بهره بیشتری از «دستیار» ببرید. +به‌نظر می‌رسد قبلاً «دستیار» را در دستگاه دیگری راه‌اندازی کرده‌اید. با روشن کردن «بافت صفحه» در این دستگاه، بهره بیشتری از «دستیار» ببرید. ا&بزارهای بیشتر ‏درحال‌حاضر را مدیریت می‌کند. برای استفاده از کنترل‌های والدین با «حساب Google» دیگر، بعد از راه‌اندازی از سیستم خارج شوید و سپس «افزودن فرد» را در صفحه ورود به سیستم انتخاب کنید. بازنشانی سیم‌کارت داخلی @@ -7547,7 +7547,7 @@ تنظیم روی اجرای خودکار در حال پردازش میان‌برها... نشانی وب با به‌جای پرسش -به «دستیار» اجازه دهید برای ارائه کمک از اطلاعات روی صفحه استفاده کند +به «دستیار» اجازه دهید برای ارائه کمک از بافت صفحه استفاده کند رفتن به صفحه «گذرواژه‌ها» ‏درحال پیکربندی محتوی Linux. این کار ممکن است تا ۳۰ دقیقه طول بکشد. این دستگاه در حالتی قفل شده است که از ثبت‌نام شرکتی جلوگیری می‌کند. اگر می‌خواهید دستگاه را ثبت‌نام کنید ابتدا باید دستگاه را بازیابی کنید. @@ -8368,7 +8368,7 @@ نشانه‌های تکیه درحال جفت کردن با «» … دستورالعمل دریافت شده است -‏هر زمان خواستید می‌توانید این گزینه را در «تنظیمات > دستیار Google > اطلاعات روی صفحه» تغییر دهید. +‏هر زمان خواستید می‌توانید این گزینه را در «تنظیمات > دستیار Google > بافت صفحه» تغییر دهید. اجازه ندارد از دوربین استفاده کند نمایش نشانه‌های تکیه (اِعراب) و نویسه‌های خاص استاندارد @@ -8471,7 +8471,7 @@ وضعیت بستن نکته جستجو و دستیار -‏به‌نظر می‌رسد ازقبل «دستیار Google» را در دستگاه دیگری راه‌اندازی کرده است. می‌تواند با روشن کردن «اطلاعات روی صفحه» در این دستگاه، بهره بیشتری از «دستیار» ببرد. +‏به‌نظر می‌رسد ازقبل «دستیار Google» را در دستگاه دیگری راه‌اندازی کرده است. می‌تواند با روشن کردن «بافت صفحه» در این دستگاه، بهره بیشتری از «دستیار» ببرد. دسترسی به دوربین شما همیشه مجاز باشد پنجره‌های بازشو در این صفحه مسدود شده‌اند. ‏ورودی باید در قالب $SM-‏DP+ نشانی$شناسه انطباق اختیاری باشد @@ -8824,7 +8824,7 @@ ‏غیرفعال کردن اشکال‌زدایی ADB (پل اشکال‌زدایی Android)، را به تنظیمات کارخانه بازنشانی می‌کند. همه حساب‌های کاربر و داده‌های محلی حذف می‌شوند. گذرواژه ذخیره‌شده بازیابی همه برگه‌ها -این سایت از اتصال امن استفاده نمی‌کند و ممکن است فایل دستکاری شده باشد +این سایت از اتصال ایمن استفاده نمی‌کند و ممکن است فایل دستکاری شده باشد درحال پیکربندی این برگه درحال هم‌رسانی صفحه‌نمایش شما است ‏برنامه‌ها و فایل‌های Linux پشتیبان‌گیری نشدند @@ -9466,7 +9466,7 @@ برنامه ناشناس: افزودن به مخاطبین داده‌ها و اجازه‌های سایت حذف شود؟ -شناسه اتصال امن: +شناسه اتصال ایمن: OneDrive سایه‌دار : diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_fr.xtb chromium-119.0.6045.159/chrome/app/resources/generated_resources_fr.xtb --- chromium-119.0.6045.105/chrome/app/resources/generated_resources_fr.xtb 2023-11-01 18:10:07.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/generated_resources_fr.xtb 2023-11-14 22:56:22.000000000 +0000 @@ -3736,7 +3736,7 @@ Ces extensions peuvent voir et modifier des informations sur ce site. Déplacer le groupe vers une nouvelle fenêtre Pour lire du contenu protégé par des droits d'auteur, les sites peuvent avoir besoin d'utiliser un service de protection du contenu -Recherche d'appareils +Recherche d'appareils… Couleur de l'arrière-plan Épingler Réduire les demandes indésirables (recommandé) diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_hi.xtb chromium-119.0.6045.159/chrome/app/resources/generated_resources_hi.xtb --- chromium-119.0.6045.105/chrome/app/resources/generated_resources_hi.xtb 2023-11-01 18:10:07.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/generated_resources_hi.xtb 2023-11-14 22:56:22.000000000 +0000 @@ -1250,7 +1250,7 @@ {NUM_EXTENSIONS,plural, =1{1 एक्सटेंशन की समीक्षा की गई}one{{NUM_EXTENSIONS} एक्सटेंशन की समीक्षा की गई}other{{NUM_EXTENSIONS} एक्सटेंशन की समीक्षा की गई}} कृपया मोबाइल और इंटरनेट सेवा देने वाली कंपनी से मिला ऐक्टिवेशन कोड डालें. यह पेज एक ऐसे नेटिव क्लाइंट का उपयोग करता है जो आपके कंप्यूटर पर काम नहीं करता. -मानक सुरक्षा मोड +स्टैंडर्ड सुरक्षा मोड जैसे-जैसे हर शब्द बोला जाए, उसे हाइलाइट करें हॉटस्पॉट चालू करें (USB) @@ -4889,7 +4889,7 @@ सिंक बंद करें ग्रुप बंद करें पासवर्ड इंपोर्ट करने के लिए, कोई CSV फ़ाइल चुनें -डिवाइस पर एन्क्रिप्ट (सुरक्षित) करने का तरीका सेट अप करें +डिवाइस पर एन्क्रिप्ट करने का तरीका सेट अप करें मीडिया फ़ाइल चेकर इस क्रैश की जाँच-पड़ताल करने और इसे ठीक करने में हमारे इंजीनियरों की सहायता करें. अगर हो सके तो सटीक चरणों की सूची बनाएं. कोई भी विवरण छोटा नहीं है! कोई उपयोगकर्ता नाम नहीं @@ -8373,7 +8373,7 @@ आप जब चाहें, सेटिंग > Google Assistant > स्क्रीन पर दिखने वाली सामग्री इस्तेमाल करें, में जाकर बदलाव कर सकते हैं. कैमरा इस्तेमाल करने की अनुमति नहीं है उच्चारण के चिह्न और विशेष वर्ण दिखाएं -मानक +स्टैंडर्ड आप तय कर सकते हैं कि कुछ वेबसाइटों पर आप कितना ज़ूम इन या ज़ूम आउट करेंगे लिंक शेयर करें सेव करने की जगह चुनें diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_hr.xtb chromium-119.0.6045.159/chrome/app/resources/generated_resources_hr.xtb --- chromium-119.0.6045.105/chrome/app/resources/generated_resources_hr.xtb 2023-11-01 18:10:07.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/generated_resources_hr.xtb 2023-11-14 22:56:22.000000000 +0000 @@ -3099,7 +3099,7 @@ Omogućite Googleu da koristi podatke o hardveru kako bi poboljšao . Ako odbijete, ti se podaci svejedno šalju Googleu kako bi se utvrdila odgovarajuća ažuriranja, no ti se podaci ni u kojem drugom slučaju ne pohranjuju niti koriste. Isteklo je vrijeme za Već imate zaporke za te račune na usluzi . Ako odlučite uvesti jednu od zaporki u nastavku, ona će zamijeniti postojeću. -Blokirani su kolačići treće strane +Blokirani su kolačići trećih strana će moći pregledavati datoteku Brzi odgovori Google asistenta min @@ -5024,7 +5024,7 @@ Nema internetske veze. Uključeno Uključi opciju Ne uznemiravaj -Kolačići treće strane +Kolačići trećih strana Kopiranje zaporke Prije dvije godine Crostinijev ADB za Android aplikacije @@ -8866,7 +8866,7 @@ Pomicanje unatrag Upravljani ONC Da biste upotrebljavali e-adresu svoje organizacije (), trebate upotrijebiti prijavu organizacije. Ako je ovaj uređaj za vašu osobnu upotrebu, prijavite se osobnim Google računom. -Prikaz informacija o web-mjestu +Prikaz informacija o web-lokaciji Potvrdi Prihvatljiva – FM &Prikaži u mapi diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_id.xtb chromium-119.0.6045.159/chrome/app/resources/generated_resources_id.xtb --- chromium-119.0.6045.105/chrome/app/resources/generated_resources_id.xtb 2023-11-01 18:10:07.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/generated_resources_id.xtb 2023-11-14 22:56:22.000000000 +0000 @@ -594,7 +594,7 @@ Gunakan perangkat ini Untuk mengaktifkan atau menonaktifkan penjelajahan dengan keyboard, gunakan Ctrl+Search+7 Mode baca tidak dapat menemukan konten utama di halaman ini -Tampilkan lainnya +Tampilkan lebih banyak Setel Konfigurasi Tethering Perubahan pada setelan mikrofon mengharuskan Parallels Desktop diluncurkan kembali. Luncurkan kembali Parallels Desktop untuk melanjutkan. Lebih banyak kontrol atas iklan yang Anda lihat @@ -876,7 +876,7 @@ Tidak dapat menambahkan Sisa waktu Pemindaian gagal. File ini mungkin adalah virus atau malware. -Alat Developer +Developer Tools Yakin ingin keluar? Layanan pengelolaan mengirim error HTTP. Setelan suara text-to-speech @@ -7602,7 +7602,7 @@ Grup tanpa nama - Namai jendela ini item -Ketahui alamat email Anda +Mengetahui alamat email Anda Sekarang tambahkan tab saat ini ke daftar Anda Sandi tidak cocok Agar dapat menggunakan Smart Lock untuk login ke akun Google Anda, buka Setelan > Perangkat terhubung > Ponsel Anda > Smart Lock. @@ -8347,7 +8347,7 @@ URL Kebijakan Otoritas Sertifikasi Netscape Mendownload: Tindakan ini akan menghapus data penjelajahan Anda dari perangkat ini secara permanen. Untuk memulihkan data, aktifkan sinkronisasi sebagai -Periksa pembaruan +Periksa update Keyboard virtual, dikte, Tombol Akses, dan lainnya Perkecil/perbesar halaman Nama perangkat terlalu panjang diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_iw.xtb chromium-119.0.6045.159/chrome/app/resources/generated_resources_iw.xtb --- chromium-119.0.6045.105/chrome/app/resources/generated_resources_iw.xtb 2023-11-01 18:10:07.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/generated_resources_iw.xtb 2023-11-14 22:56:22.000000000 +0000 @@ -2838,7 +2838,7 @@ תמיד אפשר לנהל את ההגדרות בכרטיס הזה, או לראות עוד אפשרויות ב'התאמה אישית של Chrome'. מסומן בסימנייה -בדיקה עכשיו +לבדיקה לא מאושר לא ניתן להתחבר למדפסת לא ניתן היה לסיים את ההורדה @@ -8207,7 +8207,7 @@ אירעה שגיאה בהוספת חשבון רישום המכשיר מתבצע... ‏הפעלה של חנות Play -שימוש במצב שקט יותר של התראות +שימוש בהצגת התראות שקטה יותר המערכת לא הצליחה לשמור את תצורת המכשיר. לאתר אין הרשאה להשתמש במידע עליך שנשמר בו לא תהיה אפשרות לשחזר נתונים מקומיים אם שוכחים את הסיסמה או קוד האימות. diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_ja.xtb chromium-119.0.6045.159/chrome/app/resources/generated_resources_ja.xtb --- chromium-119.0.6045.105/chrome/app/resources/generated_resources_ja.xtb 2023-11-01 18:10:07.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/generated_resources_ja.xtb 2023-11-14 22:56:22.000000000 +0000 @@ -4309,7 +4309,7 @@ とその下にあるすべてのサイトのサイトデータと権限を削除しますか? Chrome アプリはプログレッシブ ウェブアプリに移行しています。この Chrome アプリは組織によりブラウザにインストールされたものです。アプリのリストからプログレッシブ ウェブアプリを開くには、まず Chrome アプリをアンインストールするよう管理者に依頼します。その間は、 にアクセスして、ウェブで を開いてください。 ヘルプセンター -サードパーティの Cookie を許可 +サードパーティの Cookie を許可する ChromeOS Flex のデバイス情報とデータを読み取る 接続された USB デバイスのリストを「」が取得することを許可しますか? 新しいシークレット ウインドウ(&I) @@ -6758,7 +6758,7 @@ {NUM_PAGES,plural, =0{}=1{、他 1 個のタブ}other{、他 # 個のタブ}} パスフレーズを忘れた場合や、この設定を変更する場合は、同期をリセットします。 拒否 -% 完了 + 完了 レシピ ネットワークに問題があるか、レルムが正しくありません タブや画面投影の品質 diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_kk.xtb chromium-119.0.6045.159/chrome/app/resources/generated_resources_kk.xtb --- chromium-119.0.6045.105/chrome/app/resources/generated_resources_kk.xtb 2023-11-01 18:10:07.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/generated_resources_kk.xtb 2023-11-14 22:56:22.000000000 +0000 @@ -878,7 +878,7 @@ Жаңа жасырын терезе Үлкен тінтуір курсоры Белсенді курсор режимі қосылсын ба? -Қимыл арқылы теруді қосу +Сипап теруді қосу Бетбелгілерге барлық құрылғылардан кіру үшін синхрондауды қосыңыз. Әріп енгізіңіз Лақап ат diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_mk.xtb chromium-119.0.6045.159/chrome/app/resources/generated_resources_mk.xtb --- chromium-119.0.6045.105/chrome/app/resources/generated_resources_mk.xtb 2023-11-01 18:10:08.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/generated_resources_mk.xtb 2023-11-14 22:56:23.000000000 +0000 @@ -2200,7 +2200,7 @@ Модел Изменете ги поставките за внесување Смени ја висината на гласот кога изговараш типови елементи и форматиран текст -Aqua +Вода Звуци на полнење Упс! Настана непозната грешка. Обидете се повторно подоцна. Ако и понатаму се соочувате со истиот проблем, контактирајте со вашиот администратор. Ова е уред од група и не може да се регистрира со надградба за киоск или уред за сигнализација. diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_my.xtb chromium-119.0.6045.159/chrome/app/resources/generated_resources_my.xtb --- chromium-119.0.6045.105/chrome/app/resources/generated_resources_my.xtb 2023-11-01 18:10:08.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/generated_resources_my.xtb 2023-11-14 22:56:23.000000000 +0000 @@ -4261,7 +4261,7 @@ သည် ၏ မူလအကောင့်ဖြစ်သည် ‘ကျွန်ုပ်၏ Drive’ ရှိ ဖိုင်အသစ်များကို ဤ Chromebook သို့ အလိုအလျောက် စင့်ခ်လုပ်ခြင်း ရပ်ပါမည် ကာစ်လုပ်ရမည့်စက်ပစ္စည်းတစ်ခုမျှ မတွေ့ပါ။ အကူအညီလိုအပ်ပါသလား။ -ဖရဲသီး +သခွားမ သည်ဝင်းဒိုးတစ်ခုကို မျှဝေနေပါသည်။ ပြသမှု သတိပေးချက်များ ပုံနှိပ်ခြင်း စတင်ပါပြီ diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_no.xtb chromium-119.0.6045.159/chrome/app/resources/generated_resources_no.xtb --- chromium-119.0.6045.105/chrome/app/resources/generated_resources_no.xtb 2023-11-01 18:10:08.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/generated_resources_no.xtb 2023-11-14 22:56:23.000000000 +0000 @@ -300,7 +300,7 @@ krever en lisens Administratoren din anbefaler en spesifikk verdi for denne innstillingen. Forespørselen behandles... -Rediger tilgangsnøkkel +Rediger passnøkkel Kunne ikke caste. Prøv på nytt. Standardbeskyttelse er på. Bruk økt beskyttelse om du vil ha enda mer sikkerhet. Vi husker nettverket ditt neste gang du bruker @@ -547,7 +547,7 @@ Oppstart Dette tilbakestiller oppstartssiden, nye faner, søkemotoren og eventuelle festede faner. I tillegg slår det av alle utvidelser og fjerner midlertidige data, for eksempel informasjonskapsler. Bokmerker, loggoppføringer og lagrede passord slettes ikke. Startsiden er Ny fane-siden -Bruk en tilgangsnøkkel på en annen enhet +Bruk en passnøkkel på en annen enhet Gyldig i Fortsett konfigureringen Fjernet @@ -619,7 +619,7 @@ Versjon () Microsoft 365 krever at filer lagres i OneDrive. Lokale filer blir flyttet, og filer fra andre steder blir kopiert. Du finner filene dine i Microsoft OneDrive-mappen i Filer-appen. Søk i passord -Skann denne QR-koden med et kamera på enheten der du vil opprette en tilgangsnøkkel for +Skann denne QR-koden med et kamera på enheten der du vil opprette en passnøkkel for På – egendefinerte innstillinger Venter på Nettsteder kan be om å få bruke skrifttyper som er installert på enheten @@ -957,7 +957,7 @@ bakgrunnsside Administrer kontakter {0,plural, =1{unused plural form}other{Vil du åpne og redigere # filer i denne nettappen?}} -Bruk en tilgangsnøkkel fra for å logge på +Bruk en passnøkkel fra for å logge på Du kan lagre dette passordet i Google-kontoen din eller bare på denne enheten Et passord kreves Sikkerhetsnøkkelen din kan ikke lagre fingeravtrykk @@ -1228,7 +1228,7 @@ Vis tastetilordninger lese og endre alle dataene dine på alle nettsteder Bluetooth-sammenkoblingskode -Ingen tilgangsnøkler er tilgjengelige +Ingen passnøkler er tilgjengelige En oppdatering ble funnet Lar deg logge på nettsteder med kontoer du har hos identitetstjenester Programstopp-ID-er @@ -2514,7 +2514,7 @@ Tilpass til det utskrivbare området Foreslå passord Logg av og på igjen for å starte synkroniseringen -Rapportér uriktig bruk +Rapporter uriktig bruk Siste oppdatering Full kontroll over MIDI-enheter tillates Administrer profiler @@ -3704,7 +3704,7 @@ Spill av videoen eller sett den på pause Velg tastatur Eksportér passord -Velg hvordan du vil opprette en tilgangsnøkkel for +Velg hvordan du vil opprette en passnøkkel for Innebygd tastatur Stedstjenester Koble til wifi med Android-telefon @@ -4547,7 +4547,7 @@ Ser du etter systemets Om-side? Gå til Apper og utvidelser kan bare endres av administratoren (). Du har registrerte sertifikater som identifiserer disse tjenerne -Administrer tilgangsnøkler +Administrer passnøkler Når du er i inkognitomodus, kan ikke nettsteder bruke informasjonskapsler for å se nettleseraktiviteten din på andre nettsteder – heller ikke relaterte nettsteder. Nettleseraktiviteten din brukes ikke til ting som personlig tilpasning av annonser. Det kan hende at funksjoner på noen nettsteder ikke fungerer. Lagringsbehandling Wifi er tilgjengelig via flere enheter @@ -4808,7 +4808,7 @@ , detaljer {COUNT,plural, =1{1 bokmerke er slettet}other{{COUNT} bokmerker er slettet}} Denne filen kan være et virus eller skadelig programvare.Du kan sende den til Google Safe Browsing for å sjekke om den er utrygg. Skanninger tar vanligvis noen sekunder. -Opprett en tilgangsnøkkel på en telefon eller et nettbrett +Opprett en passnøkkel på en telefon eller et nettbrett {0,plural, =0{Lukkes nå.}=1{Lukkes om 1 sekund.}other{Lukkes om # sekunder.}} Google Assistent-varsler Få en link til støtteverktøyet @@ -5154,7 +5154,7 @@ Åpne gruppen i et nytt vindu Avslutt inkognitomodus &Bokmerkebehandling -Det finnes ingen tilgangsnøkler for på denne enheten +Det finnes ingen passnøkler for på denne enheten &Utviklerverktøy {NUM_OF_FILES,plural, =1{1 fil er flyttet}other{{NUM_OF_FILES} filer er flyttet}} Slå på rask sammenkobling @@ -5363,7 +5363,7 @@ Skjerm Skanning Dine kontoer -Flere handlinger og alternativer for tilgangsnøkler for +Flere handlinger og alternativer for passnøkler for Gj&enåpne den lukkede fanen Siden er ikke på Den private nøkkelfilen er ugyldig. @@ -5853,7 +5853,7 @@ Gjenkjenner ikke fingeravtrykket Utskriften er fullført Android-app-ADB for Linux -Rapportér uriktig bruk fra «» +Rapporter uriktig bruk fra «» Gjeldende PPD-fil i bruk: Emojivelger Logg på for å bruke passord @@ -6456,7 +6456,7 @@ Nettleseren administreres av , og profilen administreres av {NUM_EXTENSIONS,plural, =1{Vil du fjerne utvidelsen?}other{Vil du fjerne # utvidelser?}} Linjeverktøy -Hvilken tilgangsnøkkel vil du bruke for ? +Hvilken passnøkkel vil du bruke for ? Nedlastingen ble blokkert Søk i faner Chrome begrenser automatisk informasjonskapsler fra tredjeparter @@ -6801,7 +6801,7 @@ Skrifter filer Slå på mobildata -Passord og tilgangsnøkler +Passord og passnøkler Ignorer varsler Vis startsideknapp {COUNT,plural, =1{{COUNT} passord er bare lagret på denne enheten. For å bruke det på andre enheter, <a target='_blank' href='chrome://password-manager/'>lagre det i Google-kontoen din</a>.}other{{COUNT} passord lagres bare på denne enheten. For å bruke dem på de andre enhetene dine, <a target='_blank' href='chrome://password-manager/'>lagre dem i Google-kontoen din</a>.}} @@ -6816,7 +6816,7 @@ Lupe for hele skjermen Åpne nedlasting Åpner ... -For å administrere tilgangsnøkler, bruk en nyere versjon av Windows +For å administrere passnøkler, bruk en nyere versjon av Windows kan ikke sjekke passordene dine mot databrudd. Se om du er koblet til internett. Velg språk Ikke tilgjengelig @@ -7180,7 +7180,7 @@ Legg til person … Hvis passnøkkelen for ligger på en USB-sikkerhetsnøkkel, setter du den inn og trykker på den nå -For å logge på dette nettstedet med en tilgangsnøkkel må du slå på Windows Hello i innstillingene. Gå deretter tilbake til dette nettstedet, og prøv igjen. +For å logge på dette nettstedet med en passnøkkel må du slå på Windows Hello i innstillingene. Gå deretter tilbake til dette nettstedet, og prøv igjen. Med automatisk skanning kan du gå gjennom elementer på skjermen automatisk. Når et element er fremhevet, trykker du på «Velg» for å aktivere det. Nettsteder kan be om å få bruke MIDI-enhetene dine Panda @@ -7677,7 +7677,7 @@ Ingen passord er lagret for Organisasjonen din har blokkert denne filen fordi den er kryptert. Be eieren om å dekryptere den. {COUNT,plural, =1{1 nedlasting pågår}other{# nedlastinger pågår}} -Vil du bruke en tilgangsnøkkel fra en annen enhet? +Vil du bruke en passnøkkel fra en annen enhet? Sikkerhetskopiér til Google Disk. Gjenopprett data eller bytt enhet når som helst – helt enkelt. Sikkerhetskopiene dine lastes opp til Google og krypteres med passordet for Google-kontoen din. Finn ut mer Få Google Søk og smarte funksjoner fra Google hver gang du surfer på nettet Hurtigtast @@ -8401,7 +8401,7 @@ Få en innføring Godta tillatelsene Detaljene skjules mens du deler skjermen -Opprett en tilgangsnøkkel for +Opprett en passnøkkel for Nettsteder følger automatisk denne innstillingen når du besøker dem får tilgang til å lese filer i Endre @@ -8845,7 +8845,7 @@ Egendefinert farge Powerwash kreves ved neste omstart Fjern personlig identifiserende informasjon fra system_logs.txt. -Søk blant tilgangsnøkler +Søk blant passnøkler Last ned eSIM-profilen Installerer Google Play-butikken på -enheten din. Dette kan ta noen minutter. Skjermoppløsning @@ -8969,7 +8969,7 @@ Endre notat Plystre Mobil -Velg en tilgangsnøkkel +Velg en passnøkkel VM-en «» finnes, men ser ikke ut til å være en gyldig -VM. Kontakt administratoren din. Disse nettstedene er med i en gruppe som er definert av . Nettsteder i grupper kan se aktiviteten din i gruppen. Ikke lagre @@ -9400,7 +9400,7 @@ Slå på «Google Chrome» i Stedstjenester på Macen Neste nedlasting utføres . Google-kontopassord -Tilgangsnøkler +Passnøkler Chrome begrenser den totale mengden data nettsteder kan dele via nettleseren for å måle annonseresultater {COUNT,plural, =0{Åpne alle i &nytt vindu}=1{Åpne i &nytt vindu}other{Åpne alle ({COUNT}) i &nytt vindu}} Elefant @@ -9613,7 +9613,7 @@ &Vis i mappe Prøv på nytt Favoritter/bokmerker -Bekreft tilgangsnøkkel +Bekreft passnøkkel Feil under henting av innstillingsangivelser fra tjeneren: . Få mest mulig ut av Chrome Send autofyll-metadata diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_or.xtb chromium-119.0.6045.159/chrome/app/resources/generated_resources_or.xtb --- chromium-119.0.6045.105/chrome/app/resources/generated_resources_or.xtb 2023-11-01 18:10:08.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/generated_resources_or.xtb 2023-11-14 22:56:23.000000000 +0000 @@ -1151,7 +1151,7 @@ ଚୁକ୍ତି ଓ ସର୍ତ୍ତାବଳୀ ଡିସ୍କ ସ୍ପେସ୍ ଅତ୍ୟନ୍ତ କମ୍ ଅଛି। ଦୟାକରି ଡିସ୍କ ସ୍ପେସ୍ ଖାଲି କରନ୍ତୁ। ପୂର୍ଣ୍ଣ ସ୍କ୍ରିନ୍‌ ଖୋଲନ୍ତୁ -ନମସ୍କାର +ହାଏ ଅନ୍ୟ ଭାଷାଗୁଡ଼ିକ ବନ୍ଦ କରନ୍ତୁ ଟିପଚିହ୍ନ ସେଟ ଅପ କରିବା ପାଇଁ ଆପଣଙ୍କ ପିଲାକୁ କୀବୋର୍ଡର ନିମ୍ନ ଡାହାଣ କୋଣରେ ଥିବା ଟିପଚିହ୍ନ ସେନ୍ସରକୁ ସ୍ପର୍ଶ କରିବା ପାଇଁ ଦିଅନ୍ତୁ। ଆପଣଙ୍କ ପିଲାର ଟିପଚିହ୍ନ ଡାଟାକୁ ସୁରକ୍ଷିତ ଭାବେ ଷ୍ଟୋର କରାଯାଇଛି ଏବଂ ଏହାକୁ କେବେ ବି ଏହି ରୁ କାଢ଼ି ଦିଆଯାଏ ନାହିଁ। diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_pa.xtb chromium-119.0.6045.159/chrome/app/resources/generated_resources_pa.xtb --- chromium-119.0.6045.105/chrome/app/resources/generated_resources_pa.xtb 2023-11-01 18:10:08.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/generated_resources_pa.xtb 2023-11-14 22:56:23.000000000 +0000 @@ -6313,7 +6313,7 @@ ਨੂੰ ਸੂਚਨਾ ਭੇਜੀ ਗਈ QR ਕੋਡ ਬਣਾਓ ਨੋਟ ਕਰੋ: ਕਿਸੇ ਮਿਲਦੀ-ਜੁਲਦੀ ਅਵਾਜ਼ ਜਾਂ ਅਵਾਜ਼ ਦੀ ਰਿਕਾਰਡਿੰਗ ਨਾਲ ਦੇ ਨਿੱਜੀ ਨਤੀਜਿਆਂ ਤੱਕ ਪਹੁੰਚ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ। ਬੈਟਰੀ ਬਚਾਉਣ ਲਈ, ਤੁਸੀਂ ਦੀਆਂ Assistant ਸੈਟਿੰਗਾਂ ਵਿੱਚ "Ok Google" ਨੂੰ ਸਿਰਫ਼ ਉਦੋਂ ਚਾਲੂ ਰੱਖਣ ਦੀ ਚੋਣ ਕਰ ਸਕਦੇ ਹੋ ਜਦੋਂ ਇਹ ਡੀਵਾਈਸ ਕਿਸੇ ਪਾਵਰ ਦੇ ਸਰੋਤ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ ਹੋਵੇ। -ਸਕ੍ਰੀਨ ਲੌਕ +ਸਕ੍ਰੀਨ ਲਾਕ ਕੀ ਆਪਣੀ ਬ੍ਰਾਊਜ਼ਿੰਗ ਨੂੰ ਵੱਖ ਕਰਨਾ ਹੈ? ਪ੍ਰਮਾਣ-ਪੱਤਰ ਵਿਸ਼ਾ ਡਾਇਰੈਕਟਰੀ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਚਿੱਤਰ ਹੈਸ਼ ਸੈੱਟ ਨਹੀਂ ਹੈ diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_pl.xtb chromium-119.0.6045.159/chrome/app/resources/generated_resources_pl.xtb --- chromium-119.0.6045.105/chrome/app/resources/generated_resources_pl.xtb 2023-11-01 18:10:08.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/generated_resources_pl.xtb 2023-11-14 22:56:23.000000000 +0000 @@ -9838,7 +9838,7 @@ Nowe ustawienia plików cookie zostaną zastosowane po ponownym załadowaniu strony Sieć bezprzewodowa Wysyłaj dane diagnostyczne oraz informacje o użytkowaniu. Pomóż ulepszyć działanie Androida, wysyłając automatycznie do Google dane diagnostyczne oraz informacje o używaniu urządzenia i aplikacji. Dzięki temu będziemy mogli poprawić stabilność systemu i aplikacji oraz wprowadzić inne ulepszenia. Niektóre dane zbiorcze pomogą nam też udoskonalić aplikacje Google lub zostaną wykorzystane przez naszych partnerów, na przykład deweloperów aplikacji na Androida. To ustawienie jest wymuszone przez właściciela. Właściciel może zezwolić na wysyłanie do Google danych diagnostycznych i informacji o używaniu tego urządzenia. Jeśli włączysz ustawienie Dodatkowa aktywność w internecie i aplikacjach, te dane mogą być zapisywane na Twoim koncie Google. -Zarządzanie synchronizacją +Zarządzaj synchronizacją Te drukarki są podłączone i gotowe do użycia. Zapisz je w swoim profilu, aby mieć do nich łatwiejszy dostęp. Szczegóły błyskawicznego połączenia w tetheringu Koszyki zostały ukryte. Pojawią się z powrotem, gdy wprowadzisz zmiany. diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_ru.xtb chromium-119.0.6045.159/chrome/app/resources/generated_resources_ru.xtb --- chromium-119.0.6045.105/chrome/app/resources/generated_resources_ru.xtb 2023-11-01 18:10:08.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/generated_resources_ru.xtb 2023-11-14 22:56:23.000000000 +0000 @@ -4024,7 +4024,7 @@ Фиолетовый Неизвестная клавиатура Адрес не принадлежит действительной организации. Обратитесь к администратору. Если вы администратор, перейдите на страницу g.co/ChromeEnterpriseAccount и настройте аккаунт организации. -Настройки сайтов +Настройки сайта Приложение "" пытается получить доступ к устройству "". Чтобы предоставить его, переведите в выключенное положение переключатель, позволяющий управлять настройками конфиденциальности устройства "". Google не несет ответственности за потерю данных. Операционная система может не работать на несертифицированных моделях устройств. Подробная информация доступна на странице g.co/flex/InstallGuide. Другие действия для быстрой команды "" @@ -9071,7 +9071,7 @@ Этот пароль или PIN-код будет защищать ваши данные на текущем устройстве , а также информацию, получаемую с телефона. Чтобы выйти из спящего режима, потребуется разблокировать устройство . Поиск по URL или запросу к API Удалить приложение ""... -Извлекать текст из файлов PDF +Извлечь текст из PDF-файла Размер диска Представляем Скачать Chrome diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_sv.xtb chromium-119.0.6045.159/chrome/app/resources/generated_resources_sv.xtb --- chromium-119.0.6045.105/chrome/app/resources/generated_resources_sv.xtb 2023-11-01 18:10:08.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/generated_resources_sv.xtb 2023-11-14 22:56:24.000000000 +0000 @@ -7602,7 +7602,7 @@ Namnlös grupp – Namnge fönstret  objekt -Känn till din e-postadress +Känna till din e-postadress Lägg till den aktuella fliken i listan Lösenorden matchar inte Öppna Inställningar > Anslutna enheter > Din mobil > Smart Lock om du vill kunna logga in på Google-kontot med Smart Lock. diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_ta.xtb chromium-119.0.6045.159/chrome/app/resources/generated_resources_ta.xtb --- chromium-119.0.6045.105/chrome/app/resources/generated_resources_ta.xtb 2023-11-01 18:10:08.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/generated_resources_ta.xtb 2023-11-14 22:56:24.000000000 +0000 @@ -3708,7 +3708,7 @@ தளத்திற்கான கடவுச்சொல் இந்தச் சாதனத்திலும் உங்கள் Google கணக்கிலும் சேமிக்கப்பட்டுள்ளது. ஏதாவது ஒன்றை நீக்க விரும்புகிறீர்களா? வீடியோவைப் பிளே செய்யும் அல்லது இடைநிறுத்தும் கீபோர்டைத் தேர்ந்தெடுக்கவும் -கடவுச்சொற்களை ஏற்று +கடவுச்சொற்களைப் பதிவிறக்கு க்கான கடவுச்சாவியை உருவாக்க நீங்கள் விரும்பும் முறையைத் தேர்வுசெய்யவும் உள்ளமைந்த கீபோர்டு இருப்பிடச் சேவைகள் @@ -7430,7 +7430,7 @@ தொடங்கப்படும் வகை கடவுச்சொற்களை ஏற்ற முடியவில்லை. ஒரே சமயத்தில் அதிகபட்சம் கடவுச்சொற்களை மட்டுமே ஏற்ற முடியும். குறிப்பிட்ட பக்கங்களை அச்சிடு -இந்தத் தளத்திற்கான புதிய கடவுச்சொல்லை மறக்காமல் சேமிக்கவும் +இந்தத் தளத்திற்கான தற்போதைய கடவுச்சொல்லையே சேமிக்கிறீர்கள் என்பதை உறுதிப்படுத்திக் கொள்ளவும் நீங்கள் பதிவேற்றிய படம் தொடங்குக பாப்-அப்களை அனுப்புவதற்கும் திசைதிருப்புதல்களைப் பயன்படுத்துவதற்கும் அனுமதிக்கப்பட்டுள்ள தளங்கள் diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_uk.xtb chromium-119.0.6045.159/chrome/app/resources/generated_resources_uk.xtb --- chromium-119.0.6045.105/chrome/app/resources/generated_resources_uk.xtb 2023-11-01 18:10:09.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/generated_resources_uk.xtb 2023-11-14 22:56:24.000000000 +0000 @@ -2031,7 +2031,7 @@ Налаштовано новий час сну Налаштовує рівень налагодження менеджера й інших сервісів з'єднання з мережею за допомогою ff_debug. Цю вкладку -Файли cookie й дані із сайтів +Файли cookie й дані сайтів Не дозволяти сайтам використовувати ідентифікатори, щоб відтворювати захищений контент Щоб збільшити елементи на екрані, наблизьте область. Щоб увімкнути або вимкнути лупу, натисніть клавішу пошуку + Ctrl + M. Дозволено: @@ -7438,7 +7438,7 @@ Переконайтеся, що зберігаєте для цього сайту поточний пароль Завантажене вами зображення Почати -Дозволено показувати спливаючі вікна та використовувати переспрямування +Дозволено показувати спливаючі вікна й використовувати переспрямування Доступне оновлення Debian 10 (Buster) Якщо Google є вашою пошуковою системою за умовчанням, ви бачитимете кращі та доречніші за контекстом підказки Завершити роботу Linux diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_uz.xtb chromium-119.0.6045.159/chrome/app/resources/generated_resources_uz.xtb --- chromium-119.0.6045.105/chrome/app/resources/generated_resources_uz.xtb 2023-11-01 18:10:09.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/generated_resources_uz.xtb 2023-11-14 22:56:24.000000000 +0000 @@ -2186,7 +2186,7 @@ Model Kiritish sozlamalarini oʻzgartirish Tahrirlangan matn va elementlar turini aytish vaqtida talaffuz ohangini oʻzgartirish -Aqua +Dengiz Batareya holati signallari Ana xolos! Kutilmagan xatolik yuz berdi. Qayta urinib ko‘ring, agar muammo qaytarilsa administrator bilan bog‘laning. Bu majmuadagi qurilma. Kiosk va Signage Upgrade bilan roʻyxatdan oʻtib boʻlmaydi. diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_vi.xtb chromium-119.0.6045.159/chrome/app/resources/generated_resources_vi.xtb --- chromium-119.0.6045.105/chrome/app/resources/generated_resources_vi.xtb 2023-11-01 18:10:09.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/generated_resources_vi.xtb 2023-11-14 22:56:24.000000000 +0000 @@ -1503,7 +1503,7 @@ Thẻ Truyền Chỉnh sửa dấu trang Tìm kiếm máy in đích -Và ""? +Thêm ""? Chỉ mục thẻ không hợp lệ được nhập. Thêm máy in vào hồ sơ của bạn Chỉnh sửa thẻ @@ -4579,7 +4579,7 @@ Tùy chọn tiện ích Không thiết lập được kết nối Xác minh danh tính của bạn -Thẻ từ các thiết bị khác +Thẻ trên các thiết bị khác Cài đặt này được tiện ích thực hiện. Tắt tính năng cập nhật tự động? Xác minh tài khoản diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_zh-CN.xtb chromium-119.0.6045.159/chrome/app/resources/generated_resources_zh-CN.xtb --- chromium-119.0.6045.105/chrome/app/resources/generated_resources_zh-CN.xtb 2023-11-01 18:10:09.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/generated_resources_zh-CN.xtb 2023-11-14 22:56:24.000000000 +0000 @@ -5838,7 +5838,7 @@ 表情符号选择器 登录后才能使用密码 Google Play 应用和服务 -允许使用第三方 Cookie +已允许使用第三方 Cookie “添加连接”功能已由您的管理员停用 从服务器获取政策时出错。 移动网络漫游 diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_zh-HK.xtb chromium-119.0.6045.159/chrome/app/resources/generated_resources_zh-HK.xtb --- chromium-119.0.6045.105/chrome/app/resources/generated_resources_zh-HK.xtb 2023-11-01 18:10:09.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/generated_resources_zh-HK.xtb 2023-11-14 22:56:24.000000000 +0000 @@ -543,7 +543,7 @@ 列印 最後一次軟件更新 管理搜尋引擎 -朗讀模式 +閱讀模式 啟動 此功能會重設您的起始網頁、新分頁、搜尋引擎和固定標籤,同時停用所有擴充程式並清除 Cookie 等暫存資料,但不會清除您的書籤、記錄及已儲存的密碼。 首頁是新分頁 @@ -593,7 +593,7 @@ {NUM_TABS,plural, =1{在新群組中加入分頁}other{在新群組中加入分頁}} 使用此裝置 如要開啟或關閉「鍵盤瀏覽」功能,請使用快速鍵 Ctrl+Search+7 -朗讀模式無法找出此頁面的主要內容 +閱讀模式找不到此頁面的主要內容 顯示更多 設定網絡共享設定 Parallels Desktop 需要重新啟動,麥克風設定的變更才會生效。重新啟動 Parallels Desktop 即可繼續。 @@ -1797,7 +1797,7 @@ 已通過 此網站可以查看複製到剪貼簿的文字和圖片。 顯示應用程式 -在「朗讀模式」中開啟 +用閱讀模式開啟 當附近的裝置正在分享內容時 完成後開啟(&D) 根據您的 IP 位址確定位置 @@ -3026,7 +3026,7 @@ 這一行過長: 在其他裝置上 讀取您在應用程式中開啟的資料夾 -在「朗讀模式」中開啟 +用閱讀模式開啟 子女的 Google 帳戶無法使用 Chromebook 版 Steam (Beta 版本) 開啟設定後,系統會在此顯示您曾瀏覽的網站清單來推斷您的興趣。 移咗去「」入面。 @@ -6524,7 +6524,7 @@ 開咗裝置相機。請將相機鏡頭對準 eSIM 卡嘅 QR 碼。 您隨時可在 Chrome 設定中選擇要同步的瀏覽器資料。在裝置設定中,您可控制透過 Chrome 瀏覽器安裝的網絡應用程式的同步功能。Google 可能會根據您的記錄,提供個人化「搜尋」和其他服務。 觸控筆筆記應用程式 -朗讀模式 +閱讀模式 此檔案可能隱藏惡意軟件 從其他裝置分享的文字 在上鎖畫面上顯示最新筆記 @@ -6693,7 +6693,7 @@ 有 1 個同「」相關嘅搜尋結果 開啟 Wi-Fi 網絡清單 接受並繼續 -此頁面上無法使用朗讀模式 +閱讀模式無法在此頁面上使用 支援的連結 變更您的搜尋設定為: {NUM_TABS,plural, =1{未命名的群組 - 1 個分頁}other{未命名的群組 - # 個分頁}} @@ -8297,7 +8297,7 @@ 已由管理員安裝 前往網頁驗證入口登入網頁 如要建立並測試您的應用程式,請啟用「Android 偵錯橋接器」(ADB)。請注意,此操作允許安裝未經 Google 驗證的 Android 應用程式,並且需要恢復原廠設定才能停用。 -如要以簡化檢視模式顯示此頁面,請開啟側面板,並選取 [朗讀模式] +如要簡化此頁面,請開啟側面板並選取 [閱讀模式] JavaScript 記憶體使用量 必須提供 PIN 進一步瞭解網站建議的廣告 diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_zh-TW.xtb chromium-119.0.6045.159/chrome/app/resources/generated_resources_zh-TW.xtb --- chromium-119.0.6045.105/chrome/app/resources/generated_resources_zh-TW.xtb 2023-11-01 18:10:09.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/generated_resources_zh-TW.xtb 2023-11-14 22:56:24.000000000 +0000 @@ -1782,7 +1782,7 @@ 已通過 這個網站可以讀取已複製到剪貼簿的文字和圖片。 顯示應用程式 -以唯讀模式開啟 +以閱讀模式開啟 當附近的裝置正在分享內容時 完成後開啟(&D) 使用你的 IP 位址判定所在位置 diff -Nru chromium-119.0.6045.105/chrome/app/resources/google_chrome_strings_eu.xtb chromium-119.0.6045.159/chrome/app/resources/google_chrome_strings_eu.xtb --- chromium-119.0.6045.105/chrome/app/resources/google_chrome_strings_eu.xtb 2023-11-01 18:10:09.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/google_chrome_strings_eu.xtb 2023-11-14 22:56:25.000000000 +0000 @@ -59,7 +59,7 @@ Profil bakoitzak Chrome-ko informazio propioa dauka; adibidez, laster-markak, historia, pasahitzak eta beste Ezin izan da instalatu. Saiatu berriro. Beste kontu batek dagoeneko hasita dauka saioa. Arakatze-jarduerak bereizita edukitzeko, Chrome-k profil bat sor dezake zuretzat. -Probak abian diren bitartean, iragarkien neurketari esker, bisitatzen dituzun webguneek Chrome-ri informazioa eska diezaiokete. Informazio horren bidez, webguneek beren iragarkien errendimendua neur dezakete. Webguneen artean ahalik eta informazio gutxien transferituta mugatzen du iragarkien neurketak webguneen arteko jarraipena. +Probak abian diren bitartean, iragarkien neurketari esker, bisitatzen dituzun webguneek Chrome-ri informazioa eska diezaiokete. Informazio horren bidez, webguneek beren iragarkien errendimendua neur dezakete. Webguneen artean ahalik eta informazio gutxien transferituta mugatzen du iragarkien neurketak webgunearteko jarraipena. Etorkizunean Google Chrome-ren eguneratzeak eskuratzeko, Windows 10 edo bertsio berriago bat beharko duzu. Ordenagailua Windows 8 erabiltzen ari da. ChromeOS Flex-en baldintzak Chrome-tik irten nahi duzu hala ere? @@ -207,7 +207,7 @@ Babes handiagoa eskaintzen du phishingaren eta malwarearen aurka Chrome - Hasi saioa sarean - Beste eragiketa bat ari da egiten Google Chrome. Saiatu berriro geroago. -Iragarkien neurketari esker, bisitatzen dituzun webguneek Chrome-ri informazioa eska diezaiokete. Informazio horren bidez, webguneek beren iragarkien errendimendua neur dezakete. Webguneen artean ahalik eta informazio gutxien transferituta mugatzen du iragarkien neurketak webguneen arteko jarraipena. +Iragarkien neurketari esker, bisitatzen dituzun webguneek Chrome-ri informazioa eska diezaiokete. Informazio horren bidez, webguneek beren iragarkien errendimendua neur dezakete. Webguneen artean ahalik eta informazio gutxien transferituta mugatzen du iragarkien neurketak webgunearteko jarraipena. Google Chrome-rekin, telefono-zenbakietan klik egin dezakezu Skype bidez horietara deitzeko! gisa hasi duzu saioa. Laster-markak, historia eta bestelako ezarpenak atzi ditzakezu saioa hasita daukaten gailu guztien bidez. Joan Chrome-ren jakinarazpen-ezarpenetara diff -Nru chromium-119.0.6045.105/chrome/app/resources/google_chrome_strings_fa.xtb chromium-119.0.6045.159/chrome/app/resources/google_chrome_strings_fa.xtb --- chromium-119.0.6045.105/chrome/app/resources/google_chrome_strings_fa.xtb 2023-11-01 18:10:09.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/google_chrome_strings_fa.xtb 2023-11-14 22:56:25.000000000 +0000 @@ -184,7 +184,7 @@ در حال نصب... ‏نصب‌کننده در خارج کردن آرشیو از حالت فشرده ناموفق بود. لطفاً دوباره Google Chrome را بارگیری کنید. ‏Chrome به‌زودی بسته می‌شود و داده‌ها را حذف می‌کند -‏‫Chrome این بارگیری را مسدود کرد زیرا این سایت از اتصال امن استفاده نمی‌کند و ممکن است فایل دستکاری شده باشد +‏‫Chrome این بارگیری را مسدود کرد زیرا این سایت از اتصال ایمن استفاده نمی‌کند و ممکن است فایل دستکاری شده باشد {0,plural, =1{‏Chrome را ظرف یک روز راه‌اندازی مجدد کنید}one{‏Chrome را ظرف # روز راه‌اندازی مجدد کنید}other{‏Chrome را ظرف # روز راه‌اندازی مجدد کنید}} ‏Chrome نمی‌تواند گذرواژه‌هایتان را بررسی کند. بعد از ۲۴ ساعت دوباره امتحان کنید یا گذرواژه‌ها را در «حساب Google» خود بررسی کنید. درحال لغو کردن… diff -Nru chromium-119.0.6045.105/chrome/app/resources/google_chrome_strings_pl.xtb chromium-119.0.6045.159/chrome/app/resources/google_chrome_strings_pl.xtb --- chromium-119.0.6045.105/chrome/app/resources/google_chrome_strings_pl.xtb 2023-11-01 18:10:09.000000000 +0000 +++ chromium-119.0.6045.159/chrome/app/resources/google_chrome_strings_pl.xtb 2023-11-14 22:56:25.000000000 +0000 @@ -197,7 +197,7 @@ Wersja deweloperska Google Chrome (mDNS-In) Pobieranie ukończone. Chrome pomaga chronić Cię przed naruszeniami bezpieczeństwa danych, niebezpiecznymi rozszerzeniami i innymi zagrożeniami. -Rozszerzenie zostało dodane do Chrome + – dodano do Chrome Chrome nie może sprawdzić haseł, jeśli się nie zalogujesz Aby otrzymywać w przyszłości aktualizacje Google Chrome, musisz mieć system macOS 10.15 lub nowszy. Na tym komputerze jest zainstalowany system macOS 10.13. Silniejsza ochrona lepiej chroni przed phishingiem i złośliwym oprogramowaniem diff -Nru chromium-119.0.6045.105/chrome/browser/about_flags.cc chromium-119.0.6045.159/chrome/browser/about_flags.cc --- chromium-119.0.6045.105/chrome/browser/about_flags.cc 2023-11-01 18:10:09.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/about_flags.cc 2023-11-14 22:56:25.000000000 +0000 @@ -533,16 +533,33 @@ const FeatureEntry::FeatureParam kCCTRealTimeEngagementSignalsParamFakeValues[] = {{"real_values", "false"}}; -const FeatureEntry::FeatureParam - kCCTPageInsightsHubAutotriggerDurationTesting[] = { - {"page_insights_can_autotrigger_after_end", "1000"} // 1s -}; - -const FeatureEntry::FeatureVariation - kCCTPageInsightsHubAutotriggerDurationVariations[] = { - {"with fast peek trigger", - kCCTPageInsightsHubAutotriggerDurationTesting, - std::size(kCCTPageInsightsHubAutotriggerDurationTesting), nullptr}}; +const FeatureEntry::FeatureParam kCCTPageInsightsHubFastPeekTriggerParam = { + "page_insights_can_autotrigger_after_end", "1000"}; // 1s +const FeatureEntry::FeatureParam kCCTPageInsightsHubShorterFullSizeParam = { + "page_insights_full_height_ratio", "0.775"}; +const FeatureEntry::FeatureParam kCCTPageInsightsHubShorterPeekSizeParam = { + "page_insights_peek_height_ratio", "0.13"}; +const FeatureEntry::FeatureParam + kCCTPageInsightsHubShorterPeekWithPrivacySizeParam = { + "page_insights_peek_with_privacy_height_ratio", "0.2"}; +const FeatureEntry::FeatureParam kCCTPageInsightsHubFastPeekTriggerParams[] = { + kCCTPageInsightsHubFastPeekTriggerParam}; +const FeatureEntry::FeatureParam kCCTPageInsightsHubShorterSheetParams[] = { + kCCTPageInsightsHubShorterFullSizeParam, + kCCTPageInsightsHubShorterPeekSizeParam, + kCCTPageInsightsHubShorterPeekWithPrivacySizeParam}; +const FeatureEntry::FeatureParam kCCTPageInsightsHubBothParams[] = { + kCCTPageInsightsHubFastPeekTriggerParam, + kCCTPageInsightsHubShorterFullSizeParam, + kCCTPageInsightsHubShorterPeekSizeParam, + kCCTPageInsightsHubShorterPeekWithPrivacySizeParam}; +const FeatureEntry::FeatureVariation kCCTPageInsightsHubVariations[] = { + {"with fast peek trigger", kCCTPageInsightsHubFastPeekTriggerParams, + std::size(kCCTPageInsightsHubFastPeekTriggerParams), nullptr}, + {"with shorter sheet", kCCTPageInsightsHubShorterSheetParams, + std::size(kCCTPageInsightsHubShorterSheetParams), nullptr}, + {"with both", kCCTPageInsightsHubBothParams, + std::size(kCCTPageInsightsHubBothParams), nullptr}}; const FeatureEntry::FeatureVariation kCCTRealTimeEngagementSignalsVariations[] = {{"Send real values", kCCTRealTimeEngagementSignalsParamRealValues, @@ -7494,10 +7511,9 @@ #if BUILDFLAG(IS_ANDROID) {"cct-page-insights-hub", flag_descriptions::kCCTPageInsightsHubName, flag_descriptions::kCCTPageInsightsHubDescription, kOsAndroid, - FEATURE_WITH_PARAMS_VALUE_TYPE( - chrome::android::kCCTPageInsightsHub, - kCCTPageInsightsHubAutotriggerDurationVariations, - "CCTPageInsightsHubAutotriggerDuration")}, + FEATURE_WITH_PARAMS_VALUE_TYPE(chrome::android::kCCTPageInsightsHub, + kCCTPageInsightsHubVariations, + "CCTPageInsightsHubVariations")}, {"cct-prevent-touches", flag_descriptions::kCCTPreventTouchesName, flag_descriptions::kCCTPreventTouchesDescription, kOsAndroid, FEATURE_VALUE_TYPE(chrome::android::kCCTPreventTouches)}, @@ -7592,6 +7608,11 @@ flag_descriptions::kShowForceRespectUiGainsToggleDescription, kOsCrOS | kOsLacros, FEATURE_VALUE_TYPE(media::kShowForceRespectUiGainsToggle)}, + {"audio-flexible-loopback-for-system-loopback", + flag_descriptions::kAudioFlexibleLoopbackForSystemLoopbackName, + flag_descriptions::kAudioFlexibleLoopbackForSystemLoopbackDescription, + kOsCrOS | kOsLacros, + FEATURE_VALUE_TYPE(media::kAudioFlexibleLoopbackForSystemLoopback)}, #endif {"enable-css-selector-fragment-anchor", diff -Nru chromium-119.0.6045.105/chrome/browser/ash/BUILD.gn chromium-119.0.6045.159/chrome/browser/ash/BUILD.gn --- chromium-119.0.6045.105/chrome/browser/ash/BUILD.gn 2023-11-01 18:10:10.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ash/BUILD.gn 2023-11-14 22:56:25.000000000 +0000 @@ -1647,6 +1647,8 @@ "login/demo_mode/demo_mode_dimensions.h", "login/demo_mode/demo_mode_resources_remover.cc", "login/demo_mode/demo_mode_resources_remover.h", + "login/demo_mode/demo_mode_window_closer.cc", + "login/demo_mode/demo_mode_window_closer.h", "login/demo_mode/demo_session.cc", "login/demo_mode/demo_session.h", "login/demo_mode/demo_setup_controller.cc", diff -Nru chromium-119.0.6045.105/chrome/browser/ash/crosapi/browser_manager.cc chromium-119.0.6045.159/chrome/browser/ash/crosapi/browser_manager.cc --- chromium-119.0.6045.105/chrome/browser/ash/crosapi/browser_manager.cc 2023-11-01 18:10:10.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ash/crosapi/browser_manager.cc 2023-11-14 22:56:25.000000000 +0000 @@ -614,6 +614,7 @@ // user still "logged in" (UserManager::IsUserLoggedIn() == true). !base::CommandLine::ForCurrentProcess()->HasSwitch( ash::switches::kLoginUser) && + crosapi::browser_util::IsCPUSupportedByLacros() && base::FeatureList::IsEnabled(kLacrosLaunchAtLoginScreen)), disabled_for_testing_(g_disabled_for_testing), device_ownership_waiter_(std::make_unique()) { diff -Nru chromium-119.0.6045.105/chrome/browser/ash/crosapi/browser_manager.h chromium-119.0.6045.159/chrome/browser/ash/crosapi/browser_manager.h --- chromium-119.0.6045.105/chrome/browser/ash/crosapi/browser_manager.h 2023-11-01 18:10:10.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ash/crosapi/browser_manager.h 2023-11-14 22:56:25.000000000 +0000 @@ -454,6 +454,9 @@ // Called when lacros-chrome is terminated and successfully wait(2)ed. void OnLacrosChromeTerminated(); + // Called as soon as the login prompt is visible. + void OnLoginPromptVisible(); + // ID for the current Crosapi connection. // Available only when lacros-chrome is running. absl::optional crosapi_id_; @@ -610,14 +613,11 @@ // Reload and possibly relaunch Lacros. void HandleReload(); - // Called as soon as the login prompt is visible. - void OnLoginPromptVisible(); - // session_manager::SessionManagerObserver: void OnSessionStateChanged() override; - // Pre-launch Lacros at login screen. - void PrelaunchAtLoginScreen(); + // Pre-launch Lacros at login screen. (Can be overridden by tests). + virtual void PrelaunchAtLoginScreen(); // Resume Lacros startup process after login. void ResumeLaunch(); diff -Nru chromium-119.0.6045.105/chrome/browser/ash/crosapi/browser_manager_unittest.cc chromium-119.0.6045.159/chrome/browser/ash/crosapi/browser_manager_unittest.cc --- chromium-119.0.6045.105/chrome/browser/ash/crosapi/browser_manager_unittest.cc 2023-11-01 18:10:10.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ash/crosapi/browser_manager_unittest.cc 2023-11-14 22:56:25.000000000 +0000 @@ -83,6 +83,12 @@ int start_count() const { return start_count_; } + void PrelaunchAtLoginScreen() override { ++prelaunch_count_; } + + int prelaunch_count() const { return prelaunch_count_; } + + void TriggerLoginPromptVisible() { OnLoginPromptVisible(); } + void SetStatePublic(State state) { SetState(state); } void SimulateLacrosTermination() { @@ -105,6 +111,7 @@ using BrowserManager::State; int start_count_ = 0; + int prelaunch_count_ = 0; }; class MockVersionServiceDelegate : public BrowserVersionServiceAsh::Delegate { @@ -213,6 +220,13 @@ // Need to reverse the state back to non set. crosapi::browser_util::ClearLacrosAvailabilityCacheForTest(); + + // Reset any CPU restrictions. + crosapi::browser_util::SetCpuAvailabilityForTesting(absl::nullopt); + + // Reset the session manager state. + session_manager::SessionManager::Get()->SetSessionState( + session_manager::SessionState::UNKNOWN); } enum class UserType { @@ -488,4 +502,49 @@ fake_browser_manager_->SimulateLacrosStart(&mock_browser_service_); } +TEST_F(BrowserManagerTest, DisallowUseOfLacrosOnOldCPUs) { + // As the CTOR needs to be tested, parts of the objects need to be destroyed + // and re-created. + shelf_controller_.reset(); + version_service_delegate_ = nullptr; + browser_loader_ = nullptr; + fake_browser_manager_.reset(); + + // Set the used CPU type to really old. + crosapi::browser_util::SetCpuAvailabilityForTesting(false); + + // Now re-create the required objects. + auto fake_cros_component_manager = + base::MakeRefCounted(); + std::unique_ptr browser_loader = + std::make_unique>( + fake_cros_component_manager); + browser_loader_ = browser_loader.get(); + + fake_browser_manager_ = std::make_unique( + std::move(browser_loader), component_update_service_.get()); + + // Simulate that we are ready and the log in screen is shown. + session_manager::SessionManager::Get()->SetSessionState( + session_manager::SessionState::LOGIN_PRIMARY); + + // Trigger the pre-launch logic as the log in screen is ready. + fake_browser_manager_->TriggerLoginPromptVisible(); + + // Expect the prelaunch logic was not called as the CPU is not sufficient. + EXPECT_EQ(fake_browser_manager_->prelaunch_count(), 0); +} + +TEST_F(BrowserManagerTest, AllowUseOfLacrosOnNormalCPUs) { + // Simulate that we are ready and the log in screen is shown. + session_manager::SessionManager::Get()->SetSessionState( + session_manager::SessionState::LOGIN_PRIMARY); + + // Trigger the pre-launch logic as the log in screen is ready. + fake_browser_manager_->TriggerLoginPromptVisible(); + + // Expect that the prelaunch logic was called. + EXPECT_EQ(fake_browser_manager_->prelaunch_count(), 1); +} + } // namespace crosapi diff -Nru chromium-119.0.6045.105/chrome/browser/ash/crosapi/browser_util.cc chromium-119.0.6045.159/chrome/browser/ash/crosapi/browser_util.cc --- chromium-119.0.6045.105/chrome/browser/ash/crosapi/browser_util.cc 2023-11-01 18:10:10.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ash/crosapi/browser_util.cc 2023-11-14 22:56:25.000000000 +0000 @@ -54,6 +54,7 @@ namespace { bool g_profile_migration_completed_for_test = false; +absl::optional g_cpu_override_for_test = absl::nullopt; // At session start the value for LacrosAvailability logic is applied and the // result is stored in this variable which is used after that as a cache. @@ -190,7 +191,7 @@ // with given LacrosAvailability policy. bool IsLacrosAllowedInternal(const User* user, LacrosAvailability lacros_availability) { - if (IsLacrosDisallowedByCommand()) { + if (IsLacrosDisallowedByCommand() || !IsCPUSupportedByLacros()) { // This happens when Ash is restarted in multi-user session, meaning there // are more than two users logged in to the device. This will not cause an // accidental removal of Lacros data because for the primary user, the fact @@ -1092,4 +1093,24 @@ base::FeatureList::IsEnabled(ash::features::kAllowDevtoolsInSystemUI); } +// Return true if the CPU of this system is capable to run Lacros. +bool IsCPUSupportedByLacros() { + if (g_cpu_override_for_test.has_value()) { + return g_cpu_override_for_test.value(); + } +#ifdef ARCH_CPU_X86_64 + // Some very old Flex devices are not capable to support the -v2 instruction + // set. Those CPU's should not use Lacros as Lacros has only one binary + // for all intel platforms. As 'x86-64-v2' does not work on the build server, + // we check against SSE4.2 here which should be as as good. + return __builtin_cpu_supports("sse4.2"); +#else + return true; +#endif +} + +void SetCpuAvailabilityForTesting(absl::optional value) { + g_cpu_override_for_test = value; +} + } // namespace crosapi::browser_util diff -Nru chromium-119.0.6045.105/chrome/browser/ash/crosapi/browser_util.h chromium-119.0.6045.159/chrome/browser/ash/crosapi/browser_util.h --- chromium-119.0.6045.105/chrome/browser/ash/crosapi/browser_util.h 2023-11-01 18:10:10.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ash/crosapi/browser_util.h 2023-11-14 22:56:25.000000000 +0000 @@ -344,6 +344,13 @@ void SetCachedLacrosAvailabilityForTesting( ash::standalone_browser::LacrosAvailability lacros_availability); +// Exposed for testing. When |value| is given, the CPU availability gets +// overridden with the value. +void SetCpuAvailabilityForTesting(absl::optional value); + +// Check if the CPU at hand is able to run Lacros. +bool IsCPUSupportedByLacros(); + // Exposed for testing. Returns the lacros integration suggested by the policy // lacros-availability, modified by Finch flags and user flags as appropriate. ash::standalone_browser::LacrosAvailability diff -Nru chromium-119.0.6045.105/chrome/browser/ash/crosapi/browser_util_unittest.cc chromium-119.0.6045.159/chrome/browser/ash/crosapi/browser_util_unittest.cc --- chromium-119.0.6045.105/chrome/browser/ash/crosapi/browser_util_unittest.cc 2023-11-01 18:10:10.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ash/crosapi/browser_util_unittest.cc 2023-11-14 22:56:25.000000000 +0000 @@ -118,6 +118,7 @@ void TearDown() override { ash::system::StatisticsProvider::SetTestProvider(nullptr); fake_user_manager_.Reset(); + browser_util::SetCpuAvailabilityForTesting(absl::nullopt); } void AddRegularUser(const std::string& email) { @@ -391,6 +392,19 @@ EXPECT_EQ(browser_util::LacrosMode::kOnly, browser_util::GetLacrosMode()); } +TEST_F(BrowserUtilTest, LacrosDisabledForOldHardware) { + AddRegularUser("user@test.com"); + base::test::ScopedFeatureList feature_list; + feature_list.InitWithFeatures({ash::features::kLacrosOnly}, {}); + EXPECT_TRUE(browser_util::IsLacrosEnabled()); + EXPECT_EQ(browser_util::LacrosMode::kOnly, browser_util::GetLacrosMode()); + + browser_util::SetCpuAvailabilityForTesting(false); + EXPECT_EQ(browser_util::LacrosMode::kDisabled, browser_util::GetLacrosMode()); + browser_util::SetCpuAvailabilityForTesting(true); + EXPECT_EQ(browser_util::LacrosMode::kOnly, browser_util::GetLacrosMode()); +} + TEST_F(BrowserUtilTest, LacrosOnlyBrowserAllowed) { AddRegularUser("user@test.com"); EXPECT_TRUE(browser_util::IsLacrosOnlyBrowserAllowed()); diff -Nru chromium-119.0.6045.105/chrome/browser/ash/login/app_mode/kiosk_launch_controller.cc chromium-119.0.6045.159/chrome/browser/ash/login/app_mode/kiosk_launch_controller.cc --- chromium-119.0.6045.105/chrome/browser/ash/login/app_mode/kiosk_launch_controller.cc 2023-11-01 18:10:10.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ash/login/app_mode/kiosk_launch_controller.cc 2023-11-14 22:56:26.000000000 +0000 @@ -411,7 +411,12 @@ // This is needed to trigger input method extensions being loaded. profile->InitChromeOSPreferences(); - network_ui_controller_->SetProfile(profile); + + if (cleaned_up_) { + LOG(WARNING) << "Profile is loaded after kiosk launch has been aborted."; + return; + } + CHECK_DEREF(network_ui_controller_.get()).SetProfile(profile); InitializeKeyboard(); LaunchLacros(); diff -Nru chromium-119.0.6045.105/chrome/browser/ash/login/app_mode/kiosk_launch_controller_unittest.cc chromium-119.0.6045.159/chrome/browser/ash/login/app_mode/kiosk_launch_controller_unittest.cc --- chromium-119.0.6045.105/chrome/browser/ash/login/app_mode/kiosk_launch_controller_unittest.cc 2023-11-01 18:10:11.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ash/login/app_mode/kiosk_launch_controller_unittest.cc 2023-11-14 22:56:26.000000000 +0000 @@ -260,7 +260,9 @@ KioskLaunchStateToString(state)); } - void CancelAppLaunch() { controller_->HandleAccelerator(kAppLaunchBailout); } + void CancelAppLaunch() { controller().HandleAccelerator(kAppLaunchBailout); } + + void CleanUpController() { controller().CleanUp(); } private: void SetDeviceEnterpriseManaged() { @@ -326,6 +328,19 @@ EXPECT_TRUE(launcher().IsInitialized()); } +// Late profile load should not launch kiosk session. +// Covers b/304145218. +TEST_F(KioskLaunchControllerTest, ProfileLoadedAfterCleanUp) { + controller().Start(kiosk_app_id(), /*auto_launch=*/false); + EXPECT_THAT(controller(), HasState(AppState::kCreatingProfile, + NetworkUIState::kNotShowing)); + + CleanUpController(); + profile_controls().OnProfileLoaded(profile()); + + EXPECT_EQ(num_launchers_created(), 0); +} + TEST_F(KioskLaunchControllerTest, AppInstallingShouldUpdateSplashScreen) { controller().Start(kiosk_app_id(), /*auto_launch=*/false); VerifyLaunchStateCrashKey(KioskLaunchState::kLauncherStarted); diff -Nru chromium-119.0.6045.105/chrome/browser/ash/login/demo_mode/demo_mode_window_closer.cc chromium-119.0.6045.159/chrome/browser/ash/login/demo_mode/demo_mode_window_closer.cc --- chromium-119.0.6045.105/chrome/browser/ash/login/demo_mode/demo_mode_window_closer.cc 1970-01-01 00:00:00.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ash/login/demo_mode/demo_mode_window_closer.cc 2023-11-14 22:56:26.000000000 +0000 @@ -0,0 +1,85 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ash/login/demo_mode/demo_mode_window_closer.h" + +#include "base/metrics/histogram_functions.h" +#include "chrome/browser/apps/app_service/app_service_proxy_ash.h" +#include "chrome/browser/apps/app_service/app_service_proxy_factory.h" +#include "chrome/browser/profiles/profile_manager.h" +#include "components/services/app_service/public/cpp/app_registry_cache.h" +#include "components/services/app_service/public/cpp/instance_update.h" +#include "content/public/browser/browser_thread.h" +#include "ui/views/widget/widget.h" + +namespace { + +constexpr char kAndroidGMSCorePackage[] = "com.google.android.gms"; + +std::string GetPackageNameFromAppId(const std::string& app_id) { + auto* proxy = apps::AppServiceProxyFactory::GetForProfile( + ProfileManager::GetPrimaryUserProfile()); + + std::string publisher_id; + proxy->AppRegistryCache().ForOneApp(app_id, + [&](const apps::AppUpdate& update) { + publisher_id = update.PublisherId(); + }); + return publisher_id; +} + +void CloseAppWithInstanceId(const base::UnguessableToken& instance_id) { + auto* proxy = apps::AppServiceProxyFactory::GetForProfile( + ProfileManager::GetPrimaryUserProfile()); + proxy->InstanceRegistry().ForOneInstance( + instance_id, [](const apps::InstanceUpdate& update) { + auto* widget = views::Widget::GetWidgetForNativeWindow(update.Window()); + widget->CloseWithReason(views::Widget::ClosedReason::kUnspecified); + }); +} + +} // namespace + +DemoModeWindowCloser::DemoModeWindowCloser() { + auto* profile = ProfileManager::GetPrimaryUserProfile(); + + // Some test profiles will not have AppServiceProxy. + if (!apps::AppServiceProxyFactory::IsAppServiceAvailableForProfile(profile)) { + return; + } + + auto* proxy = apps::AppServiceProxyFactory::GetForProfile(profile); + CHECK(proxy); + scoped_observation_.Observe(&proxy->InstanceRegistry()); +} + +DemoModeWindowCloser::~DemoModeWindowCloser() = default; + +void DemoModeWindowCloser::OnInstanceUpdate( + const apps::InstanceUpdate& update) { + if (!gms_core_app_id_.empty()) { + if (update.AppId() != gms_core_app_id_) { + return; + } + } else if (GetPackageNameFromAppId(update.AppId()) != + kAndroidGMSCorePackage) { + return; + } + + gms_core_app_id_ = update.AppId(); + // Post the task to close only when the window is being created. + if (update.IsCreation()) { + base::UmaHistogramBoolean("DemoMode.GMSCoreDialogShown", true); + content::GetUIThreadTaskRunner({})->PostTask( + FROM_HERE, + base::BindOnce(&CloseAppWithInstanceId, update.InstanceId())); + } +} + +void DemoModeWindowCloser::OnInstanceRegistryWillBeDestroyed( + apps::InstanceRegistry* cache) { + if (scoped_observation_.GetSource() == cache) { + scoped_observation_.Reset(); + } +} diff -Nru chromium-119.0.6045.105/chrome/browser/ash/login/demo_mode/demo_mode_window_closer.h chromium-119.0.6045.159/chrome/browser/ash/login/demo_mode/demo_mode_window_closer.h --- chromium-119.0.6045.105/chrome/browser/ash/login/demo_mode/demo_mode_window_closer.h 1970-01-01 00:00:00.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ash/login/demo_mode/demo_mode_window_closer.h 2023-11-14 22:56:26.000000000 +0000 @@ -0,0 +1,32 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_ASH_LOGIN_DEMO_MODE_DEMO_MODE_WINDOW_CLOSER_H_ +#define CHROME_BROWSER_ASH_LOGIN_DEMO_MODE_DEMO_MODE_WINDOW_CLOSER_H_ + +#include "base/scoped_observation.h" +#include "components/services/app_service/public/cpp/instance_registry.h" + +// Used to close the GMSCore dialog window which disrupts the attract +// loop during demo mode sessions. +class DemoModeWindowCloser : public apps::InstanceRegistry::Observer { + public: + DemoModeWindowCloser(); + DemoModeWindowCloser(const DemoModeWindowCloser&) = delete; + DemoModeWindowCloser& operator=(const DemoModeWindowCloser&) = delete; + ~DemoModeWindowCloser() override; + + // apps::InstanceRegistry::Observer: + void OnInstanceUpdate(const apps::InstanceUpdate& update) override; + void OnInstanceRegistryWillBeDestroyed( + apps::InstanceRegistry* cache) override; + + private: + std::string gms_core_app_id_; + base::ScopedObservation + scoped_observation_{this}; +}; + +#endif // CHROME_BROWSER_ASH_LOGIN_DEMO_MODE_DEMO_MODE_WINDOW_CLOSER_H_ diff -Nru chromium-119.0.6045.105/chrome/browser/ash/login/demo_mode/demo_session.cc chromium-119.0.6045.159/chrome/browser/ash/login/demo_mode/demo_session.cc --- chromium-119.0.6045.105/chrome/browser/ash/login/demo_mode/demo_session.cc 2023-11-01 18:10:11.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ash/login/demo_mode/demo_session.cc 2023-11-14 22:56:26.000000000 +0000 @@ -7,6 +7,7 @@ #include #include +#include "ash/constants/ash_features.h" #include "ash/constants/ash_pref_names.h" #include "ash/constants/ash_switches.h" #include "ash/public/cpp/locale_update_controller.h" @@ -36,6 +37,7 @@ #include "chrome/browser/ash/file_manager/path_util.h" #include "chrome/browser/ash/login/demo_mode/demo_components.h" #include "chrome/browser/ash/login/demo_mode/demo_mode_dimensions.h" +#include "chrome/browser/ash/login/demo_mode/demo_mode_window_closer.h" #include "chrome/browser/ash/login/demo_mode/demo_setup_controller.h" #include "chrome/browser/ash/login/users/chrome_user_manager.h" #include "chrome/browser/ash/policy/core/browser_policy_connector_ash.h" @@ -607,6 +609,11 @@ // Register the device with in the A/A experiment RegisterDemoModeAAExperiment(); + // Create the window closer. + // TODO(b/302583338) Remove this when the issue with GMSCore gets fixed. + if (ash::features::IsDemoModeGMSCoreWindowCloserEnabled()) { + window_closer_ = std::make_unique(); + } break; default: break; diff -Nru chromium-119.0.6045.105/chrome/browser/ash/login/demo_mode/demo_session.h chromium-119.0.6045.159/chrome/browser/ash/login/demo_mode/demo_session.h --- chromium-119.0.6045.105/chrome/browser/ash/login/demo_mode/demo_session.h 2023-11-01 18:10:11.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ash/login/demo_mode/demo_session.h 2023-11-14 22:56:26.000000000 +0000 @@ -16,6 +16,7 @@ #include "base/scoped_observation.h" #include "base/values.h" #include "chrome/browser/ash/login/demo_mode/demo_extensions_external_loader.h" +#include "chrome/browser/ash/login/demo_mode/demo_mode_window_closer.h" #include "chrome/browser/component_updater/cros_component_manager.h" #include "chromeos/dbus/power/power_manager_client.h" #include "components/services/app_service/public/cpp/app_registry_cache.h" @@ -247,6 +248,9 @@ // screensaver app takes an extra long time to be shown. std::unique_ptr remove_splash_screen_fallback_timer_; + // Constructed when the demo mode user session starts. + std::unique_ptr window_closer_; + bool splash_screen_removed_ = false; bool screensaver_activated_ = false; diff -Nru chromium-119.0.6045.105/chrome/browser/ash/login/wizard_controller.cc chromium-119.0.6045.159/chrome/browser/ash/login/wizard_controller.cc --- chromium-119.0.6045.105/chrome/browser/ash/login/wizard_controller.cc 2023-11-01 18:10:11.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ash/login/wizard_controller.cc 2023-11-14 22:56:26.000000000 +0000 @@ -480,10 +480,7 @@ previous_screens_.clear(); // Reset `current_screen_` to prevent its usage after OobeUI is gone. - if (current_screen_) { - current_screen_->Hide(); - current_screen_ = nullptr; - } + ResetCurrentScreen(); // Reset screens, they should not access handlers anymore. // TODO(https://crbug.com/1309022): This should probably be removed when all @@ -2304,8 +2301,7 @@ previous_screen = previous_screens_[current_screen_]; } - current_screen_->Hide(); - current_screen_ = nullptr; + ResetCurrentScreen(); if (previous_screen) { if (IsSigninScreen(previous_screen->screen_id())) { @@ -2338,8 +2334,7 @@ } void WizardController::OnUpdateRequiredScreenExit() { - current_screen_->Hide(); - current_screen_ = nullptr; + ResetCurrentScreen(); ShowLoginScreen(); } @@ -2535,9 +2530,7 @@ previous_screens_[new_current] = current_screen_; } - if (current_screen_) { - current_screen_->Hide(); - } + ResetCurrentScreen(); current_screen_ = new_current; @@ -3113,4 +3106,11 @@ ::tpm_manager::TakeOwnershipRequest(), base::DoNothing()); } +void WizardController::ResetCurrentScreen() { + if (current_screen_) { + current_screen_->Hide(); + current_screen_ = nullptr; + } +} + } // namespace ash diff -Nru chromium-119.0.6045.105/chrome/browser/ash/login/wizard_controller.h chromium-119.0.6045.159/chrome/browser/ash/login/wizard_controller.h --- chromium-119.0.6045.105/chrome/browser/ash/login/wizard_controller.h 2023-11-01 18:10:11.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ash/login/wizard_controller.h 2023-11-14 22:56:26.000000000 +0000 @@ -537,6 +537,10 @@ // the TPM being un-owned until enrollment. b/187429309 void MaybeTakeTPMOwnership(); + // Hides the current screen if it's not set to `nullptr` and sets it to + // `nullptr`. + void ResetCurrentScreen(); + std::unique_ptr auto_enrollment_controller_; std::unique_ptr choobe_flow_controller_; std::unique_ptr quickstart_controller_; diff -Nru chromium-119.0.6045.105/chrome/browser/ash/phonehub/attestation_certificate_generator_impl.cc chromium-119.0.6045.159/chrome/browser/ash/phonehub/attestation_certificate_generator_impl.cc --- chromium-119.0.6045.105/chrome/browser/ash/phonehub/attestation_certificate_generator_impl.cc 2023-11-01 18:10:11.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ash/phonehub/attestation_certificate_generator_impl.cc 2023-11-14 22:56:26.000000000 +0000 @@ -3,16 +3,24 @@ // found in the LICENSE file. #include "attestation_certificate_generator_impl.h" + +#include "ash/constants/ash_features.h" #include "base/functional/bind.h" -#include "base/functional/callback_forward.h" #include "base/time/time.h" #include "chrome/browser/ash/attestation/soft_bind_attestation_flow.h" #include "chrome/browser/ash/profiles/profile_helper.h" +#include "chromeos/ash/components/multidevice/logging/logging.h" +#include "chromeos/ash/components/network/network_handler.h" +#include "chromeos/ash/components/network/network_state_handler.h" #include "chromeos/ash/services/device_sync/cryptauth_key_registry_impl.h" #include "components/user_manager/user.h" namespace ash::phonehub { +namespace { +constexpr base::TimeDelta kOfflineRetryTimeout = base::Minutes(1); +} + AttestationCertificateGeneratorImpl::AttestationCertificateGeneratorImpl( Profile* profile, std::unique_ptr @@ -22,25 +30,46 @@ auto key_registry = device_sync::CryptAuthKeyRegistryImpl::Factory::Create( profile->GetPrefs()); key_registry_ = std::move(key_registry); + if (features::IsPhoneHubAttestationRetriesEnabled() && + NetworkHandler::IsInitialized()) { + NetworkHandler::Get()->network_state_handler()->AddObserver(this, + FROM_HERE); + } GenerateCertificate(); } -AttestationCertificateGeneratorImpl::~AttestationCertificateGeneratorImpl() = - default; +AttestationCertificateGeneratorImpl::~AttestationCertificateGeneratorImpl() { + if (features::IsPhoneHubAttestationRetriesEnabled() && + NetworkHandler::IsInitialized()) { + NetworkHandler::Get()->network_state_handler()->RemoveObserver(this, + FROM_HERE); + } +} + +bool AttestationCertificateGeneratorImpl:: + ShouldRegenerateAttestationCertificate() { + if (features::IsPhoneHubAttestationRetriesEnabled() && !is_valid_) { + return true; + } + + if (last_attestation_completed_time_.is_null()) { + return true; + } -void AttestationCertificateGeneratorImpl::RetrieveCertificate( - OnCertificateRetrievedCallback callback) { + if ((last_attestation_completed_time_ - base::Time::NowFromSystemTime()) > + base::Hours(24)) { + return true; + } + return false; +} + +void AttestationCertificateGeneratorImpl::RetrieveCertificate() { // TODO(b/278933392): Add a daily task to update certificate. - // No certificates are cached or existing certificate was generated than 24 - // hours ago. Generating new ones. - if (last_attestation_certificate_generated_time_.is_null() || - (last_attestation_certificate_generated_time_ - base::Time::Now()) - .InHours() > 24) { - callback_ = std::move(callback); + if (ShouldRegenerateAttestationCertificate()) { GenerateCertificate(); return; } - std::move(callback).Run(attestation_certs_, is_valid_); + NotifyCertificateGenerated(attestation_certs_, is_valid_); } void AttestationCertificateGeneratorImpl::GenerateCertificate() { @@ -48,6 +77,7 @@ ProfileHelper::Get()->GetUserByProfile(profile_); if (user == nullptr) { + PA_LOG(WARNING) << __func__ << ": User unavailable for current profile."; OnAttestationCertificateGenerated({}, false); return; } @@ -56,6 +86,7 @@ device_sync::CryptAuthKeyBundle::Name::kUserKeyPair); if (user_key_pair == nullptr) { + PA_LOG(WARNING) << __func__ << ": User missing key pair."; OnAttestationCertificateGenerated({}, false); return; } @@ -73,10 +104,29 @@ bool is_valid) { attestation_certs_ = attestation_certs; is_valid_ = is_valid; - last_attestation_certificate_generated_time_ = base::Time::Now(); - if (!callback_.is_null()) { - std::move(callback_).Run(attestation_certs_, is_valid_); - callback_.Reset(); + last_attestation_completed_time_ = base::Time::NowFromSystemTime(); + NotifyCertificateGenerated(attestation_certs_, is_valid_); +} + +void AttestationCertificateGeneratorImpl::DefaultNetworkChanged( + const NetworkState* network) { + // Only retry when we have an active connected network. + if (!network || !network->IsConnectedState()) { + return; + } + + // Throttle attempts to prevent too many requests. + if ((base::Time::NowFromSystemTime() - + last_attestation_attempt_from_network_change_time_) < + kOfflineRetryTimeout) { + return; + } + + if (ShouldRegenerateAttestationCertificate()) { + last_attestation_attempt_from_network_change_time_ = + base::Time::NowFromSystemTime(); + GenerateCertificate(); } } + } // namespace ash::phonehub diff -Nru chromium-119.0.6045.105/chrome/browser/ash/phonehub/attestation_certificate_generator_impl.h chromium-119.0.6045.159/chrome/browser/ash/phonehub/attestation_certificate_generator_impl.h --- chromium-119.0.6045.105/chrome/browser/ash/phonehub/attestation_certificate_generator_impl.h 2023-11-01 18:10:11.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ash/phonehub/attestation_certificate_generator_impl.h 2023-11-14 22:56:26.000000000 +0000 @@ -11,13 +11,15 @@ #include "base/time/time.h" #include "chrome/browser/ash/attestation/soft_bind_attestation_flow.h" #include "chrome/browser/profiles/profile.h" +#include "chromeos/ash/components/network/network_state_handler_observer.h" #include "chromeos/ash/components/phonehub/public/cpp/attestation_certificate_generator.h" #include "chromeos/ash/services/device_sync/cryptauth_key_registry.h" namespace ash::phonehub { class AttestationCertificateGeneratorImpl - : public AttestationCertificateGenerator { + : public AttestationCertificateGenerator, + public NetworkStateHandlerObserver { public: AttestationCertificateGeneratorImpl( Profile* profile, @@ -27,12 +29,16 @@ ~AttestationCertificateGeneratorImpl() override; // AttestationCertificateGenerator: - void RetrieveCertificate(OnCertificateRetrievedCallback callback) override; + void RetrieveCertificate() override; + + // NetworkStateHandlerObserver: + void DefaultNetworkChanged(const NetworkState* network) override; private: FRIEND_TEST_ALL_PREFIXES(AttestationCertificateGeneratorImplTest, RetrieveCertificateWithoutCache); + bool ShouldRegenerateAttestationCertificate(); void GenerateCertificate(); void OnAttestationCertificateGenerated( const std::vector& attestation_certs, @@ -42,10 +48,10 @@ soft_bind_attestation_flow_; std::unique_ptr key_registry_; raw_ptr profile_; - bool is_valid_; + bool is_valid_ = false; std::vector attestation_certs_; - base::Time last_attestation_certificate_generated_time_; - OnCertificateRetrievedCallback callback_; + base::Time last_attestation_completed_time_; + base::Time last_attestation_attempt_from_network_change_time_; base::WeakPtrFactory weak_ptr_factory_{ this}; }; diff -Nru chromium-119.0.6045.105/chrome/browser/ash/phonehub/attestation_certificate_generator_impl_unittest.cc chromium-119.0.6045.159/chrome/browser/ash/phonehub/attestation_certificate_generator_impl_unittest.cc --- chromium-119.0.6045.105/chrome/browser/ash/phonehub/attestation_certificate_generator_impl_unittest.cc 2023-11-01 18:10:11.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ash/phonehub/attestation_certificate_generator_impl_unittest.cc 2023-11-14 22:56:26.000000000 +0000 @@ -79,7 +79,9 @@ RAW_PTR_EXCLUSION MockCryptAuthKeyRegistry* instance_ = nullptr; }; -class AttestationCertificateGeneratorImplTest : public testing::Test { +class AttestationCertificateGeneratorImplTest + : public testing::Test, + AttestationCertificateGenerator::Observer { public: AttestationCertificateGeneratorImplTest() : profile_manager_(CreateTestingProfileManager()), @@ -91,30 +93,46 @@ base::WrapUnique(user_manager_.get())); user_manager_->AddUser( AccountId::FromUserEmail(profile_->GetProfileUserName())); - auto soft_bind_attestation_flow = - std::make_unique(); - mock_attestation_flow_ = soft_bind_attestation_flow.get(); - attestation_certificate_generator_impl_ = - std::make_unique( - profile_, std::move(soft_bind_attestation_flow)); + } + + ~AttestationCertificateGeneratorImplTest() override { + if (attestation_certificate_generator_impl_) { + attestation_certificate_generator_impl_->RemoveObserver(this); + } } AttestationCertificateGeneratorImplTest( const AttestationCertificateGeneratorImplTest&) = delete; AttestationCertificateGeneratorImplTest& operator=( const AttestationCertificateGeneratorImplTest&) = delete; - ~AttestationCertificateGeneratorImplTest() override = default; - void OnCertificateGenerated(base::RunLoop* wait_loop, - const std::vector& certs, - bool valid) { + void TearDown() override { wait_loop_.reset(); } + + // AttestationCertificateGenerator::Observer: + void OnCertificateGenerated(const std::vector& certs, + bool valid) override { is_valid_ = valid; certs_ = &certs; - wait_loop->Quit(); + if (wait_loop_) { + wait_loop_->Quit(); + } } protected: - const std::vector false_certs_ = {"cert"}; + void Initialize(const std::vector& certs) { + auto soft_bind_attestation_flow = + std::make_unique(); + mock_attestation_flow_ = soft_bind_attestation_flow.get(); + mock_attestation_flow_->SetCertificates(certs); + attestation_certificate_generator_impl_ = + std::make_unique( + profile_, std::move(soft_bind_attestation_flow)); + attestation_certificate_generator_impl_->AddObserver(this); + } + std::unique_ptr wait_loop_; + const std::vector valid_certs_ = {"valid_cert"}; + const std::vector second_valid_certs_ = {"valid_cert_2"}; + const std::vector invalid_certs_ = {}; content::BrowserTaskEnvironment task_environment_; std::unique_ptr attestation_certificate_generator_impl_; @@ -139,29 +157,41 @@ TEST_F(AttestationCertificateGeneratorImplTest, RetrieveCertificateWithoutCache) { - mock_attestation_flow_->SetCertificates(false_certs_); - base::RunLoop wait_loop; + Initialize(valid_certs_); + + wait_loop_ = std::make_unique(); + mock_attestation_flow_->SetCertificates(second_valid_certs_); // Reset the timestamp to force regenerate certificate. - attestation_certificate_generator_impl_ - ->last_attestation_certificate_generated_time_ = base::Time(); - attestation_certificate_generator_impl_->RetrieveCertificate(base::BindOnce( - &AttestationCertificateGeneratorImplTest::OnCertificateGenerated, - base::Unretained(this), &wait_loop)); - wait_loop.Run(); + attestation_certificate_generator_impl_->last_attestation_completed_time_ = + base::Time(); + attestation_certificate_generator_impl_->RetrieveCertificate(); + wait_loop_->Run(); + EXPECT_TRUE(is_valid_); - EXPECT_EQ(*certs_, false_certs_); + EXPECT_EQ(*certs_, second_valid_certs_); } TEST_F(AttestationCertificateGeneratorImplTest, RetrieveCertificateWithCache) { - mock_attestation_flow_->SetCertificates(false_certs_); - base::RunLoop wait_loop; - attestation_certificate_generator_impl_->RetrieveCertificate(base::BindOnce( - &AttestationCertificateGeneratorImplTest::OnCertificateGenerated, - base::Unretained(this), &wait_loop)); - wait_loop.Run(); + Initialize(valid_certs_); + + mock_attestation_flow_->SetCertificates(second_valid_certs_); + wait_loop_ = std::make_unique(); + attestation_certificate_generator_impl_->RetrieveCertificate(); + wait_loop_->Run(); // Used cached result generated in constructor. - EXPECT_FALSE(is_valid_); - EXPECT_EQ(*certs_, std::vector()); + EXPECT_TRUE(is_valid_); + EXPECT_EQ(*certs_, valid_certs_); +} + +TEST_F(AttestationCertificateGeneratorImplTest, RetryInvalidCerts) { + Initialize(invalid_certs_); + + mock_attestation_flow_->SetCertificates(second_valid_certs_); + wait_loop_ = std::make_unique(); + attestation_certificate_generator_impl_->RetrieveCertificate(); + wait_loop_->Run(); + EXPECT_TRUE(is_valid_); + EXPECT_EQ(*certs_, second_valid_certs_); } } // namespace ash::phonehub diff -Nru chromium-119.0.6045.105/chrome/browser/back_press/android/java/src/org/chromium/chrome/browser/back_press/BackPressManager.java chromium-119.0.6045.159/chrome/browser/back_press/android/java/src/org/chromium/chrome/browser/back_press/BackPressManager.java --- chromium-119.0.6045.105/chrome/browser/back_press/android/java/src/org/chromium/chrome/browser/back_press/BackPressManager.java 2023-11-01 18:10:11.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/back_press/android/java/src/org/chromium/chrome/browser/back_press/BackPressManager.java 2023-11-14 22:56:26.000000000 +0000 @@ -43,8 +43,8 @@ private static final SparseIntArray sMetricsMap; private static final int sMetricsMaxValue; static { - // Max value is 18 - 1 obsolete value +1 for 0 indexing = 18 elements. - SparseIntArray map = new SparseIntArray(18); + // Max value is 19 - 1 obsolete value +1 for 0 indexing = 19 elements. + SparseIntArray map = new SparseIntArray(19); map.put(Type.TEXT_BUBBLE, 0); map.put(Type.VR_DELEGATE, 1); // map.put(Type.AR_DELEGATE, 2); @@ -64,7 +64,10 @@ map.put(Type.FIND_TOOLBAR, 16); map.put(Type.LOCATION_BAR, 17); map.put(Type.XR_DELEGATE, 18); - sMetricsMaxValue = 19; + // TODO(b/307046796): Remove this once we have found better way to integrate with back + // handling logic. + map.put(Type.PAGE_INSIGHTS_BOTTOM_SHEET, 19); + sMetricsMaxValue = 20; // Add new one here and update array size. sMetricsMap = map; } diff -Nru chromium-119.0.6045.105/chrome/browser/extensions/api/developer_private/extension_info_generator_unittest.cc chromium-119.0.6045.159/chrome/browser/extensions/api/developer_private/extension_info_generator_unittest.cc --- chromium-119.0.6045.105/chrome/browser/extensions/api/developer_private/extension_info_generator_unittest.cc 2023-11-01 18:10:11.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/extensions/api/developer_private/extension_info_generator_unittest.cc 2023-11-14 22:56:26.000000000 +0000 @@ -1082,16 +1082,11 @@ // Tests for supervised users (child accounts). Supervised users are not allowed // to install apps or extensions unless their parent approves. class ExtensionInfoGeneratorUnitTestSupervised - : public ExtensionInfoGeneratorUnitTest, - public testing::WithParamInterface { + : public ExtensionInfoGeneratorUnitTest { public: ExtensionInfoGeneratorUnitTestSupervised() = default; ~ExtensionInfoGeneratorUnitTestSupervised() override = default; - SupervisedUserExtensionsDelegate* GetSupervisedUserExtensionsDelegate() { - return supervised_user_extensions_delegate_.get(); - } - // ExtensionInfoGeneratorUnitTest: ExtensionServiceInitParams GetExtensionServiceInitParams() override { ExtensionServiceInitParams params = @@ -1110,39 +1105,29 @@ supervised_user_test_util:: SetSupervisedUserExtensionsMayRequestPermissionsPref(profile(), true); - supervised_user_extensions_delegate_ = - std::make_unique(profile()); } void TearDown() override { - supervised_user_extensions_delegate_.reset(); ExtensionInfoGeneratorUnitTest::TearDown(); } - - private: - std::unique_ptr - supervised_user_extensions_delegate_; }; // Tests that when an extension is disabled pending permission updates, and the // parent has turned off the "Permissions for sites, apps and extensions" // toggle, then supervised users will see a kite error icon with a tooltip. -TEST_P(ExtensionInfoGeneratorUnitTestSupervised, +TEST_F(ExtensionInfoGeneratorUnitTestSupervised, ParentDisabledPermissionsForSupervisedUsers) { - // Preconditions. + // Extension permissions for supervised users is already enabled on ChromeOS. +#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) base::test::ScopedFeatureList feature_list; - bool extensions_permissions_for_supervised_users_on_desktop = GetParam(); - if (extensions_permissions_for_supervised_users_on_desktop) { - feature_list.InitAndEnableFeature( - supervised_user:: - kEnableExtensionsPermissionsForSupervisedUsersOnDesktop); - } else { - feature_list.InitAndDisableFeature( - supervised_user:: - kEnableExtensionsPermissionsForSupervisedUsersOnDesktop); - } + feature_list.InitAndEnableFeature( + supervised_user::kEnableExtensionsPermissionsForSupervisedUsersOnDesktop); +#endif ASSERT_TRUE(profile()->IsChild()); + std::unique_ptr + supervised_user_extensions_delegate = + std::make_unique(profile()); base::FilePath base_path = data_dir().AppendASCII("permissions_increase"); base::FilePath pem_path = base_path.AppendASCII("permissions.pem"); base::FilePath path = base_path.AppendASCII("v1"); @@ -1160,7 +1145,7 @@ extension_id, disable_reason::DISABLE_CUSTODIAN_APPROVAL_REQUIRED)); // Simulate parent approval for the extension installation. - GetSupervisedUserExtensionsDelegate()->AddExtensionApproval(*extension); + supervised_user_extensions_delegate->AddExtensionApproval(*extension); // The extension should be enabled now. EXPECT_TRUE(registry()->enabled_extensions().Contains(extension_id)); @@ -1184,22 +1169,7 @@ // Verify that the kite icon error tooltip appears for supervised users on // platforms where extensions are enabled for supervised users. - - if (extensions_permissions_for_supervised_users_on_desktop) { - EXPECT_TRUE(info->disable_reasons.parent_disabled_permissions); - } else { -#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS) - EXPECT_TRUE(info->disable_reasons.parent_disabled_permissions); -#else - EXPECT_FALSE(info->disable_reasons.parent_disabled_permissions); -#endif - } + EXPECT_TRUE(info->disable_reasons.parent_disabled_permissions); } - -INSTANTIATE_TEST_SUITE_P( - ExtensionsPermissionsForSupervisedUsersOnDesktopFeature, - ExtensionInfoGeneratorUnitTestSupervised, - testing::Bool()); - #endif // BUILDFLAG(ENABLE_SUPERVISED_USERS) } // namespace extensions diff -Nru chromium-119.0.6045.105/chrome/browser/extensions/api/scripting/scripting_apitest.cc chromium-119.0.6045.159/chrome/browser/extensions/api/scripting/scripting_apitest.cc --- chromium-119.0.6045.105/chrome/browser/extensions/api/scripting/scripting_apitest.cc 2023-11-01 18:10:12.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/extensions/api/scripting/scripting_apitest.cc 2023-11-14 22:56:26.000000000 +0000 @@ -138,7 +138,8 @@ ASSERT_TRUE(RunExtensionTest("scripting/remove_css")) << message_; } -IN_PROC_BROWSER_TEST_F(ScriptingAPITest, DynamicContentScripts) { +// TODO(crbug.com/1491650): Re-enable this test +IN_PROC_BROWSER_TEST_F(ScriptingAPITest, DISABLED_DynamicContentScripts) { ASSERT_TRUE(RunExtensionTest("scripting/dynamic_scripts")) << message_; } diff -Nru chromium-119.0.6045.105/chrome/browser/extensions/api/settings_overrides/settings_overrides_api.cc chromium-119.0.6045.159/chrome/browser/extensions/api/settings_overrides/settings_overrides_api.cc --- chromium-119.0.6045.105/chrome/browser/extensions/api/settings_overrides/settings_overrides_api.cc 2023-11-01 18:10:12.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/extensions/api/settings_overrides/settings_overrides_api.cc 2023-11-14 22:56:26.000000000 +0000 @@ -8,6 +8,7 @@ #include #include +#include "base/feature_list.h" #include "base/lazy_instance.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/prefs/session_startup_pref.h" @@ -54,8 +55,15 @@ const std::string& install_parameter) { std::unique_ptr data; if (search_provider.prepopulated_id) { - data = TemplateURLPrepopulateData::GetPrepopulatedEngine( - prefs, *search_provider.prepopulated_id); + if (base::FeatureList::IsEnabled( + kPrepopulatedSearchEngineOverrideRollout)) { + data = TemplateURLPrepopulateData::GetPrepopulatedEngineFromFullList( + prefs, *search_provider.prepopulated_id); + } else { + data = TemplateURLPrepopulateData::GetPrepopulatedEngine( + prefs, *search_provider.prepopulated_id); + } + if (data) { // We need to override the prepopulate_id and Sync GUID of the generated // engine; otherwise, we will collide the original and also clone the @@ -125,6 +133,13 @@ } // namespace +// Kill-switch for the updated logic to fetch the prepopulated search engine +// for settings override. +// Exposed for tests. To be removed in M122. +BASE_FEATURE(kPrepopulatedSearchEngineOverrideRollout, + "PrepopulatedSearchEngineOverrideRollout", + base::FEATURE_ENABLED_BY_DEFAULT); + SettingsOverridesAPI::SettingsOverridesAPI(content::BrowserContext* context) : profile_(Profile::FromBrowserContext(context)), url_service_(TemplateURLServiceFactory::GetForProfile(profile_)) { diff -Nru chromium-119.0.6045.105/chrome/browser/extensions/api/settings_overrides/settings_overrides_api.h chromium-119.0.6045.159/chrome/browser/extensions/api/settings_overrides/settings_overrides_api.h --- chromium-119.0.6045.105/chrome/browser/extensions/api/settings_overrides/settings_overrides_api.h 2023-11-01 18:10:12.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/extensions/api/settings_overrides/settings_overrides_api.h 2023-11-14 22:56:26.000000000 +0000 @@ -9,6 +9,7 @@ #include #include +#include "base/feature_list.h" #include "base/memory/raw_ptr.h" #include "base/scoped_observation.h" #include "components/search_engines/template_url_service.h" @@ -20,6 +21,8 @@ namespace extensions { +BASE_DECLARE_FEATURE(kPrepopulatedSearchEngineOverrideRollout); + class SettingsOverridesAPI : public BrowserContextKeyedAPI, public ExtensionRegistryObserver { public: diff -Nru chromium-119.0.6045.105/chrome/browser/extensions/api/settings_overrides/settings_overrides_browsertest.cc chromium-119.0.6045.159/chrome/browser/extensions/api/settings_overrides/settings_overrides_browsertest.cc --- chromium-119.0.6045.105/chrome/browser/extensions/api/settings_overrides/settings_overrides_browsertest.cc 2023-11-01 18:10:12.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/extensions/api/settings_overrides/settings_overrides_browsertest.cc 2023-11-14 22:56:26.000000000 +0000 @@ -8,6 +8,7 @@ #include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" #include "build/build_config.h" +#include "chrome/browser/extensions/api/settings_overrides/settings_overrides_api.h" #include "chrome/browser/extensions/extension_browsertest.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/prefs/session_startup_pref.h" @@ -36,11 +37,26 @@ namespace { #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) -// Prepopulated id hardcoded in test_extension. -const int kTestExtensionPrepopulatedId = 3; +// Prepopulated id hardcoded in test_extension. We select it to be a +// prepopulated ID unlikely to match an engine that is part of the TopEngines +// tier for the environments where the test run, but still matches some +// known engine (context around these requirements: https://crbug.com/1500526). +// The default set of engines (when no country is available) has ids 1, 2 +// and 3. The ID 83 is associated with mail.ru, chosen because it's not part +// of the prepopulated set where we run tests. +// TODO(crbug.com/1500526): Update the test to fix the country in such a way +// that we have more control on what is in the prepopulated set or not. +const int kTestExtensionPrepopulatedId = 83; // TemplateURLData with search engines settings from test extension manifest. // chrome/test/data/extensions/settings_override/manifest.json std::unique_ptr TestExtensionSearchEngine(PrefService* prefs) { + // Enforcing that `kTestExtensionPrepopulatedId` is not part of the + // prepopulated set for the current profile's country. + for (auto& data : + TemplateURLPrepopulateData::GetPrepopulatedEngines(prefs, nullptr)) { + EXPECT_NE(data->prepopulate_id, kTestExtensionPrepopulatedId); + } + auto result = std::make_unique(); result->SetShortName(u"name.de"); result->SetKeyword(u"keyword.de"); @@ -55,13 +71,21 @@ result->alternate_urls.push_back("http://www.noo.de/s?q={searchTerms}&id=10"); result->input_encodings.push_back("UTF-8"); - std::unique_ptr prepopulated = - TemplateURLPrepopulateData::GetPrepopulatedEngine( - prefs, kTestExtensionPrepopulatedId); - // Values below do not exist in extension manifest and are taken from - // prepopulated engine with prepopulated_id set in extension manifest. - result->contextual_search_url = prepopulated->contextual_search_url; - result->new_tab_url = prepopulated->new_tab_url; + if (base::FeatureList::IsEnabled(kPrepopulatedSearchEngineOverrideRollout)) { + std::unique_ptr prepopulated = + TemplateURLPrepopulateData::GetPrepopulatedEngineFromFullList( + prefs, kTestExtensionPrepopulatedId); + EXPECT_TRUE(prepopulated); + // Values below do not exist in extension manifest and are taken from + // prepopulated engine with prepopulated_id set in extension manifest. + result->contextual_search_url = prepopulated->contextual_search_url; + result->new_tab_url = prepopulated->new_tab_url; + } else { + // GetPrepopulatedEngineFromFullList() should not be called. The old method + // is not expected to find anything. + EXPECT_FALSE(TemplateURLPrepopulateData::GetPrepopulatedEngine( + prefs, kTestExtensionPrepopulatedId)); + } return result; } @@ -180,14 +204,23 @@ EXPECT_EQ(DefaultSearchManager::FROM_EXTENSION, source); // Check that new tab url is correctly overriden by extension. - TemplateURL ext_turl(*extension_dse, - TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); - - std::string new_tab_url_ext = ext_turl.new_tab_url_ref().ReplaceSearchTerms( - TemplateURLRef::SearchTermsArgs(std::u16string()), - UIThreadSearchTermsData()); - - EXPECT_EQ(new_tab_url_ext, search::GetNewTabPageURL(profile).spec()); + std::string actual_new_tab_url = search::GetNewTabPageURL(profile).spec(); + EXPECT_FALSE(actual_new_tab_url.empty()); + if (base::FeatureList::IsEnabled(kPrepopulatedSearchEngineOverrideRollout)) { + TemplateURL ext_turl(*extension_dse, + TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION); + + std::string new_tab_url_ext = ext_turl.new_tab_url_ref().ReplaceSearchTerms( + TemplateURLRef::SearchTermsArgs(std::u16string()), + UIThreadSearchTermsData()); + + // A custom NTP URL from the prepopulated data is used. + EXPECT_NE(actual_new_tab_url, chrome::kChromeUINewTabPageThirdPartyURL); + EXPECT_EQ(actual_new_tab_url, new_tab_url_ext); + } else { + // The generic third party NTP URL is used. + EXPECT_EQ(actual_new_tab_url, chrome::kChromeUINewTabPageThirdPartyURL); + } // Check that after template url service is loaded, extension dse persists. TemplateURLService* url_service = diff -Nru chromium-119.0.6045.105/chrome/browser/extensions/api/tabs/tabs_apitest.cc chromium-119.0.6045.159/chrome/browser/extensions/api/tabs/tabs_apitest.cc --- chromium-119.0.6045.105/chrome/browser/extensions/api/tabs/tabs_apitest.cc 2023-11-01 18:10:12.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/extensions/api/tabs/tabs_apitest.cc 2023-11-14 22:56:26.000000000 +0000 @@ -162,7 +162,12 @@ ASSERT_TRUE(RunExtensionTest("tabs/basics/pinned")) << message_; } -IN_PROC_BROWSER_TEST_P(ExtensionApiTabTestWithContextType, Move) { +#if BUILDFLAG(IS_LINUX) && !defined(NDEBUG) +#define MAYBE_Move DISABLED_Move +#else +#define MAYBE_Move Move +#endif +IN_PROC_BROWSER_TEST_P(ExtensionApiTabTestWithContextType, MAYBE_Move) { ASSERT_TRUE(RunExtensionTest("tabs/basics/move")) << message_; } diff -Nru chromium-119.0.6045.105/chrome/browser/first_party_sets/first_party_sets_policy_service.cc chromium-119.0.6045.159/chrome/browser/first_party_sets/first_party_sets_policy_service.cc --- chromium-119.0.6045.105/chrome/browser/first_party_sets/first_party_sets_policy_service.cc 2023-11-01 18:10:12.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/first_party_sets/first_party_sets_policy_service.cc 2023-11-14 22:56:26.000000000 +0000 @@ -48,6 +48,9 @@ } bool GetEnabledStateForProfile(Profile* profile) { + if (profile->IsOffTheRecord()) { + return false; + } if (base::FeatureList::IsEnabled( net::features::kForceThirdPartyCookieBlocking)) { return true; @@ -99,9 +102,8 @@ PrefService* prefs = profile->GetPrefs(); pref_enabled_ = GetEnabledStateForProfile(profile); - // If `profile` is a system profile or a guest profile, use an empty config - // and cache filter. - if (profile->IsSystemProfile() || profile->IsGuestSession()) { + if (profile->IsSystemProfile() || profile->IsGuestSession() || + profile->IsOffTheRecord()) { OnReadyToNotifyDelegates(net::FirstPartySetsContextConfig(), net::FirstPartySetsCacheFilter()); return; @@ -177,6 +179,11 @@ void FirstPartySetsPolicyService::OnFirstPartySetsEnabledChanged(bool enabled) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + Profile* profile = Profile::FromBrowserContext(browser_context_); + if (profile && profile->IsOffTheRecord()) { + CHECK(!pref_enabled_); + return; + } if (base::FeatureList::IsEnabled( net::features::kForceThirdPartyCookieBlocking)) { CHECK(pref_enabled_); @@ -191,7 +198,6 @@ // Clear all the existing permission decisions that were made by FPS, since // the enabled/disabled state of FPS has now changed. - Profile* profile = Profile::FromBrowserContext(browser_context_); ClearContentSettings(profile); for (Profile* otr_profile : profile->GetAllOffTheRecordProfiles()) { ClearContentSettings(otr_profile); diff -Nru chromium-119.0.6045.105/chrome/browser/first_party_sets/first_party_sets_policy_service_factory.cc chromium-119.0.6045.159/chrome/browser/first_party_sets/first_party_sets_policy_service_factory.cc --- chromium-119.0.6045.105/chrome/browser/first_party_sets/first_party_sets_policy_service_factory.cc 2023-11-01 18:10:12.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/first_party_sets/first_party_sets_policy_service_factory.cc 2023-11-14 22:56:26.000000000 +0000 @@ -52,7 +52,7 @@ : ProfileKeyedServiceFactory( "FirstPartySetsPolicyService", ProfileSelections::Builder() - .WithRegular(ProfileSelection::kRedirectedToOriginal) + .WithRegular(ProfileSelection::kOwnInstance) // TODO(crbug.com/1418376): Check if this service is needed in // Guest mode. .WithGuest(ProfileSelection::kRedirectedToOriginal) diff -Nru chromium-119.0.6045.105/chrome/browser/first_party_sets/first_party_sets_policy_service_factory_unittest.cc chromium-119.0.6045.159/chrome/browser/first_party_sets/first_party_sets_policy_service_factory_unittest.cc --- chromium-119.0.6045.105/chrome/browser/first_party_sets/first_party_sets_policy_service_factory_unittest.cc 2023-11-01 18:10:12.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/first_party_sets/first_party_sets_policy_service_factory_unittest.cc 2023-11-14 22:56:26.000000000 +0000 @@ -73,7 +73,7 @@ } TEST_F(FirstPartySetsPolicyServiceFactoryTest, - OffTheRecordProfile_SameServiceAsOriginalProfile) { + OffTheRecordProfile_DistinctAndDisabled) { base::test::ScopedFeatureList features; features.InitAndEnableFeature(features::kFirstPartySets); TestingProfile* profile = @@ -82,13 +82,17 @@ FirstPartySetsPolicyService* service = FirstPartySetsPolicyServiceFactory::GetForBrowserContext( profile->GetOriginalProfile()); - - auto otr_profile_id = Profile::OTRProfileID::CreateUniqueForTesting(); ASSERT_NE(service, nullptr); - EXPECT_EQ(service, - FirstPartySetsPolicyServiceFactory::GetForBrowserContext( - profile->GetOffTheRecordProfile(otr_profile_id, - /*create_if_needed=*/true))); + ASSERT_TRUE(service->is_enabled()); + + FirstPartySetsPolicyService* otr_service = + FirstPartySetsPolicyServiceFactory::GetForBrowserContext( + profile->GetOffTheRecordProfile( + Profile::OTRProfileID::CreateUniqueForTesting(), + /*create_if_needed=*/true)); + EXPECT_NE(service, otr_service); + + EXPECT_FALSE(otr_service->is_enabled()); } } // namespace first_party_sets diff -Nru chromium-119.0.6045.105/chrome/browser/first_party_sets/first_party_sets_policy_service_unittest.cc chromium-119.0.6045.159/chrome/browser/first_party_sets/first_party_sets_policy_service_unittest.cc --- chromium-119.0.6045.105/chrome/browser/first_party_sets/first_party_sets_policy_service_unittest.cc 2023-11-01 18:10:12.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/first_party_sets/first_party_sets_policy_service_unittest.cc 2023-11-14 22:56:26.000000000 +0000 @@ -590,6 +590,39 @@ env().RunUntilIdle(); } +TEST_F(FirstPartySetsPolicyServicePrefObserverTest, + OnFirstPartySetsEnabledChanged_OTRProfile) { + testing::NiceMock mock_delegate; + EXPECT_CALL(mock_delegate, SetEnabled(false)).Times(1); + EXPECT_CALL(mock_delegate, SetEnabled(true)).Times(0); + EXPECT_CALL(mock_delegate, NotifyReady(_)).Times(1); + mojo::Receiver + mock_delegate_receiver{&mock_delegate}; + mojo::Remote + mock_delegate_remote; + + mock_delegate_receiver.Bind( + mock_delegate_remote.BindNewPipeAndPassReceiver()); + + FirstPartySetsPolicyService* otr_service = + FirstPartySetsPolicyServiceFactory::GetForBrowserContext( + profile()->GetOffTheRecordProfile( + Profile::OTRProfileID::CreateUniqueForTesting(), + /*create_if_needed=*/true)); + otr_service->ResetForTesting(); + + otr_service->InitForTesting(); + otr_service->AddRemoteAccessDelegate(std::move(mock_delegate_remote)); + + ASSERT_FALSE(otr_service->is_enabled()); + env().RunUntilIdle(); + + otr_service->OnFirstPartySetsEnabledChanged(true); + EXPECT_FALSE(otr_service->is_enabled()); + + env().RunUntilIdle(); +} + TEST_F(FirstPartySetsPolicyServiceTest, NotifiesReadyWithConfigAndCacheFilter) { net::SchemefulSite test_primary(GURL("https://a.test")); net::FirstPartySetEntry test_entry(test_primary, net::SiteType::kPrimary, diff -Nru chromium-119.0.6045.105/chrome/browser/flag-metadata.json chromium-119.0.6045.159/chrome/browser/flag-metadata.json --- chromium-119.0.6045.105/chrome/browser/flag-metadata.json 2023-11-01 18:10:12.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/flag-metadata.json 2023-11-14 22:56:27.000000000 +0000 @@ -457,6 +457,11 @@ "expiry_milestone": 120 }, { + "name": "audio-flexible-loopback-for-system-loopback", + "owners": ["aaronyu@google.com", "chromeos-audio@google.com" ], + "expiry_milestone": 130 + }, + { "name": "audio-hfp-mic-sr", "owners": [ "paulhsia", "cranelw", "chromeos-audio@google.com" ], "expiry_milestone": 120 diff -Nru chromium-119.0.6045.105/chrome/browser/flag_descriptions.cc chromium-119.0.6045.159/chrome/browser/flag_descriptions.cc --- chromium-119.0.6045.105/chrome/browser/flag_descriptions.cc 2023-11-01 18:10:12.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/flag_descriptions.cc 2023-11-14 22:56:27.000000000 +0000 @@ -7336,6 +7336,12 @@ const char kCrOSSystemVoiceIsolationOptionDescription[] = "Enable the options of setting system voice isolation per stream."; +const char kAudioFlexibleLoopbackForSystemLoopbackName[] = + "Use FLEXIBLE_LOOPBACK instead of POST_MIX_LOOPBACK"; +const char kAudioFlexibleLoopbackForSystemLoopbackDescription[] = + "Request a FLEXIBLE_LOOPBACK instead of POST_MIX_LOOPBACK for system " + "loopback"; + const char kCrosPrivacyHubName[] = "Enable ChromeOS Privacy Hub"; const char kCrosPrivacyHubDescription[] = "Enables ChromeOS Privacy Hub."; diff -Nru chromium-119.0.6045.105/chrome/browser/flag_descriptions.h chromium-119.0.6045.159/chrome/browser/flag_descriptions.h --- chromium-119.0.6045.105/chrome/browser/flag_descriptions.h 2023-11-01 18:10:12.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/flag_descriptions.h 2023-11-14 22:56:27.000000000 +0000 @@ -4261,6 +4261,9 @@ extern const char kCrOSSystemVoiceIsolationOptionName[]; extern const char kCrOSSystemVoiceIsolationOptionDescription[]; + +extern const char kAudioFlexibleLoopbackForSystemLoopbackName[]; +extern const char kAudioFlexibleLoopbackForSystemLoopbackDescription[]; #endif // BUILDFLAG(IS_CHROMEOS) #if defined(ARCH_CPU_X86_FAMILY) && BUILDFLAG(IS_CHROMEOS) diff -Nru chromium-119.0.6045.105/chrome/browser/google/google_update_win_unittest.cc chromium-119.0.6045.159/chrome/browser/google/google_update_win_unittest.cc --- chromium-119.0.6045.105/chrome/browser/google/google_update_win_unittest.cc 2023-11-01 18:10:12.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/google/google_update_win_unittest.cc 2023-11-14 22:56:27.000000000 +0000 @@ -14,6 +14,7 @@ #include "base/base_paths.h" #include "base/containers/queue.h" #include "base/functional/bind.h" +#include "base/i18n/string_search.h" #include "base/memory/ref_counted.h" #include "base/path_service.h" #include "base/strings/string_util.h" @@ -57,6 +58,11 @@ return arg.find(str) != arg.npos; } +MATCHER_P(HasSubstrCaseInsensitive, str, "") { + return base::i18n::StringSearchIgnoringCaseAndAccents(str, arg, nullptr, + nullptr); +} + class MockUpdateCheckDelegate : public UpdateCheckDelegate { public: MockUpdateCheckDelegate() : weak_ptr_factory_(this) {} @@ -1083,8 +1089,8 @@ // Expect the appropriate error when the on-demand class cannot be created. EXPECT_CALL(mock_update_check_delegate_, OnError(GOOGLE_UPDATE_ONDEMAND_CLASS_NOT_FOUND, - AllOfArray({HasSubstr(u"error code 3:"), - HasSubstr(u"0x80072EF2")}), + AllOfArray({HasSubstrCaseInsensitive(u"error code 3:"), + HasSubstrCaseInsensitive(u"0x80072EF2")}), _)); BeginUpdateCheck(std::string(), false, 0, mock_update_check_delegate_.AsWeakPtr()); @@ -1105,8 +1111,8 @@ // Expect the appropriate error when the on-demand class cannot be created. EXPECT_CALL(mock_update_check_delegate_, OnError(GOOGLE_UPDATE_ERROR_UPDATING, - AllOfArray({HasSubstr(u"error code 7:"), - HasSubstr(u"0x80072EF2")}), + AllOfArray({HasSubstrCaseInsensitive(u"error code 7:"), + HasSubstrCaseInsensitive(u"0x80072EF2")}), _)); BeginUpdateCheck(std::string(), false, 0, mock_update_check_delegate_.AsWeakPtr()); @@ -1125,8 +1131,8 @@ // Expect the appropriate error when the on-demand class cannot be created. EXPECT_CALL(mock_update_check_delegate_, OnError(GOOGLE_UPDATE_ERROR_UPDATING, - AllOfArray({HasSubstr(u"error code 7:"), - HasSubstr(u"0x80004005")}), + AllOfArray({HasSubstrCaseInsensitive(u"error code 7:"), + HasSubstrCaseInsensitive(u"0x80004005")}), _)); BeginUpdateCheck(std::string(), false, 0, mock_update_check_delegate_.AsWeakPtr()); diff -Nru chromium-119.0.6045.105/chrome/browser/k_anonymity_service/k_anonymity_service_factory.cc chromium-119.0.6045.159/chrome/browser/k_anonymity_service/k_anonymity_service_factory.cc --- chromium-119.0.6045.105/chrome/browser/k_anonymity_service/k_anonymity_service_factory.cc 2023-11-01 18:10:12.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/k_anonymity_service/k_anonymity_service_factory.cc 2023-11-14 22:56:27.000000000 +0000 @@ -62,10 +62,6 @@ std::unique_ptr KAnonymityServiceFactory::BuildServiceInstanceForBrowserContext( content::BrowserContext* context) const { - Profile* profile = Profile::FromBrowserContext(context); - if (!KAnonymityServiceClient::CanUseKAnonymityService(profile)) { - return nullptr; - } return std::make_unique( Profile::FromBrowserContext(context)); } diff -Nru chromium-119.0.6045.105/chrome/browser/net/sandboxed_network_change_notifier_win_browsertest.cc chromium-119.0.6045.159/chrome/browser/net/sandboxed_network_change_notifier_win_browsertest.cc --- chromium-119.0.6045.105/chrome/browser/net/sandboxed_network_change_notifier_win_browsertest.cc 2023-11-01 18:10:12.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/net/sandboxed_network_change_notifier_win_browsertest.cc 2023-11-14 22:56:27.000000000 +0000 @@ -29,6 +29,8 @@ #include "base/test/scoped_feature_list.h" #include "base/win/scoped_devinfo.h" #include "base/win/win_util.h" +#include "base/win/windows_version.h" +#include "build/build_config.h" #include "chrome/test/base/in_process_browser_test.h" #include "content/public/browser/network_service_instance.h" #include "content/public/common/content_features.h" @@ -168,6 +170,14 @@ if (!::IsUserAnAdmin()) { GTEST_SKIP() << "This test requires running elevated."; } +#if defined(ARCH_CPU_X86) + if (!base::win::OSInfo::GetInstance()->IsWowDisabled()) { + GTEST_SKIP() + << "SetupDiCallClassInstaller can't be called from a 32 bit app" + << " running in a 64 bit environment"; + } +#endif // defined(ARCH_CPU_X86) + mojo::Remote network_change_manager; GetNetworkService()->GetNetworkChangeManager( network_change_manager.BindNewPipeAndPassReceiver()); diff -Nru chromium-119.0.6045.105/chrome/browser/optimization_guide/android/java/src/org/chromium/chrome/browser/optimization_guide/OptimizationGuideBridge.java chromium-119.0.6045.159/chrome/browser/optimization_guide/android/java/src/org/chromium/chrome/browser/optimization_guide/OptimizationGuideBridge.java --- chromium-119.0.6045.105/chrome/browser/optimization_guide/android/java/src/org/chromium/chrome/browser/optimization_guide/OptimizationGuideBridge.java 2023-11-01 18:10:12.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/optimization_guide/android/java/src/org/chromium/chrome/browser/optimization_guide/OptimizationGuideBridge.java 2023-11-14 22:56:27.000000000 +0000 @@ -182,6 +182,7 @@ private boolean isRequestContextAllowedForOnDemandOptimizations(RequestContext requestContext) { switch (requestContext) { case CONTEXT_PAGE_INSIGHTS_HUB: + case CONTEXT_NON_PERSONALIZED_PAGE_INSIGHTS_HUB: return true; default: return false; diff -Nru chromium-119.0.6045.105/chrome/browser/optimization_guide/hints_fetcher_browsertest.cc chromium-119.0.6045.159/chrome/browser/optimization_guide/hints_fetcher_browsertest.cc --- chromium-119.0.6045.105/chrome/browser/optimization_guide/hints_fetcher_browsertest.cc 2023-11-01 18:10:12.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/optimization_guide/hints_fetcher_browsertest.cc 2023-11-14 22:56:27.000000000 +0000 @@ -385,6 +385,10 @@ request.headers.at(net::HttpRequestHeaders::kAuthorization)); } + // Make sure only one of API key or access token is sent. + EXPECT_EQ(base::Contains(request.headers, "X-Goog-Api-Key"), + expected_bearer_access_token_.empty()); + optimization_guide::proto::GetHintsRequest hints_request; EXPECT_TRUE(hints_request.ParseFromString(request.content)); EXPECT_FALSE(hints_request.hosts().empty() && hints_request.urls().empty()); diff -Nru chromium-119.0.6045.105/chrome/browser/performance_manager/chrome_browser_main_extra_parts_performance_manager.cc chromium-119.0.6045.159/chrome/browser/performance_manager/chrome_browser_main_extra_parts_performance_manager.cc --- chromium-119.0.6045.105/chrome/browser/performance_manager/chrome_browser_main_extra_parts_performance_manager.cc 2023-11-01 18:10:12.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/performance_manager/chrome_browser_main_extra_parts_performance_manager.cc 2023-11-14 22:56:27.000000000 +0000 @@ -221,9 +221,13 @@ } void ChromeBrowserMainExtraPartsPerformanceManager::PostCreateThreads() { + auto graph_features = performance_manager::GraphFeatures::WithDefault(); + if (performance_manager::features::kUseResourceAttributionCPUMonitor.Get()) { + graph_features.EnableResourceAttributionRegistries(); + } performance_manager_lifetime_ = std::make_unique( - performance_manager::GraphFeatures::WithDefault(), + graph_features, base::BindOnce(&ChromeBrowserMainExtraPartsPerformanceManager:: CreatePoliciesAndDecorators)); browser_child_process_watcher_ = diff -Nru chromium-119.0.6045.105/chrome/browser/privacy_sandbox/privacy_sandbox_settings_delegate.cc chromium-119.0.6045.159/chrome/browser/privacy_sandbox/privacy_sandbox_settings_delegate.cc --- chromium-119.0.6045.105/chrome/browser/privacy_sandbox/privacy_sandbox_settings_delegate.cc 2023-11-01 18:10:13.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/privacy_sandbox/privacy_sandbox_settings_delegate.cc 2023-11-14 22:56:27.000000000 +0000 @@ -176,7 +176,7 @@ } if (!features::kCookieDeprecationFacilitatedTestingEnableOTRProfiles.Get() && - profile_->IsOffTheRecord()) { + (profile_->IsOffTheRecord() || profile_->IsGuestSession())) { return false; } @@ -217,13 +217,15 @@ PrivacySandboxSettingsDelegate:: GetCookieDeprecationExperimentCurrentEligibility() const { // Whether third-party cookies are blocked. - scoped_refptr cookie_settings = - CookieSettingsFactory::GetForProfile(profile_); - DCHECK(cookie_settings); - if (cookie_settings->ShouldBlockThirdPartyCookies() || - cookie_settings->GetDefaultCookieSetting() == - ContentSetting::CONTENT_SETTING_BLOCK) { - return TpcdExperimentEligibility::k3pCookiesBlocked; + if (tpcd::experiment::kExclude3PCBlocked.Get()) { + scoped_refptr cookie_settings = + CookieSettingsFactory::GetForProfile(profile_); + DCHECK(cookie_settings); + if (cookie_settings->ShouldBlockThirdPartyCookies() || + cookie_settings->GetDefaultCookieSetting() == + ContentSetting::CONTENT_SETTING_BLOCK) { + return TpcdExperimentEligibility::k3pCookiesBlocked; + } } // Whether the privacy sandbox Ads APIs notice has been seen. @@ -231,16 +233,19 @@ // TODO(linnan): Consider checking whether the restricted notice has been // acknowledged (`prefs::kPrivacySandboxM1RestrictedNoticeAcknowledged`) as // well. - const bool row_notice_acknowledged = profile_->GetPrefs()->GetBoolean( - prefs::kPrivacySandboxM1RowNoticeAcknowledged); - const bool eaa_notice_acknowledged = profile_->GetPrefs()->GetBoolean( - prefs::kPrivacySandboxM1EEANoticeAcknowledged); - if (!row_notice_acknowledged && !eaa_notice_acknowledged) { - return TpcdExperimentEligibility::kHasNotSeenNotice; + if (tpcd::experiment::kExcludeNotSeenAdsAPIsNotice.Get()) { + const bool row_notice_acknowledged = profile_->GetPrefs()->GetBoolean( + prefs::kPrivacySandboxM1RowNoticeAcknowledged); + const bool eaa_notice_acknowledged = profile_->GetPrefs()->GetBoolean( + prefs::kPrivacySandboxM1EEANoticeAcknowledged); + if (!row_notice_acknowledged && !eaa_notice_acknowledged) { + return TpcdExperimentEligibility::kHasNotSeenNotice; + } } // Whether it's a dasher account. - if (IsSubjectToEnterprisePolicies()) { + if (tpcd::experiment::kExcludeDasherAccount.Get() && + IsSubjectToEnterprisePolicies()) { return TpcdExperimentEligibility::kEnterpriseUser; } @@ -248,16 +253,21 @@ // `ExperimentManager`. // Whether it's a new client. - base::Time install_date = base::Time::FromTimeT( - g_browser_process->local_state()->GetInt64(metrics::prefs::kInstallDate)); - if (install_date.is_null() || - base::Time::Now() - install_date < base::Days(30)) { - return TpcdExperimentEligibility::kNewUser; + if (tpcd::experiment::kExcludeNewUser.Get()) { + base::Time install_date = + base::Time::FromTimeT(g_browser_process->local_state()->GetInt64( + metrics::prefs::kInstallDate)); + if (install_date.is_null() || + base::Time::Now() - install_date < + tpcd::experiment::kInstallTimeForNewUser.Get()) { + return TpcdExperimentEligibility::kNewUser; + } } // Whether PWA or TWA has been installed on Android. #if BUILDFLAG(IS_ANDROID) - if (!webapp_registry_->GetOriginsWithInstalledApp().empty()) { + if (tpcd::experiment::kExcludePwaOrTwaInstalled.Get() && + !webapp_registry_->GetOriginsWithInstalledApp().empty()) { return TpcdExperimentEligibility::kPwaOrTwaInstalled; } #endif diff -Nru chromium-119.0.6045.105/chrome/browser/privacy_sandbox/privacy_sandbox_settings_delegate_unittest.cc chromium-119.0.6045.159/chrome/browser/privacy_sandbox/privacy_sandbox_settings_delegate_unittest.cc --- chromium-119.0.6045.105/chrome/browser/privacy_sandbox/privacy_sandbox_settings_delegate_unittest.cc 2023-11-01 18:10:13.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/privacy_sandbox/privacy_sandbox_settings_delegate_unittest.cc 2023-11-14 22:56:27.000000000 +0000 @@ -20,6 +20,7 @@ #include "chrome/browser/signin/identity_test_environment_profile_adaptor.h" #include "chrome/browser/supervised_user/supervised_user_test_util.h" #include "chrome/browser/tpcd/experiment/mock_experiment_manager.h" +#include "chrome/browser/tpcd/experiment/tpcd_experiment_features.h" #include "chrome/test/base/scoped_testing_local_state.h" #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_profile.h" @@ -284,6 +285,14 @@ struct CookieDeprecationExperimentEligibilityTestCase { bool force_eligible = false; + bool exclude_3pc_blocked = true; + bool exclude_not_seen_notice = true; + bool exclude_dasher_account = true; + bool exclude_new_user = true; + std::string install_time_new_user = "30d"; +#if BUILDFLAG(IS_ANDROID) + bool exclude_pwa_twa_installed = true; +#endif absl::optional is_subject_to_enterprise_policies; content_settings::CookieControlsMode cookie_controls_mode_pref = content_settings::CookieControlsMode::kOff; @@ -308,11 +317,19 @@ .expected_currently_eligible = false, .expected_reported_histogram = 2 // kHasNotSeenNotice }, - {.force_eligible = true, - .expected_eligible = true, - .expected_currently_eligible = true, - // No histogram should be reported if the eligibility is forced. - .expected_reported_histogram = absl::nullopt}, + { + .force_eligible = true, + .expected_eligible = true, + .expected_currently_eligible = true, + // No histogram should be reported if the eligibility is forced. + .expected_reported_histogram = absl::nullopt + }, + { + .exclude_not_seen_notice = false, + .expected_eligible = true, + .expected_currently_eligible = true, + .expected_reported_histogram = 0 // kEligible, + }, { .privacy_sandbox_eea_notice_acknowledged_pref = true, .expected_eligible = true, @@ -334,6 +351,15 @@ .expected_reported_histogram = 1 // k3pCookiesBlocked }, { + .exclude_3pc_blocked = false, + .cookie_controls_mode_pref = + content_settings::CookieControlsMode::kBlockThirdParty, + .privacy_sandbox_eea_notice_acknowledged_pref = true, + .expected_eligible = true, + .expected_currently_eligible = true, + .expected_reported_histogram = 0 // kEligible, + }, + { .cookie_content_setting = ContentSetting::CONTENT_SETTING_BLOCK, .privacy_sandbox_eea_notice_acknowledged_pref = true, .expected_eligible = false, @@ -355,6 +381,22 @@ .expected_reported_histogram = 3 // kNewUser }, { + .install_time_new_user = "4d", // base::Days(4) + .privacy_sandbox_eea_notice_acknowledged_pref = true, + .install_date = kCurrentTime - base::Days(5), + .expected_eligible = true, + .expected_currently_eligible = true, + .expected_reported_histogram = 0 // kEligible, + }, + { + .exclude_new_user = false, + .privacy_sandbox_eea_notice_acknowledged_pref = true, + .install_date = kCurrentTime - base::Days(5), + .expected_eligible = true, + .expected_currently_eligible = true, + .expected_reported_histogram = 0 // kEligible, + }, + { .is_subject_to_enterprise_policies = true, .privacy_sandbox_eea_notice_acknowledged_pref = true, .expected_eligible = false, @@ -362,6 +404,14 @@ .expected_reported_histogram = 4 // kEnterpriseUser }, { + .exclude_dasher_account = false, + .is_subject_to_enterprise_policies = true, + .privacy_sandbox_eea_notice_acknowledged_pref = true, + .expected_eligible = true, + .expected_currently_eligible = true, + .expected_reported_histogram = 0 // kEligible, + }, + { .is_subject_to_enterprise_policies = false, .privacy_sandbox_eea_notice_acknowledged_pref = true, .expected_eligible = true, @@ -470,7 +520,24 @@ feature_list()->InitAndEnableFeatureWithParameters( features::kCookieDeprecationFacilitatedTesting, {{"use_profile_filtering", "true"}, - {"force_eligible", test_case.force_eligible ? "true" : "false"}}); + {"force_eligible", test_case.force_eligible ? "true" : "false"}, + {tpcd::experiment::kExclude3PCBlockedName, + test_case.exclude_3pc_blocked ? "true" : "false"}, + {tpcd::experiment::kExcludeNotSeenAdsAPIsNoticeName, + test_case.exclude_not_seen_notice ? "true" : "false"}, + {tpcd::experiment::kExcludeDasherAccountName, + test_case.exclude_dasher_account ? "true" : "false"}, + {tpcd::experiment::kExcludeNewUserName, + test_case.exclude_new_user ? "true" : "false"}, + {tpcd::experiment::kInstallTimeForNewUserName, + test_case.install_time_new_user}, +#if BUILDFLAG(IS_ANDROID) + { + tpcd::experiment::kExcludePwaOrTwaInstalledName, + test_case.exclude_pwa_twa_installed ? "true" : "false" + } +#endif + }); if (test_case.expected_eligible_before) { EXPECT_EQ(delegate()->IsCookieDeprecationExperimentEligible(), @@ -530,8 +597,15 @@ Profile* off_the_record_profile = profile()->GetOffTheRecordProfile( Profile::OTRProfileID::CreateUniqueForTesting(), /*create_if_needed=*/true); - PrivacySandboxSettingsDelegate delegate_under_test(off_the_record_profile, - experiment_manager()); + PrivacySandboxSettingsDelegate otr_delegate_under_test(off_the_record_profile, + experiment_manager()); + + // Android does not have guest profiles. +#if !BUILDFLAG(IS_ANDROID) + auto guest_profile = TestingProfile::Builder().SetGuestSession().Build(); + PrivacySandboxSettingsDelegate guest_delegate_under_test( + guest_profile.get(), experiment_manager()); +#endif // !BUILDFLAG(IS_ANDROID) const bool use_profile_filtering = GetParam(); @@ -552,7 +626,21 @@ EXPECT_CALL(*experiment_manager(), IsClientEligible).Times(0); } - EXPECT_TRUE(delegate_under_test.IsCookieDeprecationExperimentEligible()); + EXPECT_TRUE( + otr_delegate_under_test.IsCookieDeprecationExperimentEligible()); + +#if !BUILDFLAG(IS_ANDROID) + if (!use_profile_filtering) { + EXPECT_CALL(*experiment_manager(), IsClientEligible) + .WillOnce(::testing::Return(true)); + } else { + EXPECT_CALL(*experiment_manager(), IsClientEligible).Times(0); + } + + EXPECT_TRUE( + guest_delegate_under_test.IsCookieDeprecationExperimentEligible()); +#endif // !BUILDFLAG(IS_ANDROID) + feature_list()->Reset(); } @@ -562,7 +650,14 @@ {{"force_eligible", "true"}, {"use_profile_filtering", use_profile_filtering_param}, {"enable_otr_profiles", "false"}}); - EXPECT_FALSE(delegate_under_test.IsCookieDeprecationExperimentEligible()); + EXPECT_FALSE( + otr_delegate_under_test.IsCookieDeprecationExperimentEligible()); + +#if !BUILDFLAG(IS_ANDROID) + EXPECT_FALSE( + guest_delegate_under_test.IsCookieDeprecationExperimentEligible()); +#endif // !BUILDFLAG(IS_ANDROID) + feature_list()->Reset(); } } diff -Nru chromium-119.0.6045.105/chrome/browser/renderer_context_menu/render_view_context_menu_unittest.cc chromium-119.0.6045.159/chrome/browser/renderer_context_menu/render_view_context_menu_unittest.cc --- chromium-119.0.6045.105/chrome/browser/renderer_context_menu/render_view_context_menu_unittest.cc 2023-11-01 18:10:13.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/renderer_context_menu/render_view_context_menu_unittest.cc 2023-11-14 22:56:27.000000000 +0000 @@ -605,6 +605,9 @@ const net::NetworkAnonymizationKey& network_anonymization_key, bool success) override { last_preresolved_url_ = url; + if (!preresolved_finished_closure_.is_null()) { + std::move(preresolved_finished_closure_).Run(); + } } void TearDown() override { @@ -690,12 +693,18 @@ return mock_rph_factory_; } + base::OnceClosure& preresolved_finished_closure() { + return preresolved_finished_closure_; + } + private: std::unique_ptr registry_; std::unique_ptr testing_local_state_; raw_ptr template_url_service_; std::unique_ptr browser_; GURL last_preresolved_url_; + base::OnceClosure preresolved_finished_closure_; + content::MockRenderProcessHostFactory mock_rph_factory_; }; @@ -1726,7 +1735,9 @@ ASSERT_TRUE(menu.GetMenuModelAndItemIndex( IDC_CONTENT_CONTEXT_SEARCHLENSFORIMAGE, &model, &index)); - base::RunLoop().RunUntilIdle(); + base::RunLoop run_loop; + preresolved_finished_closure() = run_loop.QuitClosure(); + run_loop.Run(); ASSERT_EQ(last_preresolved_url().spec(), "https://lens.google.com/"); } @@ -1764,7 +1775,9 @@ IDC_CONTENT_CONTEXT_LENS_REGION_SEARCH, &model, &index)); EXPECT_TRUE(menu.IsItemPresent(IDC_CONTENT_CONTEXT_LENS_REGION_SEARCH)); - base::RunLoop().RunUntilIdle(); + base::RunLoop run_loop; + preresolved_finished_closure() = run_loop.QuitClosure(); + run_loop.Run(); ASSERT_EQ(last_preresolved_url().spec(), "https://lens.google.com/"); } @@ -1790,7 +1803,9 @@ ASSERT_TRUE(menu.GetMenuModelAndItemIndex( IDC_CONTENT_CONTEXT_SEARCHLENSFORIMAGE, &model, &index)); - base::RunLoop().RunUntilIdle(); + base::RunLoop run_loop; + preresolved_finished_closure() = run_loop.QuitClosure(); + run_loop.Run(); ASSERT_EQ(last_preresolved_url().spec(), "https://lens.google.com/"); } @@ -1825,7 +1840,9 @@ IDC_CONTENT_CONTEXT_LENS_REGION_SEARCH, &model, &index)); EXPECT_TRUE(menu.IsItemPresent(IDC_CONTENT_CONTEXT_LENS_REGION_SEARCH)); - base::RunLoop().RunUntilIdle(); + base::RunLoop run_loop; + preresolved_finished_closure() = run_loop.QuitClosure(); + run_loop.Run(); ASSERT_EQ(last_preresolved_url().spec(), "https://lens.google.com/"); } diff -Nru chromium-119.0.6045.105/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gu.xtb chromium-119.0.6045.159/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gu.xtb --- chromium-119.0.6045.105/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gu.xtb 2023-11-01 18:10:13.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_gu.xtb 2023-11-14 22:56:28.000000000 +0000 @@ -332,7 +332,7 @@ વાણી ચાલુ કરો કોષ્ટક , પ્રમાણે બૈઝ -નેવિગેશન +નૅવિગેશન {COUNT,plural, =1{જગ્યા}one{# જગ્યા}other{# જગ્યા}} લિંક કરેલ નથી ડિસ્પ્લે શૈલીને 'એકબીજાની ઉપર જુઓ' પર બદલો @@ -741,7 +741,7 @@ સંદર્ભ મેનૂ બતાવો {COUNT,plural, =1{# આઇટમ સાથે}one{# આઇટમ સાથે}other{# આઇટમ સાથે}} આછો સ્યાન -નેવિગેશન ગ્રેન્યુલેરિટી વધારો +નૅવિગેશન ગ્રેન્યુલારિટી વધારો ગ્રાફિક્સ દસ્તાવેજ અવાજો ફોર્મ @@ -1072,7 +1072,7 @@ ChromeVox બોલી રહ્યું હોય ત્યારે પ્લેબેક થોભાવો વિંડોનું વિહંગાવલોકન હવે તમે થોડું મૂળભૂત નૅવિગેશન શીખશો. સ્ક્રીન પર કોઈપણ જગ્યાએ જવા માટે, તમે Search કી દબાવી રાખીને ઍરો કી દબાવી શકો છો. આગળ વધવા માટે, Search + જમણો ઍરો દબાવો. -નેવિગેશન ગ્રેન્યુલેરિટી ઘટાડો +નૅવિગેશન ગ્રેન્યુલારિટી ઘટાડો સ્પિન બટન ફોર્મેટિંગ તમામ ChromeVox આદેશો અને શૉર્ટકટ વિશે વધુ જાણવા માટે, Search + Period દબાવો, પછી મેનૂ નૅવિગેટ કરવા માટે ઍરો કીનો, અને આદેશને સક્રિય કરવા માટે Enterનો ઉપયોગ કરો. Search+o પછી t દબાવીને અહીં પાછા ફરો. diff -Nru chromium-119.0.6045.105/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hy.xtb chromium-119.0.6045.159/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hy.xtb --- chromium-119.0.6045.105/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hy.xtb 2023-11-01 18:10:13.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_hy.xtb 2023-11-14 22:56:28.000000000 +0000 @@ -869,7 +869,7 @@ Ձիթականաչ Ընտրարկումն ավարտված է Մուգ դարչնագույն -Կորալ +Մարջան Փիրուզագույն Ավելացնել պայծառությունը Կրկնակի հպեք՝ ընտրված տարրն ակտիվացնելու համար diff -Nru chromium-119.0.6045.105/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kk.xtb chromium-119.0.6045.159/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kk.xtb --- chromium-119.0.6045.105/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kk.xtb 2023-11-01 18:10:13.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_kk.xtb 2023-11-14 22:56:28.000000000 +0000 @@ -869,7 +869,7 @@ Сұрқай жасыл Соңғы таңдау Қоңыр жасыл -Маржан +Қызыл маржан Көкшіл жасыл Жарықтық деңгейін арттыру Ерекшеленген элементті іске қосу үшін оны екі рет түртіңіз diff -Nru chromium-119.0.6045.105/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_no.xtb chromium-119.0.6045.159/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_no.xtb --- chromium-119.0.6045.105/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_no.xtb 2023-11-01 18:10:13.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_no.xtb 2023-11-14 22:56:28.000000000 +0000 @@ -165,7 +165,7 @@ All tegnsetting Gå fra begynnelsen til slutten eller fra slutten til begynnelsen av en side, dialogboks eller annen beholder spnbtn -tilgangsnøkkel: +passnøkkel: Ingen tekst er tilgjengelig for dette elementet Kursiv Lukk øvelsesområdet diff -Nru chromium-119.0.6045.105/chrome/browser/ssl/https_upgrades_interceptor.cc chromium-119.0.6045.159/chrome/browser/ssl/https_upgrades_interceptor.cc --- chromium-119.0.6045.105/chrome/browser/ssl/https_upgrades_interceptor.cc 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ssl/https_upgrades_interceptor.cc 2023-11-14 22:56:28.000000000 +0000 @@ -337,7 +337,7 @@ auto query_complete_callback = base::BindOnce( &HttpsUpgradesInterceptor::MaybeCreateLoaderOnHstsQueryCompleted, weak_factory_.GetWeakPtr(), tentative_resource_request, - std::move(callback), profile, web_contents, tab_helper); + std::move(callback)); network::mojom::NetworkContext* network_context = profile->GetDefaultStoragePartition()->GetNetworkContext(); network_context->IsHSTSActiveForHost( @@ -350,12 +350,28 @@ void HttpsUpgradesInterceptor::MaybeCreateLoaderOnHstsQueryCompleted( const network::ResourceRequest& tentative_resource_request, content::URLLoaderRequestInterceptor::LoaderCallback callback, - Profile* profile, - content::WebContents* web_contents, - HttpsOnlyModeTabHelper* tab_helper, bool is_hsts_active_for_host) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); + // Reconstruct objects here instead of binding them as parameters to this + // callback method. + // + // It's possible for the WebContents to be destroyed during the + // asynchronous HSTS query call, before this callback is run. If it no longer + // exists, don't upgrade and return. (See crbug.com/1499515.) + content::WebContents* web_contents = + content::WebContents::FromFrameTreeNodeId(frame_tree_node_id_); + if (!web_contents) { + std::move(callback).Run({}); + return; + } + Profile* profile = + Profile::FromBrowserContext(web_contents->GetBrowserContext()); + HttpsOnlyModeTabHelper* tab_helper = + HttpsOnlyModeTabHelper::FromWebContents(web_contents); + CHECK(profile); + CHECK(tab_helper); + // Don't upgrade this request if HSTS is active for this host. if (is_hsts_active_for_host) { RecordNavigationRequestSecurityLevel( diff -Nru chromium-119.0.6045.105/chrome/browser/ssl/https_upgrades_interceptor.h chromium-119.0.6045.159/chrome/browser/ssl/https_upgrades_interceptor.h --- chromium-119.0.6045.105/chrome/browser/ssl/https_upgrades_interceptor.h 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ssl/https_upgrades_interceptor.h 2023-11-14 22:56:28.000000000 +0000 @@ -80,9 +80,6 @@ void MaybeCreateLoaderOnHstsQueryCompleted( const network::ResourceRequest& tentative_resource_request, content::URLLoaderRequestInterceptor::LoaderCallback callback, - Profile* profile, - content::WebContents* web_contents, - HttpsOnlyModeTabHelper* tab_helper, bool is_hsts_active_for_host); // Sets the ports used by the EmbeddedTestServer (which uses random ports) diff -Nru chromium-119.0.6045.105/chrome/browser/supervised_user/linux_mac_windows/supervised_user_extension_browsertest.cc chromium-119.0.6045.159/chrome/browser/supervised_user/linux_mac_windows/supervised_user_extension_browsertest.cc --- chromium-119.0.6045.105/chrome/browser/supervised_user/linux_mac_windows/supervised_user_extension_browsertest.cc 1970-01-01 00:00:00.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/supervised_user/linux_mac_windows/supervised_user_extension_browsertest.cc 2023-11-14 22:56:28.000000000 +0000 @@ -0,0 +1,154 @@ +// Copyright 2020 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/files/file_path.h" +#include "base/test/scoped_feature_list.h" +#include "chrome/browser/extensions/extension_browsertest.h" +#include "chrome/browser/supervised_user/supervised_user_test_util.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "chrome/test/base/mixin_based_in_process_browser_test.h" +#include "chrome/test/supervised_user/supervision_mixin.h" +#include "components/supervised_user/core/common/features.h" +#include "content/public/test/browser_test.h" +#include "content/public/test/test_launcher.h" +#include "extensions/browser/disable_reason.h" +#include "extensions/browser/extension_prefs.h" +#include "extensions/browser/extension_registry.h" +#include "extensions/common/extension.h" + +namespace { +constexpr char kGoodCrxId[] = "ldnnhddmnhbkjipkidpdiheffobcpfmf"; +} // namespace + +namespace extensions { + +// Tests interaction between supervised users and extensions after the optional +// supervision is removed from the account. +class SupervisionRemovalExtensionTest : public ExtensionBrowserTest { + public: + SupervisionRemovalExtensionTest() { + scoped_feature_list_.InitAndEnableFeature( + supervised_user:: + kEnableExtensionsPermissionsForSupervisedUsersOnDesktop); + } + + ~SupervisionRemovalExtensionTest() override { scoped_feature_list_.Reset(); } + + // We have to essentially replicate what MixinBasedInProcessBrowserTest does + // here because ExtensionBrowserTest doesn't inherit from that class. + void SetUp() override { + mixin_host_.SetUp(); + ExtensionBrowserTest::SetUp(); + } + + void SetUpCommandLine(base::CommandLine* command_line) override { + mixin_host_.SetUpCommandLine(command_line); + ExtensionBrowserTest::SetUpCommandLine(command_line); + } + + void SetUpDefaultCommandLine(base::CommandLine* command_line) override { + mixin_host_.SetUpDefaultCommandLine(command_line); + ExtensionBrowserTest::SetUpDefaultCommandLine(command_line); + } + + bool SetUpUserDataDirectory() override { + return mixin_host_.SetUpUserDataDirectory() && + ExtensionBrowserTest::SetUpUserDataDirectory(); + } + + void SetUpInProcessBrowserTestFixture() override { + mixin_host_.SetUpInProcessBrowserTestFixture(); + ExtensionBrowserTest::SetUpInProcessBrowserTestFixture(); + } + + void CreatedBrowserMainParts( + content::BrowserMainParts* browser_main_parts) override { + mixin_host_.CreatedBrowserMainParts(browser_main_parts); + ExtensionBrowserTest::CreatedBrowserMainParts(browser_main_parts); + } + + void SetUpOnMainThread() override { + mixin_host_.SetUpOnMainThread(); + ExtensionBrowserTest::SetUpOnMainThread(); + } + + void TearDownOnMainThread() override { + mixin_host_.TearDownOnMainThread(); + ExtensionBrowserTest::TearDownOnMainThread(); + } + + void TearDownInProcessBrowserTestFixture() override { + mixin_host_.TearDownInProcessBrowserTestFixture(); + ExtensionBrowserTest::TearDownInProcessBrowserTestFixture(); + } + + void TearDown() override { + mixin_host_.TearDown(); + ExtensionBrowserTest::TearDown(); + } + + protected: + bool IsDisabledForCustodianApproval(const std::string& extension_id) { + ExtensionPrefs* extension_prefs = ExtensionPrefs::Get(profile()); + return extension_prefs->HasDisableReason( + extension_id, + extensions::disable_reason::DISABLE_CUSTODIAN_APPROVAL_REQUIRED); + } + + private: + base::test::ScopedFeatureList scoped_feature_list_; + InProcessBrowserTestMixinHost mixin_host_; + + // In order to simulate supervision removal and re-authentication use + // supervised account in the PRE test and regular account afterwards. + supervised_user::SupervisionMixin supervision_mixin_{ + mixin_host_, + this, + {.sign_in_mode = + content::IsPreTest() + ? supervised_user::SupervisionMixin::SignInMode::kSupervised + : supervised_user::SupervisionMixin::SignInMode::kRegular}}; +}; + +// Removing supervision should also remove associated disable reasons, such as +// DISABLE_CUSTODIAN_APPROVAL_REQUIRED. Extensions should become enabled again +// after removing supervision. Prevents a regression to crbug/1045625. +IN_PROC_BROWSER_TEST_F(SupervisionRemovalExtensionTest, + PRE_RemoveCustodianApprovalRequirement) { + supervised_user_test_util:: + SetSupervisedUserExtensionsMayRequestPermissionsPref(profile(), true); + + ASSERT_TRUE(profile()->IsChild()); + + base::FilePath path = test_data_dir_.AppendASCII("good.crx"); + EXPECT_FALSE(LoadExtension(path)); + const Extension* extension = + extension_registry()->GetInstalledExtension(kGoodCrxId); + EXPECT_TRUE(extension); + + // This extension is a supervised user initiated install and should remain + // disabled. + EXPECT_TRUE(extension_registry()->disabled_extensions().Contains(kGoodCrxId)); + EXPECT_TRUE(IsDisabledForCustodianApproval(kGoodCrxId)); +} + +IN_PROC_BROWSER_TEST_F(SupervisionRemovalExtensionTest, + RemoveCustodianApprovalRequirement) { + ASSERT_FALSE(profile()->IsChild()); + + // The extension should still be installed since we are sharing the same data + // directory as the PRE test. + const Extension* extension = + extension_registry()->GetInstalledExtension(kGoodCrxId); + EXPECT_TRUE(extension); + + // The extension should be enabled now after removing supervision. + EXPECT_TRUE(extension_registry()->enabled_extensions().Contains(kGoodCrxId)); + EXPECT_FALSE( + extension_registry()->disabled_extensions().Contains(kGoodCrxId)); + + EXPECT_FALSE(IsDisabledForCustodianApproval(kGoodCrxId)); +} + +} // namespace extensions \ No newline at end of file diff -Nru chromium-119.0.6045.105/chrome/browser/supervised_user/supervised_user_extension_browsertest.cc chromium-119.0.6045.159/chrome/browser/supervised_user/supervised_user_extension_browsertest.cc --- chromium-119.0.6045.105/chrome/browser/supervised_user/supervised_user_extension_browsertest.cc 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/supervised_user/supervised_user_extension_browsertest.cc 1970-01-01 00:00:00.000000000 +0000 @@ -1,145 +0,0 @@ -// Copyright 2020 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "base/files/file_path.h" -#include "base/test/scoped_feature_list.h" -#include "chrome/browser/extensions/extension_browsertest.h" -#include "chrome/browser/supervised_user/supervised_user_test_util.h" -#include "chrome/test/base/in_process_browser_test.h" -#include "chrome/test/base/mixin_based_in_process_browser_test.h" -#include "chrome/test/supervised_user/supervision_mixin.h" -#include "components/supervised_user/core/common/features.h" -#include "content/public/test/browser_test.h" -#include "content/public/test/test_launcher.h" -#include "extensions/browser/disable_reason.h" -#include "extensions/browser/extension_prefs.h" -#include "extensions/browser/extension_registry.h" -#include "extensions/common/extension.h" - -namespace { -constexpr char kGoodCrxId[] = "ldnnhddmnhbkjipkidpdiheffobcpfmf"; -} // namespace - -namespace extensions { - -// Tests interaction between supervised users and extensions after the optional -// supervision is removed from the account. -class SupervisionRemovalExtensionTest : public ExtensionBrowserTest { - public: - // We have to essentially replicate what MixinBasedInProcessBrowserTest does - // here because ExtensionBrowserTest doesn't inherit from that class. - void SetUp() override { - mixin_host_.SetUp(); - ExtensionBrowserTest::SetUp(); - } - - void SetUpCommandLine(base::CommandLine* command_line) override { - mixin_host_.SetUpCommandLine(command_line); - ExtensionBrowserTest::SetUpCommandLine(command_line); - } - - void SetUpDefaultCommandLine(base::CommandLine* command_line) override { - mixin_host_.SetUpDefaultCommandLine(command_line); - ExtensionBrowserTest::SetUpDefaultCommandLine(command_line); - } - - bool SetUpUserDataDirectory() override { - return mixin_host_.SetUpUserDataDirectory() && - ExtensionBrowserTest::SetUpUserDataDirectory(); - } - - void SetUpInProcessBrowserTestFixture() override { - mixin_host_.SetUpInProcessBrowserTestFixture(); - ExtensionBrowserTest::SetUpInProcessBrowserTestFixture(); - } - - void CreatedBrowserMainParts( - content::BrowserMainParts* browser_main_parts) override { - mixin_host_.CreatedBrowserMainParts(browser_main_parts); - ExtensionBrowserTest::CreatedBrowserMainParts(browser_main_parts); - } - - void SetUpOnMainThread() override { - mixin_host_.SetUpOnMainThread(); - ExtensionBrowserTest::SetUpOnMainThread(); - } - - void TearDownOnMainThread() override { - mixin_host_.TearDownOnMainThread(); - ExtensionBrowserTest::TearDownOnMainThread(); - } - - void TearDownInProcessBrowserTestFixture() override { - mixin_host_.TearDownInProcessBrowserTestFixture(); - ExtensionBrowserTest::TearDownInProcessBrowserTestFixture(); - } - - void TearDown() override { - mixin_host_.TearDown(); - ExtensionBrowserTest::TearDown(); - } - - protected: - bool IsDisabledForCustodianApproval(const std::string& extension_id) { - ExtensionPrefs* extension_prefs = ExtensionPrefs::Get(profile()); - return extension_prefs->HasDisableReason( - extension_id, - extensions::disable_reason::DISABLE_CUSTODIAN_APPROVAL_REQUIRED); - } - - private: - InProcessBrowserTestMixinHost mixin_host_; - - // In order to simulate supervision removal and re-authentication use - // supervised account in the PRE test and regular account afterwards. - supervised_user::SupervisionMixin supervision_mixin_{ - mixin_host_, - this, - {.sign_in_mode = - content::IsPreTest() - ? supervised_user::SupervisionMixin::SignInMode::kSupervised - : supervised_user::SupervisionMixin::SignInMode::kRegular}}; -}; - -// Removing supervision should also remove associated disable reasons, such as -// DISABLE_CUSTODIAN_APPROVAL_REQUIRED. Extensions should become enabled again -// after removing supervision. Prevents a regression to crbug/1045625. -IN_PROC_BROWSER_TEST_F(SupervisionRemovalExtensionTest, - PRE_RemoveCustodianApprovalRequirement) { - supervised_user_test_util:: - SetSupervisedUserExtensionsMayRequestPermissionsPref(profile(), true); - - ASSERT_TRUE(profile()->IsChild()); - - base::FilePath path = test_data_dir_.AppendASCII("good.crx"); - EXPECT_FALSE(LoadExtension(path)); - const Extension* extension = - extension_registry()->GetInstalledExtension(kGoodCrxId); - EXPECT_TRUE(extension); - - // This extension is a supervised user initiated install and should remain - // disabled. - EXPECT_TRUE(extension_registry()->disabled_extensions().Contains(kGoodCrxId)); - EXPECT_TRUE(IsDisabledForCustodianApproval(kGoodCrxId)); -} - -IN_PROC_BROWSER_TEST_F(SupervisionRemovalExtensionTest, - RemoveCustodianApprovalRequirement) { - ASSERT_FALSE(profile()->IsChild()); - - // The extension should still be installed since we are sharing the same data - // directory as the PRE test. - const Extension* extension = - extension_registry()->GetInstalledExtension(kGoodCrxId); - EXPECT_TRUE(extension); - - // The extension should be enabled now after removing supervision. - EXPECT_TRUE(extension_registry()->enabled_extensions().Contains(kGoodCrxId)); - EXPECT_FALSE( - extension_registry()->disabled_extensions().Contains(kGoodCrxId)); - - EXPECT_FALSE(IsDisabledForCustodianApproval(kGoodCrxId)); -} - -} // namespace extensions diff -Nru chromium-119.0.6045.105/chrome/browser/supervised_user/supervised_user_extension_unittest.cc chromium-119.0.6045.159/chrome/browser/supervised_user/supervised_user_extension_unittest.cc --- chromium-119.0.6045.105/chrome/browser/supervised_user/supervised_user_extension_unittest.cc 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/supervised_user/supervised_user_extension_unittest.cc 2023-11-14 22:56:28.000000000 +0000 @@ -36,19 +36,18 @@ namespace extensions { -class SupervisedUserExtensionTest : public ExtensionServiceTestWithInstall, - public testing::WithParamInterface { +class SupervisedUserExtensionTest : public ExtensionServiceTestWithInstall { public: SupervisedUserExtensionTest() { - if (extensions_permissions_for_supervised_users_on_desktop()) { - feature.InitAndEnableFeature( - supervised_user:: - kEnableExtensionsPermissionsForSupervisedUsersOnDesktop); - } else { - feature.InitAndDisableFeature( - supervised_user:: - kEnableExtensionsPermissionsForSupervisedUsersOnDesktop); - } + // This test suite assumes the extensions permissions feature is enabled for + // Desktop users except in tests where it is explicitly disabled. + // Extension permissions for supervised users are already enabled on + // ChromeOS. +#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) + feature_list_.InitAndEnableFeature( + supervised_user:: + kEnableExtensionsPermissionsForSupervisedUsersOnDesktop); +#endif } protected: @@ -128,15 +127,7 @@ const Extension* CheckDisabledForCustodianApproval( const std::string& extension_id) { EXPECT_TRUE(registry()->disabled_extensions().Contains(extension_id)); - if (extensions_permissions_for_supervised_users_on_desktop()) { - EXPECT_TRUE(IsPendingCustodianApproval(extension_id)); - } else { -#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS) - EXPECT_TRUE(IsPendingCustodianApproval(extension_id)); -#else - EXPECT_FALSE(IsPendingCustodianApproval(extension_id)); -#endif - } + EXPECT_TRUE(IsPendingCustodianApproval(extension_id)); ExtensionPrefs* extension_prefs = ExtensionPrefs::Get(profile()); EXPECT_TRUE(extension_prefs->HasDisableReason( extension_id, disable_reason::DISABLE_CUSTODIAN_APPROVAL_REQUIRED)); @@ -145,15 +136,7 @@ const Extension* CheckDisabledForPermissionsIncrease( const std::string& extension_id) { EXPECT_TRUE(registry()->disabled_extensions().Contains(extension_id)); - if (extensions_permissions_for_supervised_users_on_desktop()) { - EXPECT_TRUE(IsPendingCustodianApproval(extension_id)); - } else { -#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS) - EXPECT_TRUE(IsPendingCustodianApproval(extension_id)); -#else - EXPECT_FALSE(IsPendingCustodianApproval(extension_id)); -#endif - } + EXPECT_TRUE(IsPendingCustodianApproval(extension_id)); ExtensionPrefs* extension_prefs = ExtensionPrefs::Get(profile()); EXPECT_TRUE(extension_prefs->HasDisableReason( extension_id, disable_reason::DISABLE_PERMISSIONS_INCREASE)); @@ -164,10 +147,6 @@ return supervised_user_extensions_delegate_.get(); } - bool extensions_permissions_for_supervised_users_on_desktop() const { - return GetParam(); - } - private: // Returns true if the extension has disable reason permissions_increase or // custodian_approval_required. Tests the Webstore Private Api. @@ -193,11 +172,11 @@ std::unique_ptr supervised_user_extensions_delegate_; - base::test::ScopedFeatureList feature; + base::test::ScopedFeatureList feature_list_; }; // Tests that regular users are not affecting supervised user UMA metrics. -TEST_P(SupervisedUserExtensionTest, +TEST_F(SupervisedUserExtensionTest, RegularUsersNotAffectingSupervisedUserMetrics) { InitServices(/*profile_is_supervised=*/false); @@ -220,7 +199,7 @@ // Tests that simulating custodian approval for regular users doesn't cause any // unexpected behavior. -TEST_P(SupervisedUserExtensionTest, +TEST_F(SupervisedUserExtensionTest, CustodianApprovalDoesNotAffectRegularUsers) { InitServices(/*profile_is_supervised=*/false); supervised_user_test_util:: @@ -243,7 +222,7 @@ // Tests that adding supervision to a regular account (Gellerization) disables // previously installed extensions. -TEST_P(SupervisedUserExtensionTest, ExtensionsDisabledAfterGellerization) { +TEST_F(SupervisedUserExtensionTest, ExtensionsDisabledAfterGellerization) { InitServices(/*profile_is_supervised=*/false); supervised_user_test_util:: SetSupervisedUserExtensionsMayRequestPermissionsPref(profile(), true); @@ -278,7 +257,7 @@ // Tests that a child user is allowed to install extensions when pref // kSupervisedUserExtensionsMayRequestPermissions is set to true, but that // newly-installed extensions are disabled until approved by the parent. -TEST_P(SupervisedUserExtensionTest, +TEST_F(SupervisedUserExtensionTest, InstallAllowedButDisabledForSupervisedUser) { InitServices(/*profile_is_supervised=*/true); supervised_user_test_util:: @@ -307,7 +286,7 @@ // Tests that supervised users may approve permission updates without parent // approval if kSupervisedUserExtensionsMayRequestPermissions is true. -TEST_P(SupervisedUserExtensionTest, UpdateWithPermissionsIncrease) { +TEST_F(SupervisedUserExtensionTest, UpdateWithPermissionsIncrease) { InitServices(/*profile_is_supervised=*/true); supervised_user_test_util:: SetSupervisedUserExtensionsMayRequestPermissionsPref(profile(), true); @@ -383,7 +362,7 @@ // disabled, resulting in the pref // kSupervisedUserExtensionsMayRequestPermissions set to false, then child users // cannot approve permission updates. -TEST_P(SupervisedUserExtensionTest, +TEST_F(SupervisedUserExtensionTest, ChildUserCannotApproveAdditionalPermissions) { InitServices(/*profile_is_supervised=*/true); // Keep the toggle on initially just to install the extension. @@ -442,7 +421,7 @@ // Tests that if an approved extension is updated to a newer version that // doesn't require additional permissions, it is still enabled. -TEST_P(SupervisedUserExtensionTest, UpdateWithoutPermissionIncrease) { +TEST_F(SupervisedUserExtensionTest, UpdateWithoutPermissionIncrease) { InitServices(/*profile_is_supervised=*/true); supervised_user_test_util:: SetSupervisedUserExtensionsMayRequestPermissionsPref(profile(), true); @@ -489,7 +468,7 @@ // Tests that the kApprovalGranted UMA metric only increments once without // duplication for the same extension id. -TEST_P(SupervisedUserExtensionTest, DontTriggerMetricsIfAlreadyApproved) { +TEST_F(SupervisedUserExtensionTest, DontTriggerMetricsIfAlreadyApproved) { InitServices(/*profile_is_supervised=*/true); supervised_user_test_util:: SetSupervisedUserExtensionsMayRequestPermissionsPref(profile(), true); @@ -547,7 +526,7 @@ // disabled, resulting in the pref // kSupervisedUserExtensionsMayRequestPermissions set to false, then child users // cannot install new extensions. -TEST_P(SupervisedUserExtensionTest, SupervisedUserCannotInstallExtension) { +TEST_F(SupervisedUserExtensionTest, SupervisedUserCannotInstallExtension) { InitServices(/*profile_is_supervised=*/true); supervised_user_test_util:: SetSupervisedUserExtensionsMayRequestPermissionsPref(profile(), false); @@ -560,7 +539,7 @@ // Tests that disabling the "Permissions for sites, apps and extensions" toggle // has no effect on regular users. -TEST_P(SupervisedUserExtensionTest, RegularUserCanInstallExtension) { +TEST_F(SupervisedUserExtensionTest, RegularUserCanInstallExtension) { InitServices(/*profile_is_supervised=*/false); supervised_user_test_util:: SetSupervisedUserExtensionsMayRequestPermissionsPref(profile(), false); @@ -576,7 +555,7 @@ // disabled, resulting in the pref // kSupervisedUserExtensionsMayRequestPermissions set to false, previously // approved extensions are still enabled. -TEST_P(SupervisedUserExtensionTest, ToggleOffDoesNotAffectAlreadyEnabled) { +TEST_F(SupervisedUserExtensionTest, ToggleOffDoesNotAffectAlreadyEnabled) { InitServices(/*profile_is_supervised=*/true); supervised_user_test_util:: SetSupervisedUserExtensionsMayRequestPermissionsPref(profile(), true); @@ -602,7 +581,7 @@ // Tests the case when the extension approval arrives through sync before the // extension itself is installed. -TEST_P(SupervisedUserExtensionTest, ExtensionApprovalBeforeInstallation) { +TEST_F(SupervisedUserExtensionTest, ExtensionApprovalBeforeInstallation) { InitServices(/*profile_is_supervised=*/true); supervised_user_test_util:: SetSupervisedUserExtensionsMayRequestPermissionsPref(profile(), true); @@ -622,7 +601,7 @@ // Tests that parent approval is necessary but not sufficient to enable // extensions when both disable reasons custodian_approval_required and // permissions_increase are present. -TEST_P(SupervisedUserExtensionTest, ParentApprovalNecessaryButNotSufficient) { +TEST_F(SupervisedUserExtensionTest, ParentApprovalNecessaryButNotSufficient) { InitServices(/*profile_is_supervised=*/true); supervised_user_test_util:: SetSupervisedUserExtensionsMayRequestPermissionsPref(profile(), true); @@ -653,9 +632,5 @@ // The extension should be enabled. CheckEnabled(id); } -INSTANTIATE_TEST_SUITE_P( - ExtensionsPermissionsForSupervisedUsersOnDesktopFeature, - SupervisedUserExtensionTest, - testing::Bool()); } // namespace extensions diff -Nru chromium-119.0.6045.105/chrome/browser/supervised_user/supervised_user_extensions_manager.cc chromium-119.0.6045.159/chrome/browser/supervised_user/supervised_user_extensions_manager.cc --- chromium-119.0.6045.105/chrome/browser/supervised_user/supervised_user_extensions_manager.cc 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/supervised_user/supervised_user_extensions_manager.cc 2023-11-14 22:56:28.000000000 +0000 @@ -276,7 +276,8 @@ supervised_user::SupervisedUserService* supervised_user_service = SupervisedUserServiceFactory::GetForBrowserContext(context_); is_active_policy_for_supervised_users_ = - supervised_user_service->IsSubjectToParentalControls(); + supervised_user_service && + supervised_user_service->AreExtensionsPermissionsEnabled(); } void SupervisedUserExtensionsManager:: diff -Nru chromium-119.0.6045.105/chrome/browser/supervised_user/supervised_user_service_browsertest.cc chromium-119.0.6045.159/chrome/browser/supervised_user/supervised_user_service_browsertest.cc --- chromium-119.0.6045.105/chrome/browser/supervised_user/supervised_user_service_browsertest.cc 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/supervised_user/supervised_user_service_browsertest.cc 2023-11-14 22:56:28.000000000 +0000 @@ -49,12 +49,19 @@ supervised_user::SupervisionMixin::SignInMode::kSupervised) { EXPECT_TRUE( prefs->GetBoolean(policy::policy_prefs::kForceGoogleSafeSearch)); - EXPECT_EQ(prefs->GetInteger(policy::policy_prefs::kForceYouTubeRestrict), - safe_search_api::YOUTUBE_RESTRICT_MODERATE); EXPECT_FALSE(prefs->IsUserModifiablePreference( policy::policy_prefs::kForceGoogleSafeSearch)); +#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS) + EXPECT_EQ(prefs->GetInteger(policy::policy_prefs::kForceYouTubeRestrict), + safe_search_api::YOUTUBE_RESTRICT_MODERATE); EXPECT_FALSE(prefs->IsUserModifiablePreference( policy::policy_prefs::kForceYouTubeRestrict)); +#else + EXPECT_EQ(prefs->GetInteger(policy::policy_prefs::kForceYouTubeRestrict), + safe_search_api::YOUTUBE_RESTRICT_OFF); + EXPECT_TRUE(prefs->IsUserModifiablePreference( + policy::policy_prefs::kForceYouTubeRestrict)); +#endif } else { EXPECT_FALSE( prefs->GetBoolean(policy::policy_prefs::kForceGoogleSafeSearch)); diff -Nru chromium-119.0.6045.105/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_hi.xtb chromium-119.0.6045.159/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_hi.xtb --- chromium-119.0.6045.105/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_hi.xtb 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_hi.xtb 2023-11-14 22:56:28.000000000 +0000 @@ -1,7 +1,7 @@ -सेव किया गया पासवर्ड इस्तेमाल करें? +क्या आपको सेव किया गया पासवर्ड इस्तेमाल करना है? Use a passkey on a different device टच करके भरी जाने वाली क्रेडेंशियल की सूची आधी स्क्रीन में खुली हुई है. जारी रखें diff -Nru chromium-119.0.6045.105/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_no.xtb chromium-119.0.6045.159/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_no.xtb --- chromium-119.0.6045.105/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_no.xtb 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_no.xtb 2023-11-14 22:56:28.000000000 +0000 @@ -2,7 +2,7 @@ Vil du bruke det lagrede passordet? -Bruk en tilgangsnøkkel på en annen enhet +Bruk en passnøkkel på en annen enhet Listen over legitimasjon som kan fylles ut ved å trykke, er åpnet i halv høyde. Fortsett Vil du bruke den lagrede tilgangsnøkkelen? @@ -10,12 +10,12 @@ Du er i ferd med å logge på Logg på Flere passnøkler -Administrer tilgangsnøkler +Administrer passnøkler Passord for Bruk skjermlåsen -Administrer passord og tilgangsnøkler +Administrer passord og passnøkler Listen over legitimasjon som kan fylles ut ved å trykke, er åpnet i full høyde. -Vil du bruke et lagret passord eller en lagret tilgangsnøkkel? +Vil du bruke et lagret passord eller en lagret passnøkkel? Administrer passord Passnøkkel for – bruk skjermlåsen , av . diff -Nru chromium-119.0.6045.105/chrome/browser/tpcd/experiment/eligibility_service_unittest.cc chromium-119.0.6045.159/chrome/browser/tpcd/experiment/eligibility_service_unittest.cc --- chromium-119.0.6045.105/chrome/browser/tpcd/experiment/eligibility_service_unittest.cc 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/tpcd/experiment/eligibility_service_unittest.cc 2023-11-14 22:56:28.000000000 +0000 @@ -13,6 +13,8 @@ #include "base/test/scoped_feature_list.h" #include "base/test/task_environment.h" #include "base/test/test_future.h" +#include "build/build_config.h" +#include "build/buildflag.h" #include "chrome/browser/privacy_sandbox/privacy_sandbox_settings_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/tpcd/experiment/eligibility_service_factory.h" @@ -133,6 +135,14 @@ Profile::OTRProfileID::CreateUniqueForTesting(), /*create_if_needed=*/true)); EXPECT_EQ(eligibility_service != nullptr, enable_otr_profiles); + +// Android does not have guest profiles. +#if !BUILDFLAG(IS_ANDROID) + auto guest_profile = TestingProfile::Builder().SetGuestSession().Build(); + eligibility_service = + EligibilityServiceFactory::GetForProfile(guest_profile.get()); + EXPECT_EQ(eligibility_service != nullptr, enable_otr_profiles); +#endif // !BUILDFLAG(IS_ANDROID) } INSTANTIATE_TEST_SUITE_P(All, diff -Nru chromium-119.0.6045.105/chrome/browser/tpcd/experiment/experiment_manager_impl.cc chromium-119.0.6045.159/chrome/browser/tpcd/experiment/experiment_manager_impl.cc --- chromium-119.0.6045.105/chrome/browser/tpcd/experiment/experiment_manager_impl.cc 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/tpcd/experiment/experiment_manager_impl.cc 2023-11-14 22:56:28.000000000 +0000 @@ -51,7 +51,7 @@ } if (!features::kCookieDeprecationFacilitatedTestingEnableOTRProfiles.Get() && - profile->IsOffTheRecord()) { + (profile->IsOffTheRecord() || profile->IsGuestSession())) { return nullptr; } diff -Nru chromium-119.0.6045.105/chrome/browser/tpcd/experiment/tpcd_experiment_features.cc chromium-119.0.6045.159/chrome/browser/tpcd/experiment/tpcd_experiment_features.cc --- chromium-119.0.6045.105/chrome/browser/tpcd/experiment/tpcd_experiment_features.cc 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/tpcd/experiment/tpcd_experiment_features.cc 2023-11-14 22:56:28.000000000 +0000 @@ -6,6 +6,8 @@ #include "base/metrics/field_trial_params.h" #include "base/time/time.h" +#include "build/build_config.h" +#include "build/buildflag.h" #include "content/public/common/content_features.h" namespace tpcd::experiment { @@ -13,6 +15,15 @@ const char kVersionName[] = "version"; const char kDisable3PCookiesName[] = "disable_3p_cookies"; const char kForceEligibleForTestingName[] = "force_eligible"; +const char kDecisionDelayTimeName[] = "decision_delay_time"; +const char kExclude3PCBlockedName[] = "exclude_3pc_blocked"; +const char kExcludeNotSeenAdsAPIsNoticeName[] = "exclude_has_not_seen_notice"; +const char kExcludeDasherAccountName[] = "exclude_dasher_account"; +const char kExcludeNewUserName[] = "exclude_new_user"; +const char kInstallTimeForNewUserName[] = "install_time_for_new_user"; +#if BUILDFLAG(IS_ANDROID) +const char kExcludePwaOrTwaInstalledName[] = "exclude_pwa_or_twa_installed"; +#endif // Set the version of the experiment finch config. const base::FeatureParam kVersion{ @@ -26,9 +37,9 @@ /*name=*/kDisable3PCookiesName, /*default_value=*/false}; -extern const base::FeatureParam kDecisionDelayTime{ +const base::FeatureParam kDecisionDelayTime{ &features::kCookieDeprecationFacilitatedTesting, - /*name=*/"decision_delay_time", + /*name=*/kDecisionDelayTimeName, /*default_value=*/base::Seconds(1)}; // Set whether to force client being eligible for manual testing. @@ -37,4 +48,36 @@ /*name=*/kForceEligibleForTestingName, /*default_value=*/false}; +const base::FeatureParam kExclude3PCBlocked{ + &features::kCookieDeprecationFacilitatedTesting, + /*name=*/kExclude3PCBlockedName, + /*default_value=*/true}; + +const base::FeatureParam kExcludeNotSeenAdsAPIsNotice{ + &features::kCookieDeprecationFacilitatedTesting, + /*name=*/kExcludeNotSeenAdsAPIsNoticeName, + /*default_value=*/true}; + +const base::FeatureParam kExcludeDasherAccount{ + &features::kCookieDeprecationFacilitatedTesting, + /*name=*/kExcludeDasherAccountName, + /*default_value=*/true}; + +const base::FeatureParam kExcludeNewUser{ + &features::kCookieDeprecationFacilitatedTesting, + /*name=*/kExcludeNewUserName, + /*default_value=*/true}; + +const base::FeatureParam kInstallTimeForNewUser{ + &features::kCookieDeprecationFacilitatedTesting, + /*name=*/kInstallTimeForNewUserName, + /*default_value=*/base::Days(30)}; + +#if BUILDFLAG(IS_ANDROID) +const base::FeatureParam kExcludePwaOrTwaInstalled{ + &features::kCookieDeprecationFacilitatedTesting, + /*name=*/kExcludePwaOrTwaInstalledName, + /*default_value=*/true}; +#endif + } // namespace tpcd::experiment diff -Nru chromium-119.0.6045.105/chrome/browser/tpcd/experiment/tpcd_experiment_features.h chromium-119.0.6045.159/chrome/browser/tpcd/experiment/tpcd_experiment_features.h --- chromium-119.0.6045.105/chrome/browser/tpcd/experiment/tpcd_experiment_features.h 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/tpcd/experiment/tpcd_experiment_features.h 2023-11-14 22:56:28.000000000 +0000 @@ -7,6 +7,8 @@ #include "base/metrics/field_trial_params.h" #include "base/time/time.h" +#include "build/build_config.h" +#include "build/buildflag.h" namespace tpcd::experiment { @@ -14,12 +16,41 @@ extern const char kDisable3PCookiesName[]; extern const char kDecisionDelayTimeName[]; extern const char kForceEligibleForTestingName[]; +extern const char kExclude3PCBlockedName[]; +extern const char kExcludeNotSeenAdsAPIsNoticeName[]; +extern const char kExcludeDasherAccountName[]; +extern const char kExcludeNewUserName[]; +extern const char kInstallTimeForNewUserName[]; +#if BUILDFLAG(IS_ANDROID) +extern const char kExcludePwaOrTwaInstalledName[]; +#endif extern const base::FeatureParam kVersion; extern const base::FeatureParam kDisable3PCookies; extern const base::FeatureParam kDecisionDelayTime; extern const base::FeatureParam kForceEligibleForTesting; +// Whether to exclude users who have 3P cookies blocked. +extern const base::FeatureParam kExclude3PCBlocked; + +// Whether to exclude users who have not seen the Ads APIs notice. +extern const base::FeatureParam kExcludeNotSeenAdsAPIsNotice; + +// Whether to exclude Dasher accounts. +extern const base::FeatureParam kExcludeDasherAccount; + +// Whether to exclude new users, i.e. their client was installed more than +// kInstallTimeForNewUser days ago. +extern const base::FeatureParam kExcludeNewUser; +// How long (number of days) a user's client needs to be installed to be +// considered a new user for exclusion. +extern const base::FeatureParam kInstallTimeForNewUser; + +#if BUILDFLAG(IS_ANDROID) +// Whether to exclude Android users who have a PWA or TWA installed. +extern const base::FeatureParam kExcludePwaOrTwaInstalled; +#endif + } // namespace tpcd::experiment #endif // CHROME_BROWSER_TPCD_EXPERIMENT_TPCD_EXPERIMENT_FEATURES_H_ diff -Nru chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/BUILD.gn chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/BUILD.gn --- chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/BUILD.gn 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/BUILD.gn 2023-11-14 22:56:28.000000000 +0000 @@ -9,7 +9,6 @@ android_library("java") { sources = [ "java/src/org/chromium/chrome/browser/page_insights/PageInsightsActionHandlerImpl.java", - "java/src/org/chromium/chrome/browser/page_insights/PageInsightsActivator.java", "java/src/org/chromium/chrome/browser/page_insights/PageInsightsCoordinator.java", "java/src/org/chromium/chrome/browser/page_insights/PageInsightsDataLoader.java", "java/src/org/chromium/chrome/browser/page_insights/PageInsightsLoggingParametersImpl.java", @@ -17,6 +16,7 @@ "java/src/org/chromium/chrome/browser/page_insights/PageInsightsSheetContent.java", "java/src/org/chromium/chrome/browser/page_insights/PageInsightsSurfaceScopeDependencyProviderImpl.java", "java/src/org/chromium/chrome/browser/page_insights/PageInsightsSwaaChecker.java", + "java/src/org/chromium/chrome/browser/page_insights/TapInterceptingLinearLayout.java", ] srcjar_deps = [ ":jni_headers" ] @@ -27,6 +27,8 @@ "//base:base_java", "//base:jni_java", "//build/android:build_java", + "//chrome/browser/android/browserservices/intents:java", + "//chrome/browser/back_press/android:java", "//chrome/browser/browser_controls/android:java", "//chrome/browser/flags:java", "//chrome/browser/optimization_guide/android:java", @@ -36,6 +38,7 @@ "//chrome/browser/signin/services/android:java", "//chrome/browser/sync/android:java", "//chrome/browser/tab:java", + "//chrome/browser/util:java", "//chrome/browser/xsurface:java", "//chrome/browser/xsurface_provider:java", "//components/browser_ui/bottomsheet/android:java", @@ -50,6 +53,7 @@ "//content/public/android:content_java", "//third_party/android_deps:protobuf_lite_runtime_java", "//third_party/androidx:androidx_annotation_annotation_java", + "//third_party/androidx:androidx_recyclerview_recyclerview_java", "//ui/android:ui_no_recycler_view_java", "//url:gurl_java", ] @@ -77,12 +81,14 @@ proto_java_library("proto_java") { proto_path = "java/src/org/chromium/chrome/browser/page_insights/proto" - sources = [ "$proto_path/page_insights.proto" ] + sources = [ + "$proto_path/config.proto", + "$proto_path/page_insights.proto", + ] } robolectric_library("junit") { sources = [ - "java/src/org/chromium/chrome/browser/page_insights/PageInsightsActivatorUnitTest.java", "java/src/org/chromium/chrome/browser/page_insights/PageInsightsDataLoaderTest.java", "java/src/org/chromium/chrome/browser/page_insights/PageInsightsMediatorTest.java", "java/src/org/chromium/chrome/browser/page_insights/PageInsightsSwaaCheckerUnitTest.java", @@ -96,6 +102,7 @@ "//base:base_junit_test_support", "//base:jni_java", "//chrome/android:chrome_java", + "//chrome/browser/back_press/android:java", "//chrome/browser/browser_controls/android:java", "//chrome/browser/flags:java", "//chrome/browser/optimization_guide/android:java", @@ -105,12 +112,15 @@ "//chrome/browser/signin/services/android:java", "//chrome/browser/sync/android:java", "//chrome/browser/tab:java", + "//chrome/browser/util:java", "//chrome/browser/xsurface:java", "//chrome/browser/xsurface_provider:java", + "//chrome/test/android:chrome_java_unit_test_support", "//components/browser_ui/bottomsheet/android:java", "//components/browser_ui/bottomsheet/android:manager_java", "//components/browser_ui/bottomsheet/android/test:java", "//components/browser_ui/share/android:java", + "//components/browser_ui/widget/android:java", "//components/dom_distiller/core/android:dom_distiller_core_java", "//components/optimization_guide/proto:optimization_guide_proto_java", "//components/signin/public/android:java", @@ -144,6 +154,7 @@ "//base:base_shared_preferences_java", "//base:jni_java", "//chrome/android:chrome_java", + "//chrome/browser/back_press/android:java", "//chrome/browser/browser_controls/android:java", "//chrome/browser/flags:java", "//chrome/browser/optimization_guide/android:java", @@ -165,6 +176,7 @@ "//content/public/android:content_full_java", "//content/public/test/android:content_java_test_support", "//third_party/android_deps:protobuf_lite_runtime_java", + "//third_party/androidx:androidx_recyclerview_recyclerview_java", "//third_party/androidx:androidx_test_runner_java", "//third_party/junit:junit", "//third_party/mockito:mockito_java", diff -Nru chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/res/layout/page_insights_sheet_content.xml chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/res/layout/page_insights_sheet_content.xml --- chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/res/layout/page_insights_sheet_content.xml 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/res/layout/page_insights_sheet_content.xml 2023-11-14 22:56:28.000000000 +0000 @@ -6,89 +6,106 @@ --> - + + android:paddingTop="@dimen/page_insights_toolbar_height"> + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + diff -Nru chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/res/layout/page_insights_sheet_toolbar.xml chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/res/layout/page_insights_sheet_toolbar.xml --- chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/res/layout/page_insights_sheet_toolbar.xml 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/res/layout/page_insights_sheet_toolbar.xml 2023-11-14 22:56:28.000000000 +0000 @@ -6,62 +6,71 @@ --> - - - - - - + android:layout_height="wrap_content"> + android:layout_width="0dp" + android:layout_height="@dimen/page_insights_toolbar_height" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintWidth_max="@dimen/page_insights_max_width" + android:orientation="vertical"> - + android:layout_height="wrap_content" + android:layout_gravity="center" + android:paddingTop="12dp" + android:importantForAccessibility="no" + android:src="@drawable/drag_handlebar" /> + + + + + + + + - + - - + diff -Nru chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/res/values/dimens.xml chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/res/values/dimens.xml --- chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/res/values/dimens.xml 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/res/values/dimens.xml 2023-11-14 22:56:28.000000000 +0000 @@ -5,4 +5,6 @@ 48dp 60dp 6dp + 64dp + 500dp diff -Nru chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsActivator.java chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsActivator.java --- chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsActivator.java 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsActivator.java 1970-01-01 00:00:00.000000000 +0000 @@ -1,130 +0,0 @@ -// Copyright 2023 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.chromium.chrome.browser.page_insights; - -import android.util.SparseArray; - -import org.chromium.chrome.browser.profiles.Profile; -import org.chromium.chrome.browser.signin.services.IdentityServicesProvider; -import org.chromium.chrome.browser.signin.services.SigninManager; -import org.chromium.chrome.browser.signin.services.SigninManager.SignInStateObserver; -import org.chromium.chrome.browser.sync.SyncServiceFactory; -import org.chromium.components.sync.SyncService; -import org.chromium.components.sync.SyncService.SyncStateChangedListener; -import org.chromium.ui.util.TokenHolder; - -/** - * Manages all the dynamic conditions used to activate page insights component: - * - Chrome signin - * - History Sync without a custom passphrase - * - sWAA (supplemental Web and App Activity) - * - * sWAA checking task is delegated to {@link PageInsightsSwaaChecker} which talks to server - * in a periodic basis. - * - * Used as a singleton object overlooking multiple PIH CCTs. Whenever a certain condition - * is enabled, invokes a callback to attempt to instantiate the page insights component for - * each CCT instance. Instantiation will succeed the first time when all the conditions - * are met. - */ -public class PageInsightsActivator implements SignInStateObserver, SyncStateChangedListener { - private static PageInsightsActivator sInstance; - - private final Profile mProfile; - private final SparseArray mCallbacks = new SparseArray<>(); - - private PageInsightsSwaaChecker mSwaaChecker; - private TokenHolder mTokenHolder; - - public static PageInsightsActivator getForProfile(Profile profile) { - boolean profileSwitched = sInstance != null && sInstance.mProfile != profile; - if (sInstance == null || profileSwitched) { - sInstance = new PageInsightsActivator(profile); - if (profileSwitched) PageInsightsSwaaChecker.invalidateCache(); - } - return sInstance; - } - - /** Whether or not sWAA bit is enabled. */ - public static boolean isSwaaEnabled() { - return sInstance != null ? sInstance.mSwaaChecker.isSwaaEnabled().orElse(false) : false; - } - - private PageInsightsActivator(Profile profile) { - mProfile = profile; - mSwaaChecker = new PageInsightsSwaaChecker(profile, this::invokeCallbacks); - mTokenHolder = new TokenHolder(() -> { - SigninManager signinManager = IdentityServicesProvider.get().getSigninManager(mProfile); - SyncService syncService = SyncServiceFactory.getForProfile(mProfile); - if (mTokenHolder.hasTokens()) { - signinManager.addSignInStateObserver(PageInsightsActivator.this); - syncService.addSyncStateChangedListener(PageInsightsActivator.this); - } else { - signinManager.removeSignInStateObserver(PageInsightsActivator.this); - syncService.removeSyncStateChangedListener(PageInsightsActivator.this); - } - }); - } - - /** - * Start checking page insights activation conditions. - * @param callback Callback to run to activate page insights component. - * @return a token to be used later to stop checking. - */ - public int start(Runnable callback) { - int token = mTokenHolder.acquireToken(); - mCallbacks.put(token, callback); - mSwaaChecker.start(); - return token; - } - - /** - * Stop checking page insights activation conditions. - * @param token A token identifying a CCT object to manage. - */ - public void stop(int token) { - mTokenHolder.releaseToken(token); - mCallbacks.remove(token); - if (!mTokenHolder.hasTokens()) { - // Stop and delete the activator when the last PIH CCT is gone. - mSwaaChecker.stop(); - sInstance = null; - } - } - - private void invokeCallbacks() { - for (int i = 0; i < mCallbacks.size(); ++i) mCallbacks.valueAt(i).run(); - } - - // SignInStateObserver implementation - - @Override - public void onSignedIn() { - invokeCallbacks(); - mSwaaChecker.onSignedIn(); - } - - @Override - public void onSignedOut() { - mSwaaChecker.onSignedOut(); - } - - // SyncStateChangedListener implementation - - @Override - public void syncStateChanged() { - // Checks for Chrome History Sync without a custom passphrase. - SyncService syncService = SyncServiceFactory.getForProfile(mProfile); - if (syncService.isSyncingUnencryptedUrls()) invokeCallbacks(); - } - - void setSwaaCheckerForTesting(PageInsightsSwaaChecker swaaChecker) { - mSwaaChecker = swaaChecker; - } - - PageInsightsSwaaChecker getSwaaCheckerForTesting() { - return mSwaaChecker; - } -} diff -Nru chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsActivatorUnitTest.java chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsActivatorUnitTest.java --- chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsActivatorUnitTest.java 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsActivatorUnitTest.java 1970-01-01 00:00:00.000000000 +0000 @@ -1,109 +0,0 @@ -// Copyright 2023 The Chromium Authors -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -package org.chromium.chrome.browser.page_insights; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.clearInvocations; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; -import org.robolectric.annotation.LooperMode; - -import org.chromium.base.test.BaseRobolectricTestRunner; -import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; -import org.chromium.chrome.browser.preferences.SharedPreferencesManager; -import org.chromium.chrome.browser.profiles.Profile; -import org.chromium.chrome.browser.signin.services.IdentityServicesProvider; -import org.chromium.chrome.browser.signin.services.SigninManager; -import org.chromium.chrome.browser.sync.SyncServiceFactory; -import org.chromium.components.sync.SyncService; - -/** - * Unit tests for {@link PageInsightsActivator.java}. - */ -@LooperMode(LooperMode.Mode.PAUSED) -@RunWith(BaseRobolectricTestRunner.class) -public class PageInsightsActivatorUnitTest { - @Mock - private Profile mProfile; - - @Mock - private IdentityServicesProvider mIdentityServicesProvider; - - @Mock - private SigninManager mSigninManager; - - @Mock - private SyncService mSyncService; - - @Mock - private PageInsightsSwaaChecker mSwaaChecker; - - @Mock - private Runnable mActivateCallback; - - private PageInsightsActivator mActivator; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - IdentityServicesProvider.setInstanceForTests(mIdentityServicesProvider); - when(mIdentityServicesProvider.getSigninManager(any())).thenReturn(mSigninManager); - SyncServiceFactory.setInstanceForTesting(mSyncService); - mActivator = PageInsightsActivator.getForProfile(mProfile); - mActivator.setSwaaCheckerForTesting(mSwaaChecker); - } - - @Test - public void testActivateCallback() throws Exception { - int token = mActivator.start(mActivateCallback); - - mActivator.onSignedOut(); - verify(mActivateCallback, never()).run(); - - mActivator.onSignedIn(); - verify(mActivateCallback).run(); - clearInvocations(mActivateCallback); - - mActivator.syncStateChanged(); - verify(mActivateCallback, never()).run(); - - when(mSyncService.isSyncingUnencryptedUrls()).thenReturn(true); - mActivator.syncStateChanged(); - verify(mActivateCallback).run(); - clearInvocations(mActivateCallback); - - mActivator.stop(token); - } - - @Test - public void testInvalidateSwaaCacheUponProfileChange() throws Exception { - var prefs = SharedPreferencesManager.getInstance(); - - int token = mActivator.start(mActivateCallback); - - prefs.writeLong(ChromePreferenceKeys.SWAA_TIMESTAMP, 1000L); - prefs.writeBoolean(ChromePreferenceKeys.SWAA_STATUS, true); - assertTrue(prefs.contains(ChromePreferenceKeys.SWAA_TIMESTAMP)); - assertTrue(prefs.contains(ChromePreferenceKeys.SWAA_STATUS)); - - Profile profile2 = Mockito.mock(Profile.class); - PageInsightsActivator.getForProfile(profile2); - - assertFalse(prefs.contains(ChromePreferenceKeys.SWAA_TIMESTAMP)); - assertFalse(prefs.contains(ChromePreferenceKeys.SWAA_STATUS)); - - mActivator.stop(token); - } -} diff -Nru chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsCoordinator.java chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsCoordinator.java --- chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsCoordinator.java 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsCoordinator.java 2023-11-14 22:56:28.000000000 +0000 @@ -7,19 +7,25 @@ import android.content.Context; import android.view.View; +import androidx.annotation.Nullable; + import org.chromium.base.supplier.ObservableSupplier; import org.chromium.base.supplier.Supplier; +import org.chromium.chrome.browser.back_press.BackPressManager; import org.chromium.chrome.browser.browser_controls.BrowserControlsSizer; import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider; import org.chromium.chrome.browser.flags.ChromeFeatureList; +import org.chromium.chrome.browser.page_insights.proto.Config.PageInsightsConfig; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.share.ShareDelegate; import org.chromium.chrome.browser.tab.Tab; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.components.browser_ui.bottomsheet.ExpandedSheetHelper; import org.chromium.components.browser_ui.bottomsheet.ManagedBottomSheetController; +import org.chromium.content_public.browser.NavigationHandle; import java.util.function.BooleanSupplier; +import java.util.function.Function; /** * Coordinator for PageInsights bottom sheet module. Provides API, and initializes @@ -47,6 +53,7 @@ * Constructor. * * @param context The associated {@link Context}. + * @param layoutView the top-level view for the Window * @param tabProvider Provider of the current activity tab. * @param shareDelegateSupplier Supplier of {@link ShareDelegate}. * @param profileSupplier Supplier of {@link Profile}. @@ -55,11 +62,13 @@ * @param expandedSheetHelper Helps interaction with other UI in expanded mode. * @param controlsStateProvider Provides the browser controls' state. * @param browserControlsSizer Bottom browser controls resizer. + * @param backPressManager Back press manager. * @param isPageInsightsHubEnabled Supplier of the feature flag. * @param firstLoadTimeMs Timestamp for the first page load completion. */ public PageInsightsCoordinator( Context context, + View layoutView, ObservableSupplier tabProvider, Supplier shareDelegateSupplier, Supplier profileSupplier, @@ -68,8 +77,9 @@ ExpandedSheetHelper expandedSheetHelper, BrowserControlsStateProvider controlsStateProvider, BrowserControlsSizer browserControlsSizer, - BooleanSupplier isPageInsightsHubEnabled, - long firstLoadTimeMs) { + @Nullable BackPressManager backPressManager, + BooleanSupplier isPageInsightsEnabledSupplier, + Function pageInsightsConfigProvider) { mContext = context; mTabProvider = tabProvider; mBottomSheetController = bottomSheetController; @@ -80,6 +90,7 @@ mMediator = new PageInsightsMediator( mContext, + layoutView, mTabProvider, shareDelegateSupplier, profileSupplier, @@ -88,8 +99,9 @@ mExpandedSheetHelper, mControlsStateProvider, mBrowserControlsSizer, - isPageInsightsHubEnabled, - firstLoadTimeMs); + backPressManager, + isPageInsightsEnabledSupplier, + pageInsightsConfigProvider); } /** @@ -116,6 +128,13 @@ mMediator.onBottomUiStateChanged(opened); } + /** Returns the controller for the Page Insights bottom sheet. */ + // TODO(b/307046796): Remove this once we have found better way to integrate with back handling + // logic. + public ManagedBottomSheetController getBottomSheetController() { + return mBottomSheetController; + } + /** Destroy PageInsights component. */ public void destroy() { if (mMediator != null) mMediator.destroy(); diff -Nru chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsCoordinatorTest.java chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsCoordinatorTest.java --- chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsCoordinatorTest.java 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsCoordinatorTest.java 2023-11-14 22:56:28.000000000 +0000 @@ -45,11 +45,13 @@ import org.chromium.base.test.BaseActivityTestRule; import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.JniMocker; +import org.chromium.chrome.browser.back_press.BackPressManager; import org.chromium.chrome.browser.browser_controls.BrowserControlsSizer; import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.optimization_guide.OptimizationGuideBridge; import org.chromium.chrome.browser.optimization_guide.OptimizationGuideBridgeJni; +import org.chromium.chrome.browser.page_insights.proto.Config.PageInsightsConfig; import org.chromium.chrome.browser.page_insights.proto.PageInsights; import org.chromium.chrome.browser.page_insights.proto.PageInsights.AutoPeekConditions; import org.chromium.chrome.browser.page_insights.proto.PageInsights.Page; @@ -144,6 +146,8 @@ private PageInsightsSurfaceRenderer mSurfaceRenderer; @Mock private Supplier mShareDelegateSupplier; + @Mock + private BackPressManager mBackPressManager; private PageInsightsCoordinator mPageInsightsCoordinator; private ManagedBottomSheetController mPageInsightsController; @@ -221,18 +225,27 @@ }); doReturn(true).when(mIsPageInsightsHubEnabled).getAsBoolean(); mPageInsightsCoordinator = - new PageInsightsCoordinator( - activity, - mTabProvider, - mShareDelegateSupplier, - mProfileSupplier, - mPageInsightsController, - mBottomUiController, - mExpandedSheetHelper, - mBrowserControlsStateProvider, - mBrowserControlsSizer, - mIsPageInsightsHubEnabled, - 0); + TestThreadUtils.runOnUiThreadBlocking( + () -> + new PageInsightsCoordinator( + activity, + new View(ContextUtils.getApplicationContext()), + mTabProvider, + mShareDelegateSupplier, + mProfileSupplier, + mPageInsightsController, + mBottomUiController, + mExpandedSheetHelper, + mBrowserControlsStateProvider, + mBrowserControlsSizer, + mBackPressManager, + mIsPageInsightsHubEnabled, + (navigationHandle) -> + PageInsightsConfig.newBuilder() + .setShouldAutoTrigger(true) + .setShouldXsurfaceLog(true) + .setShouldAttachGaiaToRequest(true) + .build())); doReturn(mTab).when(mTabProvider).get(); doReturn(JUnitTestGURLs.EXAMPLE_URL).when(mTab).getUrl(); verify(mTabProvider).addObserver(mTabCallbackCaptor.capture()); @@ -260,8 +273,11 @@ waitForAnimationToFinish(); } - private void collapseSheet() throws Exception { - TestThreadUtils.runOnUiThreadBlocking(() -> mPageInsightsController.collapseSheet(true)); + private void hideSheet() throws Exception { + TestThreadUtils.runOnUiThreadBlocking( + () -> + mPageInsightsController.hideContent( + mPageInsightsController.getCurrentSheetContent(), true)); waitForAnimationToFinish(); } @@ -386,7 +402,9 @@ TestThreadUtils.runOnUiThreadBlocking( () -> mPageInsightsCoordinator.onBottomUiStateChanged(false)); waitForAnimationToFinish(); - assertEquals("Sheet should be restored", SheetState.PEEK, + assertEquals( + "Sheet should be restored", + SheetState.FULL, mPageInsightsController.getSheetState()); // Other bottom sheets @@ -404,7 +422,9 @@ -> mBottomUiObserverCaptor.getValue().onSheetStateChanged( SheetState.HIDDEN, /*unused*/ 0)); waitForAnimationToFinish(); - assertEquals("Sheet should be restored", SheetState.PEEK, + assertEquals( + "Sheet should be restored", + SheetState.FULL, mPageInsightsController.getSheetState()); } @@ -414,7 +434,7 @@ createAndLaunchPageInsightsCoordinator(); expandSheet(); verify(mExpandedSheetHelper).onSheetExpanded(); - collapseSheet(); + hideSheet(); verify(mExpandedSheetHelper).onSheetCollapsed(); } diff -Nru chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsDataLoader.java chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsDataLoader.java --- chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsDataLoader.java 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsDataLoader.java 2023-11-14 22:56:28.000000000 +0000 @@ -13,6 +13,7 @@ import org.chromium.base.Callback; import org.chromium.base.Log; import org.chromium.chrome.browser.optimization_guide.OptimizationGuideBridgeFactory; +import org.chromium.chrome.browser.page_insights.proto.PageInsights; import org.chromium.chrome.browser.page_insights.proto.PageInsights.PageInsightsMetadata; import org.chromium.components.optimization_guide.OptimizationGuideDecision; import org.chromium.components.optimization_guide.proto.CommonTypesProto.RequestContext; @@ -30,7 +31,8 @@ PageInsightsDataLoader() {} - void loadInsightsData(GURL url, Callback callback) { + void loadInsightsData( + GURL url, boolean shouldAttachGaiaToRequest, Callback callback) { if (url == null) { Log.e(TAG, "Error fetching Page Insights data: Url cannot be null."); return; @@ -44,7 +46,9 @@ .canApplyOptimizationOnDemand( List.of(url), List.of(PAGE_INSIGHTS), - RequestContext.CONTEXT_PAGE_INSIGHTS_HUB, + shouldAttachGaiaToRequest + ? RequestContext.CONTEXT_PAGE_INSIGHTS_HUB + : RequestContext.CONTEXT_NON_PERSONALIZED_PAGE_INSIGHTS_HUB, (gurl, optimizationType, decision, metadata) -> { try { if (decision != OptimizationGuideDecision.TRUE) { diff -Nru chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsDataLoaderTest.java chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsDataLoaderTest.java --- chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsDataLoaderTest.java 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsDataLoaderTest.java 2023-11-14 22:56:28.000000000 +0000 @@ -78,6 +78,7 @@ mPageInsightsDataLoader.loadInsightsData( mUrl, + /* shouldAttachGaiaToRequest= */ true, (data) -> { assertEquals(data, mPageInsightsMetadata); }); @@ -91,6 +92,7 @@ mPageInsightsDataLoader.loadInsightsData( mUrl, + /* shouldAttachGaiaToRequest= */ true, (data) -> { assertNull(data); }); @@ -101,16 +103,18 @@ mPageInsightsDataLoader.clearCacheForTesting(); mPageInsightsDataLoader.loadInsightsData( null, + /* shouldAttachGaiaToRequest= */ true, (data) -> { assertNull(data); }); } @Test - public void testLoadInsightsData_emptyCache_callsOptimizationGuideBridge() { + public void testLoadInsightsData_emptyCache_gaia_callsOptimizationGuideBridge() { mPageInsightsDataLoader.clearCacheForTesting(); - mPageInsightsDataLoader.loadInsightsData(mUrl, (data) -> {}); + mPageInsightsDataLoader.loadInsightsData( + mUrl, /* shouldAttachGaiaToRequest= */ true, (data) -> {}); verify(mOptimizationGuideBridgeJniMock, times(1)) .canApplyOptimizationOnDemand( @@ -122,11 +126,32 @@ } @Test + public void testLoadInsightsData_emptyCache_noGaia_callsOptimizationGuideBridge() { + mPageInsightsDataLoader.clearCacheForTesting(); + + mPageInsightsDataLoader.loadInsightsData( + mUrl, /* shouldAttachGaiaToRequest= */ false, (data) -> {}); + + verify(mOptimizationGuideBridgeJniMock, times(1)) + .canApplyOptimizationOnDemand( + eq(1L), + eq(new GURL[] {mUrl}), + eq(new int[] {HintsProto.OptimizationType.PAGE_INSIGHTS.getNumber()}), + eq( + CommonTypesProto.RequestContext + .CONTEXT_NON_PERSONALIZED_PAGE_INSIGHTS_HUB + .getNumber()), + any(OptimizationGuideBridge.OnDemandOptimizationGuideCallback.class)); + } + + @Test public void testLoadInsightsData_sameUrl_doesNotCallOptimizationGuideBridge() { mPageInsightsDataLoader.clearCacheForTesting(); - mPageInsightsDataLoader.loadInsightsData(mUrl, (data) -> {}); + mPageInsightsDataLoader.loadInsightsData( + mUrl, /* shouldAttachGaiaToRequest= */ true, (data) -> {}); - mPageInsightsDataLoader.loadInsightsData(mUrl, (data) -> {}); + mPageInsightsDataLoader.loadInsightsData( + mUrl, /* shouldAttachGaiaToRequest= */ true, (data) -> {}); verify(mOptimizationGuideBridgeJniMock, times(1)) .canApplyOptimizationOnDemand( @@ -140,9 +165,11 @@ @Test public void testLoadInsightsData_differentUrls_callsOptimizationGuideBridge() { mPageInsightsDataLoader.clearCacheForTesting(); - mPageInsightsDataLoader.loadInsightsData(mUrl, (data) -> {}); + mPageInsightsDataLoader.loadInsightsData( + mUrl, /* shouldAttachGaiaToRequest= */ true, (data) -> {}); - mPageInsightsDataLoader.loadInsightsData(mUrl2, (data) -> {}); + mPageInsightsDataLoader.loadInsightsData( + mUrl2, /* shouldAttachGaiaToRequest= */ true, (data) -> {}); verify(mOptimizationGuideBridgeJniMock, times(1)) .canApplyOptimizationOnDemand( diff -Nru chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsMediator.java chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsMediator.java --- chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsMediator.java 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsMediator.java 2023-11-14 22:56:28.000000000 +0000 @@ -24,17 +24,21 @@ import org.chromium.base.MathUtils; import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.supplier.ObservableSupplier; +import org.chromium.base.supplier.ObservableSupplierImpl; import org.chromium.base.supplier.Supplier; +import org.chromium.chrome.browser.back_press.BackPressManager; import org.chromium.chrome.browser.browser_controls.BrowserControlsSizer; import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider; import org.chromium.chrome.browser.browser_controls.BrowserControlsUtils; import org.chromium.chrome.browser.flags.ChromeFeatureList; +import org.chromium.chrome.browser.page_insights.proto.Config.PageInsightsConfig; import org.chromium.chrome.browser.page_insights.proto.PageInsights.Page; import org.chromium.chrome.browser.page_insights.proto.PageInsights.PageInsightsMetadata; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.share.ShareDelegate; import org.chromium.chrome.browser.tab.EmptyTabObserver; import org.chromium.chrome.browser.tab.Tab; +import org.chromium.chrome.browser.util.ChromeAccessibilityUtil; import org.chromium.chrome.browser.xsurface.pageinsights.PageInsightsSurfaceRenderer; import org.chromium.chrome.browser.xsurface.pageinsights.PageInsightsSurfaceScope; import org.chromium.chrome.browser.xsurface_provider.XSurfaceProcessScopeProvider; @@ -46,13 +50,16 @@ import org.chromium.components.browser_ui.bottomsheet.EmptyBottomSheetObserver; import org.chromium.components.browser_ui.bottomsheet.ExpandedSheetHelper; import org.chromium.components.browser_ui.bottomsheet.ManagedBottomSheetController; +import org.chromium.components.browser_ui.widget.gesture.BackPressHandler; import org.chromium.components.embedder_support.util.UrlConstants; import org.chromium.content_public.browser.LoadUrlParams; +import org.chromium.content_public.browser.NavigationHandle; import org.chromium.ui.util.ColorUtils; import org.chromium.url.GURL; import java.util.HashMap; import java.util.function.BooleanSupplier; +import java.util.function.Function; /** * PageInsights mediator component listening to various external events to update UI, internal @@ -100,12 +107,15 @@ private int mMaxCornerRadiusPx; private View mSheetContainer; - private final BooleanSupplier mIsPageInsightsHubEnabled; + private final BooleanSupplier mIsPageInsightsEnabledSupplier; + private final Function mPageInsightsConfigProvider; private final Handler mHandler; private final Runnable mAutoTriggerRunnable = this::autoTriggerPageInsightsFromTimer; private final HashMap mSurfaceRendererContextValues; private final ObservableSupplier mTabObservable; private final Supplier mProfileSupplier; + private final ObservableSupplierImpl mWillHandleBackPressSupplier; + private final boolean mIsAccessibilityEnabled; private PageInsightsDataLoader mPageInsightsDataLoader; @Nullable @@ -113,7 +123,9 @@ @Nullable private PageInsightsMetadata mDisplayedMetadata; @Nullable private View mCurrentFeedView; @Nullable private View mCurrentChildView; + private boolean mIsShowingChildView; private boolean mAutoTriggerReady; + @Nullable private NavigationHandle mCurrentNavigationHandle; // Caches the sheet height at the current state. Avoids the repeated call to resize the content // if the size hasn't changed since. @@ -126,7 +138,6 @@ // Amount of time to wait before triggering the sheet automatically. Can be overridden // for testing. private long mAutoTriggerDelayMs; - private Supplier mCurrentTime; private int mOldState = SheetState.NONE; @@ -167,6 +178,7 @@ public PageInsightsMediator( Context context, + View layoutView, ObservableSupplier tabObservable, Supplier shareDelegateSupplier, Supplier profileSupplier, @@ -175,41 +187,40 @@ ExpandedSheetHelper expandedSheetHelper, BrowserControlsStateProvider controlsStateProvider, BrowserControlsSizer browserControlsSizer, - BooleanSupplier isPageInsightsHubEnabled, - long firstLoadTimeMs) { + @Nullable BackPressManager backPressManager, + BooleanSupplier isPageInsightsEnabledSupplier, + Function pageInsightsConfigProvider) { mContext = context; mTabObservable = tabObservable; mProfileSupplier = profileSupplier; + mWillHandleBackPressSupplier = new ObservableSupplierImpl<>(false); mSheetContent = - new PageInsightsSheetContent(mContext, view -> loadMyActivityUrl(tabObservable)); + new PageInsightsSheetContent( + mContext, + layoutView, + view -> loadMyActivityUrl(tabObservable), + this::handleBackPress, + mWillHandleBackPressSupplier, + this::handleBottomSheetTap); mSheetController = bottomSheetController; mBottomUiController = bottomUiController; - mCurrentTime = System::currentTimeMillis; - tabObservable.addObserver(tab -> { - if (tab == null) return; - - // Handle autotrigger if tab loading has already finished, which can happen - // when PIH components creation is delayed due to sWAA bit being enabled - // later than tab loading process. - if (!tab.isLoading() && firstLoadTimeMs > 0) { - long triggerTimeMs = firstLoadTimeMs + mAutoTriggerDelayMs; - long delayMs = Math.max(0, triggerTimeMs - mCurrentTime.get()); - delayStartAutoTrigger(Math.min(mAutoTriggerDelayMs, delayMs)); - } - tab.addObserver(this); - }); mExpandedSheetHelper = expandedSheetHelper; mHandler = new Handler(Looper.getMainLooper()); mBrowserControlsSizer = browserControlsSizer; - mBrowserControlsObserver = new BrowserControlsStateProvider.Observer() { - @Override - public void onControlsOffsetChanged(int topOffset, int topControlsMinHeightOffset, - int bottomOffset, int bottomControlsMinHeightOffset, boolean needsAnimate) { - bottomSheetController.setBrowserControlsHiddenRatio( - controlsStateProvider.getBrowserControlHiddenRatio()); - if (mAutoTriggerReady) maybeAutoTriggerPageInsights(); - } - }; + mBrowserControlsObserver = + new BrowserControlsStateProvider.Observer() { + @Override + public void onControlsOffsetChanged( + int topOffset, + int topControlsMinHeightOffset, + int bottomOffset, + int bottomControlsMinHeightOffset, + boolean needsAnimate) { + bottomSheetController.setBrowserControlsHiddenRatio( + controlsStateProvider.getBrowserControlHiddenRatio()); + maybeAutoTriggerPageInsights(); + } + }; controlsStateProvider.addObserver(mBrowserControlsObserver); bottomSheetController.addObserver(this); mBottomUiObserver = new EmptyBottomSheetObserver() { @@ -220,8 +231,10 @@ }; bottomUiController.addObserver(mBottomUiObserver); mControlsStateProvider = controlsStateProvider; - mIsPageInsightsHubEnabled = isPageInsightsHubEnabled; + mIsPageInsightsEnabledSupplier = isPageInsightsEnabledSupplier; + mPageInsightsConfigProvider = pageInsightsConfigProvider; mPageInsightsDataLoader = new PageInsightsDataLoader(); + mIsAccessibilityEnabled = ChromeAccessibilityUtil.get().isAccessibilityEnabled(); mSurfaceRendererContextValues = PageInsightsActionHandlerImpl.createContextValues( new PageInsightsActionHandlerImpl( @@ -232,6 +245,22 @@ mAutoTriggerDelayMs = ChromeFeatureList.getFieldTrialParamByFeatureAsInt( ChromeFeatureList.CCT_PAGE_INSIGHTS_HUB, PAGE_INSIGHTS_CAN_AUTOTRIGGER_AFTER_END, DEFAULT_TRIGGER_DELAY_MS); + tabObservable.addObserver( + tab -> { + if (tab == null) return; + delayStartAutoTrigger(mAutoTriggerDelayMs); + tab.addObserver(this); + }); + if (BackPressManager.isEnabled()) { + BackPressHandler backPressHandler = + bottomSheetController.getBottomSheetBackPressHandler(); + if (backPressHandler != null + && backPressManager != null + && !backPressManager.has(BackPressHandler.Type.PAGE_INSIGHTS_BOTTOM_SHEET)) { + backPressManager.addHandler( + backPressHandler, BackPressHandler.Type.PAGE_INSIGHTS_BOTTOM_SHEET); + } + } } void initView(View bottomSheetContainer) { @@ -269,6 +298,28 @@ return !MathUtils.areFloatsEqual(mControlsStateProvider.getBrowserControlHiddenRatio(), 0f); } + private boolean handleBottomSheetTap() { + if (mSheetController.getSheetState() == BottomSheetController.SheetState.PEEK) { + mSheetController.expandSheet(); + return true; + } + return false; + } + + private boolean handleBackPress() { + if (mSheetController.getSheetState() != BottomSheetController.SheetState.FULL) { + return false; + } + + if (mIsShowingChildView) { + mSheetContent.showFeedPage(); + mIsShowingChildView = false; + } else if (!mSheetController.collapseSheet(true)) { + mSheetController.hideContent(mSheetContent, true); + } + return true; + } + // TabObserver private void autoTriggerPageInsightsFromTimer() { @@ -283,18 +334,19 @@ @Override public void onPageLoadStarted(Tab tab, GURL url) { + Log.v(TAG, "onPageLoadStarted"); resetAutoTriggerTimer(); if (mSheetContent == mSheetController.getCurrentSheetContent()) { - mSheetController.hideContent(mSheetContent, false); + mSheetController.hideContent(mSheetContent, true); } + delayStartAutoTrigger(mAutoTriggerDelayMs); } @Override - public void onLoadStopped(Tab tab, boolean toDifferentDocument) { - // onPageLoadFinished is not suitable as it is not fired when going back to a cached page. - if (!toDifferentDocument) return; - resetAutoTriggerTimer(); - delayStartAutoTrigger(mAutoTriggerDelayMs); + public void onDidFinishNavigationInPrimaryMainFrame( + Tab tab, NavigationHandle navigationHandle) { + Log.v(TAG, "onDidFinishNavigationInPrimaryMainFrame"); + mCurrentNavigationHandle = navigationHandle; } private void delayStartAutoTrigger(long delayMs) { @@ -306,36 +358,62 @@ } private void maybeAutoTriggerPageInsights() { - if (!mIsPageInsightsHubEnabled.getAsBoolean() - || !BrowserControlsUtils.areBrowserControlsOffScreen(mControlsStateProvider) - || mSheetContent == mSheetController.getCurrentSheetContent() - || !mAutoTriggerReady) { - Log.v(TAG, "Not triggering auto-peek."); + if (!mAutoTriggerReady) return; + if (mSheetContent == mSheetController.getCurrentSheetContent()) { + Log.v( + TAG, + "Not auto-triggering because page insights sheet content already being shown."); + return; + } + if (!BrowserControlsUtils.areBrowserControlsOffScreen(mControlsStateProvider) + && !mIsAccessibilityEnabled) { + Log.v( + TAG, + "Not auto-triggering because browser controls are not off screen and a11y is" + + " not enabled."); return; } resetAutoTriggerTimer(); + + if (!mIsPageInsightsEnabledSupplier.getAsBoolean()) { + Log.v(TAG, "Not auto-triggering because feature is disabled."); + return; + } + + PageInsightsConfig config = mPageInsightsConfigProvider.apply(mCurrentNavigationHandle); + if (!config.getShouldAutoTrigger()) { + Log.v(TAG, "Not auto-triggering because auto-triggering is disabled."); + return; + } + Log.v(TAG, "Loading data for auto-peek"); mPageInsightsDataLoader.loadInsightsData( mTabObservable.get().getUrl(), + config.getShouldAttachGaiaToRequest(), metadata -> { mDisplayedMetadata = metadata; boolean hasEnoughConfidence = metadata.getAutoPeekConditions().getConfidence() > MINIMUM_CONFIDENCE; if (hasEnoughConfidence) { Log.v(TAG, "Auto-peeking"); - openInAutoPeekState(metadata); + openInAutoPeekState(metadata, config.getShouldXsurfaceLog()); } else { Log.v(TAG, "Would auto-peek but confidence too low"); } }); } - private void openInAutoPeekState(PageInsightsMetadata metadata) { - // TODO(b/291053694): Only pass logging params if user has correct opt-ins. - getSurfaceRenderer() - .onSurfaceCreated( - PageInsightsLoggingParametersImpl.create(mProfileSupplier.get(), metadata)); - initSheetContent(metadata); + private void openInAutoPeekState(PageInsightsMetadata metadata, boolean shouldXsurfaceLog) { + if (shouldXsurfaceLog) { + getSurfaceRenderer() + .onSurfaceCreated( + PageInsightsLoggingParametersImpl.create( + mProfileSupplier.get(), metadata)); + } + initSheetContent( + metadata, + /* isPrivacyNoticeRequired= */ shouldXsurfaceLog, + /* shouldHavePeekState= */ true); logPageInsightsEvent(PageInsightsEvent.AUTO_PEEK_TRIGGERED); getSurfaceRenderer().onEvent(BOTTOM_SHEET_PEEKING); mSheetController.requestShowContent(mSheetContent, true); @@ -343,18 +421,26 @@ // data void launch() { + resetAutoTriggerTimer(); mSheetContent.showLoadingIndicator(); mSheetController.requestShowContent(mSheetContent, true); + PageInsightsConfig config = mPageInsightsConfigProvider.apply(mCurrentNavigationHandle); mPageInsightsDataLoader.loadInsightsData( mTabObservable.get().getUrl(), + config.getShouldAttachGaiaToRequest(), metadata -> { mDisplayedMetadata = metadata; - // TODO(b/291053694): Only pass logging params if user has correct opt-ins. - getSurfaceRenderer() - .onSurfaceCreated( - PageInsightsLoggingParametersImpl.create( - mProfileSupplier.get(), metadata)); - initSheetContent(metadata); + if (config.getShouldXsurfaceLog()) { + getSurfaceRenderer() + .onSurfaceCreated( + PageInsightsLoggingParametersImpl.create( + mProfileSupplier.get(), metadata)); + } + initSheetContent( + metadata, + /* isPrivacyNoticeRequired= */ config.getShouldXsurfaceLog(), + /* shouldHavePeekState= */ false); + setBackgroundColors(/* ratioOfCompletionFromPeekToExpanded */ 1.0f); setCornerRadiusPx(mMaxCornerRadiusPx); logPageInsightsEvent(PageInsightsEvent.USER_INVOKES_PIH); // We need to perform this logging here, even though we also do it when the @@ -365,9 +451,12 @@ }); } - private void initSheetContent(PageInsightsMetadata metadata) { + private void initSheetContent( + PageInsightsMetadata metadata, + boolean isPrivacyNoticeRequired, + boolean shouldHavePeekState) { mCurrentFeedView = getXSurfaceView(metadata.getFeedPage().getElementsOutput()); - mSheetContent.initContent(mCurrentFeedView); + mSheetContent.initContent(mCurrentFeedView, isPrivacyNoticeRequired, shouldHavePeekState); mSheetContent.showFeedPage(); } @@ -389,6 +478,7 @@ } mCurrentChildView = getXSurfaceView(currPage.getElementsOutput()); mSheetContent.showChildPage(mCurrentChildView, currPage.getTitle()); + mIsShowingChildView = true; } } } @@ -409,18 +499,23 @@ @Override public void onSheetStateChanged(@SheetState int newState, @StateChangeReason int reason) { if (newState == SheetState.HIDDEN) { + mWillHandleBackPressSupplier.set(false); setBottomControlsHeight(mSheetController.getCurrentOffset()); handleDismissal(mOldState); } else if (newState == SheetState.PEEK) { + mWillHandleBackPressSupplier.set(false); setBottomControlsHeight(mSheetController.getCurrentOffset()); - setDrawableBackgroundColor(/* ratioOfCompletionFromPeekToExpanded */ .0f); + setBackgroundColors(/* ratioOfCompletionFromPeekToExpanded */ .0f); logPageInsightsEvent(PageInsightsEvent.STATE_PEEK); // We don't log peek state to XSurface here, as its BOTTOM_SHEET_PEEKING event is only // intended for when the feature initially auto-peeks. } else if (newState == SheetState.FULL) { - setDrawableBackgroundColor(/* ratioOfCompletionFromPeekToExpanded */ 1.0f); + mWillHandleBackPressSupplier.set(true); + setBackgroundColors(/* ratioOfCompletionFromPeekToExpanded */ 1.0f); logPageInsightsEvent(PageInsightsEvent.STATE_EXPANDED); getSurfaceRenderer().onEvent(BOTTOM_SHEET_EXPANDED); + } else { + mWillHandleBackPressSupplier.set(false); } if (newState != SheetState.NONE && newState != SheetState.SCROLLING) { @@ -429,7 +524,7 @@ } private void handleDismissal(@SheetState int oldState) { - resetAutoTriggerTimer(); + mIsShowingChildView = false; if (mCurrentFeedView != null) { getSurfaceRenderer().unbindView(mCurrentFeedView); @@ -478,7 +573,7 @@ float ratioOfCompletionFromPeekToExpanded = (heightFraction - peekHeightRatio) / (1.f - peekHeightRatio); - setDrawableBackgroundColor(ratioOfCompletionFromPeekToExpanded); + setBackgroundColors(ratioOfCompletionFromPeekToExpanded); if (0 <= ratioOfCompletionFromPeekToExpanded && ratioOfCompletionFromPeekToExpanded <= 1.f) { setCornerRadiusPx((int) (ratioOfCompletionFromPeekToExpanded * mMaxCornerRadiusPx)); @@ -486,7 +581,7 @@ } private float getPeekHeightRatio() { - float fullHeight = mSheetContent.getFullHeightRatio() * mSheetContainer.getHeight(); + float fullHeight = mSheetContent.getActualFullHeightRatio() * mSheetContainer.getHeight(); return mSheetContent.getPeekHeight() / fullHeight; } @@ -496,7 +591,7 @@ new float[] {radius, radius, radius, radius, 0, 0, 0, 0}); } - void setDrawableBackgroundColor(float ratioOfCompletionFromPeekToExpanded) { + void setBackgroundColors(float ratioOfCompletionFromPeekToExpanded) { float colorRatio = 1.0f; if (0 <= ratioOfCompletionFromPeekToExpanded && ratioOfCompletionFromPeekToExpanded <= 0.5f) { @@ -504,10 +599,14 @@ } else if (ratioOfCompletionFromPeekToExpanded <= 0) { colorRatio = 0; } - int toolbarRenderingColor = ColorUtils.getColorWithOverlay( - mContext.getColor(R.color.gm3_baseline_surface_container), - mContext.getColor(R.color.gm3_baseline_surface), colorRatio, false); - mBackgroundDrawable.setColor(toolbarRenderingColor); + int surfaceColor = mContext.getColor(R.color.gm3_baseline_surface); + int surfaceContainerColor = mContext.getColor(R.color.gm3_baseline_surface_container); + mBackgroundDrawable.setColor( + ColorUtils.getColorWithOverlay( + surfaceContainerColor, surfaceColor, colorRatio, false)); + mSheetContent.setPrivacyCardColor( + ColorUtils.getColorWithOverlay( + surfaceColor, surfaceContainerColor, colorRatio, false)); } @Override @@ -541,10 +640,6 @@ return mSheetContainer; } - void setElapsedRealtimeSupplierForTesting(Supplier currentTime) { - mCurrentTime = currentTime; - } - private PageInsightsSurfaceRenderer getSurfaceRenderer() { if (mSurfaceRenderer != null) { return mSurfaceRenderer; diff -Nru chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsMediatorTest.java chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsMediatorTest.java --- chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsMediatorTest.java 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsMediatorTest.java 2023-11-14 22:56:28.000000000 +0000 @@ -5,15 +5,20 @@ package org.chromium.chrome.browser.page_insights; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import static org.chromium.chrome.browser.page_insights.PageInsightsMediator.DEFAULT_TRIGGER_DELAY_MS; @@ -40,7 +45,6 @@ import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; -import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; @@ -57,12 +61,14 @@ import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.base.test.util.HistogramWatcher; import org.chromium.base.test.util.JniMocker; +import org.chromium.chrome.browser.back_press.BackPressManager; import org.chromium.chrome.browser.browser_controls.BrowserControlsSizer; import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider; import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.optimization_guide.OptimizationGuideBridge; import org.chromium.chrome.browser.optimization_guide.OptimizationGuideBridgeJni; import org.chromium.chrome.browser.page_insights.PageInsightsMediator.PageInsightsEvent; +import org.chromium.chrome.browser.page_insights.proto.Config.PageInsightsConfig; import org.chromium.chrome.browser.page_insights.proto.PageInsights.AutoPeekConditions; import org.chromium.chrome.browser.page_insights.proto.PageInsights.Page; import org.chromium.chrome.browser.page_insights.proto.PageInsights.PageInsightsMetadata; @@ -71,18 +77,23 @@ import org.chromium.chrome.browser.share.ShareDelegate.ShareOrigin; import org.chromium.chrome.browser.signin.services.IdentityServicesProvider; import org.chromium.chrome.browser.tab.Tab; +import org.chromium.chrome.browser.util.ChromeAccessibilityUtil; import org.chromium.chrome.browser.xsurface.ProcessScope; import org.chromium.chrome.browser.xsurface.pageinsights.PageInsightsActionsHandler; import org.chromium.chrome.browser.xsurface.pageinsights.PageInsightsLoggingParameters; import org.chromium.chrome.browser.xsurface.pageinsights.PageInsightsSurfaceRenderer; import org.chromium.chrome.browser.xsurface.pageinsights.PageInsightsSurfaceScope; import org.chromium.chrome.browser.xsurface_provider.XSurfaceProcessScopeProvider; +import org.chromium.chrome.test.util.browser.Features; +import org.chromium.chrome.test.util.browser.Features.DisableFeatures; +import org.chromium.chrome.test.util.browser.Features.EnableFeatures; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController.SheetState; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController.StateChangeReason; import org.chromium.components.browser_ui.bottomsheet.ExpandedSheetHelper; import org.chromium.components.browser_ui.bottomsheet.ManagedBottomSheetController; import org.chromium.components.browser_ui.share.ShareParams; +import org.chromium.components.browser_ui.widget.gesture.BackPressHandler; import org.chromium.components.dom_distiller.core.DomDistillerUrlUtils; import org.chromium.components.dom_distiller.core.DomDistillerUrlUtilsJni; import org.chromium.components.optimization_guide.OptimizationGuideDecision; @@ -91,11 +102,13 @@ import org.chromium.components.signin.identitymanager.ConsentLevel; import org.chromium.components.signin.identitymanager.IdentityManager; import org.chromium.content_public.browser.LoadUrlParams; +import org.chromium.content_public.browser.NavigationHandle; import org.chromium.url.GURL; import org.chromium.url.JUnitTestGURLs; import java.util.Map; import java.util.concurrent.TimeUnit; +import java.util.function.Function; /** * Unit tests for {@link PageInsightsMediator}. @@ -111,6 +124,8 @@ @Rule public JniMocker jniMocker = new JniMocker(); + @Rule + public Features.JUnitProcessor mFeaturesProcessor = new Features.JUnitProcessor(); @Mock protected OptimizationGuideBridge.Natives mOptimizationGuideBridgeJniMock; @@ -152,6 +167,14 @@ private ShareDelegate mShareDelegate; @Mock private DomDistillerUrlUtils.Natives mDistillerUrlUtilsJniMock; + @Mock + private BackPressManager mBackPressManager; + @Mock + private BackPressHandler mBackPressHandler; + @Mock + private Function mPageInsightsConfigProvider; + @Mock + private NavigationHandle mNavigationHandle; @Captor private ArgumentCaptor @@ -184,15 +207,24 @@ any(PageInsightsSurfaceScopeDependencyProviderImpl.class))) .thenReturn(mSurfaceScope); when(mSurfaceScope.provideSurfaceRenderer()).thenReturn(mSurfaceRenderer); - when(mControlsStateProvider.getBrowserControlHiddenRatio()).thenReturn(1.0f); when(mMockTabProvider.get()).thenReturn(mTab); when(mTab.getUrl()).thenReturn(JUnitTestGURLs.EXAMPLE_URL); when(mShareDelegateSupplier.get()).thenReturn(mShareDelegate); when(mProfileSupplier.get()).thenReturn(mProfile); IdentityServicesProvider.setInstanceForTests(mIdentityServicesProvider); when(mIdentityServicesProvider.getIdentityManager(mProfile)).thenReturn(mIdentityManager); + when(mBottomSheetController.getBottomSheetBackPressHandler()).thenReturn(mBackPressHandler); + when(mPageInsightsConfigProvider.apply(any())) + .thenReturn( + PageInsightsConfig.newBuilder() + .setShouldAutoTrigger(true) + .setShouldXsurfaceLog(true) + .setShouldAttachGaiaToRequest(true) + .build()); + ChromeAccessibilityUtil.get().setAccessibilityEnabledForTesting(false); } + private void createMediator() { createMediator(DEFAULT_TRIGGER_DELAY_MS); } @@ -211,6 +243,7 @@ mMediator = new PageInsightsMediator( context, + new View(ContextUtils.getApplicationContext()), mMockTabProvider, mShareDelegateSupplier, mProfileSupplier, @@ -219,8 +252,9 @@ mExpandedSheetHelper, mControlsStateProvider, mBrowserControlsSizer, + mBackPressManager, () -> true, - firstLoadTimeMs); + mPageInsightsConfigProvider); verify(mControlsStateProvider).addObserver(mBrowserControlsStateProviderObserver.capture()); mockOptimizationGuideResponse(getPageInsightsMetadata()); setBackgroundDrawable(); @@ -228,38 +262,106 @@ @Test @MediumTest + @EnableFeatures(ChromeFeatureList.BACK_GESTURE_REFACTOR) + public void + constructor_backGestureRefactorEnabled_sameBackPressHandlerNotRegistered_registers() { + createMediator(); + + verify(mBackPressManager) + .addHandler(mBackPressHandler, BackPressHandler.Type.PAGE_INSIGHTS_BOTTOM_SHEET); + } + + @Test + @MediumTest + @EnableFeatures(ChromeFeatureList.BACK_GESTURE_REFACTOR) + public void + constructor_backGestureRefactorEnabled_sameBackPressHandlerRegistered_doesNotRegister() { + when(mBackPressManager.has(BackPressHandler.Type.PAGE_INSIGHTS_BOTTOM_SHEET)) + .thenReturn(true); + + createMediator(); + + verify(mBackPressManager, never()) + .addHandler(mBackPressHandler, BackPressHandler.Type.PAGE_INSIGHTS_BOTTOM_SHEET); + } + + @Test + @MediumTest + @DisableFeatures(ChromeFeatureList.BACK_GESTURE_REFACTOR) + public void constructor_backGestureRefactorDisabled_doesNotRegister() { + createMediator(); + + verify(mBackPressManager, never()) + .addHandler(mBackPressHandler, BackPressHandler.Type.PAGE_INSIGHTS_BOTTOM_SHEET); + } + + @Test + @MediumTest public void testAutoTrigger_doesNotTriggerImmediately() { + when(mControlsStateProvider.getBrowserControlHiddenRatio()).thenReturn(1.0f); createMediator(SHORT_TRIGGER_DELAY_MS); - mMediator.onLoadStopped(mTab, true); - mBrowserControlsStateProviderObserver.getValue().onControlsOffsetChanged(0, 70, 0, 0, true); + mMediator.onPageLoadStarted(mTab, null); verify(mBottomSheetController, never()).requestShowContent(any(), anyBoolean()); } @Test @MediumTest - public void testAutoTrigger_notEnoughDuration_doesNotTrigger() { + public void testAutoTrigger_notEnoughDuration_controlsOffScreen_doesNotTrigger() { createMediator(SHORT_TRIGGER_DELAY_MS); - mMediator.onLoadStopped(mTab, true); + mMediator.onPageLoadStarted(mTab, null); + when(mControlsStateProvider.getBrowserControlHiddenRatio()).thenReturn(1.0f); mShadowLooper.idleFor(250, TimeUnit.MILLISECONDS); - mBrowserControlsStateProviderObserver.getValue().onControlsOffsetChanged(0, 70, 0, 0, true); verify(mBottomSheetController, never()).requestShowContent(any(), anyBoolean()); } @Test @MediumTest - public void testAutoTrigger_enoughDuration_showsBottomSheet() { + public void + testAutoTrigger_enoughDuration_controlsOffScreen_shouldNotAutoTrigger_doesNotTrigger() { + when(mPageInsightsConfigProvider.apply(mNavigationHandle)) + .thenReturn(PageInsightsConfig.newBuilder().setShouldAutoTrigger(false).build()); + createMediator(SHORT_TRIGGER_DELAY_MS); + mMediator.onDidFinishNavigationInPrimaryMainFrame(mTab, mNavigationHandle); + View feedView = new View(ContextUtils.getApplicationContext()); + when(mSurfaceRenderer.render(eq(TEST_FEED_ELEMENTS_OUTPUT), any())).thenReturn(feedView); + mMediator.onPageLoadStarted(mTab, null); + + when(mControlsStateProvider.getBrowserControlHiddenRatio()).thenReturn(1.0f); + mShadowLooper.idleFor(2500, TimeUnit.MILLISECONDS); + + verify(mBottomSheetController, never()).requestShowContent(any(), anyBoolean()); + verifyNoMoreInteractions(mOptimizationGuideBridgeJniMock); + } + + @Test + @MediumTest + public void testAutoTrigger_enoughDuration_controlsOnScreen_a11yDisabled_doesNotTrigger() { + createMediator(SHORT_TRIGGER_DELAY_MS); + mMediator.onPageLoadStarted(mTab, null); + + when(mControlsStateProvider.getBrowserControlHiddenRatio()).thenReturn(.0f); + mShadowLooper.idleFor(2500, TimeUnit.MILLISECONDS); + + verify(mBottomSheetController, never()).requestShowContent(any(), anyBoolean()); + verifyNoMoreInteractions(mOptimizationGuideBridgeJniMock); + } + + @Test + @MediumTest + public void testAutoTrigger_enoughDuration_controlsOnScreen_a11yEnabled_showsBottomSheet() { + ChromeAccessibilityUtil.get().setAccessibilityEnabledForTesting(true); createMediator(SHORT_TRIGGER_DELAY_MS); View feedView = new View(ContextUtils.getApplicationContext()); when(mSurfaceRenderer.render(eq(TEST_FEED_ELEMENTS_OUTPUT), any())).thenReturn(feedView); - mMediator.onLoadStopped(mTab, true); + mMediator.onPageLoadStarted(mTab, null); verify(mBottomSheetController, never()).requestShowContent(any(), anyBoolean()); + when(mControlsStateProvider.getBrowserControlHiddenRatio()).thenReturn(.0f); mShadowLooper.idleFor(2500, TimeUnit.MILLISECONDS); - mBrowserControlsStateProviderObserver.getValue().onControlsOffsetChanged(0, 70, 0, 0, true); verify(mBottomSheetController, times(1)).requestShowContent(any(), anyBoolean()); assertEquals(View.VISIBLE, @@ -276,13 +378,60 @@ ((FrameLayout) mMediator.getSheetContent().getContentView().findViewById( R.id.page_insights_feed_content)) .getChildAt(0)); + assertNotEquals( + PageInsightsSheetContent.HeightMode.DISABLED, + mMediator.getSheetContent().getPeekHeight()); verify(mBottomSheetController, never()).expandSheet(); } @Test @MediumTest - public void testAutoTrigger_enoughDuration_signedIn_providesBothXSurfaceLoggingParamsAndLogs() - throws Exception { + public void testAutoTrigger_enoughDuration_controlsOffScreen_showsBottomSheet() { + createMediator(SHORT_TRIGGER_DELAY_MS); + View feedView = new View(ContextUtils.getApplicationContext()); + when(mSurfaceRenderer.render(eq(TEST_FEED_ELEMENTS_OUTPUT), any())).thenReturn(feedView); + + mMediator.onPageLoadStarted(mTab, null); + + verify(mBottomSheetController, never()).requestShowContent(any(), anyBoolean()); + + when(mControlsStateProvider.getBrowserControlHiddenRatio()).thenReturn(1.0f); + mShadowLooper.idleFor(2500, TimeUnit.MILLISECONDS); + + verify(mBottomSheetController, times(1)).requestShowContent(any(), anyBoolean()); + assertEquals( + View.VISIBLE, + mMediator + .getSheetContent() + .getToolbarView() + .findViewById(R.id.page_insights_feed_header) + .getVisibility()); + assertEquals( + View.VISIBLE, + mMediator + .getSheetContent() + .getContentView() + .findViewById(R.id.page_insights_feed_content) + .getVisibility()); + assertEquals( + feedView, + ((FrameLayout) + mMediator + .getSheetContent() + .getContentView() + .findViewById(R.id.page_insights_feed_content)) + .getChildAt(0)); + assertNotEquals( + PageInsightsSheetContent.HeightMode.DISABLED, + mMediator.getSheetContent().getPeekHeight()); + verify(mBottomSheetController, never()).expandSheet(); + } + + @Test + @MediumTest + public void + testAutoTrigger_enoughDuration_controlsOffScreen_signedIn_providesBothXSurfaceLoggingParamsAndLogs() + throws Exception { createMediator(SHORT_TRIGGER_DELAY_MS); View feedView = new View(ContextUtils.getApplicationContext()); when(mSurfaceRenderer.render(eq(TEST_FEED_ELEMENTS_OUTPUT), any())).thenReturn(feedView); @@ -290,9 +439,9 @@ .thenReturn(mCoreAccountInfo); when(mCoreAccountInfo.getEmail()).thenReturn("email@address.com"); - mMediator.onLoadStopped(mTab, true); + mMediator.onPageLoadStarted(mTab, null); + when(mControlsStateProvider.getBrowserControlHiddenRatio()).thenReturn(1.0f); mShadowLooper.idleFor(2500, TimeUnit.MILLISECONDS); - mBrowserControlsStateProviderObserver.getValue().onControlsOffsetChanged(0, 70, 0, 0, true); verify(mSurfaceRenderer).onSurfaceCreated(mLoggingParameters.capture()); assertEquals( @@ -308,16 +457,16 @@ @Test @MediumTest public void - testAutoTrigger_enoughDuration_signedOut_providesPartialXSurfaceLoggingParamsAndLogs() + testAutoTrigger_enoughDuration_controlsOffScreen_signedOut_providesPartialXSurfaceLoggingParamsAndLogs() throws Exception { createMediator(SHORT_TRIGGER_DELAY_MS); View feedView = new View(ContextUtils.getApplicationContext()); when(mSurfaceRenderer.render(eq(TEST_FEED_ELEMENTS_OUTPUT), any())).thenReturn(feedView); when(mIdentityManager.getPrimaryAccountInfo(ConsentLevel.SIGNIN)).thenReturn(null); - mMediator.onLoadStopped(mTab, true); + mMediator.onPageLoadStarted(mTab, null); + when(mControlsStateProvider.getBrowserControlHiddenRatio()).thenReturn(1.0f); mShadowLooper.idleFor(2500, TimeUnit.MILLISECONDS); - mBrowserControlsStateProviderObserver.getValue().onControlsOffsetChanged(0, 70, 0, 0, true); verify(mSurfaceRenderer).onSurfaceCreated(mLoggingParameters.capture()); assertEquals( @@ -332,6 +481,55 @@ @Test @MediumTest + public void testLaunch_shouldNotAttachGaia_doesNotAttachGaia() throws Exception { + when(mPageInsightsConfigProvider.apply(mNavigationHandle)) + .thenReturn( + PageInsightsConfig.newBuilder() + .setShouldAttachGaiaToRequest(false) + .build()); + createMediator(); + mMediator.onDidFinishNavigationInPrimaryMainFrame(mTab, mNavigationHandle); + View feedView = new View(ContextUtils.getApplicationContext()); + when(mSurfaceRenderer.render(eq(TEST_FEED_ELEMENTS_OUTPUT), any())).thenReturn(feedView); + + mMediator.launch(); + + verify(mOptimizationGuideBridgeJniMock, times(1)) + .canApplyOptimizationOnDemand( + anyLong(), + any(), + any(), + eq( + CommonTypesProto.RequestContext + .CONTEXT_NON_PERSONALIZED_PAGE_INSIGHTS_HUB + .getNumber()), + any()); + } + + @Test + @MediumTest + public void testLaunch_shouldAttachGaia_attachesGaia() throws Exception { + when(mPageInsightsConfigProvider.apply(mNavigationHandle)) + .thenReturn( + PageInsightsConfig.newBuilder().setShouldAttachGaiaToRequest(true).build()); + createMediator(); + mMediator.onDidFinishNavigationInPrimaryMainFrame(mTab, mNavigationHandle); + View feedView = new View(ContextUtils.getApplicationContext()); + when(mSurfaceRenderer.render(eq(TEST_FEED_ELEMENTS_OUTPUT), any())).thenReturn(feedView); + + mMediator.launch(); + + verify(mOptimizationGuideBridgeJniMock, times(1)) + .canApplyOptimizationOnDemand( + anyLong(), + any(), + any(), + eq(CommonTypesProto.RequestContext.CONTEXT_PAGE_INSIGHTS_HUB.getNumber()), + any()); + } + + @Test + @MediumTest public void testLaunch_showsBottomSheet() throws Exception { createMediator(); View feedView = new View(ContextUtils.getApplicationContext()); @@ -354,6 +552,9 @@ ((FrameLayout) mMediator.getSheetContent().getContentView().findViewById( R.id.page_insights_feed_content)) .getChildAt(0)); + assertEquals( + PageInsightsSheetContent.HeightMode.DISABLED, + mMediator.getSheetContent().getPeekHeight()); verify(mBottomSheetController).expandSheet(); } @@ -382,6 +583,25 @@ @Test @MediumTest + public void testLaunch_signedIn_shouldNotXSurfaceLog_doesNotCallOnSurfaceCreated() + throws Exception { + when(mPageInsightsConfigProvider.apply(mNavigationHandle)) + .thenReturn(PageInsightsConfig.newBuilder().setShouldXsurfaceLog(false).build()); + createMediator(); + mMediator.onDidFinishNavigationInPrimaryMainFrame(mTab, mNavigationHandle); + View feedView = new View(ContextUtils.getApplicationContext()); + when(mSurfaceRenderer.render(eq(TEST_FEED_ELEMENTS_OUTPUT), any())).thenReturn(feedView); + when(mIdentityManager.getPrimaryAccountInfo(ConsentLevel.SIGNIN)) + .thenReturn(mCoreAccountInfo); + when(mCoreAccountInfo.getEmail()).thenReturn("email@address.com"); + + mMediator.launch(); + + verify(mSurfaceRenderer, never()).onSurfaceCreated(any()); + } + + @Test + @MediumTest public void testLaunch_signedOut_providesPartialhXSurfaceLoggingParamsAndLogs() throws Exception { createMediator(); @@ -420,7 +640,14 @@ assertEquals(View.VISIBLE, mMediator.getSheetContent() .getToolbarView() - .findViewById(R.id.page_insights_child_page_header) + .findViewById(R.id.page_insights_child_title) + .getVisibility()); + assertEquals( + View.VISIBLE, + mMediator + .getSheetContent() + .getToolbarView() + .findViewById(R.id.page_insights_back_button) .getVisibility()); assertEquals(View.VISIBLE, mMediator.getSheetContent() @@ -476,53 +703,6 @@ @Test @MediumTest - public void setupAutoTriggerForDelayedInstantation_beforeTabLoading() { - createMediator(); - verify(mMockTabProvider).addObserver(mTabObserver.capture()); - - // Nothing happens for null tab. - mTabObserver.getValue().onResult(null); - verify(mTab, never()).addObserver(mMediator); - - // Tab is still loading -> autotrigger setup will be handled by Mediator#onLoadStopped - when(mTab.isLoading()).thenReturn(true); - mTabObserver.getValue().onResult(mTab); - verify(mTab).addObserver(mMediator); - mShadowLooper.idleFor(DEFAULT_TRIGGER_DELAY_MS + 1, TimeUnit.MILLISECONDS); - verify(mBottomSheetController, never()).requestShowContent(any(), anyBoolean()); - } - - @Test - @MediumTest - public void setupAutoTriggerForDelayedInstantation_afterTabLoading() { - // PIH was instantiated 20 seconds after tab loading completes. - long timeAfterLoading = 20 * DateUtils.SECOND_IN_MILLIS; - Supplier fakeTimer = Mockito.mock(Supplier.class); - final long currentTime = 139583732; - when(fakeTimer.get()).thenReturn(currentTime); - - createMediator(DEFAULT_TRIGGER_DELAY_MS, currentTime - timeAfterLoading); - mMediator.setElapsedRealtimeSupplierForTesting(fakeTimer); - View feedView = new View(ContextUtils.getApplicationContext()); - when(mSurfaceRenderer.render(eq(TEST_FEED_ELEMENTS_OUTPUT), any())).thenReturn(feedView); - verify(mMockTabProvider).addObserver(mTabObserver.capture()); - - when(mTab.isLoading()).thenReturn(false); - mTabObserver.getValue().onResult(mTab); - verify(mTab).addObserver(mMediator); - - // Verify that the PIH was autotriggered in 40 seconds. - mShadowLooper.idleFor( - DEFAULT_TRIGGER_DELAY_MS - timeAfterLoading - 1, TimeUnit.MILLISECONDS); - verify(mBottomSheetController, never()).requestShowContent(any(), anyBoolean()); - - // + 2 == DEFAULT_TRIGGER_DELAY_MS - timeAfterLoading + 1 - mShadowLooper.idleFor(2, TimeUnit.MILLISECONDS); - verify(mBottomSheetController).requestShowContent(any(), anyBoolean()); - } - - @Test - @MediumTest public void openInExpandedState_recordsHistogram_userInvokesPih() { HistogramWatcher histogramWatcher = HistogramWatcher.newSingleRecordWatcher("CustomTabs.PageInsights.Event", @@ -546,12 +726,12 @@ View feedView = new View(ContextUtils.getApplicationContext()); when(mSurfaceRenderer.render(eq(TEST_FEED_ELEMENTS_OUTPUT), any())).thenReturn(feedView); - mMediator.onLoadStopped(mTab, true); + mMediator.onPageLoadStarted(mTab, null); verify(mBottomSheetController, never()).requestShowContent(any(), anyBoolean()); + when(mControlsStateProvider.getBrowserControlHiddenRatio()).thenReturn(1.0f); mShadowLooper.idleFor(2500, TimeUnit.MILLISECONDS); - mBrowserControlsStateProviderObserver.getValue().onControlsOffsetChanged(0, 70, 0, 0, true); verify(mBottomSheetController, times(1)).requestShowContent(any(), anyBoolean()); histogramWatcher.assertExpected(); @@ -773,6 +953,127 @@ histogramWatcher.assertExpected(); } + @Test + @MediumTest + public void tapOnBottomSheet_peekState_expands() { + when(mBottomSheetController.getSheetState()).thenReturn(SheetState.PEEK); + createMediator(); + + mMediator.getSheetContent().getToolbarView().callOnClick(); + + verify(mBottomSheetController).expandSheet(); + } + + @Test + @MediumTest + public void tapOnBottomSheet_fullState_doesNotExpand() { + when(mBottomSheetController.getSheetState()).thenReturn(SheetState.FULL); + createMediator(); + + mMediator.getSheetContent().getToolbarView().callOnClick(); + + verify(mBottomSheetController, never()).expandSheet(); + } + + @Test + @MediumTest + public void handleBackPress_peekState_doesNothing() { + createMediator(); + when(mBottomSheetController.getSheetState()).thenReturn(SheetState.PEEK); + mMediator.onSheetStateChanged(SheetState.PEEK, StateChangeReason.SWIPE); + + assertFalse(mMediator.getSheetContent().getBackPressStateChangedSupplier().get()); + + boolean handled = mMediator.getSheetContent().handleBackPress(); + + assertFalse(handled); + verify(mBottomSheetController, never()) + .hideContent(eq(mMediator.getSheetContent()), anyBoolean()); + } + + @Test + @MediumTest + public void handleBackPress_hiddenState_doesNothing() { + when(mBottomSheetController.getSheetState()).thenReturn(SheetState.HIDDEN); + createMediator(); + mMediator.onSheetStateChanged(SheetState.HIDDEN, StateChangeReason.SWIPE); + + assertFalse(mMediator.getSheetContent().getBackPressStateChangedSupplier().get()); + + boolean handled = mMediator.getSheetContent().handleBackPress(); + + assertFalse(handled); + verify(mBottomSheetController, never()) + .hideContent(eq(mMediator.getSheetContent()), anyBoolean()); + } + + @Test + @MediumTest + public void handleBackPress_fullState_notChildPage_canCollapseToPeek_collapses() { + when(mBottomSheetController.getSheetState()).thenReturn(SheetState.FULL); + when(mBottomSheetController.collapseSheet(true)).thenReturn(true); + createMediator(); + mMediator.onSheetStateChanged(SheetState.FULL, StateChangeReason.SWIPE); + + assertTrue(mMediator.getSheetContent().getBackPressStateChangedSupplier().get()); + + boolean handled = mMediator.getSheetContent().handleBackPress(); + + assertTrue(handled); + verify(mBottomSheetController).collapseSheet(true); + verify(mBottomSheetController, never()).hideContent(any(), anyBoolean()); + } + + @Test + @MediumTest + public void handleBackPress_fullState_notChildPage_cannotCollapseToPeek_hidesContent() { + when(mBottomSheetController.getSheetState()).thenReturn(SheetState.FULL); + when(mBottomSheetController.collapseSheet(true)).thenReturn(false); + createMediator(); + mMediator.onSheetStateChanged(SheetState.FULL, StateChangeReason.SWIPE); + + assertTrue(mMediator.getSheetContent().getBackPressStateChangedSupplier().get()); + + boolean handled = mMediator.getSheetContent().handleBackPress(); + + assertTrue(handled); + verify(mBottomSheetController).hideContent(mMediator.getSheetContent(), true); + } + + @Test + @MediumTest + public void handleBackPress_fullState_childPage_goesBackToFeedPage() { + when(mSurfaceRenderer.render( + eq(TEST_FEED_ELEMENTS_OUTPUT), mSurfaceRendererContextValues.capture())) + .thenReturn(new View(ContextUtils.getApplicationContext())); + when(mSurfaceRenderer.render(eq(TEST_CHILD_ELEMENTS_OUTPUT), any())) + .thenReturn(new View(ContextUtils.getApplicationContext())); + when(mBottomSheetController.getSheetState()).thenReturn(SheetState.FULL); + createMediator(); + mMediator.launch(); + mMediator.onSheetStateChanged(SheetState.FULL, StateChangeReason.SWIPE); + ((PageInsightsActionsHandler) + mSurfaceRendererContextValues + .getValue() + .get(PageInsightsActionsHandler.KEY)) + .navigateToPageInsightsPage(1); + + assertTrue(mMediator.getSheetContent().getBackPressStateChangedSupplier().get()); + + boolean handled = mMediator.getSheetContent().handleBackPress(); + + assertTrue(handled); + assertEquals( + View.VISIBLE, + mMediator + .getSheetContent() + .getToolbarView() + .findViewById(R.id.page_insights_feed_header) + .getVisibility()); + verify(mBottomSheetController, never()) + .hideContent(eq(mMediator.getSheetContent()), anyBoolean()); + } + private PageInsightsMetadata getPageInsightsMetadata() { Page childPage = Page.newBuilder() .setId(Page.PageID.PEOPLE_ALSO_VIEW) diff -Nru chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsSheetContent.java chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsSheetContent.java --- chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsSheetContent.java 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsSheetContent.java 2023-11-14 22:56:28.000000000 +0000 @@ -5,17 +5,25 @@ package org.chromium.chrome.browser.page_insights; import android.content.Context; +import android.content.res.ColorStateList; import android.text.method.LinkMovementMethod; +import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import android.widget.FrameLayout; +import android.widget.LinearLayout; import android.widget.TextView; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; +import androidx.recyclerview.widget.RecyclerView; import org.chromium.base.Callback; import org.chromium.base.shared_preferences.SharedPreferencesManager; +import org.chromium.base.supplier.ObservableSupplierImpl; +import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; import org.chromium.chrome.browser.preferences.ChromeSharedPreferences; import org.chromium.components.browser_ui.bottomsheet.BottomSheetContent; @@ -25,42 +33,113 @@ import java.text.DateFormat; import java.util.Date; -public class PageInsightsSheetContent implements BottomSheetContent { +public class PageInsightsSheetContent implements BottomSheetContent, View.OnLayoutChangeListener { + + @VisibleForTesting + static final String PAGE_INSIGHTS_FULL_HEIGHT_RATIO_PARAM = "page_insights_full_height_ratio"; + + @VisibleForTesting + static final String PAGE_INSIGHTS_PEEK_HEIGHT_RATIO_PARAM = "page_insights_peek_height_ratio"; + + @VisibleForTesting + static final String PAGE_INSIGHTS_PEEK_WITH_PRIVACY_HEIGHT_RATIO_PARAM = + "page_insights_peek_with_privacy_height_ratio"; + + interface OnBottomSheetTapHandler { + /** Returns true if the tap has been handled. */ + boolean handle(); + } + + interface OnBackPressHandler { + /** Returns true if the back press has been handled. */ + boolean handle(); + } + /** Ratio of the height when in full mode. */ - private static final float FULL_HEIGHT_RATIO = 0.9f; + static final float DEFAULT_FULL_HEIGHT_RATIO = 0.9f; + + /** Ratio of the height when in peek mode and privacy notice is not showing. */ + @VisibleForTesting static final float DEFAULT_PEEK_HEIGHT_RATIO = 0.201f; + + /** Ratio of the height when in peek mode and privacy notice is showing. */ + @VisibleForTesting static final float DEFAULT_PEEK_WITH_PRIVACY_HEIGHT_RATIO = 0.263f; - @VisibleForTesting static final float PEEK_HEIGHT_RATIO_WITHOUT_PRIVACY_NOTICE = 0.201f; + private static final SharedPreferencesManager sSharedPreferencesManager = + ChromeSharedPreferences.getInstance(); + private static final long INVALID_TIMESTAMP = -1; - @VisibleForTesting static final float PEEK_HEIGHT_RATIO_WITH_PRIVACY_NOTICE = 0.263f; + private final OnBackPressHandler mOnBackPressHandler; + private final ObservableSupplierImpl mWillHandleBackPressSupplier; + private final float mFullHeightRatio; + private final float mPeekHeightRatio; + private final float mPeekWithPrivacyHeightRatio; + private Context mContext; + private View mLayoutView; private ViewGroup mToolbarView; private ViewGroup mSheetContentView; private boolean mShouldPrivacyNoticeBeShown; private int mFullScreenHeight; - private Context mContext; private Callback mOnPrivacyNoticeLinkClickCallback; - private static final SharedPreferencesManager sSharedPreferencesManager = - ChromeSharedPreferences.getInstance(); - private static final long INVALID_TIMESTAMP = -1; + private boolean mShouldHavePeekState; + @Nullable private RecyclerView mCurrentRecyclerView; /** * Constructor. * * @param context An Android context. + * @param layoutView the top-level view for the Window + * @param onPrivacyNoticeLinkClickCallback callback for use on privacy notice + * @param onBottomSheetTapHandler handler for taps on bottom sheet */ public PageInsightsSheetContent( - Context context, Callback onPrivacyNoticeLinkClickCallback) { - // TODO(kamalchoudhury): Inflate with loading indicator instead + Context context, + View layoutView, + Callback onPrivacyNoticeLinkClickCallback, + OnBackPressHandler onBackPressHandler, + ObservableSupplierImpl willHandleBackPressSupplier, + OnBottomSheetTapHandler onBottomSheetTapHandler) { + mFullHeightRatio = + (float) + ChromeFeatureList.getFieldTrialParamByFeatureAsDouble( + ChromeFeatureList.CCT_PAGE_INSIGHTS_HUB, + PAGE_INSIGHTS_FULL_HEIGHT_RATIO_PARAM, + DEFAULT_FULL_HEIGHT_RATIO); + mPeekHeightRatio = + (float) + ChromeFeatureList.getFieldTrialParamByFeatureAsDouble( + ChromeFeatureList.CCT_PAGE_INSIGHTS_HUB, + PAGE_INSIGHTS_PEEK_HEIGHT_RATIO_PARAM, + DEFAULT_PEEK_HEIGHT_RATIO); + mPeekWithPrivacyHeightRatio = + (float) + ChromeFeatureList.getFieldTrialParamByFeatureAsDouble( + ChromeFeatureList.CCT_PAGE_INSIGHTS_HUB, + PAGE_INSIGHTS_PEEK_WITH_PRIVACY_HEIGHT_RATIO_PARAM, + DEFAULT_PEEK_WITH_PRIVACY_HEIGHT_RATIO); + mLayoutView = layoutView; mToolbarView = (ViewGroup) LayoutInflater.from(context).inflate( R.layout.page_insights_sheet_toolbar, null); mToolbarView - .findViewById(R.id.page_insights_back_button) - .setOnClickListener((view)-> onBackButtonPressed()); + .findViewById(R.id.page_insights_back_button) + .setOnClickListener((view) -> onBackPressHandler.handle()); mSheetContentView = (ViewGroup) LayoutInflater.from(context).inflate( R.layout.page_insights_sheet_content, null); + + // TODO(b/306377148): Remove this once a solution is built into bottom sheet infra. + TapInterceptingLinearLayout contentContainer = + (TapInterceptingLinearLayout) + mSheetContentView.findViewById(R.id.page_insights_content_container); + contentContainer.setOnTapHandler(onBottomSheetTapHandler); + contentContainer.setOnClickListener((view) -> onBottomSheetTapHandler.handle()); + mToolbarView.setOnClickListener((view) -> onBottomSheetTapHandler.handle()); + mContext = context; mOnPrivacyNoticeLinkClickCallback = onPrivacyNoticeLinkClickCallback; + mOnBackPressHandler = onBackPressHandler; + mWillHandleBackPressSupplier = willHandleBackPressSupplier; mFullScreenHeight = context.getResources().getDisplayMetrics().heightPixels; + updateContentDimensions(); } @Override @@ -94,19 +173,32 @@ @Override public int getVerticalScrollOffset() { - return 0; + if (mCurrentRecyclerView == null) { + // If we don't have the RecyclerView, hardcode 1 to ensure that scrolling up is never + // interpreted as trying to drag the bottom sheet down. + return 1; + } + return mCurrentRecyclerView.computeVerticalScrollOffset(); } @Override - public void destroy() {} + public void destroy() { + mLayoutView.removeOnLayoutChangeListener(this); + mCurrentRecyclerView = null; + mShouldHavePeekState = false; + } @Override public int getPeekHeight() { - // TODO(b/282739536): Find the right peeking height value from the feed view dimension. - if (mShouldPrivacyNoticeBeShown) { - return (int) (PEEK_HEIGHT_RATIO_WITH_PRIVACY_NOTICE * mFullScreenHeight); + if (!mShouldHavePeekState) { + return HeightMode.DISABLED; + } else if (mShouldPrivacyNoticeBeShown) { + // TODO(b/282739536): Find the right peeking height value from the feed view dimension. + return (int) (mPeekWithPrivacyHeightRatio * mFullScreenHeight); + } else { + // TODO(b/282739536): Find the right peeking height value from the feed view dimension. + return (int) (mPeekHeightRatio * mFullScreenHeight); } - return (int) (PEEK_HEIGHT_RATIO_WITHOUT_PRIVACY_NOTICE * mFullScreenHeight); } @Override @@ -116,7 +208,7 @@ @Override public float getFullHeightRatio() { - return FULL_HEIGHT_RATIO; + return HeightMode.WRAP_CONTENT; } @Override @@ -152,22 +244,63 @@ return R.string.page_insights_sheet_closed; } - private void onBackButtonPressed(){ - showFeedPage(); + @Override + public void onLayoutChange( + View view, + int left, + int top, + int right, + int bottom, + int oldLeft, + int oldTop, + int oldRight, + int oldBottom) { + int fullScreenHeight = mContext.getResources().getDisplayMetrics().heightPixels; + if (fullScreenHeight == mFullScreenHeight) { + return; + } + mFullScreenHeight = fullScreenHeight; + updateContentDimensions(); + } + + @Override + public boolean handleBackPress() { + return mOnBackPressHandler.handle(); + } + + @Override + public ObservableSupplierImpl getBackPressStateChangedSupplier() { + return mWillHandleBackPressSupplier; + } + + @Override + public void onBackPressed() { + mOnBackPressHandler.handle(); + } + + /** + * Returns the actual height of the fully expanded bottom sheet, as a ratio of the screen + * height. + */ + public float getActualFullHeightRatio() { + return mFullHeightRatio; } void showLoadingIndicator() { setVisibilityById(mSheetContentView, R.id.page_insights_loading_indicator, View.VISIBLE); setVisibilityById(mToolbarView, R.id.page_insights_feed_header, View.VISIBLE); setVisibilityById(mSheetContentView, R.id.page_insights_feed_content, View.GONE); - setVisibilityById(mToolbarView, R.id.page_insights_child_page_header, View.GONE); + setVisibilityById(mToolbarView, R.id.page_insights_back_button, View.GONE); + setVisibilityById(mToolbarView, R.id.page_insights_child_title, View.GONE); setVisibilityById(mSheetContentView, R.id.page_insights_child_content, View.GONE); + setVisibilityById(mSheetContentView, R.id.page_insights_privacy_notice, View.GONE); } void showFeedPage() { setVisibilityById(mSheetContentView, R.id.page_insights_loading_indicator, View.GONE); setVisibilityById(mToolbarView, R.id.page_insights_feed_header, View.VISIBLE); - setVisibilityById(mToolbarView, R.id.page_insights_child_page_header, View.GONE); + setVisibilityById(mToolbarView, R.id.page_insights_back_button, View.GONE); + setVisibilityById(mToolbarView, R.id.page_insights_child_title, View.GONE); setVisibilityById(mSheetContentView, R.id.page_insights_feed_content, View.VISIBLE); setVisibilityById(mSheetContentView, R.id.page_insights_child_content, View.GONE); if (mShouldPrivacyNoticeBeShown) { @@ -175,10 +308,31 @@ } else { setVisibilityById(mSheetContentView, R.id.page_insights_privacy_notice, View.GONE); } + updateCurrentRecyclerView(mSheetContentView.findViewById(R.id.page_insights_feed_content)); } - void initContent(View feedPageView) { - initPrivacyNotice(); + void initContent( + View feedPageView, boolean isPrivacyNoticeRequired, boolean shouldHavePeekState) { + mShouldHavePeekState = shouldHavePeekState; + initPrivacyNotice(isPrivacyNoticeRequired); + if (mShouldPrivacyNoticeBeShown) { + ViewGroup privacyNoticeView = + mSheetContentView.findViewById(R.id.page_insights_privacy_notice); + final ViewTreeObserver observer = privacyNoticeView.getViewTreeObserver(); + observer.addOnPreDrawListener( + new ViewTreeObserver.OnPreDrawListener() { + @Override + public boolean onPreDraw() { + privacyNoticeView.getViewTreeObserver().removeOnPreDrawListener(this); + PageInsightsSheetContent.this.updateContentDimensions(); + return true; + } + }); + } else { + updateContentDimensions(); + } + mLayoutView.addOnLayoutChangeListener(this); + ViewGroup feedContentView = mSheetContentView.findViewById(R.id.page_insights_feed_content); feedContentView.removeAllViews(); feedContentView.addView(feedPageView); @@ -193,16 +347,67 @@ childContentView.removeAllViews(); childContentView.addView(childPageView); setVisibilityById(mToolbarView, R.id.page_insights_feed_header, View.GONE); - setVisibilityById(mToolbarView, R.id.page_insights_child_page_header, View.VISIBLE); + setVisibilityById(mToolbarView, R.id.page_insights_back_button, View.VISIBLE); + setVisibilityById(mToolbarView, R.id.page_insights_child_title, View.VISIBLE); setVisibilityById(mSheetContentView, R.id.page_insights_feed_content, View.GONE); setVisibilityById(mSheetContentView, R.id.page_insights_child_content, View.VISIBLE); + updateCurrentRecyclerView(childPageView); + } + + void setPrivacyCardColor(int color) { + if (!mShouldPrivacyNoticeBeShown) { + return; + } + View privacyCard = mSheetContentView.findViewById(R.id.page_insights_privacy_notice_card); + if (privacyCard != null) { + privacyCard.setBackgroundTintList(ColorStateList.valueOf(color)); + } + } + + private void updateContentDimensions() { + // Glide (used in our XSurface views) throws an error when one of its images is assigned a + // width or height of zero; this happens briefly if we use a parent LinearLayout or + // ConstraintLayout to dynamically size our content. So instead we have to do the dynamic + // sizing ourselves, here in Java. :( + // TODO(b/306894418): See if this issue can be fixed or avoided. + float contentHeight = + (mFullScreenHeight * mFullHeightRatio) + - mContext.getResources() + .getDimensionPixelSize(R.dimen.page_insights_toolbar_height); + int contentWidth = + Math.min( + mLayoutView.getWidth(), + mContext.getResources() + .getDimensionPixelSize(R.dimen.page_insights_max_width)); + mSheetContentView + .findViewById(R.id.page_insights_content_container) + .setLayoutParams( + new FrameLayout.LayoutParams( + contentWidth, (int) contentHeight, Gravity.CENTER_HORIZONTAL)); + + int heightTakenByPrivacyNotice = + mShouldPrivacyNoticeBeShown + ? mSheetContentView + .findViewById(R.id.page_insights_privacy_notice) + .getHeight() + : 0; + LinearLayout.LayoutParams remainingContentLayoutParams = + new LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + (int) contentHeight - heightTakenByPrivacyNotice); + mSheetContentView + .findViewById(R.id.page_insights_feed_content) + .setLayoutParams(remainingContentLayoutParams); + mSheetContentView + .findViewById(R.id.page_insights_child_content) + .setLayoutParams(remainingContentLayoutParams); } private void setVisibilityById(ViewGroup mViewGroup, int id, int visibility) { mViewGroup.findViewById(id).setVisibility(visibility); } - private void initPrivacyNotice() { + private void initPrivacyNotice(boolean isPrivacyNoticeRequired) { /* * The function checks if the privacy notice should be shown and inflates the privacy notice * UI if it has to be shown. The privacy notice should appear in Page Insights Hub (PIH) the @@ -210,6 +415,9 @@ * the privacy notice has been shown 3 times. */ mShouldPrivacyNoticeBeShown = false; + if (!isPrivacyNoticeRequired) { + return; + } if (sSharedPreferencesManager.readBoolean( ChromePreferenceKeys.PIH_PRIVACY_NOTICE_CLOSED, false)) { return; @@ -251,6 +459,8 @@ sSharedPreferencesManager.writeBoolean( ChromePreferenceKeys.PIH_PRIVACY_NOTICE_CLOSED, true); setVisibilityById(mSheetContentView, R.id.page_insights_privacy_notice, View.GONE); + mShouldPrivacyNoticeBeShown = false; + updateContentDimensions(); } private void preparePrivacyNoticeView() { @@ -270,4 +480,37 @@ R.color.default_bg_color_blue, mOnPrivacyNoticeLinkClickCallback)))); } + + private void updateCurrentRecyclerView(View currentPageView) { + mCurrentRecyclerView = findRecyclerView(currentPageView); + final ViewTreeObserver observer = currentPageView.getViewTreeObserver(); + observer.addOnPreDrawListener( + new ViewTreeObserver.OnPreDrawListener() { + @Override + public boolean onPreDraw() { + currentPageView.getViewTreeObserver().removeOnPreDrawListener(this); + mCurrentRecyclerView = findRecyclerView(currentPageView); + return true; + } + }); + } + + @Nullable + private static RecyclerView findRecyclerView(View view) { + // The content view is implemented internally, and we do not currently have an API exposed + // to us to obtain the scroll position inside it. So instead we search the view for the + // outermost RecyclerView within it (only going at most 10 levels deep, and only looking at + // first children). + // TODO(b/305194266): Expose scroll position API, and remove this rather horrible hack. + for (int i = 0; i < 10; i++) { + if (view instanceof RecyclerView) { + return (RecyclerView) view; + } else if (view instanceof ViewGroup) { + view = ((ViewGroup) view).getChildAt(0); + } else { + return null; + } + } + return null; + } } diff -Nru chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsSheetContentTest.java chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsSheetContentTest.java --- chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsSheetContentTest.java 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsSheetContentTest.java 2023-11-14 22:56:28.000000000 +0000 @@ -5,12 +5,18 @@ package org.chromium.chrome.browser.page_insights; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; import android.graphics.Color; +import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import android.widget.FrameLayout; +import android.widget.LinearLayout; import android.widget.TextView; +import androidx.recyclerview.widget.RecyclerView; import androidx.test.filters.MediumTest; import androidx.test.filters.SmallTest; @@ -23,11 +29,15 @@ import org.junit.runner.RunWith; import org.chromium.base.Callback; +import org.chromium.base.FeatureList; +import org.chromium.base.FeatureList.TestValues; import org.chromium.base.shared_preferences.SharedPreferencesManager; +import org.chromium.base.supplier.ObservableSupplierImpl; import org.chromium.base.supplier.Supplier; import org.chromium.base.test.BaseActivityTestRule; import org.chromium.base.test.BaseJUnit4ClassRunner; import org.chromium.base.test.util.Batch; +import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.preferences.ChromePreferenceKeys; import org.chromium.chrome.browser.preferences.ChromeSharedPreferences; import org.chromium.components.browser_ui.bottomsheet.BottomSheetController; @@ -54,6 +64,10 @@ private PageInsightsSheetContent mSheetContent; private BottomSheetTestSupport mTestSupport; private int mFullHeight; + private boolean mTapHandlerResult; + private boolean mTapHandlerCalled; + private boolean mBackPressHandlerCalled; + private boolean mBackPressHandlerResult; private static final float ASSERTION_DELTA = 0.01f; private static final long MILLIS_IN_ONE_DAY = 86400000; @@ -65,9 +79,15 @@ @Before public void setUp() throws Exception { + mTapHandlerCalled = false; + mBackPressHandlerCalled = false; ViewGroup rootView = sTestRule.getActivity().findViewById(android.R.id.content); TestThreadUtils.runOnUiThreadBlocking(() -> rootView.removeAllViews()); + TestValues testValues = new TestValues(); + testValues.addFeatureFlagOverride(ChromeFeatureList.CCT_PAGE_INSIGHTS_HUB, true); + FeatureList.setTestValues(testValues); + mScrimCoordinator = new ScrimCoordinator( sTestRule.getActivity(), new ScrimCoordinator.SystemUiScrimDelegate() { @Override @@ -89,7 +109,19 @@ TestThreadUtils.runOnUiThreadBlocking( () -> { mSheetContent = - new PageInsightsSheetContent(sTestRule.getActivity(), view -> {}); + new PageInsightsSheetContent( + sTestRule.getActivity(), + new View(sTestRule.getActivity()), + view -> {}, + () -> { + mBackPressHandlerCalled = true; + return mBackPressHandlerResult; + }, + new ObservableSupplierImpl<>(false), + () -> { + mTapHandlerCalled = true; + return mTapHandlerResult; + }); mBottomSheetController.requestShowContent(mSheetContent, false); mFullHeight = sTestRule.getActivity().getResources().getDisplayMetrics().heightPixels; @@ -109,53 +141,72 @@ } @Test + @SmallTest + public void backButtonPressed_handlerCalled() { + TestThreadUtils.runOnUiThreadBlocking( + () -> { + getToolbarViewById(R.id.page_insights_back_button).performClick(); + assertTrue(mBackPressHandlerCalled); + }); + } + + @Test @MediumTest - public void testAvailableStates() throws Exception { - // Starts with peeking state. - assertEquals(BottomSheetController.SheetState.PEEK, mBottomSheetController.getSheetState()); - - // Half state is disabled. Expanding sheets leads to full state. - TestThreadUtils.runOnUiThreadBlocking(mBottomSheetController::expandSheet); - waitForAnimationToFinish(); - assertEquals(BottomSheetController.SheetState.FULL, mBottomSheetController.getSheetState()); - - // Collapsing from full state leads to peeking state. - TestThreadUtils.runOnUiThreadBlocking(() -> mBottomSheetController.collapseSheet(false)); - assertEquals(BottomSheetController.SheetState.PEEK, mBottomSheetController.getSheetState()); + public void backButtonNotClicked_handlerNotCalled() { + TestThreadUtils.runOnUiThreadBlocking( + () -> { + assertFalse(mTapHandlerCalled); + }); } @Test @SmallTest - public void backButtonPressed(){ - TestThreadUtils.runOnUiThreadBlocking(() -> { - getToolbarViewById(R.id.page_insights_back_button).performClick(); - assertEquals(View.VISIBLE, - getToolbarViewById(R.id.page_insights_feed_header).getVisibility()); - assertEquals(View.GONE, - getToolbarViewById(R.id.page_insights_child_page_header).getVisibility()); - assertEquals(View.VISIBLE, - getContentViewById(R.id.page_insights_feed_content).getVisibility()); - assertEquals(View.GONE, - getContentViewById(R.id.page_insights_child_content).getVisibility()); - }); + public void handleBackPress_true() { + TestThreadUtils.runOnUiThreadBlocking( + () -> { + mBackPressHandlerResult = true; + + assertTrue(mSheetContent.handleBackPress()); + }); + } + + @Test + @SmallTest + public void handleBackPress_false() { + TestThreadUtils.runOnUiThreadBlocking( + () -> { + mBackPressHandlerResult = false; + + assertFalse(mSheetContent.handleBackPress()); + }); } @Test @SmallTest public void showFeedPage() { - TestThreadUtils.runOnUiThreadBlocking(() -> { - mSheetContent.showFeedPage(); - assertEquals(View.VISIBLE, - getToolbarViewById(R.id.page_insights_feed_header).getVisibility()); - assertEquals(View.GONE, - getToolbarViewById(R.id.page_insights_child_page_header).getVisibility()); - assertEquals(View.VISIBLE, - getContentViewById(R.id.page_insights_feed_content).getVisibility()); - assertEquals(View.GONE, - getContentViewById(R.id.page_insights_child_content).getVisibility()); - assertEquals(View.GONE, - getContentViewById(R.id.page_insights_loading_indicator).getVisibility()); - }); + TestThreadUtils.runOnUiThreadBlocking( + () -> { + mSheetContent.showFeedPage(); + assertEquals( + View.VISIBLE, + getToolbarViewById(R.id.page_insights_feed_header).getVisibility()); + assertEquals( + View.GONE, + getToolbarViewById(R.id.page_insights_back_button).getVisibility()); + assertEquals( + View.GONE, + getToolbarViewById(R.id.page_insights_child_title).getVisibility()); + assertEquals( + View.VISIBLE, + getContentViewById(R.id.page_insights_feed_content).getVisibility()); + assertEquals( + View.GONE, + getContentViewById(R.id.page_insights_child_content).getVisibility()); + assertEquals( + View.GONE, + getContentViewById(R.id.page_insights_loading_indicator) + .getVisibility()); + }); } @Test @@ -164,14 +215,28 @@ TestThreadUtils.runOnUiThreadBlocking( () -> { View testView = new View(sTestRule.getActivity()); - mSheetContent.initContent(testView); + + mSheetContent.initContent( + testView, + /* isPrivacyNoticeRequired= */ true, + /* shouldHavePeekState= */ true); ViewGroup feedView = mSheetContent .getContentView() .findViewById(R.id.page_insights_feed_content); - - assertEquals(feedView.getChildAt(0), testView); - }); + assertEquals(testView, feedView.getChildAt(0)); + int expectedHeight = + (int) (mFullHeight * PageInsightsSheetContent.DEFAULT_FULL_HEIGHT_RATIO) + - sTestRule + .getActivity() + .getResources() + .getDimensionPixelSize( + R.dimen.page_insights_toolbar_height); + assertEquals( + expectedHeight, + getContentViewById(R.id.page_insights_content_container).getHeight()); + assertEquals(expectedHeight, feedView.getHeight()); + }); } @Test @@ -188,12 +253,19 @@ mSheetContent.showChildPage(testView, testChildPageText); assertEquals( - View.GONE, getToolbarViewById(R.id.page_insights_feed_header).getVisibility()); - assertEquals(View.VISIBLE, - getToolbarViewById(R.id.page_insights_child_page_header).getVisibility()); + View.GONE, + getToolbarViewById(R.id.page_insights_feed_header).getVisibility()); + assertEquals( + View.VISIBLE, + getToolbarViewById(R.id.page_insights_back_button).getVisibility()); + assertEquals( + View.VISIBLE, + getToolbarViewById(R.id.page_insights_child_title).getVisibility()); + assertEquals( + View.GONE, + getContentViewById(R.id.page_insights_feed_content).getVisibility()); assertEquals( - View.GONE, getContentViewById(R.id.page_insights_feed_content).getVisibility()); - assertEquals(View.VISIBLE, + View.VISIBLE, getContentViewById(R.id.page_insights_child_content).getVisibility()); assertEquals(childTextView.getText(), testChildPageText); assertEquals(childContentView.getChildAt(0), testView); @@ -205,16 +277,24 @@ public void showLoadingIndicator() { TestThreadUtils.runOnUiThreadBlocking(() -> { mSheetContent.showLoadingIndicator(); - - assertEquals(View.VISIBLE, - getContentViewById(R.id.page_insights_loading_indicator).getVisibility()); - assertEquals(View.VISIBLE, + assertEquals( + View.VISIBLE, + getContentViewById(R.id.page_insights_loading_indicator) + .getVisibility()); + assertEquals( + View.VISIBLE, getToolbarViewById(R.id.page_insights_feed_header).getVisibility()); assertEquals( - View.GONE, getContentViewById(R.id.page_insights_feed_content).getVisibility()); - assertEquals(View.GONE, - getToolbarViewById(R.id.page_insights_child_page_header).getVisibility()); - assertEquals(View.GONE, + View.GONE, + getContentViewById(R.id.page_insights_feed_content).getVisibility()); + assertEquals( + View.GONE, + getToolbarViewById(R.id.page_insights_back_button).getVisibility()); + assertEquals( + View.GONE, + getToolbarViewById(R.id.page_insights_child_title).getVisibility()); + assertEquals( + View.GONE, getContentViewById(R.id.page_insights_child_content).getVisibility()); }); } @@ -227,32 +307,80 @@ View testView = new View(sTestRule.getActivity()); setPrivacyNoticePreferences( false, System.currentTimeMillis() - MILLIS_IN_ONE_DAY, 0); - mSheetContent.initContent(testView); + mSheetContent.initContent( + testView, + /* isPrivacyNoticeRequired= */ true, + /* shouldHavePeekState= */ true); mSheetContent.showFeedPage(); float ratio = ((float) mSheetContent.getPeekHeight()) / ((float) mFullHeight); assertEquals( - PageInsightsSheetContent.PEEK_HEIGHT_RATIO_WITH_PRIVACY_NOTICE, + PageInsightsSheetContent.DEFAULT_PEEK_WITH_PRIVACY_HEIGHT_RATIO, ratio, ASSERTION_DELTA); assertEquals( View.VISIBLE, getContentViewById(R.id.page_insights_privacy_notice).getVisibility()); + + int expectedFullContentHeight = + (int) (mFullHeight * PageInsightsSheetContent.DEFAULT_FULL_HEIGHT_RATIO) + - sTestRule + .getActivity() + .getResources() + .getDimensionPixelSize( + R.dimen.page_insights_toolbar_height); + assertEquals( + expectedFullContentHeight + - getContentViewById(R.id.page_insights_privacy_notice) + .getHeight(), + getContentViewById(R.id.page_insights_feed_content).getHeight()); + }); + } + + @Test + @MediumTest + public void privacyNoticeNotShownWhenNotRequired() { + TestThreadUtils.runOnUiThreadBlocking( + () -> { + View testView = new View(sTestRule.getActivity()); + setPrivacyNoticePreferences( + false, System.currentTimeMillis() - MILLIS_IN_ONE_DAY, 0); + mSheetContent.initContent( + testView, + /* isPrivacyNoticeRequired= */ false, + /* shouldHavePeekState= */ true); + mSheetContent.showFeedPage(); + float ratio = ((float) mSheetContent.getPeekHeight()) / ((float) mFullHeight); + assertEquals( + PageInsightsSheetContent.DEFAULT_PEEK_HEIGHT_RATIO, + ratio, + ASSERTION_DELTA); + assertEquals( + View.GONE, + getContentViewById(R.id.page_insights_privacy_notice).getVisibility()); }); } @Test @MediumTest public void privacyNoticeCloseButtonPressed() { - TestThreadUtils.runOnUiThreadBlocking(() -> { - mSheetContent.showFeedPage(); - getContentViewById(R.id.page_insights_privacy_notice_close_button).performClick(); - SharedPreferencesManager sharedPreferencesManager = - ChromeSharedPreferences.getInstance(); - - Assert.assertTrue(sharedPreferencesManager.readBoolean( - ChromePreferenceKeys.PIH_PRIVACY_NOTICE_CLOSED, false)); - assertEquals(View.GONE, - getContentViewById(R.id.page_insights_privacy_notice).getVisibility()); + TestThreadUtils.runOnUiThreadBlocking( + () -> { + mSheetContent.initContent( + new View(sTestRule.getActivity()), + /* isPrivacyNoticeRequired= */ true, + /* shouldHavePeekState= */ true); + mSheetContent.showFeedPage(); + getContentViewById(R.id.page_insights_privacy_notice_close_button) + .performClick(); + SharedPreferencesManager sharedPreferencesManager = + ChromeSharedPreferences.getInstance(); + + Assert.assertTrue( + sharedPreferencesManager.readBoolean( + ChromePreferenceKeys.PIH_PRIVACY_NOTICE_CLOSED, false)); + assertEquals( + View.GONE, + getContentViewById(R.id.page_insights_privacy_notice).getVisibility()); }); } @@ -263,10 +391,14 @@ () -> { setPrivacyNoticePreferences( true, System.currentTimeMillis() - MILLIS_IN_ONE_DAY, 1); + mSheetContent.initContent( + new View(sTestRule.getActivity()), + /* isPrivacyNoticeRequired= */ true, + /* shouldHavePeekState= */ true); mSheetContent.showFeedPage(); float ratio = ((float) mSheetContent.getPeekHeight()) / ((float) mFullHeight); assertEquals( - PageInsightsSheetContent.PEEK_HEIGHT_RATIO_WITHOUT_PRIVACY_NOTICE, + PageInsightsSheetContent.DEFAULT_PEEK_HEIGHT_RATIO, ratio, ASSERTION_DELTA); assertEquals( @@ -292,7 +424,10 @@ sharedPreferencesManager.writeLong( ChromePreferenceKeys.PIH_PRIVACY_NOTICE_LAST_SHOWN_TIMESTAMP, System.currentTimeMillis() + i * MILLIS_IN_ONE_DAY); - mSheetContent.initContent(testView); + mSheetContent.initContent( + testView, + /* isPrivacyNoticeRequired= */ true, + /* shouldHavePeekState= */ true); mSheetContent.showFeedPage(); if (i <= 3) { assertEquals( @@ -317,14 +452,20 @@ false, System.currentTimeMillis() - MILLIS_IN_ONE_DAY, 0); View testView = new View(sTestRule.getActivity()); - mSheetContent.initContent(testView); + mSheetContent.initContent( + testView, + /* isPrivacyNoticeRequired= */ true, + /* shouldHavePeekState= */ true); mSheetContent.showFeedPage(); assertEquals( View.VISIBLE, getContentViewById(R.id.page_insights_privacy_notice).getVisibility()); - mSheetContent.initContent(testView); + mSheetContent.initContent( + testView, + /* isPrivacyNoticeRequired= */ true, + /* shouldHavePeekState= */ true); mSheetContent.showFeedPage(); assertEquals( @@ -333,6 +474,201 @@ }); } + @Test + @MediumTest + public void nothingClicked_handlerNotCalled() { + TestThreadUtils.runOnUiThreadBlocking( + () -> { + mSheetContent.initContent( + new View(sTestRule.getActivity()), + /* isPrivacyNoticeRequired= */ true, + /* shouldHavePeekState= */ true); + + assertEquals(false, mTapHandlerCalled); + }); + } + + @Test + @MediumTest + public void contentContainerClicked_handlerCalled() { + TestThreadUtils.runOnUiThreadBlocking( + () -> { + mSheetContent.initContent( + new View(sTestRule.getActivity()), + /* isPrivacyNoticeRequired= */ true, + /* shouldHavePeekState= */ true); + + getContentViewById(R.id.page_insights_content_container).callOnClick(); + + assertEquals(true, mTapHandlerCalled); + }); + } + + @Test + @MediumTest + public void toolbarViewClicked_handlerCalled() { + TestThreadUtils.runOnUiThreadBlocking( + () -> { + mSheetContent.initContent( + new View(sTestRule.getActivity()), + /* isPrivacyNoticeRequired= */ true, + /* shouldHavePeekState= */ true); + + mSheetContent.getToolbarView().callOnClick(); + + assertEquals(true, mTapHandlerCalled); + }); + } + + @Test + @MediumTest + public void contentContainerOnInterceptTouchEvent_actionUp_handlerTrue_true() { + TestThreadUtils.runOnUiThreadBlocking( + () -> { + mTapHandlerResult = true; + mSheetContent.initContent( + new View(sTestRule.getActivity()), + /* isPrivacyNoticeRequired= */ true, + /* shouldHavePeekState= */ true); + + assertEquals( + true, + ((LinearLayout) + getContentViewById( + R.id.page_insights_content_container)) + .onInterceptTouchEvent( + MotionEvent.obtain( + 0, 0, MotionEvent.ACTION_UP, 0, 0, 0))); + }); + } + + @Test + @MediumTest + public void contentContainerOnInterceptTouchEvent_actionUp_handlerFalse_false() { + TestThreadUtils.runOnUiThreadBlocking( + () -> { + mTapHandlerResult = false; + mSheetContent.initContent( + new View(sTestRule.getActivity()), + /* isPrivacyNoticeRequired= */ true, + /* shouldHavePeekState= */ true); + + assertEquals( + false, + ((LinearLayout) + getContentViewById( + R.id.page_insights_content_container)) + .onInterceptTouchEvent( + MotionEvent.obtain( + 0, 0, MotionEvent.ACTION_DOWN, 0, 0, 0))); + }); + } + + @Test + @MediumTest + public void contentContainerOnInterceptTouchEvent_actionDown_handlerTrue_false() { + TestThreadUtils.runOnUiThreadBlocking( + () -> { + mTapHandlerResult = true; + mSheetContent.initContent( + new View(sTestRule.getActivity()), + /* isPrivacyNoticeRequired= */ true, + /* shouldHavePeekState= */ true); + + assertEquals( + false, + ((LinearLayout) + getContentViewById( + R.id.page_insights_content_container)) + .onInterceptTouchEvent( + MotionEvent.obtain( + 0, 0, MotionEvent.ACTION_DOWN, 0, 0, 0))); + }); + } + + @Test + @MediumTest + public void getVerticalScrollOffset_noRecyclerView_returns1() { + assertEquals(1, mSheetContent.getVerticalScrollOffset()); + } + + @Test + @MediumTest + public void getVerticalScrollOffset_recyclerViewInFeedPage_returnsItsOffset() { + TestThreadUtils.runOnUiThreadBlocking( + () -> { + FrameLayout feedPage = new FrameLayout(sTestRule.getActivity()); + FrameLayout recyclerViewContainer = new FrameLayout(sTestRule.getActivity()); + RecyclerView recyclerview = new RecyclerView(sTestRule.getActivity()); + feedPage.addView(recyclerViewContainer); + recyclerViewContainer.addView(recyclerview); + mSheetContent.initContent( + feedPage, + /* isPrivacyNoticeRequired= */ true, + /* shouldHavePeekState= */ true); + mSheetContent.showFeedPage(); + + assertEquals(0, mSheetContent.getVerticalScrollOffset()); + }); + } + + @Test + @MediumTest + public void getVerticalScrollOffset_recyclerViewInChildPage_returnsItsOffset() { + TestThreadUtils.runOnUiThreadBlocking( + () -> { + FrameLayout feedPage = new FrameLayout(sTestRule.getActivity()); + mSheetContent.initContent( + feedPage, + /* isPrivacyNoticeRequired= */ true, + /* shouldHavePeekState= */ true); + mSheetContent.showFeedPage(); + + FrameLayout childPage = new FrameLayout(sTestRule.getActivity()); + FrameLayout recyclerViewContainer = new FrameLayout(sTestRule.getActivity()); + RecyclerView recyclerview = new RecyclerView(sTestRule.getActivity()); + childPage.addView(recyclerViewContainer); + recyclerViewContainer.addView(recyclerview); + mSheetContent.showChildPage(childPage, "bladybla"); + + assertEquals(0, mSheetContent.getVerticalScrollOffset()); + }); + } + + @Test + @MediumTest + public void getPeekHeight_shouldHavePeekState() { + TestThreadUtils.runOnUiThreadBlocking( + () -> { + mSheetContent.initContent( + new FrameLayout(sTestRule.getActivity()), + /* isPrivacyNoticeRequired= */ false, + /* shouldHavePeekState= */ true); + + assertEquals( + (int) + (mFullHeight + * PageInsightsSheetContent.DEFAULT_PEEK_HEIGHT_RATIO), + mSheetContent.getPeekHeight()); + }); + } + + @Test + @MediumTest + public void getPeekHeight_shouldNotHavePeekState() { + TestThreadUtils.runOnUiThreadBlocking( + () -> { + mSheetContent.initContent( + new FrameLayout(sTestRule.getActivity()), + /* isPrivacyNoticeRequired= */ true, + /* shouldHavePeekState= */ false); + + assertEquals( + PageInsightsSheetContent.HeightMode.DISABLED, + mSheetContent.getPeekHeight()); + }); + } + private View getToolbarViewById(int viewId) { return mSheetContent.getToolbarView().findViewById(viewId); } diff -Nru chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/TapInterceptingLinearLayout.java chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/TapInterceptingLinearLayout.java --- chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/TapInterceptingLinearLayout.java 1970-01-01 00:00:00.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/TapInterceptingLinearLayout.java 2023-11-14 22:56:28.000000000 +0000 @@ -0,0 +1,35 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.page_insights; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.widget.LinearLayout; + +/** A {@link LinearLayout} that can intercept taps and prevent them being handled by child views. */ +// TODO(b/306377148): Remove this once a solution is built into bottom sheet infra. +class TapInterceptingLinearLayout extends LinearLayout { + + private PageInsightsSheetContent.OnBottomSheetTapHandler mOnTapHandler; + + public TapInterceptingLinearLayout(Context context, AttributeSet atts) { + super(context, atts); + } + + void setOnTapHandler(PageInsightsSheetContent.OnBottomSheetTapHandler onTapHandler) { + mOnTapHandler = onTapHandler; + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent event) { + if (event.getActionMasked() == MotionEvent.ACTION_UP + && mOnTapHandler != null + && mOnTapHandler.handle()) { + return true; + } + return super.onInterceptTouchEvent(event); + } +} diff -Nru chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/proto/config.proto chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/proto/config.proto --- chromium-119.0.6045.105/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/proto/config.proto 1970-01-01 00:00:00.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/proto/config.proto 2023-11-14 22:56:28.000000000 +0000 @@ -0,0 +1,17 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +syntax = "proto2"; + +package org.chromium.chrome.browser.page_insights.proto; + +option java_package = "org.chromium.chrome.browser.page_insights.proto"; + +option optimize_for = LITE_RUNTIME; + +message PageInsightsConfig { + optional bool should_auto_trigger = 1; + optional bool should_xsurface_log = 2; + optional bool should_attach_gaia_to_request = 3; +} diff -Nru chromium-119.0.6045.105/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb chromium-119.0.6045.159/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb --- chromium-119.0.6045.105/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/android/strings/translations/android_chrome_strings_eu.xtb 2023-11-14 22:56:29.000000000 +0000 @@ -75,7 +75,7 @@ Laster-marka gordetzeko fluxua altuera osoan irekita dago Nabigazio-historia irekita dago Ezin da eguneratu Chrome. Aukera gehiago. -Iragarkien neurketari esker, bisitatzen dituzun webguneek Chrome-ri informazioa eska diezaiokete. Informazio horren bidez, webguneek beren iragarkien errendimendua neur dezakete. Webguneen artean ahalik eta informazio gutxien transferituta mugatzen du iragarkien neurketak webguneen arteko jarraipena. +Iragarkien neurketari esker, bisitatzen dituzun webguneek Chrome-ri informazioa eska diezaiokete. Informazio horren bidez, webguneek beren iragarkien errendimendua neur dezakete. Webguneen artean ahalik eta informazio gutxien transferituta mugatzen du iragarkien neurketak webgunearteko jarraipena. Arakatze-historia ezabatzen duzunean (osorik nahiz webgune zehatz bat), neurketari buruzko informazio erlazionatua ere ezabatuko duzu. Ikusi arakatze-historia. Google Chrome eginbideetarako lasterbideak @@ -158,7 +158,7 @@ Bilatu orrian Ados Sinkronizatu datuak Google-k edukirik egokiena eskain diezazun -Probak abian diren bitartean, iragarkien neurketari esker, bisitatzen dituzun webguneek Chrome-ri informazioa eska diezaiokete. Informazio horren bidez, webguneek beren iragarkien errendimendua neur dezakete. Webguneen artean ahalik eta informazio gutxien transferituta mugatzen du iragarkien neurketak webguneen arteko jarraipena. +Probak abian diren bitartean, iragarkien neurketari esker, bisitatzen dituzun webguneek Chrome-ri informazioa eska diezaiokete. Informazio horren bidez, webguneek beren iragarkien errendimendua neur dezakete. Webguneen artean ahalik eta informazio gutxien transferituta mugatzen du iragarkien neurketak webgunearteko jarraipena. Arakatze-historia ezabatzen duzunean (osorik nahiz webgune zehatz bat), neurketari buruzko informazio erlazionatua ere ezabatuko duzu. Ikusi arakatze-historia. Ireki Chrome arakatzailean @@ -987,7 +987,7 @@ Kontrolatu istorioak eta jarduerak hemen Bankuarekin harremanetan jartzen\u2026 Webguneetara konexio seguru baten bidez nola konektatu zehazten du -Privacy Sandbox-aren probei esker, berdin arakatu ahalko dituzu webguneak datu gutxiago erabilita. Pribatutasun handiagoa izango duzula eta webguneen arteko jarraipena mugatuko dela esan nahi du horrek. Proba berriak gehituko ditugu kaleratzeko prest egon ahala. +Privacy Sandbox-aren probei esker, berdin arakatu ahalko dituzu webguneak datu gutxiago erabilita. Pribatutasun handiagoa izango duzula eta webgunearteko jarraipena mugatuko dela esan nahi du horrek. Proba berriak gehituko ditugu kaleratzeko prest egon ahala. ordu gelditzen dira Google zure bilatzaile lehenetsia bada, hobeak diren eta testuinguruari egokituta dauden iradokizunak ikusiko dituzu Konfigurazioa abian da… diff -Nru chromium-119.0.6045.105/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb chromium-119.0.6045.159/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb --- chromium-119.0.6045.105/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb 2023-11-14 22:56:29.000000000 +0000 @@ -986,7 +986,7 @@ سال داستان‌ها و فعالیت خود را اینجا کنترل کنید ‏درحال تماس با بانک\u2026 -تعیین چگونگی اتصال به وب‌سایت‌ها ازطریق اتصالی ایمن +تعیین چگونگی اتصال به وب‌سایت‌ها ازطریق اتصال ایمن با دوره‌های آزمایشی «جعبه شنی حریم خصوصی»، سایت‌ها می‌توانند تجربه مرور یکسانی را با مصرف داده‌های شخصی کمتر ارائه دهند. یعنی حریم خصوصی شما افزایش و ردیابی بین‌سایتی کاهش پیدا می‌کند. هروقت دوره‌های آزمایشی جدیدی برای آزمایش کردن آماده شد، آن‌ها را اضافه می‌کنیم. ساعت باقی‌مانده است ‏اگر موتور جستجوی پیش‌فرضتان هم Google باشد، پیشنهادهای بهتر و مرتبط‌تری درباره موضوع خواهید دید diff -Nru chromium-119.0.6045.105/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb chromium-119.0.6045.159/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb --- chromium-119.0.6045.105/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb 2023-11-14 22:56:29.000000000 +0000 @@ -180,7 +180,7 @@ जब संभव होगा, वेबसाइटें आपकी पसंदीदा भाषा में टेक्स्ट दिखाएंगी. कॉन्टेंट का इंतज़ार किया जा रहा है Chrome अपडेट, अब Android के इस वर्शन पर काम नहीं करते हैं. -मानक सुरक्षा मोड +स्टैंडर्ड सुरक्षा मोड कृपया अपने साइन के विवरण अपडेट करें. रखें डेटा को सेव रखें @@ -1158,7 +1158,7 @@ फ़ॉर्म में अपने-आप भरने वाला डेटा नया गुप्त टैब कंप्यूटर -उन वेबसाइटों, डाउनलोड, और एक्सटेंशन से मानक सुरक्षा जो नुकसान पहुंचा सकते हैं. +उन वेबसाइटों, डाउनलोड, और एक्सटेंशन से स्टैंडर्ड सुरक्षा जो नुकसान पहुंचा सकते हैं. शेयर करें मौजूदा डेटा में जोड़ें. अपना पासवर्ड कॉपी करने के लिए अनलॉक करें diff -Nru chromium-119.0.6045.105/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb chromium-119.0.6045.159/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb --- chromium-119.0.6045.105/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb 2023-11-14 22:56:29.000000000 +0000 @@ -1427,7 +1427,7 @@ Ako ti je potrebna pomoć, obrati se roditelju () Uređivanje početne stranice Pohranjeni podaci o prijavi možda su zastarjeli -Prikaz informacija o web-mjestu +Prikaz informacija o web-lokaciji Reprodukcija nije dostupna za ovu stranicu. Nećete morati pamtiti tu zaporku. Spremit će se u Google upravitelj zaporki. Preostalo datoteka: diff -Nru chromium-119.0.6045.105/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb chromium-119.0.6045.159/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb --- chromium-119.0.6045.105/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb 2023-11-14 22:56:29.000000000 +0000 @@ -1079,7 +1079,7 @@ Tidak melindungi Anda terhadap situs, download, dan ekstensi berbahaya. Setelan Safe Browsing Anda di produk Google lainnya tidak akan terpengaruh. {TAB_COUNT,plural, =1{ dan tab lainnya akan ditutup}other{ dan tab lainnya akan ditutup}} Menelusuri menggunakan Sogou -Lihat lainnya +Lihat lebih banyak Wi-Fi akan digunakan jika tersedia Anda sekarang akan melihat artikel dari saat membuka tab baru. Situs yang Anda ikuti akan disimpan di Akun Google Anda. Anda dapat mengelolanya di setelan Discover. Selalu izinkan diff -Nru chromium-119.0.6045.105/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb chromium-119.0.6045.159/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb --- chromium-119.0.6045.105/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb 2023-11-14 22:56:29.000000000 +0000 @@ -423,7 +423,7 @@ Discover מדידת המודעות מסומן בסימנייה -בדיקה עכשיו +לבדיקה מועד המחיקה: היסטוריית החיפושים וסוגי פעילות אחרים יכולים להישמר בחשבון Google אחרי שנכנסים. אפשר למחוק אותם בכל שלב. אם שכחת את ביטוי הסיסמה או אם ברצונך לשנות את ההגדרה הזו, יש לאפס את הסנכרון diff -Nru chromium-119.0.6045.105/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb chromium-119.0.6045.159/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb --- chromium-119.0.6045.105/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb 2023-11-14 22:56:29.000000000 +0000 @@ -176,7 +176,7 @@ Åpne Chrome på nytt. Valgt fane Lagring av passord -Ingen tilgangsnøkler er tilgjengelige +Ingen passnøkler er tilgjengelige Nettsteder viser tekst på språket du foretrekker, der dette er mulig. Venter på innhold Denne Android-versjonen støtter ikke lenger Chrome-oppdateringer diff -Nru chromium-119.0.6045.105/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb chromium-119.0.6045.159/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb --- chromium-119.0.6045.105/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb 2023-11-14 22:56:29.000000000 +0000 @@ -66,7 +66,7 @@ டொமைனைத் தடுக்கும் விரிவாக்க, தட்டவும் உங்கள் Google கணக்கில் உள்நுழையுமாறு கேட்கப்படும் -வரலாறு, குக்கீகள், தளத் தரவு, தற்காலிகச் சேமிப்பை அழி… +இதுவரை பார்த்தவை, குக்கீகள், தளத் தரவு, தற்காலிகச் சேமிப்பை அழிக்கலாம்... சமீபத்தில் மூடியவை 60% வரை டேட்டாவைச் சேமிக்கலாம், இன்றைய செய்திகளைப் படிக்கலாம் கடவுச்சொல்லைக் கண்டறிய முடியவில்லை. எழுத்துப்பிழையைச் சரிபார்த்து மீண்டும் முயலவும். diff -Nru chromium-119.0.6045.105/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb chromium-119.0.6045.159/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb --- chromium-119.0.6045.105/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb 2023-11-14 22:56:29.000000000 +0000 @@ -1484,7 +1484,7 @@ ดูข้อมูลเพิ่มเติม เริ่มเกมไดโนเสาร์ ตรวจสอบการควบคุมที่สำคัญด้านความเป็นส่วนตัวและความปลอดภัย -เข้ารหัสลับข้อมูลที่ซิงค์ด้วยรหัสผ่านการซิงค์ของคุณเอง +เข้ารหัสข้อมูลที่ซิงค์ด้วยรหัสผ่านการซิงค์ของคุณเอง ตรวจสอบว่า เชื่อมต่ออินเทอร์เน็ตอยู่ ที่อยู่และอื่นๆ ท่องเว็บในอุปกรณ์ต่างๆ diff -Nru chromium-119.0.6045.105/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb chromium-119.0.6045.159/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb --- chromium-119.0.6045.105/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb 2023-11-14 22:56:29.000000000 +0000 @@ -281,7 +281,7 @@ Веб-версія Видалено елементів: Перегляд копії сторінки в режимі офлайн -Файли cookie й дані із сайтів +Файли cookie й дані сайтів Ваша історія веб-перегляду впливає на оголошення, що вам показуються ЗОБРАЖЕННЯ Швидший активний захист від небезпечних веб-сайтів, завантажень і розширень diff -Nru chromium-119.0.6045.105/chrome/browser/ui/ash/desks/desks_client.cc chromium-119.0.6045.159/chrome/browser/ui/ash/desks/desks_client.cc --- chromium-119.0.6045.105/chrome/browser/ui/ash/desks/desks_client.cc 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/ash/desks/desks_client.cc 2023-11-14 22:56:29.000000000 +0000 @@ -593,18 +593,21 @@ desks_storage::DeskModel* DesksClient::GetDeskModel() { // Get local storage only when 1) Desk templates sync is - // disabled or 2) Desk Templates and Floating workspace are disabled. - if (!ash::features::IsDeskTemplateSyncEnabled() || + // disabled or 2) Desk Templates and Floating workspace are disabled. If we + // are unable to get the desk sync service or its bridge, then we default to + // using the local storage. + desks_storage::DeskSyncService* desk_sync_service = + DeskSyncServiceFactory::GetForProfile(active_profile_); + if ((!desk_sync_service || !desk_sync_service->GetDeskModel()) || + !ash::features::IsDeskTemplateSyncEnabled() || (!ash::saved_desk_util::AreDesksTemplatesEnabled() && !ash::floating_workspace_util::IsFloatingWorkspaceV2Enabled())) { DCHECK(save_and_recall_desks_storage_manager_.get()); return save_and_recall_desks_storage_manager_.get(); } - DCHECK(saved_desk_storage_manager_); saved_desk_storage_manager_->SetDeskSyncBridge( static_cast( - DeskSyncServiceFactory::GetForProfile(active_profile_) - ->GetDeskModel())); + desk_sync_service->GetDeskModel())); return saved_desk_storage_manager_.get(); } diff -Nru chromium-119.0.6045.105/chrome/browser/ui/ash/projector/pending_screencast_manager.cc chromium-119.0.6045.159/chrome/browser/ui/ash/projector/pending_screencast_manager.cc --- chromium-119.0.6045.105/chrome/browser/ui/ash/projector/pending_screencast_manager.cc 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/ash/projector/pending_screencast_manager.cc 2023-11-14 22:56:29.000000000 +0000 @@ -164,7 +164,7 @@ if (!caption_dict) continue; const std::string* text = caption_dict->FindString("text"); - if (!text->empty()) { + if (text && !text->empty()) { base::StrAppend(&indexable_text, {" ", *text}); } } diff -Nru chromium-119.0.6045.105/chrome/browser/ui/ash/projector/pending_screencast_manager_browsertest.cc chromium-119.0.6045.159/chrome/browser/ui/ash/projector/pending_screencast_manager_browsertest.cc --- chromium-119.0.6045.105/chrome/browser/ui/ash/projector/pending_screencast_manager_browsertest.cc 2023-11-01 18:10:14.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/ash/projector/pending_screencast_manager_browsertest.cc 2023-11-14 22:56:29.000000000 +0000 @@ -770,11 +770,16 @@ UpdateIndexableTextSuccess) { // Prepares a ".projector" file and it's metadata: const std::string kProjectorFileContent = - "{\"captionLanguage\":\"en\",\"captions\":[{\"endOffset\":1260," - "\"hypothesisParts\":[],\"startOffset\":760,\"text\":\"metadata " - "file.\"},{\"endOffset\":2300," - "\"hypothesisParts\":[],\"startOffset\":2000,\"text\":\"another sentence." - "\"}],\"tableOfContent\":[]}"; + R"({ + "captionLanguage": "en", + "captions": [ + {"endOffset": 400, "startOffset": 200, "editState": 1}, + {"endOffset": 1260, "hypothesisParts": [], "startOffset": 760, + "text": "metadata file."}, + {"endOffset": 2300, "hypothesisParts": [], "startOffset": 2000, + "text": "another sentence."} + ], + "tableOfContent":[]})"; CreateFileInDriveFsFolder(kDefaultMetadataFilePath, kProjectorFileContent); drivefs::FakeMetadata metadata; metadata.path = base::FilePath(kDefaultMetadataFilePath); diff -Nru chromium-119.0.6045.105/chrome/browser/ui/views/permissions/chip_controller.cc chromium-119.0.6045.159/chrome/browser/ui/views/permissions/chip_controller.cc --- chromium-119.0.6045.105/chrome/browser/ui/views/permissions/chip_controller.cc 2023-11-01 18:10:15.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/views/permissions/chip_controller.cc 2023-11-14 22:56:29.000000000 +0000 @@ -576,8 +576,10 @@ active_chip_permission_request_manager_.reset(); } - if (permission_prompt_model_ && - permission_prompt_model_->GetDelegate().get()) { + // Because `OnPromptExpired` is called async, make sure that there is an + // existing permission request before resolving it as `Ignore`. + if (permission_prompt_model_ && permission_prompt_model_->GetDelegate() && + !permission_prompt_model_->GetDelegate()->Requests().empty()) { permission_prompt_model_->GetDelegate()->Ignore(); } diff -Nru chromium-119.0.6045.105/chrome/browser/ui/webui/policy/policy_test_ui_browsertest.cc chromium-119.0.6045.159/chrome/browser/ui/webui/policy/policy_test_ui_browsertest.cc --- chromium-119.0.6045.105/chrome/browser/ui/webui/policy/policy_test_ui_browsertest.cc 2023-11-01 18:10:15.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/webui/policy/policy_test_ui_browsertest.cc 2023-11-14 22:56:29.000000000 +0000 @@ -161,6 +161,10 @@ // and policy are enabled, and invisible otherwise. IN_PROC_BROWSER_TEST_P(PolicyTestPageVisibilityTest, TestPageVisibleWhenEnabled) { + if (!policy::utils::IsPolicyTestingEnabled(/*pref_service=*/nullptr, + chrome::GetChannel())) { + GTEST_SKIP() << "chrome://policy/test not allowed on this build."; + } // Enable or disable managed profile as needed. policy::ScopedManagementServiceOverrideForTesting browser_management( policy::ManagementServiceFactory::GetForProfile(GetProfile()), @@ -238,7 +242,7 @@ HandleSetAndRevertLocalTestPolicies) { if (!policy::utils::IsPolicyTestingEnabled(/*pref_service=*/nullptr, chrome::GetChannel())) { - return; + GTEST_SKIP() << "chrome://policy/test not allowed on this build."; } std::unique_ptr handler = SetUpHandler(); const std::string jsonString = @@ -321,7 +325,7 @@ IN_PROC_BROWSER_TEST_F(PolicyTestHandlerTest, FilterSensitivePolicies) { if (!policy::utils::IsPolicyTestingEnabled(/*pref_service=*/nullptr, chrome::GetChannel())) { - return; + GTEST_SKIP() << "chrome://policy/test not allowed on this build."; } std::unique_ptr handler = SetUpHandler(); const std::string jsonString = @@ -362,6 +366,10 @@ // are applied after restart. IN_PROC_BROWSER_TEST_F(PolicyTestHandlerTest, PRE_PRE_ApplyTestPoliciesAfterRestart) { + if (!policy::utils::IsPolicyTestingEnabled(/*pref_service=*/nullptr, + chrome::GetChannel())) { + GTEST_SKIP() << "chrome://policy/test not allowed on this build."; + } std::unique_ptr handler = SetUpHandler(); // Set the value of AccessCodeCastDeviceDuration to 100. @@ -510,6 +518,10 @@ } // namespace IN_PROC_BROWSER_TEST_F(PolicyTestUITest, TestRowAddedWhenAddPolicyClicked) { + if (!policy::utils::IsPolicyTestingEnabled(/*pref_service=*/nullptr, + chrome::GetChannel())) { + GTEST_SKIP() << "chrome://policy/test not allowed on this build."; + } ASSERT_TRUE(content::NavigateToURL(web_contents(), GURL(chrome::kChromeUIPolicyTestURL))); EXPECT_EQ(GetNumberOfRows(), 1); @@ -518,6 +530,10 @@ } IN_PROC_BROWSER_TEST_F(PolicyTestUITest, TestRowDeletedWhenRemoveClicked) { + if (!policy::utils::IsPolicyTestingEnabled(/*pref_service=*/nullptr, + chrome::GetChannel())) { + GTEST_SKIP() << "chrome://policy/test not allowed on this build."; + } ASSERT_TRUE(content::NavigateToURL(web_contents(), GURL(chrome::kChromeUIPolicyTestURL))); EXPECT_EQ(GetNumberOfRows(), 1); @@ -536,6 +552,10 @@ } IN_PROC_BROWSER_TEST_F(PolicyTestUITest, TestPresetAutofill) { + if (!policy::utils::IsPolicyTestingEnabled(/*pref_service=*/nullptr, + chrome::GetChannel())) { + GTEST_SKIP() << "chrome://policy/test not allowed on this build."; + } ASSERT_TRUE(content::NavigateToURL(web_contents(), GURL(chrome::kChromeUIPolicyTestURL))); const std::string getSelectedPresetId = @@ -586,6 +606,10 @@ } IN_PROC_BROWSER_TEST_F(PolicyTestUITest, TestPolicyNameChangesInputType) { + if (!policy::utils::IsPolicyTestingEnabled(/*pref_service=*/nullptr, + chrome::GetChannel())) { + GTEST_SKIP() << "chrome://policy/test not allowed on this build."; + } ASSERT_TRUE(content::NavigateToURL(web_contents(), GURL(chrome::kChromeUIPolicyTestURL))); const std::string getValueInputType = @@ -619,6 +643,10 @@ } IN_PROC_BROWSER_TEST_F(PolicyTestUITest, TestErrorStateWhenNameNotSelected) { + if (!policy::utils::IsPolicyTestingEnabled(/*pref_service=*/nullptr, + chrome::GetChannel())) { + GTEST_SKIP() << "chrome://policy/test not allowed on this build."; + } ASSERT_TRUE(content::NavigateToURL(web_contents(), GURL(chrome::kChromeUIPolicyTestURL))); const std::string getNameDropdownInErrorStateJs = @@ -662,6 +690,10 @@ } IN_PROC_BROWSER_TEST_F(PolicyTestUITest, TestIncorrectValueTypeRaisesError) { + if (!policy::utils::IsPolicyTestingEnabled(/*pref_service=*/nullptr, + chrome::GetChannel())) { + GTEST_SKIP() << "chrome://policy/test not allowed on this build."; + } ASSERT_TRUE(content::NavigateToURL(web_contents(), GURL(chrome::kChromeUIPolicyTestURL))); EXPECT_TRUE(ClickAddPolicy()); @@ -736,6 +768,10 @@ } IN_PROC_BROWSER_TEST_F(PolicyTestUITest, TestClearPoliciesButton) { + if (!policy::utils::IsPolicyTestingEnabled(/*pref_service=*/nullptr, + chrome::GetChannel())) { + GTEST_SKIP() << "chrome://policy/test not allowed on this build."; + } ASSERT_TRUE(content::NavigateToURL(web_contents(), GURL(chrome::kChromeUIPolicyTestURL))); for (int i = 0; i < 4; i++) { diff -Nru chromium-119.0.6045.105/chrome/browser/ui/webui/settings/ash/multidevice_section.cc chromium-119.0.6045.159/chrome/browser/ui/webui/settings/ash/multidevice_section.cc --- chromium-119.0.6045.105/chrome/browser/ui/webui/settings/ash/multidevice_section.cc 2023-11-01 18:10:15.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/webui/settings/ash/multidevice_section.cc 2023-11-14 22:56:29.000000000 +0000 @@ -413,6 +413,14 @@ IDS_SETTINGS_MULTIDEVICE_INSTANT_TETHERING}, {"multideviceInstantTetheringItemSummary", IDS_SETTINGS_MULTIDEVICE_INSTANT_TETHERING_SUMMARY}, + {"multideviceInstantTetheringItemConnectedDescription", + IDS_OS_SETTINGS_MULTIDEVICE_INSTANT_TETHERING_CONNECTED_DESCRIPTION}, + {"multideviceInstantTetheringItemConnectingDescription", + IDS_OS_SETTINGS_MULTIDEVICE_INSTANT_TETHERING_CONNECTING_DESCRIPTION}, + {"multideviceInstantTetheringItemNoNetworkDescription", + IDS_OS_SETTINGS_MULTIDEVICE_INSTANT_TETHERING_NO_NETWORK_DESCRIPTION}, + {"multideviceInstantTetheringItemDisabledDescription", + IDS_OS_SETTINGS_MULTIDEVICE_INSTANT_TETHERING_DISABLED_DESCRIPTION}, {"multideviceForgetDevice", IDS_SETTINGS_MULTIDEVICE_FORGET_THIS_DEVICE}, {"multideviceSmartLockOptions", IDS_SETTINGS_PEOPLE_LOCK_SCREEN_OPTIONS_LOCK}, diff -Nru chromium-119.0.6045.105/chrome/browser/ui/webui/signin/enterprise_profile_welcome_handler.cc chromium-119.0.6045.159/chrome/browser/ui/webui/signin/enterprise_profile_welcome_handler.cc --- chromium-119.0.6045.105/chrome/browser/ui/webui/signin/enterprise_profile_welcome_handler.cc 2023-11-01 18:10:15.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/webui/signin/enterprise_profile_welcome_handler.cc 2023-11-14 22:56:30.000000000 +0000 @@ -58,67 +58,6 @@ base::UTF8ToUTF16(domain_name)); } -std::string GetManagedAccountTitleWithEmail( - Profile* profile, - ProfileAttributesEntry* entry, - const std::string& account_domain_name, - const std::u16string& email) { - DCHECK(profile); - DCHECK(entry); - DCHECK(!email.empty()); - -#if !BUILDFLAG(IS_CHROMEOS) - absl::optional account_manager = - chrome::GetAccountManagerIdentity(profile); - - if (!signin_util::IsProfileSeparationEnforcedByProfile( - profile, base::UTF16ToUTF8(email))) { - // The profile is managed but does not enforce profile separation. The - // intercepted account requires it. - if (account_manager && !account_manager->empty()) { - return l10n_util::GetStringFUTF8( - IDS_ENTERPRISE_PROFILE_WELCOME_PROFILE_MANAGED_SEPARATION, - base::UTF8ToUTF16(*account_manager), email, - base::UTF8ToUTF16(account_domain_name)); - } - // The profile is not managed. The intercepted account requires profile - // separation. - return l10n_util::GetStringFUTF8( - IDS_ENTERPRISE_PROFILE_WELCOME_ACCOUNT_EMAIL_MANAGED_BY, email, - base::UTF8ToUTF16(account_domain_name)); - } else if (profile->GetPrefs()->GetBoolean( - prefs::kManagedAccountsSigninRestrictionScopeMachine)) { - // The device is managed and requires profile separation. - absl::optional device_manager = - chrome::GetDeviceManagerIdentity(); - if (device_manager && !device_manager->empty()) { - return l10n_util::GetStringFUTF8( - IDS_ENTERPRISE_PROFILE_WELCOME_PROFILE_SEPARATION_DEVICE_MANAGED_BY, - base::UTF8ToUTF16(*device_manager), email); - } else { - return l10n_util::GetStringFUTF8( - IDS_ENTERPRISE_PROFILE_WELCOME_PROFILE_SEPARATION_DEVICE_MANAGED, - email); - } - } else { - DCHECK(account_manager); - DCHECK(!account_manager->empty()); - return l10n_util::GetStringFUTF8( - IDS_ENTERPRISE_PROFILE_WELCOME_PROFILE_MANAGED_STRICT_SEPARATION, - base::UTF8ToUTF16(*account_manager), email); - } -#else - if (entry->GetHostedDomain() == kNoHostedDomainFound) - return std::string(); - const std::string domain_name = entry->GetHostedDomain().empty() - ? account_domain_name - : entry->GetHostedDomain(); - return l10n_util::GetStringFUTF8( - IDS_ENTERPRISE_PROFILE_WELCOME_ACCOUNT_EMAIL_MANAGED_BY, email, - base::UTF8ToUTF16(domain_name)); -#endif // !BUILDFLAG(IS_CHROMEOS) -} - std::string GetManagedDeviceTitle() { absl::optional device_manager = chrome::GetDeviceManagerIdentity(); @@ -271,6 +210,66 @@ FireWebUIListener("on-profile-info-changed", GetProfileInfoValue()); } +// static +std::string EnterpriseProfileWelcomeHandler::GetManagedAccountTitleWithEmail( + Profile* profile, + ProfileAttributesEntry* entry, + const std::string& account_domain_name, + const std::u16string& email) { + DCHECK(profile); + DCHECK(entry); + DCHECK(!email.empty()); + +#if !BUILDFLAG(IS_CHROMEOS) + absl::optional account_manager = + chrome::GetAccountManagerIdentity(profile); + absl::optional device_manager = + chrome::GetDeviceManagerIdentity(); + + if (!signin_util::IsProfileSeparationEnforcedByProfile( + profile, base::UTF16ToUTF8(email))) { + // The profile is managed but does not enforce profile separation. The + // intercepted account requires it. + if (account_manager && !account_manager->empty()) { + return l10n_util::GetStringFUTF8( + IDS_ENTERPRISE_PROFILE_WELCOME_PROFILE_MANAGED_SEPARATION, + base::UTF8ToUTF16(*account_manager), email, + base::UTF8ToUTF16(account_domain_name)); + } + // The profile is not managed. The intercepted account requires profile + // separation. + return l10n_util::GetStringFUTF8( + IDS_ENTERPRISE_PROFILE_WELCOME_ACCOUNT_EMAIL_MANAGED_BY, email, + base::UTF8ToUTF16(account_domain_name)); + } + if (!profile->GetPrefs()->GetBoolean( + prefs::kManagedAccountsSigninRestrictionScopeMachine) && + account_manager && !account_manager->empty()) { + return l10n_util::GetStringFUTF8( + IDS_ENTERPRISE_PROFILE_WELCOME_PROFILE_MANAGED_STRICT_SEPARATION, + base::UTF8ToUTF16(*account_manager), email); + } + if (device_manager && !device_manager->empty()) { + // The device is managed and requires profile separation. + return l10n_util::GetStringFUTF8( + IDS_ENTERPRISE_PROFILE_WELCOME_PROFILE_SEPARATION_DEVICE_MANAGED_BY, + base::UTF8ToUTF16(*device_manager), email); + } + return l10n_util::GetStringFUTF8( + IDS_ENTERPRISE_PROFILE_WELCOME_PROFILE_SEPARATION_DEVICE_MANAGED, email); +#else + if (entry->GetHostedDomain() == kNoHostedDomainFound) { + return std::string(); + } + const std::string domain_name = entry->GetHostedDomain().empty() + ? account_domain_name + : entry->GetHostedDomain(); + return l10n_util::GetStringFUTF8( + IDS_ENTERPRISE_PROFILE_WELCOME_ACCOUNT_EMAIL_MANAGED_BY, email, + base::UTF8ToUTF16(domain_name)); +#endif // !BUILDFLAG(IS_CHROMEOS) +} + base::Value::Dict EnterpriseProfileWelcomeHandler::GetProfileInfoValue() { base::Value::Dict dict; dict.Set("pictureUrl", GetPictureUrl()); diff -Nru chromium-119.0.6045.105/chrome/browser/ui/webui/signin/enterprise_profile_welcome_handler.h chromium-119.0.6045.159/chrome/browser/ui/webui/signin/enterprise_profile_welcome_handler.h --- chromium-119.0.6045.105/chrome/browser/ui/webui/signin/enterprise_profile_welcome_handler.h 2023-11-01 18:10:15.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/webui/signin/enterprise_profile_welcome_handler.h 2023-11-14 22:56:30.000000000 +0000 @@ -23,6 +23,8 @@ #include "third_party/abseil-cpp/absl/types/optional.h" class Browser; +class Profile; +class EnterpriseProfileWelcomeHandleTest; struct AccountInfo; namespace base { @@ -75,6 +77,16 @@ void set_web_ui_for_test(content::WebUI* web_ui) { set_web_ui(web_ui); } private: + FRIEND_TEST_ALL_PREFIXES( + EnterpriseProfileWelcomeHandleTest, + GetManagedAccountTitleWithEmailInterceptionEnforcedAtMachineLevel); + FRIEND_TEST_ALL_PREFIXES( + EnterpriseProfileWelcomeHandleTest, + GetManagedAccountTitleWithEmailInterceptionEnforcedByExistingProfile); + FRIEND_TEST_ALL_PREFIXES( + EnterpriseProfileWelcomeHandleTest, + GetManagedAccountTitleWithEmailInterceptionEnforcedByInterceptedAccount); + void HandleInitialized(const base::Value::List& args); // Handles the web ui message sent when the html content is done being laid // out and it's time to resize the native view hosting it to fit. |args| is @@ -88,6 +100,13 @@ // nothing if the profile path does not match the current profile. void UpdateProfileInfo(const base::FilePath& profile_path); + // Returns a string stating the management status. + static std::string GetManagedAccountTitleWithEmail( + Profile* profile, + ProfileAttributesEntry* entry, + const std::string& account_domain_name, + const std::u16string& email); + // Computes the profile info (avatar and strings) to be sent to the WebUI. base::Value::Dict GetProfileInfoValue(); diff -Nru chromium-119.0.6045.105/chrome/browser/ui/webui/signin/enterprise_profile_welcome_handler_unittest.cc chromium-119.0.6045.159/chrome/browser/ui/webui/signin/enterprise_profile_welcome_handler_unittest.cc --- chromium-119.0.6045.105/chrome/browser/ui/webui/signin/enterprise_profile_welcome_handler_unittest.cc 2023-11-01 18:10:15.000000000 +0000 +++ chromium-119.0.6045.159/chrome/browser/ui/webui/signin/enterprise_profile_welcome_handler_unittest.cc 2023-11-14 22:56:30.000000000 +0000 @@ -6,22 +6,46 @@ #include +#include "base/functional/callback_helpers.h" #include "base/test/mock_callback.h" #include "base/test/task_environment.h" #include "base/values.h" +#include "chrome/browser/browser_process.h" +#include "chrome/browser/enterprise/browser_management/management_service_factory.h" +#include "chrome/browser/profiles/profile_attributes_entry.h" +#include "chrome/browser/profiles/profile_manager.h" +#include "chrome/browser/profiles/profile_test_util.h" #include "chrome/browser/ui/browser_commands.h" +#include "chrome/browser/ui/managed_ui.h" #include "chrome/browser/ui/webui/signin/signin_utils.h" +#include "chrome/common/pref_names.h" +#include "chrome/grit/generated_resources.h" #include "chrome/test/base/browser_with_test_window_test.h" #include "chrome/test/base/testing_profile.h" +#include "components/policy/core/common/management/scoped_management_service_override_for_testing.h" +#include "components/signin/public/base/signin_pref_names.h" #include "components/user_manager/user_names.h" #include "content/public/test/browser_task_environment.h" #include "content/public/test/test_web_ui.h" #include "content/public/test/web_contents_tester.h" #include "testing/gtest/include/gtest/gtest.h" +#include "ui/base/l10n/l10n_util.h" using testing::_; using testing::Invoke; +namespace { + +#if !BUILDFLAG(IS_CHROMEOS) +ProfileAttributesEntry* GetProfileEntry(Profile* profile) { + return g_browser_process->profile_manager() + ->GetProfileAttributesStorage() + .GetProfileAttributesWithPath(profile->GetPath()); +} +#endif + +} // namespace + class EnterpriseProfileWelcomeHandlerTestBase : public BrowserWithTestWindowTest { public: @@ -108,3 +132,211 @@ INSTANTIATE_TEST_SUITE_P(All, EnterpriseProfileWelcomeHandleProceedTest, testing::ValuesIn(kHandleProceedParams)); + +#if !BUILDFLAG(IS_CHROMEOS) +class EnterpriseProfileWelcomeHandleTest + : public EnterpriseProfileWelcomeHandlerTestBase { + protected: + ProfileManager* profile_manager() { + return g_browser_process->profile_manager(); + } +}; + +TEST_F(EnterpriseProfileWelcomeHandleTest, + GetManagedAccountTitleWithEmailInterceptionEnforcedByExistingProfile) { + auto& managed_profile = profiles::testing::CreateProfileSync( + profile_manager(), profile_manager()->GenerateNextProfileDirectoryPath()); + GetProfileEntry(&managed_profile)->SetHostedDomain("example.com"); + + policy::ScopedManagementServiceOverrideForTesting browser_management( + policy::ManagementServiceFactory::GetForProfile(&managed_profile), + policy::EnterpriseManagementAuthority::CLOUD); + + auto& unmanaged_profile = profiles::testing::CreateProfileSync( + profile_manager(), profile_manager()->GenerateNextProfileDirectoryPath()); + + managed_profile.GetPrefs()->SetList( + prefs::kProfileSeparationDomainExceptionList, base::Value::List()); + unmanaged_profile.GetPrefs()->SetList( + prefs::kProfileSeparationDomainExceptionList, base::Value::List()); + + // No account manager, no device manager + { + const std::string unknown_device_manager = ""; + chrome::ScopedDeviceManagerForTesting unknown_device_manager_for_testing( + unknown_device_manager.c_str()); + std::string title = + EnterpriseProfileWelcomeHandler::GetManagedAccountTitleWithEmail( + &unmanaged_profile, GetProfileEntry(&unmanaged_profile), + "intercepted.com", u"alice@intercepted.com"); + EXPECT_EQ( + title, + l10n_util::GetStringFUTF8( + IDS_ENTERPRISE_PROFILE_WELCOME_PROFILE_SEPARATION_DEVICE_MANAGED, + u"alice@intercepted.com")); + } + // No account manager, existing device manager + { + const std::string device_manager = "devicemanager.com"; + chrome::ScopedDeviceManagerForTesting unknown_device_manager_for_testing( + device_manager.c_str()); + std::string title = + EnterpriseProfileWelcomeHandler::GetManagedAccountTitleWithEmail( + &unmanaged_profile, GetProfileEntry(&unmanaged_profile), + "intercepted.com", u"alice@intercepted.com"); + EXPECT_EQ( + title, + l10n_util::GetStringFUTF8( + IDS_ENTERPRISE_PROFILE_WELCOME_PROFILE_SEPARATION_DEVICE_MANAGED_BY, + base::UTF8ToUTF16(device_manager), u"alice@intercepted.com")); + } + // Existing account manager, no device manager + { + const std::string unknown_device_manager = ""; + chrome::ScopedDeviceManagerForTesting unknown_device_manager_for_testing( + unknown_device_manager.c_str()); + std::string title = + EnterpriseProfileWelcomeHandler::GetManagedAccountTitleWithEmail( + &managed_profile, GetProfileEntry(&managed_profile), + "intercepted.com", u"alice@intercepted.com"); + EXPECT_EQ( + title, + l10n_util::GetStringFUTF8( + IDS_ENTERPRISE_PROFILE_WELCOME_PROFILE_MANAGED_STRICT_SEPARATION, + u"example.com", u"alice@intercepted.com")); + } + // Existing account manager and device manager + { + const std::string device_manager = "devicemanager.com"; + chrome::ScopedDeviceManagerForTesting unknown_device_manager_for_testing( + device_manager.c_str()); + std::string title = + EnterpriseProfileWelcomeHandler::GetManagedAccountTitleWithEmail( + &managed_profile, GetProfileEntry(&managed_profile), + "intercepted.com", u"alice@intercepted.com"); + EXPECT_EQ( + title, + l10n_util::GetStringFUTF8( + IDS_ENTERPRISE_PROFILE_WELCOME_PROFILE_MANAGED_STRICT_SEPARATION, + u"example.com", u"alice@intercepted.com")); + } +} + +TEST_F(EnterpriseProfileWelcomeHandleTest, + GetManagedAccountTitleWithEmailInterceptionEnforcedAtMachineLevel) { + auto& managed_profile = profiles::testing::CreateProfileSync( + profile_manager(), profile_manager()->GenerateNextProfileDirectoryPath()); + GetProfileEntry(&managed_profile)->SetHostedDomain("example.com"); + + policy::ScopedManagementServiceOverrideForTesting browser_management( + policy::ManagementServiceFactory::GetForProfile(&managed_profile), + policy::EnterpriseManagementAuthority::CLOUD); + + auto& unmanaged_profile = profiles::testing::CreateProfileSync( + profile_manager(), profile_manager()->GenerateNextProfileDirectoryPath()); + + managed_profile.GetPrefs()->SetString( + prefs::kManagedAccountsSigninRestriction, "primary_account"); + managed_profile.GetPrefs()->SetBoolean( + prefs::kManagedAccountsSigninRestrictionScopeMachine, true); + unmanaged_profile.GetPrefs()->SetString( + prefs::kManagedAccountsSigninRestriction, "primary_account"); + unmanaged_profile.GetPrefs()->SetBoolean( + prefs::kManagedAccountsSigninRestrictionScopeMachine, true); + + // No account manager, no device manager + { + const std::string unknown_device_manager = ""; + chrome::ScopedDeviceManagerForTesting unknown_device_manager_for_testing( + unknown_device_manager.c_str()); + std::string title = + EnterpriseProfileWelcomeHandler::GetManagedAccountTitleWithEmail( + &unmanaged_profile, GetProfileEntry(&unmanaged_profile), + "intercepted.com", u"alice@intercepted.com"); + EXPECT_EQ( + title, + l10n_util::GetStringFUTF8( + IDS_ENTERPRISE_PROFILE_WELCOME_PROFILE_SEPARATION_DEVICE_MANAGED, + u"alice@intercepted.com")); + } + // No account manager, existing device manager + { + const std::string device_manager = "devicemanager.com"; + chrome::ScopedDeviceManagerForTesting unknown_device_manager_for_testing( + device_manager.c_str()); + std::string title = + EnterpriseProfileWelcomeHandler::GetManagedAccountTitleWithEmail( + &unmanaged_profile, GetProfileEntry(&unmanaged_profile), + "intercepted.com", u"alice@intercepted.com"); + EXPECT_EQ( + title, + l10n_util::GetStringFUTF8( + IDS_ENTERPRISE_PROFILE_WELCOME_PROFILE_SEPARATION_DEVICE_MANAGED_BY, + base::UTF8ToUTF16(device_manager), u"alice@intercepted.com")); + } + // Existing account manager, no device manager + { + const std::string unknown_device_manager = ""; + chrome::ScopedDeviceManagerForTesting unknown_device_manager_for_testing( + unknown_device_manager.c_str()); + std::string title = + EnterpriseProfileWelcomeHandler::GetManagedAccountTitleWithEmail( + &managed_profile, GetProfileEntry(&managed_profile), + "intercepted.com", u"alice@intercepted.com"); + l10n_util::GetStringFUTF8( + IDS_ENTERPRISE_PROFILE_WELCOME_PROFILE_SEPARATION_DEVICE_MANAGED, + u"alice@intercepted.com"); + } + // Existing account manager and device manager + { + const std::string device_manager = "devicemanager.com"; + chrome::ScopedDeviceManagerForTesting unknown_device_manager_for_testing( + device_manager.c_str()); + std::string title = + EnterpriseProfileWelcomeHandler::GetManagedAccountTitleWithEmail( + &managed_profile, GetProfileEntry(&managed_profile), + "intercepted.com", u"alice@intercepted.com"); + EXPECT_EQ( + title, + l10n_util::GetStringFUTF8( + IDS_ENTERPRISE_PROFILE_WELCOME_PROFILE_SEPARATION_DEVICE_MANAGED_BY, + base::UTF8ToUTF16(device_manager), u"alice@intercepted.com")); + } +} + +TEST_F( + EnterpriseProfileWelcomeHandleTest, + GetManagedAccountTitleWithEmailInterceptionEnforcedByInterceptedAccount) { + auto& profile = profiles::testing::CreateProfileSync( + profile_manager(), profile_manager()->GenerateNextProfileDirectoryPath()); + + // No account manager + { + std::string title = + EnterpriseProfileWelcomeHandler::GetManagedAccountTitleWithEmail( + &profile, GetProfileEntry(&profile), "intercepted.com", + u"alice@intercepted.com"); + EXPECT_EQ(title, + l10n_util::GetStringFUTF8( + IDS_ENTERPRISE_PROFILE_WELCOME_ACCOUNT_EMAIL_MANAGED_BY, + u"alice@intercepted.com", u"intercepted.com")); + } + // Known Account manager + { + policy::ScopedManagementServiceOverrideForTesting browser_management( + policy::ManagementServiceFactory::GetForProfile(&profile), + policy::EnterpriseManagementAuthority::CLOUD); + // Set account manager + GetProfileEntry(&profile)->SetHostedDomain("example.com"); + std::string title = + EnterpriseProfileWelcomeHandler::GetManagedAccountTitleWithEmail( + &profile, GetProfileEntry(&profile), "intercepted.com", + u"alice@intercepted.com"); + EXPECT_EQ( + title, + l10n_util::GetStringFUTF8( + IDS_ENTERPRISE_PROFILE_WELCOME_PROFILE_MANAGED_SEPARATION, + u"example.com", u"alice@intercepted.com", u"intercepted.com")); + } +} +#endif // !BUILDFLAG(IS_CHROMEOS) diff -Nru chromium-119.0.6045.105/chrome/credential_provider/gaiacp/strings/gaia_resources_as.xtb chromium-119.0.6045.159/chrome/credential_provider/gaiacp/strings/gaia_resources_as.xtb --- chromium-119.0.6045.105/chrome/credential_provider/gaiacp/strings/gaia_resources_as.xtb 2023-11-01 18:10:16.000000000 +0000 +++ chromium-119.0.6045.159/chrome/credential_provider/gaiacp/strings/gaia_resources_as.xtb 2023-11-14 22:56:30.000000000 +0000 @@ -9,7 +9,7 @@ এই ইমেইলটোৰ ছাইন ইন কৰিবলৈ অনুমতি নাই। আপুনি কৰ্মস্থান অথবা স্কুলৰ বাবে ব্যৱহাৰ কৰা একাউণ্টটোৰে পুনৰ চেষ্টা কৰি চাওক। আপুনি যদি তথাপি ছাইন ইন কৰিব নোৱাৰে, আপোনাৰ প্ৰশাসকৰ সৈতে যোগাযোগ কৰক। এই ডিভাইচটোত ব্যক্তিগত কোনো একাউণ্টেৰে ছাইন ইন কৰাৰ অনুমতি নাই। অনুগ্ৰহ কৰি আপোনাৰ কৰ্মস্থানৰ একাউণ্টেৰে লগ ইন কৰক। আপুনি যদি আপোনাৰ বৰ্তমানৰ Windowsৰ পাছৱৰ্ড নিদিয়াকৈ অব্যাহত ৰাখে, তেন্তে আপুনি এই ডিভাইচৰ তথ্য স্থায়ীভাৱে হেৰুৱাব পাৰে। -এই কম্পিউটাৰটোত এই একাউণ্টটো ব্যৱহাৰ কৰি ইতিমধ্যেই এজন ব্যৱহাৰকাৰী যোগ কৰা হৈছে অনুগ্ৰহ কৰি অন্য এটা একাউণ্টেৰে ছাইন ইন কৰক। +এই কম্পিউটাৰটোত এই একাউণ্টটো ব্যৱহাৰ কৰি ইতিমধ্যেই এগৰাকী ব্যৱহাৰকাৰী যোগ কৰা হৈছে অনুগ্ৰহ কৰি অন্য এটা একাউণ্টেৰে ছাইন ইন কৰক। আপোনাৰ ডিভাইচটো ইণ্টাৰনেটৰ সৈতে সংযোগ হৈ থকাটো নিশ্চিত কৰি পুনৰ চেষ্টা কৰক কেৱল GSuite Enterprise ব্যৱহাৰকাৰীসকলৰহে লগ ইন কৰাৰ অনুমতি আছে। এই ডিভাইচটোত Chrome ইনষ্টল কৰাত কোনো সমস্যা হোৱাৰ বাবে Googleৰ ছাইন-ইন কৰা স্ক্ৰীনখন খুলিব নোৱাৰি। আপোনাৰ প্ৰশাসকৰ সৈতে যোগাযোগ কৰক। @@ -34,6 +34,6 @@ অতি বেছিসংখ্যক পাছৱর্ড দিয়াৰ ভুল প্ৰয়াস কৰাৰ বাবে আপোনাৰ একাউণ্টটো অক্ষম কৰা হৈছে। আপোনাৰ একাউণ্টটো সক্ষম কৰিবলৈ আপোনাৰ প্ৰশাসকৰ সৈতে যোগাযোগ কৰক। আপোনাৰ প্ৰশাসকে আপোনাক এই একাউণ্টটোৰ জৰিয়তে ছাইন ইন কৰিবলৈ অনুমতি নিদিয়ে। অন্য এটা একাউণ্ট ব্যৱহাৰ কৰি চাওক। Windowsৰ পাছৱৰ্ড পাহৰিছোঁ -এজন ব্যৱহাৰকাৰী সৃষ্টি কৰিব পৰা নগ'ল। +এগৰাকী ব্যৱহাৰকাৰী সৃষ্টি কৰিব পৰা নগ'ল। Windowsৰ বাবে Google ক্ৰিডেনশ্বিয়েল প্ৰদানকাৰীয়ে সৃষ্টি কৰা ব্যৱহাৰকাৰীৰ একাউণ্ট \ No newline at end of file diff -Nru chromium-119.0.6045.105/chrome/test/BUILD.gn chromium-119.0.6045.159/chrome/test/BUILD.gn --- chromium-119.0.6045.105/chrome/test/BUILD.gn 2023-11-01 18:10:16.000000000 +0000 +++ chromium-119.0.6045.159/chrome/test/BUILD.gn 2023-11-14 22:56:30.000000000 +0000 @@ -4037,7 +4037,7 @@ ] if (enable_extensions) { sources += [ - "../browser/supervised_user/supervised_user_extension_browsertest.cc", + "../browser/supervised_user/linux_mac_windows/supervised_user_extension_browsertest.cc", "../browser/ui/views/supervised_user/extension_install_blocked_by_parent_dialog_browsertest.cc", "../browser/ui/views/supervised_user/parent_permission_dialog_view_browsertest.cc", "../browser/ui/views/supervised_user/parent_permission_extension_flow_view_browsertest.cc", diff -Nru chromium-119.0.6045.105/chromeos/CHROMEOS_LKGM chromium-119.0.6045.159/chromeos/CHROMEOS_LKGM --- chromium-119.0.6045.105/chromeos/CHROMEOS_LKGM 2023-11-01 18:10:19.000000000 +0000 +++ chromium-119.0.6045.159/chromeos/CHROMEOS_LKGM 2023-11-14 22:56:32.000000000 +0000 @@ -1 +1 @@ -15633.30.0 \ No newline at end of file +15633.44.0 \ No newline at end of file diff -Nru chromium-119.0.6045.105/chromeos/ash/components/network/metrics/connection_results.cc chromium-119.0.6045.159/chromeos/ash/components/network/metrics/connection_results.cc --- chromium-119.0.6045.105/chromeos/ash/components/network/metrics/connection_results.cc 2023-11-01 18:10:19.000000000 +0000 +++ chromium-119.0.6045.159/chromeos/ash/components/network/metrics/connection_results.cc 2023-11-14 22:56:32.000000000 +0000 @@ -12,125 +12,130 @@ ShillConnectResult ShillErrorToConnectResult(const std::string& error_name) { // Flimflam error options. - if (error_name == shill::kErrorAaaFailed) + if (error_name == shill::kErrorAaaFailed) { return ShillConnectResult::kErrorAaaFailed; - else if (error_name == shill::kErrorActivationFailed) + } else if (error_name == shill::kErrorActivationFailed) { return ShillConnectResult::kErrorActivationFailed; - else if (error_name == shill::kErrorBadPassphrase) + } else if (error_name == shill::kErrorBadPassphrase) { return ShillConnectResult::kErrorBadPassphrase; - else if (error_name == shill::kErrorBadWEPKey) + } else if (error_name == shill::kErrorBadWEPKey) { return ShillConnectResult::kErrorBadWEPKey; - else if (error_name == shill::kErrorConnectFailed) + } else if (error_name == shill::kErrorConnectFailed) { return ShillConnectResult::kErrorConnectFailed; - else if (error_name == shill::kErrorDNSLookupFailed) + } else if (error_name == shill::kErrorDNSLookupFailed) { return ShillConnectResult::kErrorDNSLookupFailed; - else if (error_name == shill::kErrorDhcpFailed) + } else if (error_name == shill::kErrorDhcpFailed) { return ShillConnectResult::kErrorDhcpFailed; - else if (error_name == shill::kErrorHTTPGetFailed) + } else if (error_name == shill::kErrorHTTPGetFailed) { return ShillConnectResult::kErrorHTTPGetFailed; - else if (error_name == shill::kErrorInternal) + } else if (error_name == shill::kErrorInternal) { return ShillConnectResult::kErrorInternal; - else if (error_name == shill::kErrorInvalidFailure) + } else if (error_name == shill::kErrorInvalidFailure) { return ShillConnectResult::kErrorInvalidFailure; - else if (error_name == shill::kErrorIpsecCertAuthFailed) + } else if (error_name == shill::kErrorIpsecCertAuthFailed) { return ShillConnectResult::kErrorIpsecCertAuthFailed; - else if (error_name == shill::kErrorIpsecPskAuthFailed) + } else if (error_name == shill::kErrorIpsecPskAuthFailed) { return ShillConnectResult::kErrorIpsecPskAuthFailed; - else if (error_name == shill::kErrorNeedEvdo) + } else if (error_name == shill::kErrorNeedEvdo) { return ShillConnectResult::kErrorNeedEvdo; - else if (error_name == shill::kErrorNeedHomeNetwork) + } else if (error_name == shill::kErrorNeedHomeNetwork) { return ShillConnectResult::kErrorNeedHomeNetwork; - else if (error_name == shill::kErrorNoFailure) + } else if (error_name == shill::kErrorNoFailure) { return ShillConnectResult::kErrorNoFailure; - else if (error_name == shill::kErrorNotAssociated) + } else if (error_name == shill::kErrorNotAssociated) { return ShillConnectResult::kErrorNotAssociated; - else if (error_name == shill::kErrorNotAuthenticated) + } else if (error_name == shill::kErrorNotAuthenticated) { return ShillConnectResult::kErrorNotAuthenticated; - else if (error_name == shill::kErrorOtaspFailed) + } else if (error_name == shill::kErrorOtaspFailed) { return ShillConnectResult::kErrorOtaspFailed; - else if (error_name == shill::kErrorOutOfRange) + } else if (error_name == shill::kErrorOutOfRange) { return ShillConnectResult::kErrorOutOfRange; - else if (error_name == shill::kErrorPinMissing) + } else if (error_name == shill::kErrorPinMissing) { return ShillConnectResult::kErrorPinMissing; - else if (error_name == shill::kErrorPppAuthFailed) + } else if (error_name == shill::kErrorPppAuthFailed) { return ShillConnectResult::kErrorPppAuthFailed; - else if (error_name == shill::kErrorSimLocked) + } else if (error_name == shill::kErrorSimLocked) { return ShillConnectResult::kErrorSimLocked; - else if (error_name == shill::kErrorNotRegistered) + } else if (error_name == shill::kErrorNotRegistered) { return ShillConnectResult::kErrorNotRegistered; - else if (error_name == shill::kErrorTooManySTAs) + } else if (error_name == shill::kErrorTooManySTAs) { return ShillConnectResult::kErrorTooManySTAs; - else if (error_name == shill::kErrorDisconnect) + } else if (error_name == shill::kErrorDisconnect) { return ShillConnectResult::kErrorDisconnect; - else if (error_name == shill::kErrorUnknownFailure) + } else if (error_name == shill::kErrorUnknownFailure) { return ShillConnectResult::kErrorUnknownFailure; + } else if (error_name == shill::kErrorInvalidAPN) { + return ShillConnectResult::kErrorInvalidAPN; + } else if (error_name == shill::kErrorSimCarrierLocked) { + return ShillConnectResult::kErrorSimCarrierLocked; + } // Flimflam error result codes. - else if (error_name == shill::kErrorResultSuccess) + else if (error_name == shill::kErrorResultSuccess) { return ShillConnectResult::kSuccess; - else if (error_name == shill::kErrorResultFailure) + } else if (error_name == shill::kErrorResultFailure) { return ShillConnectResult::kErrorResultFailure; - else if (error_name == shill::kErrorResultAlreadyConnected) + } else if (error_name == shill::kErrorResultAlreadyConnected) { return ShillConnectResult::kErrorResultAlreadyConnected; - else if (error_name == shill::kErrorResultAlreadyExists) + } else if (error_name == shill::kErrorResultAlreadyExists) { return ShillConnectResult::kErrorResultAlreadyExists; - else if (error_name == shill::kErrorResultIncorrectPin) + } else if (error_name == shill::kErrorResultIncorrectPin) { return ShillConnectResult::kErrorResultIncorrectPin; - else if (error_name == shill::kErrorResultInProgress) + } else if (error_name == shill::kErrorResultInProgress) { return ShillConnectResult::kErrorResultInProgress; - else if (error_name == shill::kErrorResultInternalError) + } else if (error_name == shill::kErrorResultInternalError) { return ShillConnectResult::kErrorResultInternalError; - else if (error_name == shill::kErrorResultInvalidApn) + } else if (error_name == shill::kErrorResultInvalidApn) { return ShillConnectResult::kErrorResultInvalidApn; - else if (error_name == shill::kErrorResultInvalidArguments) + } else if (error_name == shill::kErrorResultInvalidArguments) { return ShillConnectResult::kErrorResultInvalidArguments; - else if (error_name == shill::kErrorResultInvalidNetworkName) + } else if (error_name == shill::kErrorResultInvalidNetworkName) { return ShillConnectResult::kErrorResultInvalidNetworkName; - else if (error_name == shill::kErrorResultInvalidPassphrase) + } else if (error_name == shill::kErrorResultInvalidPassphrase) { return ShillConnectResult::kErrorResultInvalidPassphrase; - else if (error_name == shill::kErrorResultInvalidProperty) + } else if (error_name == shill::kErrorResultInvalidProperty) { return ShillConnectResult::kErrorResultInvalidProperty; - else if (error_name == shill::kErrorResultNoCarrier) + } else if (error_name == shill::kErrorResultNoCarrier) { return ShillConnectResult::kErrorResultNoCarrier; - else if (error_name == shill::kErrorResultNotConnected) + } else if (error_name == shill::kErrorResultNotConnected) { return ShillConnectResult::kErrorResultNotConnected; - else if (error_name == shill::kErrorResultNotFound) + } else if (error_name == shill::kErrorResultNotFound) { return ShillConnectResult::kErrorResultNotFound; - else if (error_name == shill::kErrorResultNotImplemented) + } else if (error_name == shill::kErrorResultNotImplemented) { return ShillConnectResult::kErrorResultNotImplemented; - else if (error_name == shill::kErrorResultNotOnHomeNetwork) + } else if (error_name == shill::kErrorResultNotOnHomeNetwork) { return ShillConnectResult::kErrorResultNotOnHomeNetwork; - else if (error_name == shill::kErrorResultNotRegistered) + } else if (error_name == shill::kErrorResultNotRegistered) { return ShillConnectResult::kErrorResultNotRegistered; - else if (error_name == shill::kErrorResultNotSupported) + } else if (error_name == shill::kErrorResultNotSupported) { return ShillConnectResult::kErrorResultNotSupported; - else if (error_name == shill::kErrorResultOperationAborted) + } else if (error_name == shill::kErrorResultOperationAborted) { return ShillConnectResult::kErrorResultOperationAborted; - else if (error_name == shill::kErrorResultOperationInitiated) + } else if (error_name == shill::kErrorResultOperationInitiated) { return ShillConnectResult::kErrorResultOperationInitiated; - else if (error_name == shill::kErrorResultOperationTimeout) + } else if (error_name == shill::kErrorResultOperationTimeout) { return ShillConnectResult::kErrorResultOperationTimeout; - else if (error_name == shill::kErrorResultPassphraseRequired) + } else if (error_name == shill::kErrorResultPassphraseRequired) { return ShillConnectResult::kErrorResultPassphraseRequired; - else if (error_name == shill::kErrorResultPermissionDenied) + } else if (error_name == shill::kErrorResultPermissionDenied) { return ShillConnectResult::kErrorResultPermissionDenied; - else if (error_name == shill::kErrorResultPinBlocked) + } else if (error_name == shill::kErrorResultPinBlocked) { return ShillConnectResult::kErrorResultPinBlocked; - else if (error_name == shill::kErrorResultPinRequired) + } else if (error_name == shill::kErrorResultPinRequired) { return ShillConnectResult::kErrorResultPinRequired; - else if (error_name == shill::kErrorResultWrongState) + } else if (error_name == shill::kErrorResultWrongState) { return ShillConnectResult::kErrorResultWrongState; // Error strings. - else if (error_name == shill::kErrorEapAuthenticationFailed) + } else if (error_name == shill::kErrorEapAuthenticationFailed) { return ShillConnectResult::kErrorEapAuthenticationFailed; - else if (error_name == shill::kErrorEapLocalTlsFailed) + } else if (error_name == shill::kErrorEapLocalTlsFailed) { return ShillConnectResult::kErrorEapLocalTlsFailed; - else if (error_name == shill::kErrorEapRemoteTlsFailed) + } else if (error_name == shill::kErrorEapRemoteTlsFailed) { return ShillConnectResult::kErrorEapRemoteTlsFailed; - else if (error_name == shill::kErrorResultWepNotSupported) + } else if (error_name == shill::kErrorResultWepNotSupported) { return ShillConnectResult::kErrorResultWepNotSupported; - else if (error_name == TechnologyStateController::kErrorDisableHotspot) { + } else if (error_name == TechnologyStateController::kErrorDisableHotspot) { return ShillConnectResult::kErrorDisableHotspotFailed; } @@ -138,7 +143,8 @@ } UserInitiatedConnectResult NetworkConnectionErrorToConnectResult( - const std::string& error_name) { + const std::string& error_name, + const std::string& shill_error) { if (error_name == NetworkConnectionHandler::kErrorNotFound) { return UserInitiatedConnectResult::kErrorNotFound; } else if (error_name == NetworkConnectionHandler::kErrorConnected) { @@ -161,6 +167,73 @@ } else if (error_name == NetworkConnectionHandler::kErrorConfigureFailed) { return UserInitiatedConnectResult::kErrorConfigureFailed; } else if (error_name == NetworkConnectionHandler::kErrorConnectFailed) { + // Flimflam error options. + if (shill_error == shill::kErrorAaaFailed) { + return UserInitiatedConnectResult::kErrorAaaFailed; + } else if (shill_error == shill::kErrorActivationFailed) { + return UserInitiatedConnectResult::kErrorActivateFailed; + } else if (shill_error == shill::kErrorBadPassphrase) { + return UserInitiatedConnectResult::kErrorBadPassphrase; + } else if (shill_error == shill::kErrorBadWEPKey) { + return UserInitiatedConnectResult::kErrorBadWEPKey; + } else if (shill_error == shill::kErrorConnectFailed) { + return UserInitiatedConnectResult::kErrorConnectFailed; + } else if (shill_error == shill::kErrorDNSLookupFailed) { + return UserInitiatedConnectResult::kErrorDNSLookupFailed; + } else if (shill_error == shill::kErrorDhcpFailed) { + return UserInitiatedConnectResult::kErrorDhcpFailed; + } else if (shill_error == shill::kErrorHTTPGetFailed) { + return UserInitiatedConnectResult::kErrorHTTPGetFailed; + } else if (shill_error == shill::kErrorInternal) { + return UserInitiatedConnectResult::kErrorInternal; + } else if (shill_error == shill::kErrorInvalidFailure) { + return UserInitiatedConnectResult::kErrorInvalidFailure; + } else if (shill_error == shill::kErrorIpsecCertAuthFailed) { + return UserInitiatedConnectResult::kErrorIpsecCertAuthFailed; + } else if (shill_error == shill::kErrorIpsecPskAuthFailed) { + return UserInitiatedConnectResult::kErrorIpsecPskAuthFailed; + } else if (shill_error == shill::kErrorNeedEvdo) { + return UserInitiatedConnectResult::kErrorNeedEvdo; + } else if (shill_error == shill::kErrorNeedHomeNetwork) { + return UserInitiatedConnectResult::kErrorNeedHomeNetwork; + } else if (shill_error == shill::kErrorNoFailure) { + return UserInitiatedConnectResult::kErrorNoFailure; + } else if (shill_error == shill::kErrorNotAssociated) { + return UserInitiatedConnectResult::kErrorNotAssociated; + } else if (shill_error == shill::kErrorNotAuthenticated) { + return UserInitiatedConnectResult::kErrorNotAuthenticated; + } else if (shill_error == shill::kErrorOtaspFailed) { + return UserInitiatedConnectResult::kErrorOtaspFailed; + } else if (shill_error == shill::kErrorOutOfRange) { + return UserInitiatedConnectResult::kErrorOutOfRange; + } else if (shill_error == shill::kErrorPinMissing) { + return UserInitiatedConnectResult::kErrorPinMissing; + } else if (shill_error == shill::kErrorPppAuthFailed) { + return UserInitiatedConnectResult::kErrorPppAuthFailed; + } else if (shill_error == shill::kErrorSimLocked) { + return UserInitiatedConnectResult::kErrorSimLocked; + } else if (shill_error == shill::kErrorNotRegistered) { + return UserInitiatedConnectResult::kErrorNotRegistered; + } else if (shill_error == shill::kErrorTooManySTAs) { + return UserInitiatedConnectResult::kErrorTooManySTAs; + } else if (shill_error == shill::kErrorDisconnect) { + return UserInitiatedConnectResult::kErrorDisconnect; + } else if (shill_error == shill::kErrorUnknownFailure) { + return UserInitiatedConnectResult::kErrorUnknownFailure; + } else if (shill_error == shill::kErrorInvalidAPN) { + return UserInitiatedConnectResult::kErrorInvalidAPN; + } else if (shill_error == shill::kErrorSimCarrierLocked) { + return UserInitiatedConnectResult::kErrorSimCarrierLocked; + } else if (shill_error == shill::kErrorEapAuthenticationFailed) { + return UserInitiatedConnectResult::kErrorEapAuthenticationFailed; + } else if (shill_error == shill::kErrorEapLocalTlsFailed) { + return UserInitiatedConnectResult::kErrorEapLocalTlsFailed; + } else if (shill_error == shill::kErrorEapRemoteTlsFailed) { + return UserInitiatedConnectResult::kErrorEapRemoteTlsFailed; + } else if (shill_error == shill::kErrorResultWepNotSupported) { + return UserInitiatedConnectResult::kErrorResultWepNotSupported; + } + return UserInitiatedConnectResult::kErrorConnectFailed; } else if (error_name == NetworkConnectionHandler::kErrorDisconnectFailed) { return UserInitiatedConnectResult::kErrorDisconnectFailed; diff -Nru chromium-119.0.6045.105/chromeos/ash/components/network/metrics/connection_results.h chromium-119.0.6045.159/chromeos/ash/components/network/metrics/connection_results.h --- chromium-119.0.6045.105/chromeos/ash/components/network/metrics/connection_results.h 2023-11-01 18:10:19.000000000 +0000 +++ chromium-119.0.6045.159/chromeos/ash/components/network/metrics/connection_results.h 2023-11-14 22:56:32.000000000 +0000 @@ -85,7 +85,11 @@ kErrorResultWepNotSupported = 57, kErrorDisableHotspotFailed = 58, - kMaxValue = kErrorDisableHotspotFailed, + // Flimflam error options. + kErrorInvalidAPN = 59, + kErrorSimCarrierLocked = 60, + + kMaxValue = kErrorSimCarrierLocked, }; // This enum is used to track user-initiated connection results from @@ -123,7 +127,38 @@ kErrorCellularDeviceBusy = 25, kErrorConnectTimeout = 26, kConnectableCellularTimeout = 27, - kMaxValue = kConnectableCellularTimeout, + + // Flimflam error options. + kErrorAaaFailed = 28, + kErrorBadWEPKey = 29, + kErrorDNSLookupFailed = 30, + kErrorDhcpFailed = 31, + kErrorHTTPGetFailed = 32, + kErrorInternal = 33, + kErrorInvalidFailure = 34, + kErrorIpsecCertAuthFailed = 35, + kErrorIpsecPskAuthFailed = 36, + kErrorNeedEvdo = 37, + kErrorNeedHomeNetwork = 38, + kErrorNoFailure = 39, + kErrorNotAssociated = 40, + kErrorNotAuthenticated = 41, + kErrorOtaspFailed = 42, + kErrorOutOfRange = 43, + kErrorPinMissing = 44, + kErrorPppAuthFailed = 45, + kErrorNotRegistered = 46, + kErrorTooManySTAs = 47, + kErrorDisconnect = 48, + kErrorUnknownFailure = 49, + kErrorInvalidAPN = 50, + kErrorSimCarrierLocked = 51, + kErrorEapAuthenticationFailed = 52, + kErrorEapLocalTlsFailed = 53, + kErrorEapRemoteTlsFailed = 54, + kErrorResultWepNotSupported = 55, + + kMaxValue = kErrorResultWepNotSupported, }; COMPONENT_EXPORT(CHROMEOS_NETWORK) @@ -131,7 +166,8 @@ COMPONENT_EXPORT(CHROMEOS_NETWORK) UserInitiatedConnectResult NetworkConnectionErrorToConnectResult( - const std::string& error_name); + const std::string& error_name, + const std::string& shill_error); } // namespace ash diff -Nru chromium-119.0.6045.105/chromeos/ash/components/network/metrics/network_metrics_helper.cc chromium-119.0.6045.159/chromeos/ash/components/network/metrics/network_metrics_helper.cc --- chromium-119.0.6045.105/chromeos/ash/components/network/metrics/network_metrics_helper.cc 2023-11-01 18:10:19.000000000 +0000 +++ chromium-119.0.6045.159/chromeos/ash/components/network/metrics/network_metrics_helper.cc 2023-11-14 22:56:32.000000000 +0000 @@ -213,7 +213,8 @@ UserInitiatedConnectResult connect_result = network_connection_error - ? NetworkConnectionErrorToConnectResult(*network_connection_error) + ? NetworkConnectionErrorToConnectResult(*network_connection_error, + network_state->GetError()) : UserInitiatedConnectResult::kSuccess; for (const auto& network_type : GetNetworkTypeHistogramNames(network_state)) { diff -Nru chromium-119.0.6045.105/chromeos/ash/components/network/metrics/network_metrics_helper_unittest.cc chromium-119.0.6045.159/chromeos/ash/components/network/metrics/network_metrics_helper_unittest.cc --- chromium-119.0.6045.105/chromeos/ash/components/network/metrics/network_metrics_helper_unittest.cc 2023-11-01 18:10:19.000000000 +0000 +++ chromium-119.0.6045.159/chromeos/ash/components/network/metrics/network_metrics_helper_unittest.cc 2023-11-14 22:56:32.000000000 +0000 @@ -406,12 +406,22 @@ histogram_tester_->ExpectTotalCount( kCellularESimConnectResultNonUserInitiatedHistogram, 1); + shill_service_client_->SetServiceProperty( + kTestServicePath, shill::kErrorProperty, + base::Value(shill::kErrorInvalidAPN)); + base::RunLoop().RunUntilIdle(); NetworkMetricsHelper::LogUserInitiatedConnectionResult( - kTestGuid, shill::kErrorNotRegistered); + kTestGuid, shill::kErrorConnectFailed); histogram_tester_->ExpectTotalCount( kCellularConnectResultUserInitiatedHistogram, 1); + histogram_tester_->ExpectBucketCount( + kCellularConnectResultUserInitiatedHistogram, + UserInitiatedConnectResult::kErrorInvalidAPN, 1); histogram_tester_->ExpectTotalCount( kCellularESimConnectResultUserInitiatedHistogram, 1); + histogram_tester_->ExpectBucketCount( + kCellularESimConnectResultUserInitiatedHistogram, + UserInitiatedConnectResult::kErrorInvalidAPN, 1); histogram_tester_->ExpectTotalCount( kCellularPSimConnectResultUserInitiatedHistogram, 0); diff -Nru chromium-119.0.6045.105/chromeos/ash/components/phonehub/BUILD.gn chromium-119.0.6045.159/chromeos/ash/components/phonehub/BUILD.gn --- chromium-119.0.6045.105/chromeos/ash/components/phonehub/BUILD.gn 2023-11-01 18:10:19.000000000 +0000 +++ chromium-119.0.6045.159/chromeos/ash/components/phonehub/BUILD.gn 2023-11-14 22:56:32.000000000 +0000 @@ -113,6 +113,7 @@ "ping_manager_impl.h", "pref_names.cc", "pref_names.h", + "public/cpp/attestation_certificate_generator.cc", "public/cpp/attestation_certificate_generator.h", "recent_app_click_observer.h", "recent_apps_interaction_handler.cc", diff -Nru chromium-119.0.6045.105/chromeos/ash/components/phonehub/cros_state_sender.cc chromium-119.0.6045.159/chromeos/ash/components/phonehub/cros_state_sender.cc --- chromium-119.0.6045.105/chromeos/ash/components/phonehub/cros_state_sender.cc 2023-11-01 18:10:19.000000000 +0000 +++ chromium-119.0.6045.159/chromeos/ash/components/phonehub/cros_state_sender.cc 2023-11-14 22:56:32.000000000 +0000 @@ -70,11 +70,17 @@ connection_manager_->AddObserver(this); multidevice_setup_client_->AddObserver(this); + if (attestation_certificate_generator_) { + attestation_certificate_generator_->AddObserver(this); + } } CrosStateSender::~CrosStateSender() { connection_manager_->RemoveObserver(this); multidevice_setup_client_->RemoveObserver(this); + if (attestation_certificate_generator_) { + attestation_certificate_generator_->RemoveObserver(this); + } } void CrosStateSender::AttemptUpdateCrosState() { @@ -89,6 +95,7 @@ PA_LOG(VERBOSE) << "Could not start AttemptUpdateCrosState() because " << "connection manager status is: " << connection_manager_->GetStatus(); + is_certificate_requested_ = false; return; } @@ -105,26 +112,19 @@ } attestation_generating_start_time_ = base::Time::Now(); - attestation_certificate_generator_->RetrieveCertificate( - base::BindOnce(&CrosStateSender::OnAttestationCertificateRetrieved, - weak_ptr_factory_.GetWeakPtr())); + is_certificate_requested_ = true; + attestation_certificate_generator_->RetrieveCertificate(); } -void CrosStateSender::OnAttestationCertificateRetrieved( - const std::vector& attestation_certs, - bool is_valid) { - if (!is_valid) { - base::UmaHistogramLongTimes( - "PhoneHub.Attestation.GeneratingTime.Invalid", - base::Time::Now() - attestation_generating_start_time_); - SendCrosStateMessage(/*attestation_certs=*/nullptr); - return; - } - +void CrosStateSender::RecordResultMetrics( + bool is_attestation_certificate_valid) { base::UmaHistogramLongTimes( - "PhoneHub.Attestation.GeneratingTime", - base::Time::Now() - attestation_generating_start_time_); - SendCrosStateMessage(std::move(&attestation_certs)); + is_attestation_certificate_valid + ? "PhoneHub.Attestation.GeneratingTime" + : "PhoneHub.Attestation.GeneratingTime.Invalid", + base::Time::NowFromSystemTime() - attestation_generating_start_time_); + base::UmaHistogramBoolean("PhoneHub.Attestation.Result", + is_attestation_certificate_valid); } void CrosStateSender::SendCrosStateMessage( @@ -141,8 +141,7 @@ << " and camera roll enabled state as: " << is_camera_roll_enabled; message_sender_->SendCrosState(are_notifications_enabled, - is_camera_roll_enabled, - /*attestation_certs=*/attestation_certs); + is_camera_roll_enabled, attestation_certs); retry_timer_->Start(FROM_HERE, retry_delay_, base::BindOnce(&CrosStateSender::OnRetryTimerFired, @@ -174,5 +173,28 @@ AttemptUpdateCrosState(); } +void CrosStateSender::OnCertificateGenerated( + const std::vector& attestation_certs, + bool is_valid) { + if (connection_manager_->GetStatus() != + secure_channel::ConnectionManager::Status::kConnected) { + return; + } + + // Skip sending CrosState update messages when we don't have a valid + // certificate, unless this is the initial connection or there has been a + // feature status change. + if (!is_valid && !is_certificate_requested_) { + return; + } + + if (is_certificate_requested_) { + is_certificate_requested_ = false; + RecordResultMetrics(is_valid); + } + + SendCrosStateMessage(&attestation_certs); +} + } // namespace phonehub } // namespace ash diff -Nru chromium-119.0.6045.105/chromeos/ash/components/phonehub/cros_state_sender.h chromium-119.0.6045.159/chromeos/ash/components/phonehub/cros_state_sender.h --- chromium-119.0.6045.105/chromeos/ash/components/phonehub/cros_state_sender.h 2023-11-01 18:10:19.000000000 +0000 +++ chromium-119.0.6045.159/chromeos/ash/components/phonehub/cros_state_sender.h 2023-11-14 22:56:32.000000000 +0000 @@ -22,7 +22,8 @@ // phone. class CrosStateSender : public secure_channel::ConnectionManager::Observer, - public multidevice_setup::MultiDeviceSetupClient::Observer { + public multidevice_setup::MultiDeviceSetupClient::Observer, + public AttestationCertificateGenerator::Observer { public: CrosStateSender( MessageSender* message_sender, @@ -55,15 +56,18 @@ const multidevice_setup::MultiDeviceSetupClient::FeatureStatesMap& feature_states_map) override; + // AttestationCertificateGenerator::Observer: + void OnCertificateGenerated(const std::vector& attestation_certs, + bool is_valid) override; + // Sends the cros state to the phone, and initiates a retry after // |retry_delay_| if the message was not successfully sent. void PerformUpdateCrosState(); void OnRetryTimerFired(); void SendCrosStateMessage(const std::vector* attestation_certs); - void OnAttestationCertificateRetrieved( - const std::vector& attestation_certs, - bool is_valid); + void RecordResultMetrics(bool is_attestation_certificate_valid); + bool is_certificate_requested_ = false; raw_ptr message_sender_; raw_ptr connection_manager_; diff -Nru chromium-119.0.6045.105/chromeos/ash/components/phonehub/cros_state_sender_unittest.cc chromium-119.0.6045.159/chromeos/ash/components/phonehub/cros_state_sender_unittest.cc --- chromium-119.0.6045.105/chromeos/ash/components/phonehub/cros_state_sender_unittest.cc 2023-11-01 18:10:19.000000000 +0000 +++ chromium-119.0.6045.159/chromeos/ash/components/phonehub/cros_state_sender_unittest.cc 2023-11-14 22:56:32.000000000 +0000 @@ -174,6 +174,23 @@ EXPECT_EQ(1u, fake_message_sender_->GetCrosStateCallCount()); } +TEST_F(CrosStateSenderTest, ResendOnNewAttestationCertificate) { + feature_list_.InitWithFeatures(/* enabled_features= */ {features::kEcheSWA}, + /* disabled_features= */ {}); + // Set notification feature to be enabled. + fake_multidevice_setup_client_->SetFeatureState( + Feature::kPhoneHubNotifications, FeatureState::kEnabledByUser); + // Set camera roll feature to be enabled. + fake_multidevice_setup_client_->SetFeatureState(Feature::kPhoneHubCameraRoll, + FeatureState::kEnabledByUser); + fake_connection_manager_->SetStatus( + secure_channel::ConnectionManager::Status::kConnected); + EXPECT_EQ(1u, fake_message_sender_->GetCrosStateCallCount()); + + fake_attestation_certificate_generator_->RetrieveCertificate(); + EXPECT_EQ(2u, fake_message_sender_->GetCrosStateCallCount()); +} + TEST_F(CrosStateSenderTest, NotificationFeatureStateChanged) { // Set connection state to be connected. fake_connection_manager_->SetStatus( diff -Nru chromium-119.0.6045.105/chromeos/ash/components/phonehub/fake_attestation_certificate_generator.cc chromium-119.0.6045.159/chromeos/ash/components/phonehub/fake_attestation_certificate_generator.cc --- chromium-119.0.6045.105/chromeos/ash/components/phonehub/fake_attestation_certificate_generator.cc 2023-11-01 18:10:19.000000000 +0000 +++ chromium-119.0.6045.159/chromeos/ash/components/phonehub/fake_attestation_certificate_generator.cc 2023-11-14 22:56:32.000000000 +0000 @@ -13,8 +13,8 @@ FakeAttestationCertificateGenerator::~FakeAttestationCertificateGenerator() = default; -void FakeAttestationCertificateGenerator::RetrieveCertificate( - AttestationCertificateGenerator::OnCertificateRetrievedCallback callback) { - std::move(callback).Run(CERTS, true); +void FakeAttestationCertificateGenerator::RetrieveCertificate() { + NotifyCertificateGenerated(CERTS, true); } + } // namespace ash::phonehub \ No newline at end of file diff -Nru chromium-119.0.6045.105/chromeos/ash/components/phonehub/fake_attestation_certificate_generator.h chromium-119.0.6045.159/chromeos/ash/components/phonehub/fake_attestation_certificate_generator.h --- chromium-119.0.6045.105/chromeos/ash/components/phonehub/fake_attestation_certificate_generator.h 2023-11-01 18:10:19.000000000 +0000 +++ chromium-119.0.6045.159/chromeos/ash/components/phonehub/fake_attestation_certificate_generator.h 2023-11-14 22:56:32.000000000 +0000 @@ -15,9 +15,7 @@ FakeAttestationCertificateGenerator(); ~FakeAttestationCertificateGenerator() override; - void RetrieveCertificate( - AttestationCertificateGenerator::OnCertificateRetrievedCallback callback) - override; + void RetrieveCertificate() override; const std::vector CERTS = {"fake_cert"}; }; diff -Nru chromium-119.0.6045.105/chromeos/ash/components/phonehub/public/cpp/attestation_certificate_generator.cc chromium-119.0.6045.159/chromeos/ash/components/phonehub/public/cpp/attestation_certificate_generator.cc --- chromium-119.0.6045.105/chromeos/ash/components/phonehub/public/cpp/attestation_certificate_generator.cc 1970-01-01 00:00:00.000000000 +0000 +++ chromium-119.0.6045.159/chromeos/ash/components/phonehub/public/cpp/attestation_certificate_generator.cc 2023-11-14 22:56:32.000000000 +0000 @@ -0,0 +1,28 @@ +// Copyright 2023 The Chromium Authors +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "attestation_certificate_generator.h" + +namespace ash::phonehub { + +AttestationCertificateGenerator::AttestationCertificateGenerator() = default; +AttestationCertificateGenerator::~AttestationCertificateGenerator() = default; + +void AttestationCertificateGenerator::AddObserver(Observer* observer) { + observers_.AddObserver(observer); +} + +void AttestationCertificateGenerator::RemoveObserver(Observer* observer) { + observers_.RemoveObserver(observer); +} + +void AttestationCertificateGenerator::NotifyCertificateGenerated( + const std::vector& certs, + bool is_valid) { + for (auto& observer : observers_) { + observer.OnCertificateGenerated(certs, is_valid); + } +} + +} // namespace ash::phonehub diff -Nru chromium-119.0.6045.105/chromeos/ash/components/phonehub/public/cpp/attestation_certificate_generator.h chromium-119.0.6045.159/chromeos/ash/components/phonehub/public/cpp/attestation_certificate_generator.h --- chromium-119.0.6045.105/chromeos/ash/components/phonehub/public/cpp/attestation_certificate_generator.h 2023-11-01 18:10:19.000000000 +0000 +++ chromium-119.0.6045.159/chromeos/ash/components/phonehub/public/cpp/attestation_certificate_generator.h 2023-11-14 22:56:32.000000000 +0000 @@ -5,24 +5,45 @@ #ifndef CHROMEOS_ASH_COMPONENTS_PHONEHUB_PUBLIC_CPP_ATTESTATION_CERTIFICATE_GENERATOR_H_ #define CHROMEOS_ASH_COMPONENTS_PHONEHUB_PUBLIC_CPP_ATTESTATION_CERTIFICATE_GENERATOR_H_ +#include #include #include "base/functional/callback.h" +#include "base/observer_list.h" +#include "base/observer_list_types.h" + namespace ash::phonehub { // Generates attestation certificates for cross-device communication. class AttestationCertificateGenerator { public: - AttestationCertificateGenerator() = default; - virtual ~AttestationCertificateGenerator() = default; + class Observer : public base::CheckedObserver { + public: + // Is executed in response to RetrieveCertificate() calls as well as + // any time a new certificate is successfully generated automatically. + virtual void OnCertificateGenerated(const std::vector& certs, + bool is_valid) = 0; + }; + + AttestationCertificateGenerator(); + virtual ~AttestationCertificateGenerator(); AttestationCertificateGenerator(const AttestationCertificateGenerator&) = delete; AttestationCertificateGenerator& operator=( const AttestationCertificateGenerator&) = delete; - using OnCertificateRetrievedCallback = - base::OnceCallback& certs, - bool valid)>; - virtual void RetrieveCertificate(OnCertificateRetrievedCallback callback) = 0; + // The certificate is provided through Observer::OnCertificateGenerated, be + // sure to register an Observer before calling. + virtual void RetrieveCertificate() = 0; + + void AddObserver(Observer* observer); + void RemoveObserver(Observer* observer); + + protected: + void NotifyCertificateGenerated(const std::vector& certs, + bool is_valid); + + private: + base::ObserverList observers_; }; } // namespace ash::phonehub diff -Nru chromium-119.0.6045.105/chromeos/profiles/arm-exp.afdo.newest.txt chromium-119.0.6045.159/chromeos/profiles/arm-exp.afdo.newest.txt --- chromium-119.0.6045.105/chromeos/profiles/arm-exp.afdo.newest.txt 2023-11-01 18:10:19.000000000 +0000 +++ chromium-119.0.6045.159/chromeos/profiles/arm-exp.afdo.newest.txt 2023-11-14 22:56:32.000000000 +0000 @@ -1 +1 @@ -chromeos-chrome-arm-exp-119-6045.23-1698060100-benchmark-119.0.6045.103-r1-redacted.afdo.xz +chromeos-chrome-arm-exp-119-6045.38-1698660891-benchmark-119.0.6045.110-r1-redacted.afdo.xz diff -Nru chromium-119.0.6045.105/chromeos/profiles/arm.afdo.newest.txt chromium-119.0.6045.159/chromeos/profiles/arm.afdo.newest.txt --- chromium-119.0.6045.105/chromeos/profiles/arm.afdo.newest.txt 2023-11-01 18:10:19.000000000 +0000 +++ chromium-119.0.6045.159/chromeos/profiles/arm.afdo.newest.txt 2023-11-14 22:56:32.000000000 +0000 @@ -1 +1 @@ -chromeos-chrome-arm-none-119-6045.23-1698061383-benchmark-119.0.6045.104-r1-redacted.afdo.xz +chromeos-chrome-arm-none-119-6045.38-1698666410-benchmark-119.0.6045.110-r1-redacted.afdo.xz diff -Nru chromium-119.0.6045.105/chromeos/profiles/atom.afdo.newest.txt chromium-119.0.6045.159/chromeos/profiles/atom.afdo.newest.txt --- chromium-119.0.6045.105/chromeos/profiles/atom.afdo.newest.txt 2023-11-01 18:10:19.000000000 +0000 +++ chromium-119.0.6045.159/chromeos/profiles/atom.afdo.newest.txt 2023-11-14 22:56:32.000000000 +0000 @@ -1 +1 @@ -chromeos-chrome-amd64-atom-119-6045.23-1698060100-benchmark-119.0.6045.103-r1-redacted.afdo.xz +chromeos-chrome-amd64-atom-119-6045.38-1698660891-benchmark-119.0.6045.110-r1-redacted.afdo.xz diff -Nru chromium-119.0.6045.105/chromeos/profiles/bigcore.afdo.newest.txt chromium-119.0.6045.159/chromeos/profiles/bigcore.afdo.newest.txt --- chromium-119.0.6045.105/chromeos/profiles/bigcore.afdo.newest.txt 2023-11-01 18:10:19.000000000 +0000 +++ chromium-119.0.6045.159/chromeos/profiles/bigcore.afdo.newest.txt 2023-11-14 22:56:32.000000000 +0000 @@ -1 +1 @@ -chromeos-chrome-amd64-bigcore-119-6045.23-1698057060-benchmark-119.0.6045.103-r1-redacted.afdo.xz +chromeos-chrome-amd64-bigcore-119-6045.38-1698658897-benchmark-119.0.6045.110-r1-redacted.afdo.xz diff -Nru chromium-119.0.6045.105/chromeos/strings/chromeos_strings_eu.xtb chromium-119.0.6045.159/chromeos/strings/chromeos_strings_eu.xtb --- chromium-119.0.6045.105/chromeos/strings/chromeos_strings_eu.xtb 2023-11-01 18:10:19.000000000 +0000 +++ chromium-119.0.6045.159/chromeos/strings/chromeos_strings_eu.xtb 2023-11-14 22:56:32.000000000 +0000 @@ -921,7 +921,7 @@ Eskatu trafiko-kontagailuak LTEAdvanced Hautatu zerbitzuko aukera -Garatzaileen tresnak +Garatzaileentzako tresnak , . Sartu Erantsi diff -Nru chromium-119.0.6045.105/chromeos/strings/chromeos_strings_ja.xtb chromium-119.0.6045.159/chromeos/strings/chromeos_strings_ja.xtb --- chromium-119.0.6045.105/chromeos/strings/chromeos_strings_ja.xtb 2023-11-01 18:10:19.000000000 +0000 +++ chromium-119.0.6045.159/chromeos/strings/chromeos_strings_ja.xtb 2023-11-14 22:56:33.000000000 +0000 @@ -479,7 +479,7 @@ 枚の写真 その他ご不明な点がある場合は、ヘルプセンターをご覧ください。 圧縮アルゴリズム -CPU のテストを行うと、システムのパフォーマンスに響することがあります +CPU のテストを行うと、システムのパフォーマンスに影響することがあります 新しい APN を追加するには、APN を削除してください Chromebook コミュニティ IPv4 diff -Nru chromium-119.0.6045.105/components/autofill/content/renderer/form_autofill_util.cc chromium-119.0.6045.159/components/autofill/content/renderer/form_autofill_util.cc --- chromium-119.0.6045.105/components/autofill/content/renderer/form_autofill_util.cc 2023-11-01 18:10:19.000000000 +0000 +++ chromium-119.0.6045.159/components/autofill/content/renderer/form_autofill_util.cc 2023-11-14 22:56:33.000000000 +0000 @@ -1108,15 +1108,15 @@ return true; } - if (element == trigger_element) { - return false; - } - // Skip if there is no value to fill. if (field.value.empty() || !field.is_autofilled) { return true; } + if (element == trigger_element) { + return false; + } + // Skip filling previously autofilled fields unless autofill is instructed to // override it. if (element.IsAutofilled() && !field.force_override) { diff -Nru chromium-119.0.6045.105/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb chromium-119.0.6045.159/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb --- chromium-119.0.6045.105/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb 2023-11-01 18:10:20.000000000 +0000 +++ chromium-119.0.6045.159/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb 2023-11-14 22:56:33.000000000 +0000 @@ -266,7 +266,7 @@ Bloqueado Ubicación La cámara está desactivada en la configuración de Android -Se permiten cookies de terceros +Se permiten las cookies de terceros Esta acción borra las cookies y otros datos de sitios para Esta acción borrará todos los datos y cookies almacenados por o su app que aparece en la pantalla principal. En el modo Incógnito, se bloquean las cookies de terceros diff -Nru chromium-119.0.6045.105/components/browser_ui/strings/android/translations/browser_ui_strings_fa.xtb chromium-119.0.6045.159/components/browser_ui/strings/android/translations/browser_ui_strings_fa.xtb --- chromium-119.0.6045.105/components/browser_ui/strings/android/translations/browser_ui_strings_fa.xtb 2023-11-01 18:10:20.000000000 +0000 +++ chromium-119.0.6045.159/components/browser_ui/strings/android/translations/browser_ui_strings_fa.xtb 2023-11-14 22:56:33.000000000 +0000 @@ -405,7 +405,7 @@ مجاز است ازسرگیری این تنظیم توسط سرپرست شما اجباری شده است. -اتصال امن است +اتصال ایمن است انتقال به بالا حذف زیرنویس‌ها diff -Nru chromium-119.0.6045.105/components/browser_ui/strings/android/translations/browser_ui_strings_gu.xtb chromium-119.0.6045.159/components/browser_ui/strings/android/translations/browser_ui_strings_gu.xtb --- chromium-119.0.6045.105/components/browser_ui/strings/android/translations/browser_ui_strings_gu.xtb 2023-11-01 18:10:20.000000000 +0000 +++ chromium-119.0.6045.159/components/browser_ui/strings/android/translations/browser_ui_strings_gu.xtb 2023-11-14 22:56:33.000000000 +0000 @@ -188,7 +188,7 @@ NFC ડિવાઇસ પર સાઇટને માહિતી જોવાની અને બદલવાની મંજૂરી આપતા પહેલાં પૂછો (ભલામણ કરવામાં આવે છે) સ્થાન સેટિંગ ખોલો સૂચનાઓ ઉપકરણને વાઇબ્રેટ કરી શકે છે -નેવિગેશન અવરોધિત છે: +નૅવિગેશન બ્લૉક કરેલું છે: મંજૂર સાઇટ મીડિયા ચલાવી રહી છે વિસ્તૃત કરો @@ -459,7 +459,7 @@ આ ડિવાઇસ માટે NFC સેવા બંધ કરેલી છે. તેને Android સેટિંગમાં ચાલુ કરો. NFC ડિવાઇસ પર સાઇટને માહિતી જોવાથી અને બદલવાથી બ્લૉક કરો કોઈ ચોક્કસ સાઇટ માટે કુકીને બ્લૉક કરો. -નેવિગેશન બિનપહોંચ યોગ્ય છે: +નૅવિગેશન સુધી પહોંચી શકાય તેમ નથી: ભૂલી જાઓ બધી સાઇટમાંથી તમને સાઇન આઉટ કરવામાં આવશે તમારા માતાપિતા દ્વારા મેનેજ થયેલ diff -Nru chromium-119.0.6045.105/components/browser_ui/strings/android/translations/browser_ui_strings_hr.xtb chromium-119.0.6045.159/components/browser_ui/strings/android/translations/browser_ui_strings_hr.xtb --- chromium-119.0.6045.105/components/browser_ui/strings/android/translations/browser_ui_strings_hr.xtb 2023-11-01 18:10:20.000000000 +0000 +++ chromium-119.0.6045.159/components/browser_ui/strings/android/translations/browser_ui_strings_hr.xtb 2023-11-14 22:56:33.000000000 +0000 @@ -141,7 +141,7 @@ Traženje Bluetooth uređaja Web-lokacije moraju tražiti dopuštenje za pristup lokaciji (preporučeno) %% -Blokirani su kolačići treće strane +Blokirani su kolačići trećih strana {DAYS,plural, =1{Chrome će sutra ponovno blokirati kolačiće}one{# dan dok Chrome ponovo ne blokira kolačiće}few{# dana dok Chrome ponovo ne blokira kolačiće}other{# dana dok Chrome ponovo ne blokira kolačiće}} Web-lokacije na domeni Blokirajte web-lokacije da izrađuju 3D kartu vašeg okruženja ili prate položaj kamere @@ -224,7 +224,7 @@ Dopustili ste kolačiće trećih strana za ovu web-lokaciju Nije pronađen nijedan kontakt Dijeli putem -Kolačići treće strane +Kolačići trećih strana Dopusti Dopuštanje pristupa senzorima kretanja za web-lokacije (preporučeno) Ova će web-lokacija dijeliti podatke s aplikacijom izvan anonimnog načina. @@ -397,7 +397,7 @@ Sadržaj potječe s domene , a omogućuje ga Google. Više opcija u Bez zvuka -Prikaz informacija o web-mjestu +Prikaz informacija o web-lokaciji Potvrdi Značajke na mnogim web-lokacijama možda neće funkcionirati Sadržaj diff -Nru chromium-119.0.6045.105/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb chromium-119.0.6045.159/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb --- chromium-119.0.6045.105/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb 2023-11-01 18:10:20.000000000 +0000 +++ chromium-119.0.6045.159/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb 2023-11-14 22:56:33.000000000 +0000 @@ -318,7 +318,7 @@ ‏סריקת Bluetooth {PERMISSIONS_SUMMARY_BLOCKED,plural, =1{נחסמו ההרשאות ,‏ ועוד אחת ()}one{נחסמו ההרשאות ,‏ ועוד }two{נחסמו ההרשאות ,‏ ועוד }other{נחסמו ההרשאות ,‏ ועוד }} הביקור האחרון התבצע לפני ימים -הצגת חיווי בסרגל הכתובות (מונע הקפצה של חלוניות הודעה מפריעות) +הצגת התראות שקטה יותר (למניעת הקפצה של חלוניות מפריעות) לגרסה במחשב GB תוכן מוגן diff -Nru chromium-119.0.6045.105/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb chromium-119.0.6045.159/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb --- chromium-119.0.6045.105/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb 2023-11-01 18:10:20.000000000 +0000 +++ chromium-119.0.6045.159/components/browser_ui/strings/android/translations/browser_ui_strings_ja.xtb 2023-11-14 22:56:33.000000000 +0000 @@ -194,7 +194,7 @@ 展開 のすべてのサイト サイトによるこのデバイスのアクティブ状態の検出をブロックする -サードパーティの Cookie を許可 +サードパーティの Cookie を許可する 広告のカスタマイズ ポップアップとリダイレクト この操作を行うと、Cookie を含むすべてのローカルデータが削除され、 のすべての権限がリセットされます diff -Nru chromium-119.0.6045.105/components/browser_ui/strings/android/translations/browser_ui_strings_no.xtb chromium-119.0.6045.159/components/browser_ui/strings/android/translations/browser_ui_strings_no.xtb --- chromium-119.0.6045.105/components/browser_ui/strings/android/translations/browser_ui_strings_no.xtb 2023-11-01 18:10:20.000000000 +0000 +++ chromium-119.0.6045.159/components/browser_ui/strings/android/translations/browser_ui_strings_no.xtb 2023-11-14 22:56:33.000000000 +0000 @@ -114,7 +114,7 @@ Adresser Spør før nettsteder kan spille av beskyttet innhold Tillat at nettsteder lagrer og leser data i informasjonskapsler (anbefales) -Rapportér uriktig bruk +Rapporter uriktig bruk Visningsprogram for sertifikater Tilbakestill tillatelser Automatisk blokkert diff -Nru chromium-119.0.6045.105/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb chromium-119.0.6045.159/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb --- chromium-119.0.6045.105/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb 2023-11-01 18:10:20.000000000 +0000 +++ chromium-119.0.6045.159/components/browser_ui/strings/android/translations/browser_ui_strings_ru.xtb 2023-11-14 22:56:33.000000000 +0000 @@ -183,7 +183,7 @@ Вы действительно хотите удалить все локальные данные этого сайта, включая файлы cookie, и сбросить все его разрешения? Упрощенный просмотр веб-страниц Масштаб по умолчанию -Настройки сайтов +Настройки сайта Выполнено подключение к USB-устройству Запрашивать для сайтов разрешение на доступ к информации и ее изменение через NFC (рекомендуется) Открыть настройки геолокации diff -Nru chromium-119.0.6045.105/components/browser_ui/strings/android/translations/browser_ui_strings_uk.xtb chromium-119.0.6045.159/components/browser_ui/strings/android/translations/browser_ui_strings_uk.xtb --- chromium-119.0.6045.105/components/browser_ui/strings/android/translations/browser_ui_strings_uk.xtb 2023-11-01 18:10:20.000000000 +0000 +++ chromium-119.0.6045.159/components/browser_ui/strings/android/translations/browser_ui_strings_uk.xtb 2023-11-14 22:56:33.000000000 +0000 @@ -90,7 +90,7 @@ Адміністратор сімейної групи: Довідка й відгуки Назад -Файли cookie й дані із сайтів +Файли cookie й дані сайтів {COOKIE_COUNT,plural, =1{1 файл cookie заблоковано}one{# файл cookie заблоковано}few{# файли cookie заблоковано}many{# файлів cookie заблоковано}other{# файлу cookie заблоковано}} На цьому пристрої також вимкнено доступ до геоданих. Увімкніть його в налаштуваннях Android. Розгорнуто – натисніть, щоб згорнути. diff -Nru chromium-119.0.6045.105/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb chromium-119.0.6045.159/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb --- chromium-119.0.6045.105/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb 2023-11-01 18:10:20.000000000 +0000 +++ chromium-119.0.6045.159/components/browser_ui/strings/android/translations/browser_ui_strings_zh-CN.xtb 2023-11-14 22:56:33.000000000 +0000 @@ -266,7 +266,7 @@ 已禁止 位置信息 已在 Android 设置中关闭摄像头 -允许使用第三方 Cookie +已允许使用第三方 Cookie 此操作会删除 的 Cookie 和其他网站数据 此操作会清除 或其在主屏幕中安装的应用所存储的全部数据和 Cookie。 已阻止无痕模式下的第三方 Cookie diff -Nru chromium-119.0.6045.105/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/gesture/BackPressHandler.java chromium-119.0.6045.159/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/gesture/BackPressHandler.java --- chromium-119.0.6045.105/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/gesture/BackPressHandler.java 2023-11-01 18:10:20.000000000 +0000 +++ chromium-119.0.6045.159/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/gesture/BackPressHandler.java 2023-11-14 22:56:33.000000000 +0000 @@ -25,11 +25,27 @@ // When adding a new identifier, make corresponding changes in the // - tools/metrics/histograms/enums.xml: // - chrome/browser/back_press/android/.../BackPressManager.java: sMetricsMap - @IntDef({Type.TEXT_BUBBLE, Type.VR_DELEGATE, Type.XR_DELEGATE, Type.SCENE_OVERLAY, - Type.START_SURFACE, Type.SELECTION_POPUP, Type.MANUAL_FILLING, Type.TAB_MODAL_HANDLER, - Type.FULLSCREEN, Type.TAB_SWITCHER, Type.CLOSE_WATCHER, Type.FIND_TOOLBAR, - Type.LOCATION_BAR, Type.TAB_HISTORY, Type.TAB_RETURN_TO_CHROME_START_SURFACE, - Type.BOTTOM_SHEET, Type.SHOW_READING_LIST, Type.MINIMIZE_APP_AND_CLOSE_TAB}) + @IntDef({ + Type.TEXT_BUBBLE, + Type.VR_DELEGATE, + Type.XR_DELEGATE, + Type.SCENE_OVERLAY, + Type.START_SURFACE, + Type.SELECTION_POPUP, + Type.MANUAL_FILLING, + Type.TAB_MODAL_HANDLER, + Type.FULLSCREEN, + Type.TAB_SWITCHER, + Type.CLOSE_WATCHER, + Type.FIND_TOOLBAR, + Type.LOCATION_BAR, + Type.TAB_HISTORY, + Type.TAB_RETURN_TO_CHROME_START_SURFACE, + Type.BOTTOM_SHEET, + Type.PAGE_INSIGHTS_BOTTOM_SHEET, + Type.SHOW_READING_LIST, + Type.MINIMIZE_APP_AND_CLOSE_TAB + }) @Retention(RetentionPolicy.SOURCE) @interface Type { int TEXT_BUBBLE = 0; @@ -37,20 +53,23 @@ int XR_DELEGATE = 2; int SCENE_OVERLAY = 3; int BOTTOM_SHEET = 4; - int START_SURFACE = 5; - int TAB_SWITCHER = 6; + // TODO(b/307046796): Remove this once we have found better way to integrate with back + // handling logic. + int PAGE_INSIGHTS_BOTTOM_SHEET = 5; + int START_SURFACE = 6; + int TAB_SWITCHER = 7; // Fullscreen must be before selection popup. crbug.com/1454817. - int FULLSCREEN = 7; - int SELECTION_POPUP = 8; - int MANUAL_FILLING = 9; - int LOCATION_BAR = 10; - int TAB_MODAL_HANDLER = 11; - int CLOSE_WATCHER = 12; - int FIND_TOOLBAR = 13; - int TAB_HISTORY = 14; - int TAB_RETURN_TO_CHROME_START_SURFACE = 15; - int SHOW_READING_LIST = 16; - int MINIMIZE_APP_AND_CLOSE_TAB = 17; + int FULLSCREEN = 8; + int SELECTION_POPUP = 9; + int MANUAL_FILLING = 10; + int LOCATION_BAR = 11; + int TAB_MODAL_HANDLER = 12; + int CLOSE_WATCHER = 13; + int FIND_TOOLBAR = 14; + int TAB_HISTORY = 15; + int TAB_RETURN_TO_CHROME_START_SURFACE = 16; + int SHOW_READING_LIST = 17; + int MINIMIZE_APP_AND_CLOSE_TAB = 18; int NUM_TYPES = MINIMIZE_APP_AND_CLOSE_TAB + 1; } diff -Nru chromium-119.0.6045.105/components/browsing_topics/annotator_impl.cc chromium-119.0.6045.159/components/browsing_topics/annotator_impl.cc --- chromium-119.0.6045.105/components/browsing_topics/annotator_impl.cc 2023-11-01 18:10:20.000000000 +0000 +++ chromium-119.0.6045.159/components/browsing_topics/annotator_impl.cc 2023-11-14 22:56:33.000000000 +0000 @@ -6,6 +6,7 @@ #include "base/barrier_closure.h" #include "base/containers/contains.h" +#include "base/dcheck_is_on.h" #include "base/files/file_util.h" #include "base/ranges/algorithm.h" #include "base/strings/string_number_conversions.h" @@ -162,14 +163,26 @@ AnnotatorImpl::~AnnotatorImpl() = default; void AnnotatorImpl::NotifyWhenModelAvailable(base::OnceClosure callback) { - AddOnModelUpdatedCallback(std::move(callback)); + if (GetBrowsingTopicsModelInfo().has_value()) { + std::move(callback).Run(); + return; + } + model_available_callbacks_.AddUnsafe(std::move(callback)); } absl::optional AnnotatorImpl::GetBrowsingTopicsModelInfo() const { - if (!is_valid_model_) { - return absl::nullopt; +#if DCHECK_IS_ON() + if (GetModelInfo()) { + DCHECK(GetModelInfo()->GetModelMetadata()); + absl::optional + model_metadata = optimization_guide::ParsedAnyMetadata< + optimization_guide::proto::PageTopicsModelMetadata>( + *GetModelInfo()->GetModelMetadata()); + DCHECK(model_metadata); + DCHECK(IsModelTaxonomyVersionSupported(model_metadata->taxonomy_version())); } +#endif // DCHECK_IS_ON() return GetModelInfo(); } @@ -451,7 +464,6 @@ // First invoke parent to update internal status. optimization_guide::BertModelHandler::OnModelUpdated(optimization_target, model_info); - is_valid_model_ = false; if (optimization_target != optimization_guide::proto::OPTIMIZATION_TARGET_PAGE_TOPICS_V2) { @@ -466,21 +478,23 @@ model_metadata = optimization_guide::ParsedAnyMetadata< optimization_guide::proto::PageTopicsModelMetadata>( *model_info->GetModelMetadata()); + if (!model_metadata) { + return; + } - if (!model_metadata || - !IsModelTaxonomyVersionSupported(model_metadata->taxonomy_version())) { + if (!IsModelTaxonomyVersionSupported(model_metadata->taxonomy_version())) { + // Also clear the model in the underlying model executor code so that it + // cannot be accidentally called on the wrong taxonomy version. + optimization_guide::BertModelHandler::OnModelUpdated( + optimization_guide::proto::OPTIMIZATION_TARGET_PAGE_TOPICS_V2, + absl::nullopt); return; } + version_ = model_metadata->version(); // New model, new override list. - is_valid_model_ = true; override_list_file_path_ = absl::nullopt; override_list_ = absl::nullopt; - - if (model_metadata) { - version_ = model_metadata->version(); - } - for (const base::FilePath& path : model_info->GetAdditionalFiles()) { DCHECK(path.IsAbsolute()); if (path.BaseName() == base::FilePath(kOverrideListBasePath)) { @@ -488,6 +502,13 @@ break; } } + + // Run any callbacks that were waiting for an updated model. + // + // This should always be the last statement in this method, after all internal + // state has been updated because these callbacks may trigger an immediate + // annotation request. + model_available_callbacks_.Notify(); } } // namespace browsing_topics diff -Nru chromium-119.0.6045.105/components/browsing_topics/annotator_impl.h chromium-119.0.6045.159/components/browsing_topics/annotator_impl.h --- chromium-119.0.6045.105/components/browsing_topics/annotator_impl.h 2023-11-01 18:10:20.000000000 +0000 +++ chromium-119.0.6045.159/components/browsing_topics/annotator_impl.h 2023-11-14 22:56:33.000000000 +0000 @@ -9,6 +9,7 @@ #include #include +#include "base/callback_list.h" #include "base/files/file_path.h" #include "base/functional/callback.h" #include "base/memory/weak_ptr.h" @@ -141,9 +142,9 @@ // memory. size_t in_progess_batches_ = 0; - // Indicates whether the model received was valid. Model will be invalid when - // metadata versions are unsupported. - bool is_valid_model_ = false; + // Callbacks that are run when the model is updated with the correct taxonomy + // version. + base::OnceClosureList model_available_callbacks_; SEQUENCE_CHECKER(sequence_checker_); diff -Nru chromium-119.0.6045.105/components/browsing_topics/annotator_impl_unittest.cc chromium-119.0.6045.159/components/browsing_topics/annotator_impl_unittest.cc --- chromium-119.0.6045.105/components/browsing_topics/annotator_impl_unittest.cc 2023-11-01 18:10:20.000000000 +0000 +++ chromium-119.0.6045.159/components/browsing_topics/annotator_impl_unittest.cc 2023-11-14 22:56:33.000000000 +0000 @@ -460,56 +460,6 @@ } TEST_F(BrowsingTopicsAnnotatorImplTest, - DifferentTaxonomyVersions_ModelUpdateSkipped) { - scoped_feature_list_.Reset(); - scoped_feature_list_.InitWithFeaturesAndParameters( - /*enabled_features=*/ - {{blink::features::kBrowsingTopicsParameters, - {{"taxonomy_version", "2"}}}}, - /*disabled_features=*/{ - optimization_guide::features::kPreventLongRunningPredictionModels}); - - optimization_guide::proto::PageTopicsModelMetadata model_metadata; - model_metadata.set_taxonomy_version(1); - - optimization_guide::proto::Any any_metadata; - any_metadata.set_type_url( - "type.googleapis.com/com.foo.PageTopicsModelMetadata"); - model_metadata.SerializeToString(any_metadata.mutable_value()); - - SendModelToAnnotatorSkipWaiting(any_metadata); - - absl::optional model_info = - annotator()->GetBrowsingTopicsModelInfo(); - EXPECT_FALSE(model_info); -} - -TEST_F(BrowsingTopicsAnnotatorImplTest, - TaxonomyConfiguredVersion1ServerVersion1_ModelUpdateSkipped) { - scoped_feature_list_.Reset(); - scoped_feature_list_.InitWithFeaturesAndParameters( - /*enabled_features=*/ - {{blink::features::kBrowsingTopicsParameters, - {{"taxonomy_version", "1"}}}}, - /*disabled_features=*/{ - optimization_guide::features::kPreventLongRunningPredictionModels}); - - optimization_guide::proto::PageTopicsModelMetadata model_metadata; - model_metadata.set_taxonomy_version(1); - - optimization_guide::proto::Any any_metadata; - any_metadata.set_type_url( - "type.googleapis.com/com.foo.PageTopicsModelMetadata"); - model_metadata.SerializeToString(any_metadata.mutable_value()); - - SendModelToAnnotatorSkipWaiting(any_metadata); - - absl::optional model_info = - annotator()->GetBrowsingTopicsModelInfo(); - EXPECT_FALSE(model_info); -} - -TEST_F(BrowsingTopicsAnnotatorImplTest, TaxonomyConfiguredVersion1ServerVersionEmpty_ModelUpdateSuccess) { scoped_feature_list_.Reset(); scoped_feature_list_.InitWithFeaturesAndParameters( @@ -533,30 +483,6 @@ EXPECT_TRUE(model_info); } -TEST_F(BrowsingTopicsAnnotatorImplTest, - TaxonomyConfiguredVersion2ServerVersionEmpty_ModelUpdateSkipped) { - scoped_feature_list_.Reset(); - scoped_feature_list_.InitWithFeaturesAndParameters( - /*enabled_features=*/ - {{blink::features::kBrowsingTopicsParameters, - {{"taxonomy_version", "2"}}}}, - /*disabled_features=*/{ - optimization_guide::features::kPreventLongRunningPredictionModels}); - - optimization_guide::proto::PageTopicsModelMetadata model_metadata; - - optimization_guide::proto::Any any_metadata; - any_metadata.set_type_url( - "type.googleapis.com/com.foo.PageTopicsModelMetadata"); - model_metadata.SerializeToString(any_metadata.mutable_value()); - - SendModelToAnnotatorSkipWaiting(any_metadata); - - absl::optional model_info = - annotator()->GetBrowsingTopicsModelInfo(); - EXPECT_FALSE(model_info); -} - class BrowsingTopicsAnnotatorOverrideListTest : public BrowsingTopicsAnnotatorImplTest { public: diff -Nru chromium-119.0.6045.105/components/browsing_topics/browsing_topics_calculator_unittest.cc chromium-119.0.6045.159/components/browsing_topics/browsing_topics_calculator_unittest.cc --- chromium-119.0.6045.105/components/browsing_topics/browsing_topics_calculator_unittest.cc 2023-11-01 18:10:20.000000000 +0000 +++ chromium-119.0.6045.159/components/browsing_topics/browsing_topics_calculator_unittest.cc 2023-11-14 22:56:33.000000000 +0000 @@ -286,6 +286,49 @@ /*expected_bucket_count=*/2); } +// Regression test for crbug/1495959. +TEST_F(BrowsingTopicsCalculatorTest, ModelAvailableAfterDelay) { + test_annotator_.SetModelAvailable(false); + + base::Time begin_time = base::Time::Now(); + + AddHistoryEntries({kHost1, kHost2, kHost3, kHost4, kHost5, kHost6}, + begin_time); + + task_environment_.AdvanceClock(base::Seconds(1)); + + // This PostTask will run when the |CalculateTopics| run loop starts and will + // signal to the calculator that the model is ready, triggering it to start. + task_environment_.GetMainThreadTaskRunner()->PostTask( + FROM_HERE, + base::BindOnce( + [](TestAnnotator* annotator) { + annotator->UseModelInfo(*optimization_guide::TestModelInfoBuilder() + .SetVersion(1) + .Build()); + annotator->UseAnnotations({ + {kHost1, {1, 2, 3, 4, 5, 6}}, + {kHost2, {2, 3, 4, 5, 6}}, + {kHost3, {3, 4, 5, 6}}, + {kHost4, {4, 5, 6}}, + {kHost5, {5, 6}}, + {kHost6, {6}}, + }); + annotator->SetModelAvailable(true); + }, + &test_annotator_)); + + EpochTopics result = CalculateTopics(); + ExpectResultTopicsEqual(result.top_topics_and_observing_domains(), + {{Topic(6), {}}, + {Topic(5), {}}, + {Topic(4), {}}, + {Topic(3), {}}, + {Topic(2), {}}}); + + EXPECT_EQ(result.padded_top_topics_start_index(), 5u); +} + TEST_F(BrowsingTopicsCalculatorTest, TopTopicsRankedByFrequency) { base::Time begin_time = base::Time::Now(); diff -Nru chromium-119.0.6045.105/components/browsing_topics/test_util.cc chromium-119.0.6045.159/components/browsing_topics/test_util.cc --- chromium-119.0.6045.105/components/browsing_topics/test_util.cc 2023-11-01 18:10:20.000000000 +0000 +++ chromium-119.0.6045.159/components/browsing_topics/test_util.cc 2023-11-14 22:56:33.000000000 +0000 @@ -248,6 +248,13 @@ model_info_ = model_info; } +void TestAnnotator::SetModelAvailable(bool model_available) { + model_available_ = model_available; + if (model_available_) { + model_available_callbacks_.Notify(); + } +} + void TestAnnotator::BatchAnnotate(BatchAnnotationCallback callback, const std::vector& inputs) { std::vector annotations; @@ -265,7 +272,10 @@ } void TestAnnotator::NotifyWhenModelAvailable(base::OnceClosure callback) { - // Always run the callback so that tests do not hang. + if (!model_available_) { + model_available_callbacks_.AddUnsafe(std::move(callback)); + return; + } std::move(callback).Run(); } diff -Nru chromium-119.0.6045.105/components/browsing_topics/test_util.h chromium-119.0.6045.159/components/browsing_topics/test_util.h --- chromium-119.0.6045.105/components/browsing_topics/test_util.h 2023-11-01 18:10:20.000000000 +0000 +++ chromium-119.0.6045.159/components/browsing_topics/test_util.h 2023-11-14 22:56:33.000000000 +0000 @@ -7,6 +7,7 @@ #include "base/containers/queue.h" +#include "base/callback_list.h" #include "base/memory/weak_ptr.h" #include "base/time/time.h" #include "components/browsing_topics/annotator.h" @@ -151,6 +152,10 @@ void UseModelInfo( const absl::optional& model_info); + // If setting to true when it had been false, all callbacks that have been + // passed to |NotifyWhenModelAvailable| will be ran. + void SetModelAvailable(bool is_available); + // Annotator: void BatchAnnotate(BatchAnnotationCallback callback, const std::vector& inputs) override; @@ -161,6 +166,8 @@ private: std::map> annotations_; absl::optional model_info_; + bool model_available_ = true; + base::OnceClosureList model_available_callbacks_; }; } // namespace browsing_topics diff -Nru chromium-119.0.6045.105/components/certificate_transparency/data/log_list.json chromium-119.0.6045.159/components/certificate_transparency/data/log_list.json --- chromium-119.0.6045.105/components/certificate_transparency/data/log_list.json 2023-11-01 18:10:20.000000000 +0000 +++ chromium-119.0.6045.159/components/certificate_transparency/data/log_list.json 2023-11-14 22:56:33.000000000 +0000 @@ -1,6 +1,6 @@ { - "version": "26.21", - "log_list_timestamp": "2023-10-23T12:58:30Z", + "version": "26.42", + "log_list_timestamp": "2023-11-13T12:54:40Z", "operators": [ { "name": "Google", diff -Nru chromium-119.0.6045.105/components/optimization_guide/core/hints_fetcher.cc chromium-119.0.6045.159/components/optimization_guide/core/hints_fetcher.cc --- chromium-119.0.6045.105/components/optimization_guide/core/hints_fetcher.cc 2023-11-01 18:10:21.000000000 +0000 +++ chromium-119.0.6045.159/components/optimization_guide/core/hints_fetcher.cc 2023-11-14 22:56:34.000000000 +0000 @@ -64,6 +64,8 @@ return "NewTabPage"; case proto::RequestContext::CONTEXT_PAGE_INSIGHTS_HUB: return "PageInsightsHub"; + case proto::RequestContext::CONTEXT_NON_PERSONALIZED_PAGE_INSIGHTS_HUB: + return "NonPersonalizedPageInsightsHub"; } NOTREACHED(); return std::string(); @@ -85,10 +87,12 @@ const GURL& optimization_guide_service_url, PrefService* pref_service, OptimizationGuideLogger* optimization_guide_logger) - : optimization_guide_service_url_(net::AppendOrReplaceQueryParameter( - optimization_guide_service_url, - "key", - features::GetOptimizationGuideServiceAPIKey())), + : optimization_guide_service_url_( + net::AppendOrReplaceQueryParameter(optimization_guide_service_url, + "key", + absl::nullopt)), + optimization_guide_service_api_key_( + features::GetOptimizationGuideServiceAPIKey()), pref_service_(pref_service), time_clock_(base::DefaultClock::GetInstance()), optimization_guide_logger_(optimization_guide_logger) { @@ -279,18 +283,23 @@ })"); auto resource_request = std::make_unique(); - if (!access_token.empty()) { - PopulateAuthorizationRequestHeader(resource_request.get(), access_token); - } - resource_request->url = optimization_guide_service_url_; resource_request->method = "POST"; resource_request->credentials_mode = network::mojom::CredentialsMode::kOmit; + // Fill in the appropriate authentication header based on presence of the auth + // token. + if (access_token.empty()) { + PopulateApiKeyRequestHeader(resource_request.get(), + optimization_guide_service_api_key_); + } else { + PopulateAuthorizationRequestHeader(resource_request.get(), access_token); + } active_url_loader_ = variations::CreateSimpleURLLoaderWithVariationsHeader( std::move(resource_request), - // This is always InIncognito::kNo as the OptimizationGuideKeyedService is - // not enabled on incognito sessions and is rechecked before each fetch. + // This is always InIncognito::kNo as the OptimizationGuideKeyedService + // is not enabled on incognito sessions and is rechecked before each + // fetch. variations::InIncognito::kNo, variations::SignedIn::kNo, traffic_annotation); diff -Nru chromium-119.0.6045.105/components/optimization_guide/core/hints_fetcher.h chromium-119.0.6045.159/components/optimization_guide/core/hints_fetcher.h --- chromium-119.0.6045.105/components/optimization_guide/core/hints_fetcher.h 2023-11-01 18:10:21.000000000 +0000 +++ chromium-119.0.6045.159/components/optimization_guide/core/hints_fetcher.h 2023-11-14 22:56:34.000000000 +0000 @@ -141,6 +141,10 @@ // The URL for the remote Optimization Guide Service. const GURL optimization_guide_service_url_; + // The API key used to call the remote Optimization Guide Service when no + // access token is present. + const std::string optimization_guide_service_api_key_; + // Holds the |URLLoader| for an active hints request. std::unique_ptr active_url_loader_; diff -Nru chromium-119.0.6045.105/components/optimization_guide/core/hints_fetcher_unittest.cc chromium-119.0.6045.159/components/optimization_guide/core/hints_fetcher_unittest.cc --- chromium-119.0.6045.105/components/optimization_guide/core/hints_fetcher_unittest.cc 2023-11-01 18:10:21.000000000 +0000 +++ chromium-119.0.6045.159/components/optimization_guide/core/hints_fetcher_unittest.cc 2023-11-14 22:56:34.000000000 +0000 @@ -128,8 +128,6 @@ for (const auto& pending_request : *test_url_loader_factory_.pending_requests()) { EXPECT_EQ(pending_request.request.method, "POST"); - EXPECT_TRUE(net::GetValueForKeyInQuery(pending_request.request.url, "key", - &key_value)); EXPECT_EQ(pending_request.request.request_body->elements()->size(), 1u); auto& element = pending_request.request.request_body->elements_mutable()->front(); diff -Nru chromium-119.0.6045.105/components/optimization_guide/core/hints_manager.cc chromium-119.0.6045.159/components/optimization_guide/core/hints_manager.cc --- chromium-119.0.6045.105/components/optimization_guide/core/hints_manager.cc 2023-11-01 18:10:21.000000000 +0000 +++ chromium-119.0.6045.159/components/optimization_guide/core/hints_manager.cc 2023-11-14 22:56:34.000000000 +0000 @@ -50,6 +50,7 @@ #include "components/optimization_guide/proto/hints.pb.h" #include "components/prefs/pref_service.h" #include "components/prefs/scoped_user_pref_update.h" +#include "google_apis/gaia/gaia_constants.h" #include "services/metrics/public/cpp/ukm_builders.h" #include "services/metrics/public/cpp/ukm_recorder.h" #include "services/metrics/public/cpp/ukm_source.h" @@ -309,6 +310,8 @@ return false; case proto::RequestContext::CONTEXT_PAGE_INSIGHTS_HUB: return false; + case proto::RequestContext::CONTEXT_NON_PERSONALIZED_PAGE_INSIGHTS_HUB: + return false; } NOTREACHED(); return false; @@ -332,7 +335,6 @@ GetPendingOptimizationHintsComponentVersionFromPref(pref_service)), is_off_the_record_(is_off_the_record), application_locale_(application_locale), - oauth_scopes_(features::GetOAuthScopesForPersonalizedMetadata()), pref_service_(pref_service), hint_cache_( std::make_unique(hint_store, @@ -1109,11 +1111,11 @@ urls_to_fetch.vector(), hosts_to_fetch.vector(), optimization_guide_logger_); - if (features::ShouldEnablePersonalizedMetadata(request_context) && - !oauth_scopes_.empty()) { + if (features::ShouldEnablePersonalizedMetadata(request_context)) { // Request the token before fetching the hints. RequestAccessToken( - identity_manager_, oauth_scopes_, + identity_manager_, + {GaiaConstants::kOptimizationGuideServiceGetHintsOAuth2Scope}, base::BindOnce(&HintsManager::FetchOptimizationGuideServiceBatchHints, weak_ptr_factory_.GetWeakPtr(), hosts_to_fetch, urls_to_fetch, optimization_types, request_context, diff -Nru chromium-119.0.6045.105/components/optimization_guide/core/hints_manager.h chromium-119.0.6045.159/components/optimization_guide/core/hints_manager.h --- chromium-119.0.6045.105/components/optimization_guide/core/hints_manager.h 2023-11-01 18:10:21.000000000 +0000 +++ chromium-119.0.6045.159/components/optimization_guide/core/hints_manager.h 2023-11-14 22:56:34.000000000 +0000 @@ -489,9 +489,6 @@ // The current applcation locale of Chrome. const std::string application_locale_; - // The set of OAuth scopes to use for personalized metadata. - std::set oauth_scopes_; - // A reference to the PrefService for this profile. Not owned. raw_ptr pref_service_ = nullptr; diff -Nru chromium-119.0.6045.105/components/optimization_guide/core/optimization_guide_features.cc chromium-119.0.6045.159/components/optimization_guide/core/optimization_guide_features.cc --- chromium-119.0.6045.105/components/optimization_guide/core/optimization_guide_features.cc 2023-11-01 18:10:21.000000000 +0000 +++ chromium-119.0.6045.159/components/optimization_guide/core/optimization_guide_features.cc 2023-11-14 22:56:34.000000000 +0000 @@ -596,10 +596,6 @@ return allowed_contexts.Has(request_context); } -std::set GetOAuthScopesForPersonalizedMetadata() { - return GetOauthScopesForFeature(kOptimizationGuidePersonalizedFetching); -} - bool ShouldOverrideOptimizationTargetDecisionForMetricsPurposes( proto::OptimizationTarget optimization_target) { if (optimization_target != proto::OPTIMIZATION_TARGET_PAINFUL_PAGE_LOAD) diff -Nru chromium-119.0.6045.105/components/optimization_guide/core/optimization_guide_features.h chromium-119.0.6045.159/components/optimization_guide/core/optimization_guide_features.h --- chromium-119.0.6045.105/components/optimization_guide/core/optimization_guide_features.h 2023-11-01 18:10:21.000000000 +0000 +++ chromium-119.0.6045.159/components/optimization_guide/core/optimization_guide_features.h 2023-11-14 22:56:34.000000000 +0000 @@ -213,9 +213,6 @@ // |request_context|. bool ShouldEnablePersonalizedMetadata(proto::RequestContext request_context); -// Returns the OAuth scopes to use for personalized metadata. -std::set GetOAuthScopesForPersonalizedMetadata(); - // Returns the minimum number of seconds to randomly delay before starting to // fetch for prediction models and host model features. int PredictionModelFetchRandomMinDelaySecs(); diff -Nru chromium-119.0.6045.105/components/optimization_guide/core/optimization_guide_features_unittest.cc chromium-119.0.6045.159/components/optimization_guide/core/optimization_guide_features_unittest.cc --- chromium-119.0.6045.105/components/optimization_guide/core/optimization_guide_features_unittest.cc 2023-11-01 18:10:21.000000000 +0000 +++ chromium-119.0.6045.159/components/optimization_guide/core/optimization_guide_features_unittest.cc 2023-11-14 22:56:34.000000000 +0000 @@ -181,47 +181,14 @@ EXPECT_FALSE(features::ShouldPersistSalientImageMetadata("badlocale", "US")); } -TEST(OptimizationGuideFeaturesTest, - OptimizationGuidePersonalizedFetchingScopes) { - { - EXPECT_THAT( - features::GetOAuthScopesForPersonalizedMetadata(), - ::testing::UnorderedElementsAre(GaiaConstants::kGoogleUserInfoProfile)); - } - { - base::test::ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitAndEnableFeatureWithParameters( - features::kOptimizationGuidePersonalizedFetching, {}); - EXPECT_THAT( - features::GetOAuthScopesForPersonalizedMetadata(), - ::testing::UnorderedElementsAre(GaiaConstants::kGoogleUserInfoProfile)); - } - { - base::test::ScopedFeatureList scoped_feature_list; - scoped_feature_list.InitAndEnableFeatureWithParameters( - features::kOptimizationGuidePersonalizedFetching, - { - {"oauth_scopes", ""}, - }); - EXPECT_THAT( - features::GetOAuthScopesForPersonalizedMetadata(), - ::testing::UnorderedElementsAre(GaiaConstants::kGoogleUserInfoProfile)); - } -} - TEST(OptimizationGuideFeaturesTest, OptimizationGuidePersonalizedFetching) { base::test::ScopedFeatureList scoped_feature_list; scoped_feature_list.InitAndEnableFeatureWithParameters( features::kOptimizationGuidePersonalizedFetching, { {"allowed_contexts", "CONTEXT_PAGE_NAVIGATION,CONTEXT_BOOKMARKS"}, - {"oauth_scopes", "scope,scope2"}, }); - // Check scopes. - EXPECT_THAT(features::GetOAuthScopesForPersonalizedMetadata(), - ::testing::UnorderedElementsAre("scope", "scope2")); - // Check contexts. EXPECT_FALSE(features::ShouldEnablePersonalizedMetadata( optimization_guide::proto::CONTEXT_UNSPECIFIED)); diff -Nru chromium-119.0.6045.105/components/optimization_guide/core/optimization_guide_util.cc chromium-119.0.6045.159/components/optimization_guide/core/optimization_guide_util.cc --- chromium-119.0.6045.105/components/optimization_guide/core/optimization_guide_util.cc 2023-11-01 18:10:21.000000000 +0000 +++ chromium-119.0.6045.159/components/optimization_guide/core/optimization_guide_util.cc 2023-11-14 22:56:34.000000000 +0000 @@ -21,6 +21,7 @@ namespace { constexpr char kAuthHeaderBearer[] = "Bearer "; +constexpr char kApiKeyHeader[] = "X-Goog-Api-Key"; optimization_guide::proto::Platform GetPlatform() { #if BUILDFLAG(IS_WIN) @@ -115,10 +116,16 @@ void PopulateAuthorizationRequestHeader( network::ResourceRequest* resource_request, std::string_view access_token) { - DCHECK(!access_token.empty()); + CHECK(!access_token.empty()); resource_request->headers.SetHeader( net::HttpRequestHeaders::kAuthorization, base::StrCat({kAuthHeaderBearer, access_token})); } +void PopulateApiKeyRequestHeader(network::ResourceRequest* resource_request, + std::string_view api_key) { + CHECK(!api_key.empty()); + resource_request->headers.SetHeader(kApiKeyHeader, api_key); +} + } // namespace optimization_guide diff -Nru chromium-119.0.6045.105/components/optimization_guide/core/optimization_guide_util.h chromium-119.0.6045.159/components/optimization_guide/core/optimization_guide_util.h --- chromium-119.0.6045.105/components/optimization_guide/core/optimization_guide_util.h 2023-11-01 18:10:21.000000000 +0000 +++ chromium-119.0.6045.159/components/optimization_guide/core/optimization_guide_util.h 2023-11-14 22:56:34.000000000 +0000 @@ -91,6 +91,11 @@ network::ResourceRequest* resource_request, std::string_view access_token); +// Populates the api key header for the `resource_request` in the right +// format with the `api_key`. +void PopulateApiKeyRequestHeader(network::ResourceRequest* resource_request, + std::string_view api_key); + } // namespace optimization_guide #endif // COMPONENTS_OPTIMIZATION_GUIDE_CORE_OPTIMIZATION_GUIDE_UTIL_H_ diff -Nru chromium-119.0.6045.105/components/optimization_guide/proto/common_types.proto chromium-119.0.6045.159/components/optimization_guide/proto/common_types.proto --- chromium-119.0.6045.105/components/optimization_guide/proto/common_types.proto 2023-11-01 18:10:21.000000000 +0000 +++ chromium-119.0.6045.159/components/optimization_guide/proto/common_types.proto 2023-11-14 22:56:34.000000000 +0000 @@ -29,8 +29,12 @@ CONTEXT_JOURNEYS = 8; // Requesting metadata for a user when visiting the new tab page. CONTEXT_NEW_TAB_PAGE = 9; - // Requesting metadata for a user when visiting the page insights hub. + // Requesting metadata for a user when visiting the Page Insights feature; + // Gaia can be attached to request. CONTEXT_PAGE_INSIGHTS_HUB = 11; + // Requesting metadata for a user when visiting the Page Insights feature; + // Gaia cannot be attached to request. + CONTEXT_NON_PERSONALIZED_PAGE_INSIGHTS_HUB = 12; } message FieldTrial { diff -Nru chromium-119.0.6045.105/components/password_manager/core/browser/features/password_features.cc chromium-119.0.6045.159/components/password_manager/core/browser/features/password_features.cc --- chromium-119.0.6045.105/components/password_manager/core/browser/features/password_features.cc 2023-11-01 18:10:21.000000000 +0000 +++ chromium-119.0.6045.159/components/password_manager/core/browser/features/password_features.cc 2023-11-14 22:56:34.000000000 +0000 @@ -76,7 +76,7 @@ // Enables migration to OSCrypt with a single query to the keychain. BASE_FEATURE(kOneReadLoginDatabaseMigration, "OneReadLoginDatabaseMigration", - base::FEATURE_ENABLED_BY_DEFAULT); + base::FEATURE_DISABLED_BY_DEFAULT); #endif // BUILDFLAG(IS_IOS) // Enables the notification UI that is displayed to the user when visiting a diff -Nru chromium-119.0.6045.105/components/performance_manager/embedder/graph_features.h chromium-119.0.6045.159/components/performance_manager/embedder/graph_features.h --- chromium-119.0.6045.105/components/performance_manager/embedder/graph_features.h 2023-11-01 18:10:21.000000000 +0000 +++ chromium-119.0.6045.159/components/performance_manager/embedder/graph_features.h 2023-11-14 22:56:35.000000000 +0000 @@ -155,7 +155,6 @@ EnableNodeImplDescribers(); EnablePageLoadTrackerDecorator(); EnableProcessHostedContentTypesAggregator(); - EnableResourceAttributionRegistries(); EnableSiteDataRecorder(); EnableTabPropertiesDecorator(); EnableV8ContextTracker(); diff -Nru chromium-119.0.6045.105/components/performance_manager/graph_features_unittest.cc chromium-119.0.6045.159/components/performance_manager/graph_features_unittest.cc --- chromium-119.0.6045.105/components/performance_manager/graph_features_unittest.cc 2023-11-01 18:10:21.000000000 +0000 +++ chromium-119.0.6045.159/components/performance_manager/graph_features_unittest.cc 2023-11-14 22:56:35.000000000 +0000 @@ -60,7 +60,7 @@ execution_context::ExecutionContextRegistry::GetFromGraph(&graph)); EXPECT_FALSE(v8_memory::V8ContextTracker::GetFromGraph(&graph)); - size_t graph_owned_count = 15; + size_t graph_owned_count = 14; #if !BUILDFLAG(IS_ANDROID) // The SiteDataRecorder is not available on Android. graph_owned_count++; @@ -70,7 +70,7 @@ features.EnableDefault(); features.ConfigureGraph(&graph); EXPECT_EQ(graph_owned_count, graph.GraphOwnedCountForTesting()); - EXPECT_EQ(9u, graph.GraphRegisteredCountForTesting()); + EXPECT_EQ(5u, graph.GraphRegisteredCountForTesting()); EXPECT_EQ(7u, graph.NodeDataDescriberCountForTesting()); // Ensure the GraphRegistered objects can be queried directly. EXPECT_TRUE( diff -Nru chromium-119.0.6045.105/components/policy/resources/policy_templates_es-419.xtb chromium-119.0.6045.159/components/policy/resources/policy_templates_es-419.xtb --- chromium-119.0.6045.105/components/policy/resources/policy_templates_es-419.xtb 2023-11-01 18:10:22.000000000 +0000 +++ chromium-119.0.6045.159/components/policy/resources/policy_templates_es-419.xtb 2023-11-14 22:56:35.000000000 +0000 @@ -3463,7 +3463,7 @@ Cada entrada de la lista contiene un diccionario que debe incluir el ID de extensión en el campo "extension-id" y su URL de actualización en el campo "update-url". Inhabilitar First-Party Sets para todos los usuarios afectados Cargar siempre el navegador -Bloquear el acceso de Asistente de Google al contexto de la pantalla durante las interacciones +Bloquear el acceso de Asistente de Google al contexto en pantalla durante las interacciones Habilita la función de accesibilidad para destacar el cursor del teclado en la pantalla de acceso. Esta función destaca el objeto que se selecciona con el cursor del teclado. @@ -4552,7 +4552,7 @@ Si el tamaño de la página no está disponible en la impresora que elija el usuario, se ignorará esta política. Bloquear ventanas emergentes en estos sitios Usar cookies esenciales y no esenciales en la búsqueda -Permitir que Asistente de Google acceda al contexto de la pantalla +Permitir que Asistente de Google acceda al contexto en pantalla Habilita la función de cancelación del eco de audio (AEC) del sistema. El AEC del sistema es un cancelador de eco acústico, es decir, un módulo de procesamiento de audio que quita la reproducción de audio del sistema (echo) de la señal del micrófono. Esta política es temporal y se quitará ni bien se inicie la cancelación del eco de audio del sistema. diff -Nru chromium-119.0.6045.105/components/policy/resources/policy_templates_fr.xtb chromium-119.0.6045.159/components/policy/resources/policy_templates_fr.xtb --- chromium-119.0.6045.105/components/policy/resources/policy_templates_fr.xtb 2023-11-01 18:10:22.000000000 +0000 +++ chromium-119.0.6045.159/components/policy/resources/policy_templates_fr.xtb 2023-11-14 22:56:35.000000000 +0000 @@ -636,7 +636,7 @@ Ne pas utiliser comme algorithme de chiffrement du stockage de l'utilisateur si celui-ci est compatible Règle de configuration du connecteur Chrome Enterprise OnFileDownloaded Utiliser par défaut -Ne pas autoriser le mode sans interface graphique +Ne pas autoriser le mode headless Paramètres du navigateur Fonctionnalité ThrottleDisplayNoneAndVisibilityHiddenCrossOriginIframes disponible Désactiver les rapports sur l'état du matériel de l'appareil @@ -1411,7 +1411,7 @@ Pour en savoir plus sur la navigation sécurisée, rendez-vous sur https://support.google.com/chrome?p=safe_browsing_preferences. Toujours désactiver l'écran de confidentialité Appliquer au moins le mode restreint modéré sur YouTube -Contrôler l'utilisation du mode sans interface graphique +Contrôler l'utilisation du mode headless L'utilisateur décide d'activer ou non le service de sauvegarde et de restauration Ne pas signaler les compteurs d'exécution de l'appareil Ordonne à d'activer ou de désactiver les outils de la console de gestion des machines virtuelles. @@ -3745,7 +3745,7 @@ À partir de la version 73 de , vous pouvez bloquer les URL javascript://*. Toutefois, cela ne concerne que le code JavaScript saisi dans la barre d'adresse ou, par exemple, les favoris intelligents. -À compter de la version 92 de , cette règle est aussi prise en charge en mode sans interface graphique. +À compter de la version 92 de , cette règle est aussi prise en charge en mode headless. Remarque : Bloquer des URL internes chrome://* et chrome-untrusted://* peut entraîner des erreurs inattendues ou être contourné parfois. Au lieu de bloquer certaines URL internes, vérifiez si des règles plus spécifiques sont disponibles. Par exemple : @@ -4983,7 +4983,7 @@ Si cette règle n'est pas configurée, aucune exception à n'est autorisée. -À compter de la version 92 de , cette règle est aussi prise en charge en mode sans interface graphique. +À compter de la version 92 de , cette règle est aussi prise en charge en mode headless. Permet d'ignorer le mode d'impression d'images de fond par défaut. Paramètres de ligne de commande pour le navigateur secondaire. Afficher le bouton Accueil sur la barre d'outils @@ -6325,7 +6325,7 @@ REMARQUE : Cette règle avait une valeur par défaut ("True") incorrectement documentée dans M117. L'événement "unload" n'a pas été modifié et ne changera pas dans M117. Cette règle n'a donc aucune incidence dans cette version. -Autoriser le mode sans interface graphique +Autoriser le mode headless Permet aux utilisateurs de sélectionner l'un des modes de saisie que vous spécifiez pour les sessions . Si cette règle n'est pas configurée ou qu'aucun mode de saisie n'est indiqué dans la liste, les utilisateurs peuvent en choisir un parmi tous ceux compatibles. @@ -8392,7 +8392,7 @@ Dans ce cas, peut être configuré séparément pour verrouiller ou non l'écran avant l'arrêt provisoire. Configure le gestionnaire de mot de passe. -Si cette règle est définie sur ou si elle n'est pas configurée, le mode sans interface graphique est autorisé. Si elle est définie sur , ce mode est refusé. +Si cette règle est définie sur ou si elle n'est pas configurée, le mode headless est autorisé. Si elle est définie sur , ce mode est refusé. Cette règle permet aux administrateurs de configurer une liste d'identifiants d'extension requis pour la navigation privée. L'utilisateur doit autoriser explicitement l'exécution en mode navigation privée de toutes les extensions de cette liste. Sinon, la navigation privée n'est pas autorisée. diff -Nru chromium-119.0.6045.105/components/policy/resources/policy_templates_ru.xtb chromium-119.0.6045.159/components/policy/resources/policy_templates_ru.xtb --- chromium-119.0.6045.105/components/policy/resources/policy_templates_ru.xtb 2023-11-01 18:10:22.000000000 +0000 +++ chromium-119.0.6045.159/components/policy/resources/policy_templates_ru.xtb 2023-11-14 22:56:35.000000000 +0000 @@ -3496,7 +3496,7 @@ Разрешить функцию "" для и сервиса "" Включить пассивную аутентификацию только для обычных сеансов Правило ограничивает время поиска обновлений -Сообщать информацию о связанных с технологией XDR событиях безопасности +Передавать информацию о событиях XDR Скрывать заголовки и колонтитулы в окне предварительного просмотра печати Разрешить пользователям сбор данных отслеживания производительности на уровне системы Использовать правило SiteList из Internet Explorer для расширения "Поддержка альтернативного браузера" diff -Nru chromium-119.0.6045.105/components/policy/resources/policy_templates_vi.xtb chromium-119.0.6045.159/components/policy/resources/policy_templates_vi.xtb --- chromium-119.0.6045.105/components/policy/resources/policy_templates_vi.xtb 2023-11-01 18:10:22.000000000 +0000 +++ chromium-119.0.6045.159/components/policy/resources/policy_templates_vi.xtb 2023-11-14 22:56:35.000000000 +0000 @@ -1145,7 +1145,7 @@ Chặn các điểm tiện ích cũ trong Quá trình chạy trình duyệt Nếu bạn đặt chính sách này, máy chủ truy cập từ xa sẽ dùng một chứng chỉ máy khách có tên thường gọi (CN) của nhà phát hành cụ thể để xác thực theo . Để dùng chứng chỉ máy khách có sẵn, hãy đặt chính sách này thành . Tính năng này sẽ bị tắt nếu bạn để trống hoặc không đặt chính sách này. Tự động khởi chạy ứng dụng -Hiển thị màn hình cài đặt kích thước trên màn hình trong khi đăng nhập +Hiện màn hình cài đặt kích thước hiển thị trong quá trình đăng nhập Có thể kiểm soát được Tính năng Giảm thiểu tác nhân người dùng qua Field-Trials và Origin-Trials. Bật tính năng báo cáo phiên kiosk của thiết bị Cung cấp cấu hình của các máy chủ máy in hiện có. diff -Nru chromium-119.0.6045.105/components/search_engines/template_url_prepopulate_data.cc chromium-119.0.6045.159/components/search_engines/template_url_prepopulate_data.cc --- chromium-119.0.6045.105/components/search_engines/template_url_prepopulate_data.cc 2023-11-01 18:10:23.000000000 +0000 +++ chromium-119.0.6045.159/components/search_engines/template_url_prepopulate_data.cc 2023-11-14 22:56:35.000000000 +0000 @@ -1816,6 +1816,47 @@ &kAllEngines[0], &kAllEngines[0] + kAllEnginesLength); } +std::unique_ptr GetPrepopulatedEngineFromFullList( + PrefService* prefs, + int prepopulated_id) { + // TODO(crbug.com/1500526): Refactor to better share code with + // `GetPrepopulatedEngine()`. + + // If there is a set of search engines in the preferences file, we look for + // the ID there first. + for (std::unique_ptr& data : + GetOverriddenTemplateURLData(prefs)) { + if (data->prepopulate_id == prepopulated_id) { + return std::move(data); + } + } + + // We look in the profile country's prepopulated set first. This is intended + // to help using the right entry for the case where we have multiple ones in + // the full list that share a same prepopulated id. + const int country = search_engines::GetSearchEngineChoiceCountryId(prefs); + for (const EngineAndTier& engine_and_tier : + GetPrepopulationSetFromCountryID(country)) { + if (engine_and_tier.search_engine->id == prepopulated_id) { + return TemplateURLDataFromPrepopulatedEngine( + *engine_and_tier.search_engine); + } + } + + // Fallback: just grab the first matching entry from the complete list. In + // case of IDs shared across multiple entries, we might be returning the + // wrong one for the profile country. We can look into better heuristics in + // future work. + for (size_t i = 0; i < kAllEnginesLength; ++i) { + const PrepopulatedEngine* engine = kAllEngines[i]; + if (engine->id == prepopulated_id) { + return TemplateURLDataFromPrepopulatedEngine(*engine); + } + } + + return nullptr; +} + void ClearPrepopulatedEnginesInPrefs(PrefService* prefs) { if (!prefs) return; diff -Nru chromium-119.0.6045.105/components/search_engines/template_url_prepopulate_data.h chromium-119.0.6045.159/components/search_engines/template_url_prepopulate_data.h --- chromium-119.0.6045.105/components/search_engines/template_url_prepopulate_data.h 2023-11-01 18:10:23.000000000 +0000 +++ chromium-119.0.6045.159/components/search_engines/template_url_prepopulate_data.h 2023-11-14 22:56:35.000000000 +0000 @@ -46,10 +46,19 @@ bool include_current_default = false, TemplateURLService* template_url_service = nullptr); -// Returns the prepopulated search engine with the given |prepopulated_id|. +// Returns the prepopulated search engine with the given |prepopulated_id| +// from the profile country's known prepopulated search engines, or `nullptr` +// if it's not known there. std::unique_ptr GetPrepopulatedEngine(PrefService* prefs, int prepopulated_id); +// Returns the prepopulated search engine with the given |prepopulated_id| +// from the full list of known prepopulated search engines, or `nullptr` if +// it's not known there. +std::unique_ptr GetPrepopulatedEngineFromFullList( + PrefService* prefs, + int prepopulated_id); + #if BUILDFLAG(IS_ANDROID) // Returns the prepopulated URLs associated with |locale|. |locale| should be a // two-character uppercase ISO 3166-1 country code. diff -Nru chromium-119.0.6045.105/components/search_engines/template_url_prepopulate_data_unittest.cc chromium-119.0.6045.159/components/search_engines/template_url_prepopulate_data_unittest.cc --- chromium-119.0.6045.105/components/search_engines/template_url_prepopulate_data_unittest.cc 2023-11-01 18:10:23.000000000 +0000 +++ chromium-119.0.6045.159/components/search_engines/template_url_prepopulate_data_unittest.cc 2023-11-14 22:56:35.000000000 +0000 @@ -20,6 +20,7 @@ #include "components/search_engines/prepopulated_engines.h" #include "components/search_engines/search_engine_choice_utils.h" #include "components/search_engines/search_engines_pref_names.h" +#include "components/search_engines/search_engines_test_util.h" #include "components/search_engines/search_terms_data.h" #include "components/search_engines/template_url.h" #include "components/search_engines/template_url_data_util.h" @@ -560,3 +561,28 @@ EXPECT_LT(index, urls.size()); EXPECT_EQ(urls[index]->prepopulate_id, kGoogleId); } + +// Regression test for https://crbug.com/1500526. +TEST_F(TemplateURLPrepopulateDataTest, GetPrepopulatedEngineFromFullList) { + // Ensure that we use the default set of search engines, which is google, + // bing, yahoo. + prefs_.SetInteger(country_codes::kCountryIDAtInstall, + country_codes::kCountryIDUnknown); + ASSERT_EQ(TemplateURLPrepopulateData::GetPrepopulatedEngines(&prefs_, nullptr) + .size(), + 3u); + + // `GetPrepopulatedEngine()` only looks in the profile country's prepopulated + // list. + EXPECT_FALSE(TemplateURLPrepopulateData::GetPrepopulatedEngine( + &prefs_, TemplateURLPrepopulateData::ecosia.id)); + + // Here we look in the full list. + auto found_engine = + TemplateURLPrepopulateData::GetPrepopulatedEngineFromFullList( + &prefs_, TemplateURLPrepopulateData::ecosia.id); + EXPECT_TRUE(found_engine); + auto expected_engine = + TemplateURLDataFromPrepopulatedEngine(TemplateURLPrepopulateData::ecosia); + ExpectSimilar(expected_engine.get(), found_engine.get()); +} diff -Nru chromium-119.0.6045.105/components/signin/public/identity_manager/access_token_constants.cc chromium-119.0.6045.159/components/signin/public/identity_manager/access_token_constants.cc --- chromium-119.0.6045.105/components/signin/public/identity_manager/access_token_constants.cc 2023-11-01 18:10:23.000000000 +0000 +++ chromium-119.0.6045.159/components/signin/public/identity_manager/access_token_constants.cc 2023-11-14 22:56:36.000000000 +0000 @@ -79,6 +79,9 @@ // Required by supervision features that verify parent password. GaiaConstants::kAccountsReauthOAuth2Scope, + // Required by Optimization Guide. + GaiaConstants::kOptimizationGuideServiceGetHintsOAuth2Scope, + // Required by ChromeOS only. #if BUILDFLAG(IS_CHROMEOS_ASH) GaiaConstants::kAssistantOAuth2Scope, diff -Nru chromium-119.0.6045.105/components/strings/components_strings_ar.xtb chromium-119.0.6045.159/components/strings/components_strings_ar.xtb --- chromium-119.0.6045.105/components/strings/components_strings_ar.xtb 2023-11-01 18:10:23.000000000 +0000 +++ chromium-119.0.6045.159/components/strings/components_strings_ar.xtb 2023-11-14 22:56:36.000000000 +0000 @@ -3033,7 +3033,7 @@ جارٍ المعالجة عرض الإشعارات يريد المصرف التأكد من هويتك. -علامة تبويب جديدة للتصفح المتخفي +علامة تبويب للتصفح المتخفي لقد سمحت لهذا الموقع الإلكتروني باستخدام ملفات تعريف الارتباط التابعة لجهات خارجية. يعني هذا أنّه من المفترض أن تعمل معظم ميزات الموقع الإلكتروني، ولكنّك ستحظى بمستوى حماية أقل. سجلّ الأسعار إنّ المهاجمين على الموقع الإلكتروني الذي تحاول الانتقال إليه قد يتمكّنون من خداعك لتثبيت برامج ضارة تؤثر في طريقة التصفُّح من خلال تغيير الصفحة الرئيسية مثلًا أو عرض إعلانات إضافية على المواقع الإلكترونية التي تنتقل إليها. diff -Nru chromium-119.0.6045.105/components/strings/components_strings_as.xtb chromium-119.0.6045.159/components/strings/components_strings_as.xtb --- chromium-119.0.6045.105/components/strings/components_strings_as.xtb 2023-11-01 18:10:23.000000000 +0000 +++ chromium-119.0.6045.159/components/strings/components_strings_as.xtb 2023-11-14 22:56:36.000000000 +0000 @@ -3135,7 +3135,7 @@ পাতল কমলা ৰং এই ছাইটটো অৱৰোধ কৰা হৈছে {COUNT,plural, =0{আজি পুনৰ কুকিসমূহ অৱৰোধ কৰা হব}=1{কাইলৈ পুনৰ কুকিসমূহ অৱৰোধ কৰা হব}one{# দিনত কুকিসমূহ পুনৰ অৱৰোধ কৰা হ’ব}other{# দিনত কুকিসমূহ পুনৰ অৱৰোধ কৰা হ’ব}} -আপুনি সংযোগ হৈ থকা ছাৰ্ভাৰটোৰ পৰিচয় সম্পূৰ্ণকৈ মান্য কৰিব নোৱাৰি। আপুনি কেৱল আপোনাৰ নেটৱৰ্কৰ ভিতৰত মান্য নাম এটা ব্যৱহাৰ কৰি এটা ছাৰ্ভাৰৰ সৈতে সংযোগ হৈ আছে আৰু বাহ্যিক কোনো প্ৰমাণপত্ৰৰ কৰ্তৃপক্ষই কোনো প্ৰকাৰে সেই নামটোৰ গৰাকীক মান্য কৰিব নোৱাৰে। প্ৰমাণপত্ৰ প্ৰদানকাৰী কিছুমান কৰ্তৃপক্ষই যিহেতু যিকোনো ধৰণৰ এই নামসমূহৰ বাবে প্ৰমাণপত্ৰ জাৰি কৰিব, আপুনি এটা সঠিক ৱেবছাইটৰ সৈতে সংযোগ হৈ আছে আৰু আপুনি এজন আক্ৰমণকাৰী নহয় বুলি নিশ্চিত কৰিবলৈ কোনো উপায় নাথাকে। +আপুনি সংযোগ হৈ থকা ছাৰ্ভাৰটোৰ পৰিচয় সম্পূৰ্ণকৈ মান্য কৰিব নোৱাৰি। আপুনি কেৱল আপোনাৰ নেটৱৰ্কৰ ভিতৰত মান্য নাম এটা ব্যৱহাৰ কৰি এটা ছাৰ্ভাৰৰ সৈতে সংযোগ হৈ আছে আৰু বাহ্যিক কোনো প্ৰমাণপত্ৰৰ কৰ্তৃপক্ষই কোনো প্ৰকাৰে সেই নামটোৰ গৰাকীক মান্য কৰিব নোৱাৰে। প্ৰমাণপত্ৰ প্ৰদানকাৰী কিছুমান কৰ্তৃপক্ষই যিহেতু যিকোনো ধৰণৰ এই নামসমূহৰ বাবে প্ৰমাণপত্ৰ জাৰি কৰিব, আপুনি এটা সঠিক ৱেবছাইটৰ সৈতে সংযোগ হৈ আছে আৰু আপুনি এগৰাকী আক্ৰমণকাৰী নহয় বুলি নিশ্চিত কৰিবলৈ কোনো উপায় নাথাকে। পোছাক সম্পৰ্কীয় সেৱা ( x মি.মি.) ছিংক পৰিচালনা কৰাৰ বুটাম, আপুনি Chromeৰ ছেটিঙত কি তথ্য ছিংক কৰিব সেয়া পৰিচালনা কৰিবলৈ সক্ৰিয় কৰক diff -Nru chromium-119.0.6045.105/components/strings/components_strings_ca.xtb chromium-119.0.6045.159/components/strings/components_strings_ca.xtb --- chromium-119.0.6045.105/components/strings/components_strings_ca.xtb 2023-11-01 18:10:23.000000000 +0000 +++ chromium-119.0.6045.159/components/strings/components_strings_ca.xtb 2023-11-14 22:56:36.000000000 +0000 @@ -2370,7 +2370,7 @@ Sobre xinès número 6 S'ha desat la targeta Darrera visita: ahir -Tramita la compra més ràpidament quan es desin els CVC. Suprimeix els codis de seguretat desats +Desa els CVC per tramitar les compres més ràpidament. Suprimeix els codis de seguretat desats Reinicia Emès el Groc @@ -2533,7 +2533,7 @@ Papereria Pedres precioses i joies : prem Tab i després Retorn per personalitzar les eines d'accessibilitat a la configuració de Chrome -Serveis de reproducció en continu de programes de televisió i pel·lícules +Serveis de reproducció en línia de programes de televisió i pel·lícules Viatges en família Cosmètica ètica i sostenible Retalla després de cada document @@ -3336,7 +3336,7 @@ aquesta tauleta Un camp obligatori és buit. Emplena'l abans de desar. Aquests motors de cerca es mostren en ordre aleatori. Pots canviar el motor de cerca predeterminat en qualsevol moment a la configuració. -Tramita la compra més ràpidament quan es desin els CVC +Desa els CVC per tramitar les compres més ràpidament Els llocs web que visites poden demanar a Chrome informació que els ajuda a mesurar el rendiment dels seus anuncis. Chrome permet que els llocs web recullin tipus de dades limitats, com ara l'hora del dia en què se t'ha mostrat un anunci. No publicada Embalat diff -Nru chromium-119.0.6045.105/components/strings/components_strings_de.xtb chromium-119.0.6045.159/components/strings/components_strings_de.xtb --- chromium-119.0.6045.105/components/strings/components_strings_de.xtb 2023-11-01 18:10:23.000000000 +0000 +++ chromium-119.0.6045.159/components/strings/components_strings_de.xtb 2023-11-14 22:56:36.000000000 +0000 @@ -1198,7 +1198,7 @@ möchte Texte und Bilder aus der Zwischenablage abrufen Textmarker Erweiterte Informationen ausblenden -Auf diese PDF-Datei kann nicht zugegriffen werden. Text extrahiert mit KI-Technologie von Google. +Auf diese PDF-Datei kann nicht zugegriffen werden. Text extrahiert mit Google AI. Chemie , derzeit geöffnet, Tabulatortaste und dann Eingabetaste drücken, um zum offenen Tab zu wechseln  – drücke die Tabulatortaste und dann die Eingabetaste, um alle geöffneten Inkognitofenster zu schließen @@ -4002,7 +4002,7 @@ Das Serverzertifikat ist ungültig. Autotuning Schaltfläche zum Wechseln des Tabs, Eingabetaste drücken, um zu diesem Tab zu wechseln -Auf diese PDF-Datei kann nicht zugegriffen werden. Text wird extrahiert mit KI-Technologie von Google. +Auf diese PDF-Datei kann nicht zugegriffen werden. Text wird extrahiert mit Google AI. Zahlungsmethoden und Kreditkartendaten in den Chrome-Einstellungen verwalten Du wirst bei einem Preisnachlass auf einer Website per E-Mail benachrichtigt Google Docs diff -Nru chromium-119.0.6045.105/components/strings/components_strings_eu.xtb chromium-119.0.6045.159/components/strings/components_strings_eu.xtb --- chromium-119.0.6045.105/components/strings/components_strings_eu.xtb 2023-11-01 18:10:23.000000000 +0000 +++ chromium-119.0.6045.159/components/strings/components_strings_eu.xtb 2023-11-14 22:56:36.000000000 +0000 @@ -2355,7 +2355,7 @@ 8. pilatzailea Baliteke orria dirua kobratzen saiatzea Gehitu telefono-zenbakia -Garatzaileen tresnen orria ikusten ari zara +Garatzaileentzako tresnen orria ikusten ari zara Ezin gara konektatu webgunera Gordetako pasahitzak Gorde da IBANa @@ -3666,7 +3666,7 @@ Helbideak eta beste Erakutsi garatzailearen xehetasunak Grapa bat behean, ezkerretara -Jarraipenaren aurkako babesak kudeatzeko +jarraipenaren aurkako babesak kudeatzeko Helbidea zure Google-ko kontutik () ezabatuko da Honi aplikatzen zaio: 10. pilatzailea diff -Nru chromium-119.0.6045.105/components/strings/components_strings_fa.xtb chromium-119.0.6045.159/components/strings/components_strings_fa.xtb --- chromium-119.0.6045.105/components/strings/components_strings_fa.xtb 2023-11-01 18:10:23.000000000 +0000 +++ chromium-119.0.6045.159/components/strings/components_strings_fa.xtb 2023-11-14 22:56:36.000000000 +0000 @@ -584,7 +584,7 @@ لغو پرداخت افزودن کارت امروز -اتصال امن نیست +اتصال ایمن نیست برنامه‌های کاربردی ‏«خدمات Google Play ویژه واقعیت افزوده» نصب شود؟ اجرای خودکار در دستگاه @@ -789,7 +789,7 @@ ‏شناسه Directory API: نمای وب سریع: این دستگاه و حساب توسط شرکت یا سازمان دیگری مدیریت نمی‌شود. -‏به منظور برقراری یک اتصال امن، لازم است که ساعت شما به درستی تنظیم شود. زیرا گواهینامه‌هایی که وب‌سایت‌ها برای شناسایی خودشان استفاده می‌کنند تنها برای دوره‌های زمانی خاصی معتبر هستند. از آنجا که ساعت دستگاه نادرست است، Chrome نمی‌تواند این گواهینامه‌ها را تأیید کند. +‏به منظور برقراری یک اتصال ایمن، لازم است که ساعت شما به درستی تنظیم شود. زیرا گواهینامه‌هایی که وب‌سایت‌ها برای شناسایی خودشان استفاده می‌کنند تنها برای دوره‌های زمانی خاصی معتبر هستند. از آنجا که ساعت دستگاه نادرست است، Chrome نمی‌تواند این گواهینامه‌ها را تأیید کند. این سند توسط گذرواژه محافظت می‌شود. لطفاً یک گذرواژه وارد کنید. عکاسی و هنرهای دیجیتال فیلم عاشقانه @@ -3191,7 +3191,7 @@ پاکت سی۷ مقدار اجباری -تکمیل خودکار کارت اعتباری غیر فعال است زیرا این فرم از یک اتصال امن استفاده نمی‌کند. +تکمیل خودکار کارت اعتباری غیر فعال است زیرا این فرم از یک اتصال ایمن استفاده نمی‌کند. از والدینتان بخواهید این کار را انجام دهد درحال راه‌اندازی رفع خطاهای اتصال @@ -3526,7 +3526,7 @@ ۴۰۰ × ۳۰۰ میلی‌متر انتخاب نام خط‌مشی میزبانی وب -اتصال امن است +اتصال ایمن است JIS Exec ۱۸ × ۱۴ اینچ سایت‌ها نمی‌توانند از کوکی‌هایی که شما را در وب ردیابی می‌کند استفاده کنند. ویژگی‌های برخی سایت‌ها ممکن است کار نکنند. @@ -3788,7 +3788,7 @@ ۳۰ × ۴۰ اینچ ، برای باز کردن «پنجره ناشناس» جدید و مرور کردن به‌صورت خصوصی، دکمه Tab (جهش) و سپس Enter (ورود) را فشار دهید باز کردن پیوندهای به‌جای -‏به منظور برقراری یک اتصال امن، لازم است که ساعت شما به درستی تنظیم شود. زیرا گواهینامه‌هایی که وب‌سایت‌ها برای شناسایی خودشان استفاده می‌کنند تنها برای دوره‌های زمانی خاصی معتبر هستند. از آنجایی که ساعت دستگاه نادرست است، Chromium نمی‌تواند این گواهینامه‌ها را تأیید کند. +‏به منظور برقراری یک اتصال ایمن، لازم است که ساعت شما به درستی تنظیم شود. زیرا گواهینامه‌هایی که وب‌سایت‌ها برای شناسایی خودشان استفاده می‌کنند تنها برای دوره‌های زمانی خاصی معتبر هستند. از آنجایی که ساعت دستگاه نادرست است، Chromium نمی‌تواند این گواهینامه‌ها را تأیید کند. ’s <abbr id="dnsDefinition">آدرس DNS</abbr> پیدا نشد. درحال بررسی برای تشخیص مشکل. کد شما برای است نشانک‌گذاری این برگه diff -Nru chromium-119.0.6045.105/components/strings/components_strings_hi.xtb chromium-119.0.6045.159/components/strings/components_strings_hi.xtb --- chromium-119.0.6045.105/components/strings/components_strings_hi.xtb 2023-11-01 18:10:23.000000000 +0000 +++ chromium-119.0.6045.159/components/strings/components_strings_hi.xtb 2023-11-14 22:56:36.000000000 +0000 @@ -3310,7 +3310,7 @@ Google Forms में जल्दी से नया फ़ॉर्म बनाएं भाषा के पेज का हमेशा अनुवाद करें लिंक का पता कॉपी करें -मानक +स्टैंडर्ड इस साइट पर, तंग करने वाले या गुमराह करने वाले विज्ञापन दिखते हैं. सेव किए गए पतों की टेबल खतरनाक सामग्री ब्लॉक की गई. diff -Nru chromium-119.0.6045.105/components/strings/components_strings_hr.xtb chromium-119.0.6045.159/components/strings/components_strings_hr.xtb --- chromium-119.0.6045.105/components/strings/components_strings_hr.xtb 2023-11-01 18:10:23.000000000 +0000 +++ chromium-119.0.6045.159/components/strings/components_strings_hr.xtb 2023-11-14 22:56:36.000000000 +0000 @@ -1955,7 +1955,7 @@ Izmijenjeno: , pritisnite Tab, a zatim Enter da biste upravljali pretraživanjem web-lokacije i svojom zadanom tražilicom Jedno lice -Kolačići treće strane +Kolačići trećih strana Ako je to omogućeno, Chrome će pohraniti kopiju vaše kartice na ovom uređaju radi bržeg ispunjavanja obrazaca. Pregled Otkriveni jezik diff -Nru chromium-119.0.6045.105/components/strings/components_strings_id.xtb chromium-119.0.6045.159/components/strings/components_strings_id.xtb --- chromium-119.0.6045.105/components/strings/components_strings_id.xtb 2023-11-01 18:10:23.000000000 +0000 +++ chromium-119.0.6045.159/components/strings/components_strings_id.xtb 2023-11-14 22:56:36.000000000 +0000 @@ -254,7 +254,7 @@ Menggunakan font di komputer Anda agar Anda dapat membuat konten dengan kualitas akurasi tinggi Kiri adalah kode Anda untuk guna melanjutkan di -Tampilkan lainnya +Tampilkan lebih banyak JIS B10 2A0 Layanan Kebersihan diff -Nru chromium-119.0.6045.105/components/strings/components_strings_iw.xtb chromium-119.0.6045.159/components/strings/components_strings_iw.xtb --- chromium-119.0.6045.105/components/strings/components_strings_iw.xtb 2023-11-01 18:10:23.000000000 +0000 +++ chromium-119.0.6045.159/components/strings/components_strings_iw.xtb 2023-11-14 22:56:36.000000000 +0000 @@ -1508,7 +1508,7 @@ ‏עדכון קריטי לביצועים ב-Android ‏רוצה לשמור את פרטי הכרטיס בחשבון Google שלך ובמכשיר הזה? המשך לאתר -אפשר תמיד באתר זה +תמיד מותר באתר הזה JIS B7 RA2 היקף המדיניות אינו נתמך. diff -Nru chromium-119.0.6045.105/components/strings/components_strings_ne.xtb chromium-119.0.6045.159/components/strings/components_strings_ne.xtb --- chromium-119.0.6045.105/components/strings/components_strings_ne.xtb 2023-11-01 18:10:24.000000000 +0000 +++ chromium-119.0.6045.159/components/strings/components_strings_ne.xtb 2023-11-14 22:56:36.000000000 +0000 @@ -3470,7 +3470,7 @@ साइट पुनः लोड गर्ने हो? खतरनाक साइट सेडान कारहरू -मस्यौदा +ड्राफ्ट लेख गर्न असफल भयो। पासवर्ड परिवर्तन गर्नुहोस्‌ आकार २० diff -Nru chromium-119.0.6045.105/components/strings/components_strings_nl.xtb chromium-119.0.6045.159/components/strings/components_strings_nl.xtb --- chromium-119.0.6045.105/components/strings/components_strings_nl.xtb 2023-11-01 18:10:24.000000000 +0000 +++ chromium-119.0.6045.159/components/strings/components_strings_nl.xtb 2023-11-14 22:56:36.000000000 +0000 @@ -3239,7 +3239,7 @@ Foto (film) Eén tegelijk Brandmelding- en beveiligingsservices -Status van toestemming: +Toestemmingsstatus: URL moet https zijn. Atletiek Tv-gameshows diff -Nru chromium-119.0.6045.105/components/strings/components_strings_no.xtb chromium-119.0.6045.159/components/strings/components_strings_no.xtb --- chromium-119.0.6045.105/components/strings/components_strings_no.xtb 2023-11-01 18:10:24.000000000 +0000 +++ chromium-119.0.6045.159/components/strings/components_strings_no.xtb 2023-11-14 22:56:36.000000000 +0000 @@ -239,7 +239,7 @@ Administrer søkemotorer Prøv å flytte filene på nytt Chrome har innebygde sikkerhetsfunksjoner som beskytter deg mens du surfer, for eksempel Google Safe Browsing. Safe Browsing har nylig funnet skadelig programvare på , som er innebygd i nettstedet du prøver å besøke. -Bruk en tilgangsnøkkel på en annen enhet +Bruk en passnøkkel på en annen enhet Kan be om å få redigere filer og mapper på enheten Høyre vindusfals Hull @@ -2238,7 +2238,7 @@ Tjenesteleverandører Barberhøvler og barbermaskiner Kontroller utløpsmåneden, og prøv igjen -Administrer passord og tilgangsnøkler… +Administrer passord og passnøkler… Ingen adresser er lagret Søk på Plattformbruker @@ -2322,7 +2322,7 @@ Send til For å se leveringsmetoder og -krav, velg en adresse Ble ikke det virtuelle kortnummeret fylt ut? -Bruk en tilgangsnøkkel på en annen enhet +Bruk en passnøkkel på en annen enhet Prioritet Ble ikke det virtuelle kortet fylt inn? Klikk på detaljene for det virtuelle kortet for å kopiere dem til utklippstavlen. Et eksperiment er slått på @@ -3019,7 +3019,7 @@ Administratoren kan se – trykk på Tab og deretter på Enter for å åpne en ny inkognitofane for privat surfing Angi Chrome som systemets standardnettleser -{COUNT,plural, =0{Ingen}=1{1 tilgangsnøkkel}other{# tilgangsnøkler}} +{COUNT,plural, =0{Ingen}=1{1 passnøkkel}other{# passnøkler}} retter seg ikke etter sikkerhetsstandardene. Linux-aktivitet i beholderen, og kan installere og kjøre Linux-apper i beholderen Mer informasjon om dette problemet. @@ -4038,7 +4038,7 @@ Posisjon er tillatt denne gangen Dette innholdet kan prøve å installere villedende apper som gir seg ut for å være noe annet, eller samle inn data som kan brukes til å spore deg. Vis det likevel Alle brukere -Administrer passord og tilgangsnøkler… +Administrer passord og passnøkler… Biler og kjøretøy Offisiell delversjon {COUNT,plural, =0{Ingen}=1{1 element}other{# elementer}} diff -Nru chromium-119.0.6045.105/components/strings/components_strings_pa.xtb chromium-119.0.6045.159/components/strings/components_strings_pa.xtb --- chromium-119.0.6045.105/components/strings/components_strings_pa.xtb 2023-11-01 18:10:24.000000000 +0000 +++ chromium-119.0.6045.159/components/strings/components_strings_pa.xtb 2023-11-14 22:56:36.000000000 +0000 @@ -2465,7 +2465,7 @@ ਅਵੈਧ DnsOverHttps ਮੋਡ। ਕੁਸ਼ਤੀ ਕੀਮਤ ਟਰੈਕਿੰਗ ਬੰਦ ਕਰੋ -ਸਕ੍ਰੀਨ ਲੌਕ +ਸਕ੍ਰੀਨ ਲਾਕ ਕੂਪਨ ਅਤੇ ਛੋਟ ਪੇਸ਼ਕਸ਼ਾਂ ਤੁਸੀਂ ਇੱਕ ਪ੍ਰਬੰਧਕ ਵੱਲੋਂ-ਮੁਹੱਈਆ ਕੀਤਾ ਪ੍ਰਮਾਣ-ਪੱਤਰ ਵਰਤਦੇ ਹੋਏ ਸਮੱਗਰੀ ਤੱਕ ਪਹੁੰਚ ਪ੍ਰਾਪਤ ਕੀਤੀ ਹੈ। ਜੋ ਡਾਟਾ ਤੁਸੀਂ ਨੂੰ ਮੁਹੱਈਆ ਕਰਦੇ ਹੋ, ਉਹ ਤੁਹਾਡੇ ਪ੍ਰਬੰਧਕ ਵੱਲੋਂ ਰੋਕਿਆ ਜਾ ਸਕਦਾ ਹੈ। ਲੇਬਲ (ਰੰਗੀਨ) diff -Nru chromium-119.0.6045.105/components/strings/components_strings_pl.xtb chromium-119.0.6045.159/components/strings/components_strings_pl.xtb --- chromium-119.0.6045.105/components/strings/components_strings_pl.xtb 2023-11-01 18:10:24.000000000 +0000 +++ chromium-119.0.6045.159/components/strings/components_strings_pl.xtb 2023-11-14 22:56:36.000000000 +0000 @@ -2160,7 +2160,7 @@ Wymagane jest sprawdzenie plików przed przeniesieniem Przenieś mimo to Wyczyść dane przeglądania... -Monitoruj cenę +Śledź cenę {NUM_COOKIES,plural, =0{Brak witryn z zablokowanym dostępem}=1{1 witryna z zablokowanym dostępem}few{# witryny z zablokowanym dostępem}many{# witryn z zablokowanym dostępem}other{# witryny z zablokowanym dostępem}} chce wysyłać Ci powiadomienia Usuń zakładkę diff -Nru chromium-119.0.6045.105/components/strings/components_strings_pt-BR.xtb chromium-119.0.6045.159/components/strings/components_strings_pt-BR.xtb --- chromium-119.0.6045.105/components/strings/components_strings_pt-BR.xtb 2023-11-01 18:10:24.000000000 +0000 +++ chromium-119.0.6045.159/components/strings/components_strings_pt-BR.xtb 2023-11-14 22:56:36.000000000 +0000 @@ -695,7 +695,7 @@ Carnes e frutos do mar Nível Equipamentos de golfe -Com base na legislação da sua região, o Chrome pede que você escolha o mecanismo de pesquisa padrão. Esses mecanismos são famosos na sua região e estão em ordem aleatória. +Com base nas leis da sua região, o Chrome pede que você escolha o seu mecanismo de pesquisa padrão. Esses mecanismos são os mais usados na sua região e estão listados em ordem aleatória. Página para salvar cartão fechada. Legal Personalize as ferramentas de acessibilidade nas configurações do Chrome @@ -1729,7 +1729,7 @@ Pessoas e sociedade Mensagem de texto Número do cartão virtual: -Esses mecanismos de pesquisa são famosos na sua região e estão em ordem aleatória. +Esses mecanismos de pesquisa são os mais usados na sua região. Eles estão listados em ordem aleatória. Ocorreu um erro realidade aumentada Bandeja 6 @@ -2870,7 +2870,7 @@ A senha que você usou foi encontrada em uma violação de dados. Para proteger suas contas, o Gerenciador de senhas recomenda que você revise as senhas salvas. B+ (América do Norte) Veículos comerciais -O mecanismo de pesquisa padrão permite que você faça pesquisas na Web e use recursos do Chrome, como a pesquisa na barra de endereço e em imagens de páginas da Web. Um recurso poderá ficar indisponível se o mecanismo de pesquisa não tiver suporte para ele. +O mecanismo de pesquisa padrão é o que vai ser usado para pesquisas na Internet, além de usar recursos do Chrome, como a pesquisa na barra de endereço e em imagens de páginas da Web. Alguns recursos podem ficar indisponíveis se o mecanismo de pesquisa escolhido não tiver suporte para ele. Este nome é da sua Conta do Google Vagas de emprego nas áreas contábil e financeira . Alguns sites podem carregar mais lentamente na sua próxima visita. @@ -3335,7 +3335,7 @@ Ontem este tablet Um campo obrigatório está em branco. Preencha antes de salvar. -Os mecanismos de pesquisa estão em ordem aleatória. Você pode mudar o padrão definido a qualquer momento nas configurações. +Os mecanismos de pesquisa estão listados em ordem aleatória. Você pode mudar o seu mecanismo padrão a qualquer momento nas configurações. Finalizar compras mais rapidamente quando seus CVCs forem salvos Os sites que você acessa podem pedir informações ao Chrome para medir a performance dos anúncios. O Chrome permite que os sites coletem tipos limitados de dados, como o horário em que um anúncio apareceu para você. Não lançada diff -Nru chromium-119.0.6045.105/components/strings/components_strings_pt-PT.xtb chromium-119.0.6045.159/components/strings/components_strings_pt-PT.xtb --- chromium-119.0.6045.105/components/strings/components_strings_pt-PT.xtb 2023-11-01 18:10:24.000000000 +0000 +++ chromium-119.0.6045.159/components/strings/components_strings_pt-PT.xtb 2023-11-14 22:56:36.000000000 +0000 @@ -695,7 +695,7 @@ Carne e marisco Nível Equipamento de golfe -Com base numa lei na sua região, o Chrome pede-lhe para escolher o seu motor de pesquisa predefinido. Estes motores de pesquisa são populares na sua região e são apresentados por ordem aleatória. +Com base na legislação da sua região, o Chrome pede-lhe para escolher o seu motor de pesquisa predefinido. Estes motores de pesquisa são populares na sua região e são apresentados em ordem aleatória. Cartão para guardar fechado. Legal Personalize as ferramentas de acessibilidade nas definições do Chrome @@ -1729,7 +1729,7 @@ Pessoas e sociedade Mensagem de texto Número do cartão virtual: -Estes motores de pesquisa são populares na sua região e são apresentados por ordem aleatória +Estes motores de pesquisa são populares na sua região e são apresentados em ordem aleatória Algo correu mal realidade aumentada Tabuleiro 6 @@ -2797,7 +2797,7 @@ Papel (algodão) JIS B2 Empréstimos comerciais -Pode alterar o motor de pesquisa em qualquer altura nas definições do Chrome. +Pode alterar o seu motor de pesquisa em qualquer altura nas definições do Chrome. Envelope 6 x 9 pol. Violeta Extensões @@ -3334,7 +3334,7 @@ Ontem este tablet Um campo obrigatório está vazio. Preencha-o antes de guardar. -Estes motores de pesquisa são apresentados por ordem aleatória. Pode alterar a predefinição em qualquer altura nas definições. +Estes motores de pesquisa são apresentados em ordem aleatória. Pode alterar a predefinição em qualquer altura nas definições. Pague mais rapidamente quando os seus Códigos de Segurança/CVCs forem guardados Os sites que visitar podem pedir informações ao Chrome para os ajudar a medir o desempenho dos respetivos anúncios. O Chrome permite que os sites recolham tipos de dados limitados, como a hora do dia em que um anúncio lhe foi apresentado. Não lançada diff -Nru chromium-119.0.6045.105/components/strings/components_strings_ru.xtb chromium-119.0.6045.159/components/strings/components_strings_ru.xtb --- chromium-119.0.6045.105/components/strings/components_strings_ru.xtb 2023-11-01 18:10:24.000000000 +0000 +++ chromium-119.0.6045.159/components/strings/components_strings_ru.xtb 2023-11-14 22:56:36.000000000 +0000 @@ -1239,7 +1239,7 @@ Шрифт без засечек До дня Отменить автозаполнение -Открыть список связанных сайтов +Показать связанные сайты Подключение не защищено 215 x 315 мм Вакансии в сфере здравоохранения и медицины @@ -1531,7 +1531,7 @@ Это значит, что большинство функций сайта должно работать, но вы будете менее защищены. Чтобы ускорить процесс оплаты в будущем, сохраните карту, защитный код и платежный адрес в аккаунте Google Фиолетовый -Настройки сайтов +Настройки сайта Запретить Подтверждающая подпись недействительна  –  – diff -Nru chromium-119.0.6045.105/components/strings/components_strings_th.xtb chromium-119.0.6045.159/components/strings/components_strings_th.xtb --- chromium-119.0.6045.105/components/strings/components_strings_th.xtb 2023-11-01 18:10:24.000000000 +0000 +++ chromium-119.0.6045.159/components/strings/components_strings_th.xtb 2023-11-14 22:56:36.000000000 +0000 @@ -3663,7 +3663,7 @@ ไม่จำกัด Letter Extra เปิด -เข้ารหัสลับข้อมูลที่ซิงค์ด้วยรหัสผ่านการซิงค์ของคุณเอง +เข้ารหัสข้อมูลที่ซิงค์ด้วยรหัสผ่านการซิงค์ของคุณเอง {COUNT,plural, =1{บัตรเครดิต 1 ใบ}other{บัตรเครดิต # ใบ}} Envelope C3 300 x 450 มม. diff -Nru chromium-119.0.6045.105/components/strings/components_strings_uk.xtb chromium-119.0.6045.159/components/strings/components_strings_uk.xtb --- chromium-119.0.6045.105/components/strings/components_strings_uk.xtb 2023-11-01 18:10:24.000000000 +0000 +++ chromium-119.0.6045.159/components/strings/components_strings_uk.xtb 2023-11-14 22:56:36.000000000 +0000 @@ -620,7 +620,7 @@ Отримання записів… Сторінку надруковано Автомобільні шоу -Редагування файлу +Редагування файлів Собаки Зловмисники можуть використати сайт , щоб установити небезпечні додатки, які шкодять пристроям, наприклад, додають приховані платежі за мобільний зв’язок або викрадають особисту інформацію. Докладніше Переглянути навчальний посібник знову @@ -765,7 +765,7 @@ Адміністратор перезапустив ваш пристрій Один документ Установити Chrome веб-переглядачем за умовчанням -Файли cookie й дані із сайтів +Файли cookie й дані сайтів Веб-дизайн і розробка Недійсне значення правила. Консультації з будівництва й підряди @@ -1366,7 +1366,7 @@ Вихідний контейнер Яскраво-рожевий Mastercard -Пристрої Bluetooth +Пристрої з Bluetooth Розмір 16 Установити ( x дюйм.) diff -Nru chromium-119.0.6045.105/components/supervised_user/core/browser/supervised_user_pref_store.cc chromium-119.0.6045.159/components/supervised_user/core/browser/supervised_user_pref_store.cc --- chromium-119.0.6045.105/components/supervised_user/core/browser/supervised_user_pref_store.cc 2023-11-01 18:10:24.000000000 +0000 +++ chromium-119.0.6045.159/components/supervised_user/core/browser/supervised_user_pref_store.cc 2023-11-14 22:56:37.000000000 +0000 @@ -132,8 +132,10 @@ prefs_->SetInteger(prefs::kDefaultSupervisedUserFilteringBehavior, supervised_user::SupervisedUserURLFilter::ALLOW); prefs_->SetBoolean(policy::policy_prefs::kForceGoogleSafeSearch, true); +#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS) prefs_->SetInteger(policy::policy_prefs::kForceYouTubeRestrict, safe_search_api::YOUTUBE_RESTRICT_MODERATE); +#endif prefs_->SetBoolean(policy::policy_prefs::kHideWebStoreIcon, false); // TODO(b/290004926): Modifying `prefs::kSigninAllowed` causes check failures on @@ -168,6 +170,7 @@ static_cast(policy::IncognitoModeAvailability::kDisabled)); } +#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS) { // Note that |policy::policy_prefs::kForceGoogleSafeSearch| is set // automatically as part of |kSupervisedUserSettingsPrefMapping|, but this @@ -180,6 +183,7 @@ ? safe_search_api::YOUTUBE_RESTRICT_MODERATE : safe_search_api::YOUTUBE_RESTRICT_OFF); } +#endif #if BUILDFLAG(ENABLE_EXTENSIONS) { diff -Nru chromium-119.0.6045.105/components/supervised_user/core/browser/supervised_user_pref_store_unittest.cc chromium-119.0.6045.159/components/supervised_user/core/browser/supervised_user_pref_store_unittest.cc --- chromium-119.0.6045.105/components/supervised_user/core/browser/supervised_user_pref_store_unittest.cc 2023-11-01 18:10:24.000000000 +0000 +++ chromium-119.0.6045.159/components/supervised_user/core/browser/supervised_user_pref_store_unittest.cc 2023-11-14 22:56:37.000000000 +0000 @@ -113,16 +113,25 @@ EXPECT_FALSE(fixture.changed_prefs()->FindDictByDottedPath( prefs::kSupervisedUserManualHosts)); - // kForceGoogleSafeSearch defaults to true and kForceYouTubeRestrict defaults - // to Moderate for supervised users. + // kForceGoogleSafeSearch defaults to true for supervised users. EXPECT_THAT(fixture.changed_prefs()->FindBoolByDottedPath( policy::policy_prefs::kForceGoogleSafeSearch), Optional(true)); + + // kForceYouTubeRestrict defaults to 'moderate' for supervised users on + // Android and ChromeOS only. +#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS) int force_youtube_restrict = fixture.changed_prefs() ->FindIntByDottedPath(policy::policy_prefs::kForceYouTubeRestrict) .value_or(safe_search_api::YOUTUBE_RESTRICT_OFF); EXPECT_EQ(force_youtube_restrict, safe_search_api::YOUTUBE_RESTRICT_MODERATE); +#else + EXPECT_FALSE( + fixture.changed_prefs() + ->FindIntByDottedPath(policy::policy_prefs::kForceYouTubeRestrict) + .has_value()); +#endif #if BUILDFLAG(IS_ANDROID) EXPECT_THAT(fixture.changed_prefs()->FindBoolByDottedPath( @@ -156,8 +165,8 @@ ASSERT_TRUE(manual_hosts); EXPECT_TRUE(*manual_hosts == hosts); - // kForceGoogleSafeSearch and kForceYouTubeRestrict can be configured by the - // custodian, overriding the hardcoded default. + // kForceGoogleSafeSearch can be configured by the custodian, overriding the + // hardcoded default. fixture.changed_prefs()->clear(); service_.SetLocalSetting(supervised_user::kForceSafeSearch, base::Value(false)); @@ -166,11 +175,20 @@ policy::policy_prefs::kForceGoogleSafeSearch), Optional(false)); + // kForceYouTubeRestrict can be configured by the custodian on Android and + // ChromeOS only. +#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS) force_youtube_restrict = fixture.changed_prefs() ->FindIntByDottedPath(policy::policy_prefs::kForceYouTubeRestrict) .value_or(safe_search_api::YOUTUBE_RESTRICT_MODERATE); EXPECT_EQ(force_youtube_restrict, safe_search_api::YOUTUBE_RESTRICT_OFF); +#else + EXPECT_FALSE( + fixture.changed_prefs() + ->FindIntByDottedPath(policy::policy_prefs::kForceYouTubeRestrict) + .has_value()); +#endif #if BUILDFLAG(ENABLE_EXTENSIONS) // The custodian can allow sites and apps to request permissions. diff -Nru chromium-119.0.6045.105/content/browser/interest_group/ad_auction_service_impl.cc chromium-119.0.6045.159/content/browser/interest_group/ad_auction_service_impl.cc --- chromium-119.0.6045.105/content/browser/interest_group/ad_auction_service_impl.cc 2023-11-01 18:10:25.000000000 +0000 +++ chromium-119.0.6045.159/content/browser/interest_group/ad_auction_service_impl.cc 2023-11-14 22:56:38.000000000 +0000 @@ -469,9 +469,9 @@ const url::Origin& seller, blink::mojom::AdAuctionCoordinator coordinator, GetInterestGroupAdAuctionDataCallback callback) { - // If the interest group API is not allowed for this origin do nothing. + // If the interest group API is not allowed for this seller do nothing. if (!IsInterestGroupAPIAllowed( - ContentBrowserClient::InterestGroupApiOperation::kSell, origin())) { + ContentBrowserClient::InterestGroupApiOperation::kSell, seller)) { std::move(callback).Run({}, {}); return; } diff -Nru chromium-119.0.6045.105/content/browser/interest_group/ad_auction_service_impl_unittest.cc chromium-119.0.6045.159/content/browser/interest_group/ad_auction_service_impl_unittest.cc --- chromium-119.0.6045.105/content/browser/interest_group/ad_auction_service_impl_unittest.cc 2023-11-01 18:10:25.000000000 +0000 +++ chromium-119.0.6045.159/content/browser/interest_group/ad_auction_service_impl_unittest.cc 2023-11-14 22:56:38.000000000 +0000 @@ -8960,10 +8960,12 @@ TEST_F(AdAuctionServiceImplBAndATest, OriginNotAllowed) { base::HistogramTester hist; ProvideKeys(); - NavigateAndCommit(GURL("https://not.allowed.test/")); - url::Origin test_origin = url::Origin::Create(GURL(kOriginStringA)); + content_browser_client_.SetAllowList({kOriginA}); + url::Origin test_origin = + url::Origin::Create(GURL("http://not.attested.test/")); + NavigateAndCommit(kUrlA); manager_->JoinInterestGroup( - blink::TestInterestGroupBuilder(test_origin, "cars") + blink::TestInterestGroupBuilder(kOriginA, "cars") .SetAds( {{{GURL("https://c.test/ad.html"), /*metadata=*/absl::nullopt, /*size_group=*/absl::nullopt, diff -Nru chromium-119.0.6045.105/content/browser/loader/navigation_url_loader_impl.cc chromium-119.0.6045.159/content/browser/loader/navigation_url_loader_impl.cc --- chromium-119.0.6045.105/content/browser/loader/navigation_url_loader_impl.cc 2023-11-01 18:10:25.000000000 +0000 +++ chromium-119.0.6045.159/content/browser/loader/navigation_url_loader_impl.cc 2023-11-14 22:56:38.000000000 +0000 @@ -670,10 +670,10 @@ next_interceptor->MaybeCreateLoader( *resource_request_, browser_context_, base::BindOnce(&NavigationURLLoaderImpl::MaybeStartLoader, - base::Unretained(this), next_interceptor), + weak_factory_.GetWeakPtr(), next_interceptor), base::BindOnce( &NavigationURLLoaderImpl::FallbackToNonInterceptedRequest, - base::Unretained(this))); + weak_factory_.GetWeakPtr())); return; } diff -Nru chromium-119.0.6045.105/debian/changelog chromium-119.0.6045.159/debian/changelog --- chromium-119.0.6045.105/debian/changelog 2023-11-01 04:50:00.000000000 +0000 +++ chromium-119.0.6045.159/debian/changelog 2023-11-15 01:04:30.000000000 +0000 @@ -1,3 +1,30 @@ +chromium (119.0.6045.159-1~deb11u1) bullseye-security; urgency=high + + * New upstream security release. + - CVE-2023-5997: Use after free in Garbage Collection. + Reported by Anonymous. + - CVE-2023-6112: Use after free in Navigation. + Reported by Sergei Glazunov of Google Project Zero. + * Don't show errors on startup if Crash Reports directory doesn't exist. + * Check for $DISPLAY before trying to run xmessage in chromium's wrapper + script. Fall back to just using echo (closes: #1055765). + + -- Andres Salomon Tue, 14 Nov 2023 20:04:30 -0500 + +chromium (119.0.6045.123-1~deb11u1) bullseye-security; urgency=high + + * New upstream security release. + - CVE-2023-5996: Use after free in WebAudio. Reported by + Huang Xilin of Ant Group Light-Year Security Lab via Tianfu Cup 2023. + * Replace libgl1-mesa-dev build dependency with libgl-dev. + * Drop d/patches/system/convertutf.patch; license issue has been fixed. + * d/copyright: stop deleting convert_UTF.* and document Unicode copyright + (closes: #1033136). + * d/patches/ppc64le/fixes/fix-breakpad-compile.patch: refresh due to convertutf + change. + + -- Andres Salomon Tue, 07 Nov 2023 23:49:10 -0500 + chromium (119.0.6045.105-1~deb11u1) bullseye-security; urgency=high * New upstream stable release. @@ -41,7 +68,7 @@ and use the full ungoogled patch. The privacy sandbox config interface is now gone, with no way to enable it. - ungoogled/core/ungoogled-chromium/disable-web-environment-integrity.patch: - sync up with with ungoogled-chromium, and rename. + sync up with ungoogled-chromium, and rename. - fixes/blink-frags.patch: additional build fix for libstdc++13. - fixes/gcc13-with-clang14.patch: drop, now that we've switched to clang-16. - fixes/atspi.patch: fix build failure with atspi >= 2.50. diff -Nru chromium-119.0.6045.105/debian/control chromium-119.0.6045.159/debian/control --- chromium-119.0.6045.105/debian/control 2023-10-15 18:09:54.000000000 +0000 +++ chromium-119.0.6045.159/debian/control 2023-11-08 20:03:10.000000000 +0000 @@ -41,7 +41,7 @@ xfonts-base, libx11-xcb-dev, libxshmfence-dev, - libgl1-mesa-dev, + libgl-dev, libglu1-mesa-dev, libegl1-mesa-dev, libgles2-mesa-dev, diff -Nru chromium-119.0.6045.105/debian/copyright chromium-119.0.6045.159/debian/copyright --- chromium-119.0.6045.105/debian/copyright 2023-11-01 04:50:00.000000000 +0000 +++ chromium-119.0.6045.159/debian/copyright 2023-11-08 20:03:10.000000000 +0000 @@ -159,7 +159,6 @@ third_party/webrtc/examples third_party/pdfium/third_party/libopenjpeg third_party/breakpad/breakpad/src/client/mac - third_party/breakpad/breakpad/src/common/convert_UTF.* third_party/boringssl/src/crypto/cipher_extra/test third_party/dom_distiller_js/dist/js/domdistiller_wrapped.js third_party/devtools-frontend/src/third_party/image_diff @@ -191,6 +190,11 @@ Copyright: Copyright (c) 2015-2023, The ungoogled-chromium Authors License: BSD-3-clause +Files: third_party/breakpad/breakpad/src/common/convert_UTF.* +Copyright: Copyright © 1991-2015 Unicode, Inc. All rights reserved. +License: Unicode +Comment: http://www.unicode.org/copyright.html + Files: base/* Copyright: Copyright 2009 The Chromium Authors. All rights reserved. License: BSD-3-clause @@ -3307,3 +3311,36 @@ License: LGPL-2.1 See /usr/share/common-licenses/LGPL-2.1. + +License: Unicode + Permission is hereby granted, free of charge, to any person obtaining + a copy of the Unicode data files and any associated documentation + (the "Data Files") or Unicode software and any associated documentation + (the "Software") to deal in the Data Files or Software + without restriction, including without limitation the rights to use, + copy, modify, merge, publish, distribute, and/or sell copies of + the Data Files or Software, and to permit persons to whom the Data Files + or Software are furnished to do so, provided that + (a) this copyright and permission notice appear with all copies + of the Data Files or Software, + (b) this copyright and permission notice appear in associated + documentation, and + (c) there is clear notice in each modified Data File or in the Software + as well as in the documentation associated with the Data File(s) or + Software that the data or software has been modified. + . + THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF + ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT OF THIRD PARTY RIGHTS. + IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS + NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL + DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THE DATA FILES OR SOFTWARE. + . + Except as contained in this notice, the name of a copyright holder + shall not be used in advertising or otherwise to promote the sale, + use or other dealings in these Data Files or Software without prior + written authorization of the copyright holder. diff -Nru chromium-119.0.6045.105/debian/patches/ppc64le/fixes/fix-breakpad-compile.patch chromium-119.0.6045.159/debian/patches/ppc64le/fixes/fix-breakpad-compile.patch --- chromium-119.0.6045.105/debian/patches/ppc64le/fixes/fix-breakpad-compile.patch 2023-11-01 04:50:00.000000000 +0000 +++ chromium-119.0.6045.159/debian/patches/ppc64le/fixes/fix-breakpad-compile.patch 2023-11-08 20:03:10.000000000 +0000 @@ -1,16 +1,14 @@ -Index: chromium-119.0.6045.59/third_party/breakpad/BUILD.gn -=================================================================== ---- chromium-119.0.6045.59.orig/third_party/breakpad/BUILD.gn -+++ chromium-119.0.6045.59/third_party/breakpad/BUILD.gn -@@ -616,7 +616,6 @@ if (is_linux || is_chromeos || is_androi - "breakpad/src/client/minidump_file_writer-inl.h", - "breakpad/src/client/minidump_file_writer.cc", +--- a/third_party/breakpad/BUILD.gn ++++ b/third_party/breakpad/BUILD.gn +@@ -618,7 +618,6 @@ if (is_linux || is_chromeos || is_androi "breakpad/src/client/minidump_file_writer.h", + "breakpad/src/common/convert_UTF.cc", + "breakpad/src/common/convert_UTF.h", - "breakpad/src/common/linux/breakpad_getcontext.S", "breakpad/src/common/linux/elf_core_dump.cc", "breakpad/src/common/linux/elf_core_dump.h", "breakpad/src/common/linux/elfutils.cc", -@@ -648,6 +647,8 @@ if (is_linux || is_chromeos || is_androi +@@ -650,6 +649,8 @@ if (is_linux || is_chromeos || is_androi configs += [ "//build/config/compiler:no_chromium_code" ] public_configs = [ ":client_config" ] @@ -19,7 +17,7 @@ if (current_cpu == "arm" && is_chromeos_ash) { # Avoid running out of registers in # linux_syscall_support.h:sys_clone()'s inline assembly. -@@ -706,7 +707,6 @@ if (is_linux || is_chromeos || is_androi +@@ -707,7 +708,6 @@ if (is_linux || is_chromeos || is_androi "breakpad/src/client/linux/minidump_writer/minidump_writer_unittest.cc", "breakpad/src/client/linux/minidump_writer/minidump_writer_unittest_utils.cc", "breakpad/src/client/linux/minidump_writer/proc_cpuinfo_reader_unittest.cc", diff -Nru chromium-119.0.6045.105/debian/patches/series chromium-119.0.6045.159/debian/patches/series --- chromium-119.0.6045.105/debian/patches/series 2023-11-01 04:50:00.000000000 +0000 +++ chromium-119.0.6045.159/debian/patches/series 2023-11-08 20:03:10.000000000 +0000 @@ -35,7 +35,6 @@ system/zlib.patch system/event.patch system/openjpeg.patch -system/convertutf.patch system/clang-format.patch system/opus.patch system/eu-strip.patch diff -Nru chromium-119.0.6045.105/debian/patches/system/convertutf.patch chromium-119.0.6045.159/debian/patches/system/convertutf.patch --- chromium-119.0.6045.105/debian/patches/system/convertutf.patch 2023-10-15 18:09:37.000000000 +0000 +++ chromium-119.0.6045.159/debian/patches/system/convertutf.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,247 +0,0 @@ -description: use icu for UTF8 conversions (eliminates ConvertUTF embedded code copy) -bug-debian: http://bugs.debian.org/900596 -author: Michael Gilbert - ---- a/third_party/breakpad/breakpad/src/common/string_conversion.cc -+++ b/third_party/breakpad/breakpad/src/common/string_conversion.cc -@@ -29,7 +29,7 @@ - - #include - --#include "common/convert_UTF.h" -+#include - #include "common/scoped_ptr.h" - #include "common/string_conversion.h" - #include "common/using_std_string.h" -@@ -38,118 +38,23 @@ namespace google_breakpad { - - using std::vector; - --void UTF8ToUTF16(const char* in, vector* out) { -- size_t source_length = strlen(in); -- const UTF8* source_ptr = reinterpret_cast(in); -- const UTF8* source_end_ptr = source_ptr + source_length; -- // Erase the contents and zero fill to the expected size -- out->clear(); -- out->insert(out->begin(), source_length, 0); -- uint16_t* target_ptr = &(*out)[0]; -- uint16_t* target_end_ptr = target_ptr + out->capacity(); -- ConversionResult result = ConvertUTF8toUTF16(&source_ptr, source_end_ptr, -- &target_ptr, target_end_ptr, -- strictConversion); -- -- // Resize to be the size of the # of converted characters + NULL -- out->resize(result == conversionOK ? target_ptr - &(*out)[0] + 1: 0); --} -- --int UTF8ToUTF16Char(const char* in, int in_length, uint16_t out[2]) { -- const UTF8* source_ptr = reinterpret_cast(in); -- const UTF8* source_end_ptr = source_ptr + 1; -- uint16_t* target_ptr = out; -- uint16_t* target_end_ptr = target_ptr + 2; -- out[0] = out[1] = 0; -- -- // Process one character at a time -- while (1) { -- ConversionResult result = ConvertUTF8toUTF16(&source_ptr, source_end_ptr, -- &target_ptr, target_end_ptr, -- strictConversion); -- -- if (result == conversionOK) -- return static_cast(source_ptr - reinterpret_cast(in)); -- -- // Add another character to the input stream and try again -- source_ptr = reinterpret_cast(in); -- ++source_end_ptr; -- -- if (source_end_ptr > reinterpret_cast(in) + in_length) -- break; -- } -- -- return 0; --} -- --void UTF32ToUTF16(const wchar_t* in, vector* out) { -- size_t source_length = wcslen(in); -- const UTF32* source_ptr = reinterpret_cast(in); -- const UTF32* source_end_ptr = source_ptr + source_length; -- // Erase the contents and zero fill to the expected size -- out->clear(); -- out->insert(out->begin(), source_length, 0); -- uint16_t* target_ptr = &(*out)[0]; -- uint16_t* target_end_ptr = target_ptr + out->capacity(); -- ConversionResult result = ConvertUTF32toUTF16(&source_ptr, source_end_ptr, -- &target_ptr, target_end_ptr, -- strictConversion); -- -- // Resize to be the size of the # of converted characters + NULL -- out->resize(result == conversionOK ? target_ptr - &(*out)[0] + 1: 0); --} -- --void UTF32ToUTF16Char(wchar_t in, uint16_t out[2]) { -- const UTF32* source_ptr = reinterpret_cast(&in); -- const UTF32* source_end_ptr = source_ptr + 1; -- uint16_t* target_ptr = out; -- uint16_t* target_end_ptr = target_ptr + 2; -- out[0] = out[1] = 0; -- ConversionResult result = ConvertUTF32toUTF16(&source_ptr, source_end_ptr, -- &target_ptr, target_end_ptr, -- strictConversion); -- -- if (result != conversionOK) { -+int UTF8ToUTF16Char(const char *in, int in_length, UChar out[2]) { -+ int dest_length = 0; -+ UErrorCode result = U_ZERO_ERROR; -+ u_strFromUTF8(out, 2, &dest_length, in, in_length, &result); -+ if (U_FAILURE(result)) { - out[0] = out[1] = 0; - } -+ return dest_length; - } - --static inline uint16_t Swap(uint16_t value) { -- return (value >> 8) | static_cast(value << 8); --} -- --string UTF16ToUTF8(const vector& in, bool swap) { -- const UTF16* source_ptr = &in[0]; -- scoped_array source_buffer; -- -- // If we're to swap, we need to make a local copy and swap each byte pair -- if (swap) { -- int idx = 0; -- source_buffer.reset(new uint16_t[in.size()]); -- UTF16* source_buffer_ptr = source_buffer.get(); -- for (vector::const_iterator it = in.begin(); -- it != in.end(); ++it, ++idx) -- source_buffer_ptr[idx] = Swap(*it); -- -- source_ptr = source_buffer.get(); -- } -- -- // The maximum expansion would be 4x the size of the input string. -- const UTF16* source_end_ptr = source_ptr + in.size(); -- size_t target_capacity = in.size() * 4; -- scoped_array target_buffer(new UTF8[target_capacity]); -- UTF8* target_ptr = target_buffer.get(); -- UTF8* target_end_ptr = target_ptr + target_capacity; -- ConversionResult result = ConvertUTF16toUTF8(&source_ptr, source_end_ptr, -- &target_ptr, target_end_ptr, -- strictConversion); -- -- if (result == conversionOK) { -- const char* targetPtr = reinterpret_cast(target_buffer.get()); -- return targetPtr; -+void UTF32ToUTF16Char(wchar_t in, UChar out[2]) { -+ int32_t dest_length = 0; -+ UErrorCode result = U_ZERO_ERROR; -+ u_strFromWCS(out, 2, &dest_length, &in, 1, &result); -+ if (U_FAILURE(result)) { -+ out[0] = out[1] = 0; - } -- -- return ""; - } - - } // namespace google_breakpad ---- a/third_party/breakpad/breakpad/src/common/string_conversion.h -+++ b/third_party/breakpad/breakpad/src/common/string_conversion.h -@@ -35,6 +35,7 @@ - #include - #include - -+#include - #include "common/using_std_string.h" - #include "google_breakpad/common/breakpad_types.h" - -@@ -42,26 +43,15 @@ namespace google_breakpad { - - using std::vector; - --// Convert |in| to UTF-16 into |out|. Use platform byte ordering. If the --// conversion failed, |out| will be zero length. --void UTF8ToUTF16(const char* in, vector* out); -- - // Convert at least one character (up to a maximum of |in_length|) from |in| - // to UTF-16 into |out|. Return the number of characters consumed from |in|. - // Any unused characters in |out| will be initialized to 0. No memory will - // be allocated by this routine. --int UTF8ToUTF16Char(const char* in, int in_length, uint16_t out[2]); -- --// Convert |in| to UTF-16 into |out|. Use platform byte ordering. If the --// conversion failed, |out| will be zero length. --void UTF32ToUTF16(const wchar_t* in, vector* out); -+int UTF8ToUTF16Char(const char *in, int in_length, UChar out[2]); - - // Convert |in| to UTF-16 into |out|. Any unused characters in |out| will be - // initialized to 0. No memory will be allocated by this routine. --void UTF32ToUTF16Char(wchar_t in, uint16_t out[2]); -- --// Convert |in| to UTF-8. If |swap| is true, swap bytes before converting. --string UTF16ToUTF8(const vector& in, bool swap); -+void UTF32ToUTF16Char(wchar_t in, UChar out[2]); - - } // namespace google_breakpad - ---- a/third_party/breakpad/BUILD.gn -+++ b/third_party/breakpad/BUILD.gn -@@ -615,8 +615,6 @@ if (is_linux || is_chromeos || is_androi - "breakpad/src/client/minidump_file_writer-inl.h", - "breakpad/src/client/minidump_file_writer.cc", - "breakpad/src/client/minidump_file_writer.h", -- "breakpad/src/common/convert_UTF.cc", -- "breakpad/src/common/convert_UTF.h", - "breakpad/src/common/linux/breakpad_getcontext.S", - "breakpad/src/common/linux/elf_core_dump.cc", - "breakpad/src/common/linux/elf_core_dump.h", -@@ -662,6 +660,7 @@ if (is_linux || is_chromeos || is_androi - "breakpad/src", - "breakpad/src/client", - "breakpad/src/third_party/linux/include", -+ "../../third_party/icu/source/common", - ] - } - ---- a/third_party/breakpad/breakpad/src/client/minidump_file_writer.cc -+++ b/third_party/breakpad/breakpad/src/client/minidump_file_writer.cc -@@ -149,11 +149,11 @@ bool MinidumpFileWriter::CopyStringToMDS - unsigned int length, - TypedMDRVA* mdstring) { - bool result = true; -- if (sizeof(wchar_t) == sizeof(uint16_t)) { -+ if (sizeof(wchar_t) == sizeof(UChar)) { - // Shortcut if wchar_t is the same size as MDString's buffer - result = mdstring->Copy(str, mdstring->get()->length); - } else { -- uint16_t out[2]; -+ UChar out[2]; - int out_idx = 0; - - // Copy the string character by character -@@ -170,7 +170,7 @@ bool MinidumpFileWriter::CopyStringToMDS - // zero, but the second one may be zero, depending on the conversion from - // UTF-32. - int out_count = out[1] ? 2 : 1; -- size_t out_size = sizeof(uint16_t) * out_count; -+ size_t out_size = sizeof(UChar) * out_count; - result = mdstring->CopyIndexAfterObject(out_idx, out, out_size); - out_idx += out_count; - } -@@ -182,7 +182,7 @@ bool MinidumpFileWriter::CopyStringToMDS - unsigned int length, - TypedMDRVA* mdstring) { - bool result = true; -- uint16_t out[2]; -+ UChar out[2]; - int out_idx = 0; - - // Copy the string character by character -@@ -197,7 +197,7 @@ bool MinidumpFileWriter::CopyStringToMDS - - // Append the one or two UTF-16 characters - int out_count = out[1] ? 2 : 1; -- size_t out_size = sizeof(uint16_t) * out_count; -+ size_t out_size = sizeof(UChar) * out_count; - result = mdstring->CopyIndexAfterObject(out_idx, out, out_size); - out_idx += out_count; - } diff -Nru chromium-119.0.6045.105/debian/scripts/chromium chromium-119.0.6045.159/debian/scripts/chromium --- chromium-119.0.6045.105/debian/scripts/chromium 2023-10-15 18:09:37.000000000 +0000 +++ chromium-119.0.6045.159/debian/scripts/chromium 2023-11-15 01:04:30.000000000 +0000 @@ -25,22 +25,20 @@ echo " See 'man chromium' for more details" } +display_msg() { + if [ -z "$DISPLAY" ]; then + echo "$@" 1>&2 + else + xmessage "$@" + fi +} + nosse3="\ The hardware on this system lacks support for the sse3 instruction set. The upstream chromium project no longer supports this configuration. For more information, please read and possibly provide input to their bug tracking system at http://crbug.com/1123353" -case `uname -m` in - i386|i586|i686|x86_64) - # Check whether this system supports SSE3 (aka PNI) - if ! grep -q 'sse3\|pni' /proc/cpuinfo; then - xmessage "$nosse3" - exit 1 - fi - ;; -esac - noneon="\ The hardware on this system lacks support for NEON SIMD extensions. We now require NEON or equivalent architecture extensions on ARM-based @@ -48,6 +46,13 @@ for more information." case `uname -m` in + i386|i586|i686|x86_64) + # Check whether this system supports SSE3 (aka PNI) + if ! grep -q 'sse3\|pni' /proc/cpuinfo; then + display_msg "$nosse3" + exit 1 + fi + ;; armv7l) # Check whether this system supports NEON or ASIMD. Even though there # could be ARMv8 systems without ASIMD, we're far more likely to hit @@ -55,7 +60,7 @@ # bother checking armv8l for now. If we do check in the future, they # advertise 'asimd' instead of 'neon'. if ! grep -q 'neon\|asimd' /proc/cpuinfo; then - xmessage "$noneon" + display_msg "$noneon" exit 1 fi ;; @@ -63,7 +68,8 @@ # Clean up old crash reports (see https://bugs.debian.org/1015931) # after 30 days. -find "$HOME/.config/chromium/Crash Reports/pending/" -mtime +30 \ +test -d "$HOME/.config/chromium/Crash Reports/pending/" && \ + find "$HOME/.config/chromium/Crash Reports/pending/" -mtime +30 \ \( -name "*.meta" -o -name "*.dmp" \) -exec rm \{\} \; # Source additional settings diff -Nru chromium-119.0.6045.105/google_apis/gaia/gaia_constants.cc chromium-119.0.6045.159/google_apis/gaia/gaia_constants.cc --- chromium-119.0.6045.105/google_apis/gaia/gaia_constants.cc 2023-11-01 18:10:28.000000000 +0000 +++ chromium-119.0.6045.159/google_apis/gaia/gaia_constants.cc 2023-11-14 22:56:40.000000000 +0000 @@ -195,6 +195,10 @@ "https://www.googleapis.com/auth/" "classroom.student-submissions.students.readonly"; +// OAuth2 scopes for Optimization Guide. +const char kOptimizationGuideServiceGetHintsOAuth2Scope[] = + "https://www.googleapis.com/auth/chrome-optimization-guide"; + // Used to build ClientOAuth requests. These are the names of keys used when // building base::DictionaryValue that represent the json data that makes up // the ClientOAuth endpoint protocol. The comment above each constant explains diff -Nru chromium-119.0.6045.105/google_apis/gaia/gaia_constants.h chromium-119.0.6045.159/google_apis/gaia/gaia_constants.h --- chromium-119.0.6045.105/google_apis/gaia/gaia_constants.h 2023-11-01 18:10:28.000000000 +0000 +++ chromium-119.0.6045.159/google_apis/gaia/gaia_constants.h 2023-11-14 22:56:40.000000000 +0000 @@ -93,6 +93,10 @@ COMPONENT_EXPORT(GOOGLE_APIS) extern const char kClassroomReadOnlyStudentSubmissionsStudentsOAuth2Scope[]; +// OAuth2 scopes for Optimization Guide. +COMPONENT_EXPORT(GOOGLE_APIS) +extern const char kOptimizationGuideServiceGetHintsOAuth2Scope[]; + // Used by wallet sign in helper. COMPONENT_EXPORT(GOOGLE_APIS) extern const char kClientOAuthEmailKey[]; diff -Nru chromium-119.0.6045.105/gpu/config/gpu_driver_bug_list.json chromium-119.0.6045.159/gpu/config/gpu_driver_bug_list.json --- chromium-119.0.6045.105/gpu/config/gpu_driver_bug_list.json 2023-11-01 18:10:28.000000000 +0000 +++ chromium-119.0.6045.159/gpu/config/gpu_driver_bug_list.json 2023-11-14 22:56:41.000000000 +0000 @@ -3654,6 +3654,7 @@ "type": "win" }, "vendor_id": "0x8086", + "multi_gpu_category": "any", "driver_version": { "op": "<", "value": "30.0.100.9667" @@ -3670,6 +3671,7 @@ "type": "win" }, "vendor_id": "0x8086", + "multi_gpu_category": "any", "intel_gpu_generation": { "op": "<", "value": "11" @@ -3784,9 +3786,27 @@ "type": "win" }, "vendor_id": "0x8086", + "multi_gpu_category": "any", "features": [ "avoid_consecutive_keyframes_for_vp9" ] + }, + { + "id": 421, + "cr_bugs": [1494147], + "description": "Accelerated video decoding leads to lock up in ChromeOS Zork (AMD Radeon Vega 3 GPUs).", + "os": { + "type" : "chromeos" + }, + "vendor_id": "0x1002", + "device_id": ["0x15d8", "0x15dd"], + "features": [ + "disable_accelerated_h264_decode", + "disable_accelerated_h264_encode", + "disable_accelerated_vp9_decode", + "disable_accelerated_vp9_profile2_decode", + "disable_accelerated_hevc_decode" + ] } ] } diff -Nru chromium-119.0.6045.105/gpu/config/gpu_lists_version.h chromium-119.0.6045.159/gpu/config/gpu_lists_version.h --- chromium-119.0.6045.105/gpu/config/gpu_lists_version.h 2023-11-01 18:15:55.000000000 +0000 +++ chromium-119.0.6045.159/gpu/config/gpu_lists_version.h 2023-11-14 22:59:27.000000000 +0000 @@ -3,6 +3,6 @@ #ifndef GPU_CONFIG_GPU_LISTS_VERSION_H_ #define GPU_CONFIG_GPU_LISTS_VERSION_H_ -#define GPU_LISTS_VERSION "38c72552c5e15ba9b3117c0967a0fd105072d7c6" +#define GPU_LISTS_VERSION "eaa767197fa7dd412133d1b84f7eb60da43409c9" #endif // GPU_CONFIG_GPU_LISTS_VERSION_H_ diff -Nru chromium-119.0.6045.105/infra/config/generated/testing/variants.pyl chromium-119.0.6045.159/infra/config/generated/testing/variants.pyl --- chromium-119.0.6045.105/infra/config/generated/testing/variants.pyl 2023-11-01 18:10:29.000000000 +0000 +++ chromium-119.0.6045.159/infra/config/generated/testing/variants.pyl 2023-11-14 22:56:41.000000000 +0000 @@ -70,64 +70,64 @@ }, 'LACROS_VERSION_SKEW_CANARY': { 'identifier': 'Lacros version skew testing ash canary', - 'description': 'Run with ash-chrome version 120.0.6096.0', + 'description': 'Run with ash-chrome version 121.0.6122.0', 'args': [ - '--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6096.0/test_ash_chrome', + '--ash-chrome-path-override=../../lacros_version_skew_tests_v121.0.6122.0/test_ash_chrome', ], 'swarming': { 'cipd_packages': [ { 'cipd_package': 'chromium/testing/linux-ash-chromium/x86_64/ash.zip', - 'location': 'lacros_version_skew_tests_v120.0.6096.0', - 'revision': 'version:120.0.6096.0', + 'location': 'lacros_version_skew_tests_v121.0.6122.0', + 'revision': 'version:121.0.6122.0', }, ], }, }, 'LACROS_VERSION_SKEW_DEV': { 'identifier': 'Lacros version skew testing ash dev', - 'description': 'Run with ash-chrome version 120.0.6085.0', + 'description': 'Run with ash-chrome version 120.0.6099.13', 'args': [ - '--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6085.0/test_ash_chrome', + '--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6099.13/test_ash_chrome', ], 'swarming': { 'cipd_packages': [ { 'cipd_package': 'chromium/testing/linux-ash-chromium/x86_64/ash.zip', - 'location': 'lacros_version_skew_tests_v120.0.6085.0', - 'revision': 'version:120.0.6085.0', + 'location': 'lacros_version_skew_tests_v120.0.6099.13', + 'revision': 'version:120.0.6099.13', }, ], }, }, 'LACROS_VERSION_SKEW_BETA': { 'identifier': 'Lacros version skew testing ash beta', - 'description': 'Run with ash-chrome version 119.0.6045.38', + 'description': 'Run with ash-chrome version 119.0.6045.116', 'args': [ - '--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.38/test_ash_chrome', + '--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.116/test_ash_chrome', ], 'swarming': { 'cipd_packages': [ { 'cipd_package': 'chromium/testing/linux-ash-chromium/x86_64/ash.zip', - 'location': 'lacros_version_skew_tests_v119.0.6045.38', - 'revision': 'version:119.0.6045.38', + 'location': 'lacros_version_skew_tests_v119.0.6045.116', + 'revision': 'version:119.0.6045.116', }, ], }, }, 'LACROS_VERSION_SKEW_STABLE': { 'identifier': 'Lacros version skew testing ash stable', - 'description': 'Run with ash-chrome version 118.0.5993.106', + 'description': 'Run with ash-chrome version 118.0.5993.124', 'args': [ - '--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.106/test_ash_chrome', + '--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.124/test_ash_chrome', ], 'swarming': { 'cipd_packages': [ { 'cipd_package': 'chromium/testing/linux-ash-chromium/x86_64/ash.zip', - 'location': 'lacros_version_skew_tests_v118.0.5993.106', - 'revision': 'version:118.0.5993.106', + 'location': 'lacros_version_skew_tests_v118.0.5993.124', + 'revision': 'version:118.0.5993.124', }, ], }, @@ -451,7 +451,7 @@ 'enabled': False, 'skylab': { 'cros_board': 'brya', - 'cros_img': 'brya-release/R120-15656.0.0', + 'cros_img': 'brya-release/R120-15662.9.0', 'dut_pool': 'chrome', }, }, @@ -459,7 +459,7 @@ 'identifier': 'BRYA_RELEASE_BETA', 'skylab': { 'cros_board': 'brya', - 'cros_img': 'brya-release/R119-15633.23.0', + 'cros_img': 'brya-release/R119-15633.37.0', 'dut_pool': 'chrome', }, }, @@ -467,7 +467,7 @@ 'identifier': 'BRYA_RELEASE_STABLE', 'skylab': { 'cros_board': 'brya', - 'cros_img': 'brya-release/R118-15604.45.0', + 'cros_img': 'brya-release/R118-15604.57.0', 'dut_pool': 'chrome', }, }, @@ -484,21 +484,21 @@ 'enabled': False, 'skylab': { 'cros_board': 'dedede', - 'cros_img': 'dedede-release/R120-15656.0.0', + 'cros_img': 'dedede-release/R120-15662.9.0', }, }, 'CROS_DEDEDE_RELEASE_BETA': { 'identifier': 'DEDEDE_RELEASE_BETA', 'skylab': { 'cros_board': 'dedede', - 'cros_img': 'dedede-release/R119-15633.23.0', + 'cros_img': 'dedede-release/R119-15633.37.0', }, }, 'CROS_DEDEDE_RELEASE_STABLE': { 'identifier': 'DEDEDE_RELEASE_STABLE', 'skylab': { 'cros_board': 'dedede', - 'cros_img': 'dedede-release/R118-15604.45.0', + 'cros_img': 'dedede-release/R118-15604.57.0', }, }, 'CROS_FIZZ_RELEASE_LKGM': { @@ -515,7 +515,7 @@ 'enabled': False, 'skylab': { 'cros_board': 'fizz', - 'cros_img': 'fizz-release/R120-15656.0.0', + 'cros_img': 'fizz-release/R120-15662.9.0', 'dut_pool': 'chrome', }, }, @@ -523,7 +523,7 @@ 'identifier': 'FIZZ_RELEASE_BETA', 'skylab': { 'cros_board': 'fizz', - 'cros_img': 'fizz-release/R119-15633.23.0', + 'cros_img': 'fizz-release/R119-15633.37.0', 'dut_pool': 'chrome', }, }, @@ -531,7 +531,7 @@ 'identifier': 'FIZZ_RELEASE_STABLE', 'skylab': { 'cros_board': 'fizz', - 'cros_img': 'fizz-release/R118-15604.45.0', + 'cros_img': 'fizz-release/R118-15604.56.0', 'dut_pool': 'chrome', }, }, @@ -549,7 +549,7 @@ 'enabled': False, 'skylab': { 'cros_board': 'guybrush', - 'cros_img': 'guybrush-release/R120-15656.0.0', + 'cros_img': 'guybrush-release/R120-15662.9.0', 'dut_pool': 'chrome', }, }, @@ -557,7 +557,7 @@ 'identifier': 'GUYBRUSH_RELEASE_BETA', 'skylab': { 'cros_board': 'guybrush', - 'cros_img': 'guybrush-release/R119-15633.23.0', + 'cros_img': 'guybrush-release/R119-15633.37.0', 'dut_pool': 'chrome', }, }, @@ -565,7 +565,7 @@ 'identifier': 'GUYBRUSH_RELEASE_STABLE', 'skylab': { 'cros_board': 'guybrush', - 'cros_img': 'guybrush-release/R118-15604.45.0', + 'cros_img': 'guybrush-release/R118-15604.57.0', 'dut_pool': 'chrome', }, }, @@ -583,7 +583,7 @@ 'enabled': False, 'skylab': { 'cros_board': 'puff', - 'cros_img': 'puff-release/R120-15656.0.0', + 'cros_img': 'puff-release/R120-15662.9.0', 'dut_pool': 'chrome', }, }, @@ -591,7 +591,7 @@ 'identifier': 'PUFF_RELEASE_BETA', 'skylab': { 'cros_board': 'puff', - 'cros_img': 'puff-release/R119-15633.23.0', + 'cros_img': 'puff-release/R119-15633.37.0', 'dut_pool': 'chrome', }, }, @@ -599,7 +599,7 @@ 'identifier': 'PUFF_RELEASE_STABLE', 'skylab': { 'cros_board': 'puff', - 'cros_img': 'puff-release/R118-15604.45.0', + 'cros_img': 'puff-release/R118-15604.57.0', 'dut_pool': 'chrome', }, }, @@ -626,21 +626,21 @@ 'enabled': False, 'skylab': { 'cros_board': 'hana', - 'cros_img': 'hana-release/R120-15656.0.0', + 'cros_img': 'hana-release/R120-15662.9.0', }, }, 'CROS_HANA_RELEASE_BETA': { 'identifier': 'HANA_RELEASE_BETA', 'skylab': { 'cros_board': 'hana', - 'cros_img': 'hana-release/R119-15633.23.0', + 'cros_img': 'hana-release/R119-15633.37.0', }, }, 'CROS_HANA_RELEASE_STABLE': { 'identifier': 'HANA_RELEASE_STABLE', 'skylab': { 'cros_board': 'hana', - 'cros_img': 'hana-release/R118-15604.45.0', + 'cros_img': 'hana-release/R118-15604.57.0', }, }, 'CROS_JACUZZI_RELEASE_LKGM': { @@ -656,14 +656,14 @@ 'enabled': False, 'skylab': { 'cros_board': 'jacuzzi', - 'cros_img': 'jacuzzi-release/R120-15656.0.0', + 'cros_img': 'jacuzzi-release/R120-15662.9.0', }, }, 'CROS_JACUZZI_RELEASE_BETA': { 'identifier': 'JACUZZI_RELEASE_BETA', 'skylab': { 'cros_board': 'jacuzzi', - 'cros_img': 'jacuzzi-release/R119-15633.23.0', + 'cros_img': 'jacuzzi-release/R119-15633.37.0', }, }, 'CROS_JACUZZI_RELEASE_CHROME_FROM_TLS_ASH_LKGM': { @@ -678,7 +678,7 @@ 'identifier': 'JACUZZI_RELEASE_STABLE', 'skylab': { 'cros_board': 'jacuzzi', - 'cros_img': 'jacuzzi-release/R118-15604.45.0', + 'cros_img': 'jacuzzi-release/R118-15604.57.0', }, }, 'CROS_JACUZZI_PUBLIC_LKGM': { @@ -735,21 +735,21 @@ 'enabled': False, 'skylab': { 'cros_board': 'octopus', - 'cros_img': 'octopus-release/R120-15656.0.0', + 'cros_img': 'octopus-release/R120-15662.9.0', }, }, 'CROS_OCTOPUS_RELEASE_BETA': { 'identifier': 'OCTOPUS_RELEASE_BETA', 'skylab': { 'cros_board': 'octopus', - 'cros_img': 'octopus-release/R119-15633.23.0', + 'cros_img': 'octopus-release/R119-15633.37.0', }, }, 'CROS_OCTOPUS_RELEASE_STABLE': { 'identifier': 'OCTOPUS_RELEASE_STABLE', 'skylab': { 'cros_board': 'octopus', - 'cros_img': 'octopus-release/R118-15604.45.0', + 'cros_img': 'octopus-release/R118-15604.57.0', }, }, 'CROS_STRONGBAD_RELEASE_LKGM': { @@ -765,21 +765,21 @@ 'enabled': False, 'skylab': { 'cros_board': 'strongbad', - 'cros_img': 'strongbad-release/R120-15656.0.0', + 'cros_img': 'strongbad-release/R120-15662.9.0', }, }, 'CROS_STRONGBAD_RELEASE_BETA': { 'identifier': 'STRONGBAD_RELEASE_BETA', 'skylab': { 'cros_board': 'strongbad', - 'cros_img': 'strongbad-release/R119-15633.23.0', + 'cros_img': 'strongbad-release/R119-15633.37.0', }, }, 'CROS_STRONGBAD_RELEASE_STABLE': { 'identifier': 'STRONGBAD_RELEASE_STABLE', 'skylab': { 'cros_board': 'strongbad', - 'cros_img': 'strongbad-release/R118-15604.45.0', + 'cros_img': 'strongbad-release/R118-15604.57.0', }, }, 'CROS_TROGDOR_RELEASE_ASH_LKGM': { diff -Nru chromium-119.0.6045.105/infra/config/targets/cros-skylab-variants.json chromium-119.0.6045.159/infra/config/targets/cros-skylab-variants.json --- chromium-119.0.6045.105/infra/config/targets/cros-skylab-variants.json 2023-11-01 18:10:29.000000000 +0000 +++ chromium-119.0.6045.159/infra/config/targets/cros-skylab-variants.json 2023-11-14 22:56:41.000000000 +0000 @@ -23,8 +23,8 @@ "CROS_BRYA_RELEASE_DEV": { "skylab": { "cros_board": "brya", - "cros_chrome_version": "120.0.6085.0", - "cros_img": "brya-release/R120-15656.0.0", + "cros_chrome_version": "120.0.6099.13", + "cros_img": "brya-release/R120-15662.9.0", "dut_pool": "chrome" }, "enabled": false, @@ -33,8 +33,8 @@ "CROS_BRYA_RELEASE_BETA": { "skylab": { "cros_board": "brya", - "cros_chrome_version": "119.0.6045.38", - "cros_img": "brya-release/R119-15633.23.0", + "cros_chrome_version": "119.0.6045.116", + "cros_img": "brya-release/R119-15633.37.0", "dut_pool": "chrome" }, "enabled": true, @@ -43,8 +43,8 @@ "CROS_BRYA_RELEASE_STABLE": { "skylab": { "cros_board": "brya", - "cros_chrome_version": "118.0.5993.86", - "cros_img": "brya-release/R118-15604.45.0", + "cros_chrome_version": "118.0.5993.124", + "cros_img": "brya-release/R118-15604.57.0", "dut_pool": "chrome" }, "enabled": true, @@ -63,8 +63,8 @@ "CROS_DEDEDE_RELEASE_DEV": { "skylab": { "cros_board": "dedede", - "cros_chrome_version": "120.0.6085.0", - "cros_img": "dedede-release/R120-15656.0.0" + "cros_chrome_version": "120.0.6099.13", + "cros_img": "dedede-release/R120-15662.9.0" }, "enabled": false, "identifier": "DEDEDE_RELEASE_DEV" @@ -72,8 +72,8 @@ "CROS_DEDEDE_RELEASE_BETA": { "skylab": { "cros_board": "dedede", - "cros_chrome_version": "119.0.6045.38", - "cros_img": "dedede-release/R119-15633.23.0" + "cros_chrome_version": "119.0.6045.116", + "cros_img": "dedede-release/R119-15633.37.0" }, "enabled": true, "identifier": "DEDEDE_RELEASE_BETA" @@ -81,8 +81,8 @@ "CROS_DEDEDE_RELEASE_STABLE": { "skylab": { "cros_board": "dedede", - "cros_chrome_version": "118.0.5993.86", - "cros_img": "dedede-release/R118-15604.45.0" + "cros_chrome_version": "118.0.5993.124", + "cros_img": "dedede-release/R118-15604.57.0" }, "enabled": true, "identifier": "DEDEDE_RELEASE_STABLE" @@ -101,8 +101,8 @@ "CROS_FIZZ_RELEASE_DEV": { "skylab": { "cros_board": "fizz", - "cros_chrome_version": "120.0.6085.0", - "cros_img": "fizz-release/R120-15656.0.0", + "cros_chrome_version": "120.0.6099.13", + "cros_img": "fizz-release/R120-15662.9.0", "dut_pool": "chrome" }, "enabled": false, @@ -111,8 +111,8 @@ "CROS_FIZZ_RELEASE_BETA": { "skylab": { "cros_board": "fizz", - "cros_chrome_version": "119.0.6045.38", - "cros_img": "fizz-release/R119-15633.23.0", + "cros_chrome_version": "119.0.6045.116", + "cros_img": "fizz-release/R119-15633.37.0", "dut_pool": "chrome" }, "enabled": true, @@ -121,8 +121,8 @@ "CROS_FIZZ_RELEASE_STABLE": { "skylab": { "cros_board": "fizz", - "cros_chrome_version": "118.0.5993.86", - "cros_img": "fizz-release/R118-15604.45.0", + "cros_chrome_version": "118.0.5993.123", + "cros_img": "fizz-release/R118-15604.56.0", "dut_pool": "chrome" }, "enabled": true, @@ -142,8 +142,8 @@ "CROS_GUYBRUSH_RELEASE_DEV": { "skylab": { "cros_board": "guybrush", - "cros_chrome_version": "120.0.6085.0", - "cros_img": "guybrush-release/R120-15656.0.0", + "cros_chrome_version": "120.0.6099.13", + "cros_img": "guybrush-release/R120-15662.9.0", "dut_pool": "chrome" }, "enabled": false, @@ -152,8 +152,8 @@ "CROS_GUYBRUSH_RELEASE_BETA": { "skylab": { "cros_board": "guybrush", - "cros_chrome_version": "119.0.6045.38", - "cros_img": "guybrush-release/R119-15633.23.0", + "cros_chrome_version": "119.0.6045.116", + "cros_img": "guybrush-release/R119-15633.37.0", "dut_pool": "chrome" }, "enabled": true, @@ -162,8 +162,8 @@ "CROS_GUYBRUSH_RELEASE_STABLE": { "skylab": { "cros_board": "guybrush", - "cros_chrome_version": "118.0.5993.86", - "cros_img": "guybrush-release/R118-15604.45.0", + "cros_chrome_version": "118.0.5993.124", + "cros_img": "guybrush-release/R118-15604.57.0", "dut_pool": "chrome" }, "enabled": true, @@ -183,8 +183,8 @@ "CROS_PUFF_RELEASE_DEV": { "skylab": { "cros_board": "puff", - "cros_chrome_version": "120.0.6085.0", - "cros_img": "puff-release/R120-15656.0.0", + "cros_chrome_version": "120.0.6099.13", + "cros_img": "puff-release/R120-15662.9.0", "dut_pool": "chrome" }, "enabled": false, @@ -193,8 +193,8 @@ "CROS_PUFF_RELEASE_BETA": { "skylab": { "cros_board": "puff", - "cros_chrome_version": "119.0.6045.38", - "cros_img": "puff-release/R119-15633.23.0", + "cros_chrome_version": "119.0.6045.116", + "cros_img": "puff-release/R119-15633.37.0", "dut_pool": "chrome" }, "enabled": true, @@ -203,8 +203,8 @@ "CROS_PUFF_RELEASE_STABLE": { "skylab": { "cros_board": "puff", - "cros_chrome_version": "118.0.5993.86", - "cros_img": "puff-release/R118-15604.45.0", + "cros_chrome_version": "118.0.5993.124", + "cros_img": "puff-release/R118-15604.57.0", "dut_pool": "chrome" }, "enabled": true, @@ -235,8 +235,8 @@ "CROS_HANA_RELEASE_DEV": { "skylab": { "cros_board": "hana", - "cros_chrome_version": "120.0.6085.0", - "cros_img": "hana-release/R120-15656.0.0" + "cros_chrome_version": "120.0.6099.13", + "cros_img": "hana-release/R120-15662.9.0" }, "enabled": false, "identifier": "HANA_RELEASE_DEV" @@ -244,8 +244,8 @@ "CROS_HANA_RELEASE_BETA": { "skylab": { "cros_board": "hana", - "cros_chrome_version": "119.0.6045.38", - "cros_img": "hana-release/R119-15633.23.0" + "cros_chrome_version": "119.0.6045.116", + "cros_img": "hana-release/R119-15633.37.0" }, "enabled": true, "identifier": "HANA_RELEASE_BETA" @@ -253,8 +253,8 @@ "CROS_HANA_RELEASE_STABLE": { "skylab": { "cros_board": "hana", - "cros_chrome_version": "118.0.5993.86", - "cros_img": "hana-release/R118-15604.45.0" + "cros_chrome_version": "118.0.5993.124", + "cros_img": "hana-release/R118-15604.57.0" }, "enabled": true, "identifier": "HANA_RELEASE_STABLE" @@ -272,8 +272,8 @@ "CROS_JACUZZI_RELEASE_DEV": { "skylab": { "cros_board": "jacuzzi", - "cros_chrome_version": "120.0.6085.0", - "cros_img": "jacuzzi-release/R120-15656.0.0" + "cros_chrome_version": "120.0.6099.13", + "cros_img": "jacuzzi-release/R120-15662.9.0" }, "enabled": false, "identifier": "JACUZZI_RELEASE_DEV" @@ -281,8 +281,8 @@ "CROS_JACUZZI_RELEASE_BETA": { "skylab": { "cros_board": "jacuzzi", - "cros_chrome_version": "119.0.6045.38", - "cros_img": "jacuzzi-release/R119-15633.23.0" + "cros_chrome_version": "119.0.6045.116", + "cros_img": "jacuzzi-release/R119-15633.37.0" }, "enabled": true, "identifier": "JACUZZI_RELEASE_BETA" @@ -299,8 +299,8 @@ "CROS_JACUZZI_RELEASE_STABLE": { "skylab": { "cros_board": "jacuzzi", - "cros_chrome_version": "118.0.5993.86", - "cros_img": "jacuzzi-release/R118-15604.45.0" + "cros_chrome_version": "118.0.5993.124", + "cros_img": "jacuzzi-release/R118-15604.57.0" }, "enabled": true, "identifier": "JACUZZI_RELEASE_STABLE" @@ -368,8 +368,8 @@ "CROS_OCTOPUS_RELEASE_DEV": { "skylab": { "cros_board": "octopus", - "cros_chrome_version": "120.0.6085.0", - "cros_img": "octopus-release/R120-15656.0.0" + "cros_chrome_version": "120.0.6099.13", + "cros_img": "octopus-release/R120-15662.9.0" }, "enabled": false, "identifier": "OCTOPUS_RELEASE_DEV" @@ -377,8 +377,8 @@ "CROS_OCTOPUS_RELEASE_BETA": { "skylab": { "cros_board": "octopus", - "cros_chrome_version": "119.0.6045.38", - "cros_img": "octopus-release/R119-15633.23.0" + "cros_chrome_version": "119.0.6045.116", + "cros_img": "octopus-release/R119-15633.37.0" }, "enabled": true, "identifier": "OCTOPUS_RELEASE_BETA" @@ -386,8 +386,8 @@ "CROS_OCTOPUS_RELEASE_STABLE": { "skylab": { "cros_board": "octopus", - "cros_chrome_version": "118.0.5993.86", - "cros_img": "octopus-release/R118-15604.45.0" + "cros_chrome_version": "118.0.5993.124", + "cros_img": "octopus-release/R118-15604.57.0" }, "enabled": true, "identifier": "OCTOPUS_RELEASE_STABLE" @@ -405,8 +405,8 @@ "CROS_STRONGBAD_RELEASE_DEV": { "skylab": { "cros_board": "strongbad", - "cros_chrome_version": "120.0.6085.0", - "cros_img": "strongbad-release/R120-15656.0.0" + "cros_chrome_version": "120.0.6099.13", + "cros_img": "strongbad-release/R120-15662.9.0" }, "enabled": false, "identifier": "strongbad_RELEASE_DEV" @@ -414,8 +414,8 @@ "CROS_STRONGBAD_RELEASE_BETA": { "skylab": { "cros_board": "strongbad", - "cros_chrome_version": "119.0.6045.38", - "cros_img": "strongbad-release/R119-15633.23.0" + "cros_chrome_version": "119.0.6045.116", + "cros_img": "strongbad-release/R119-15633.37.0" }, "enabled": true, "identifier": "STRONGBAD_RELEASE_BETA" @@ -423,8 +423,8 @@ "CROS_STRONGBAD_RELEASE_STABLE": { "skylab": { "cros_board": "strongbad", - "cros_chrome_version": "118.0.5993.86", - "cros_img": "strongbad-release/R118-15604.45.0" + "cros_chrome_version": "118.0.5993.124", + "cros_img": "strongbad-release/R118-15604.57.0" }, "enabled": true, "identifier": "STRONGBAD_RELEASE_STABLE" diff -Nru chromium-119.0.6045.105/infra/config/targets/lacros-version-skew-variants.json chromium-119.0.6045.159/infra/config/targets/lacros-version-skew-variants.json --- chromium-119.0.6045.105/infra/config/targets/lacros-version-skew-variants.json 2023-11-01 18:10:29.000000000 +0000 +++ chromium-119.0.6045.159/infra/config/targets/lacros-version-skew-variants.json 2023-11-14 22:56:41.000000000 +0000 @@ -1,64 +1,64 @@ { "LACROS_VERSION_SKEW_CANARY": { "args": [ - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6096.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v121.0.6122.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6122.0", "identifier": "Lacros version skew testing ash canary", "swarming": { "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6096.0", - "revision": "version:120.0.6096.0" + "location": "lacros_version_skew_tests_v121.0.6122.0", + "revision": "version:121.0.6122.0" } ] } }, "LACROS_VERSION_SKEW_DEV": { "args": [ - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6085.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6099.13/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6085.0", + "description": "Run with ash-chrome version 120.0.6099.13", "identifier": "Lacros version skew testing ash dev", "swarming": { "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6085.0", - "revision": "version:120.0.6085.0" + "location": "lacros_version_skew_tests_v120.0.6099.13", + "revision": "version:120.0.6099.13" } ] } }, "LACROS_VERSION_SKEW_BETA": { "args": [ - "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.38/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.116/test_ash_chrome" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.116", "identifier": "Lacros version skew testing ash beta", "swarming": { "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v119.0.6045.38", - "revision": "version:119.0.6045.38" + "location": "lacros_version_skew_tests_v119.0.6045.116", + "revision": "version:119.0.6045.116" } ] } }, "LACROS_VERSION_SKEW_STABLE": { "args": [ - "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.106/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.124/test_ash_chrome" ], - "description": "Run with ash-chrome version 118.0.5993.106", + "description": "Run with ash-chrome version 118.0.5993.124", "identifier": "Lacros version skew testing ash stable", "swarming": { "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v118.0.5993.106", - "revision": "version:118.0.5993.106" + "location": "lacros_version_skew_tests_v118.0.5993.124", + "revision": "version:118.0.5993.124" } ] } diff -Nru chromium-119.0.6045.105/media/audio/cras/cras_input.cc chromium-119.0.6045.159/media/audio/cras/cras_input.cc --- chromium-119.0.6045.105/media/audio/cras/cras_input.cc 2023-11-01 18:10:31.000000000 +0000 +++ chromium-119.0.6045.159/media/audio/cras/cras_input.cc 2023-11-14 22:56:43.000000000 +0000 @@ -186,12 +186,19 @@ rc = pin_device_ = libcras_client_get_floop_dev_idx_by_client_types( client_, client_types); } else { - rc = libcras_client_get_loopback_dev_idx(client_, &pin_device_); + if (base::FeatureList::IsEnabled( + media::kAudioFlexibleLoopbackForSystemLoopback)) { + rc = pin_device_ = libcras_client_get_floop_dev_idx_by_client_types( + client_, ~(uint32_t)0); + } else { + rc = libcras_client_get_loopback_dev_idx(client_, &pin_device_); + } } if (rc < 0) { DLOG(WARNING) << "Couldn't find CRAS loopback device " - << (is_loopback_without_chrome_ ? " for flexible loopback." - : " for full loopback."); + << (is_loopback_without_chrome_ + ? " for non-chrome loopback." + : " for full loopback."); ReportStreamOpenResult( StreamOpenResult::kCallbackOpenCannotFindLoopbackDevice); libcras_client_destroy(client_); diff -Nru chromium-119.0.6045.105/media/base/media_switches.cc chromium-119.0.6045.159/media/base/media_switches.cc --- chromium-119.0.6045.105/media/base/media_switches.cc 2023-11-01 18:10:31.000000000 +0000 +++ chromium-119.0.6045.159/media/base/media_switches.cc 2023-11-14 22:56:43.000000000 +0000 @@ -563,6 +563,10 @@ BASE_FEATURE(kCrOSSystemVoiceIsolationOption, "CrOSSystemVoiceIsolationOption", base::FEATURE_DISABLED_BY_DEFAULT); + +BASE_FEATURE(kAudioFlexibleLoopbackForSystemLoopback, + "AudioFlexibleLoopbackForSystemLoopback", + base::FEATURE_ENABLED_BY_DEFAULT); #endif // Make MSE garbage collection algorithm more aggressive when we are under diff -Nru chromium-119.0.6045.105/media/base/media_switches.h chromium-119.0.6045.159/media/base/media_switches.h --- chromium-119.0.6045.105/media/base/media_switches.h 2023-11-01 18:10:31.000000000 +0000 +++ chromium-119.0.6045.159/media/base/media_switches.h 2023-11-14 22:56:43.000000000 +0000 @@ -212,6 +212,7 @@ MEDIA_EXPORT BASE_DECLARE_FEATURE(kIgnoreUiGains); MEDIA_EXPORT BASE_DECLARE_FEATURE(kShowForceRespectUiGainsToggle); MEDIA_EXPORT BASE_DECLARE_FEATURE(kCrOSSystemVoiceIsolationOption); +MEDIA_EXPORT BASE_DECLARE_FEATURE(kAudioFlexibleLoopbackForSystemLoopback); #endif MEDIA_EXPORT BASE_DECLARE_FEATURE(kD3D11VideoDecoderUseSharedHandle); MEDIA_EXPORT BASE_DECLARE_FEATURE(kDedicatedMediaServiceThread); diff -Nru chromium-119.0.6045.105/media/gpu/chromeos/video_decoder_pipeline.cc chromium-119.0.6045.159/media/gpu/chromeos/video_decoder_pipeline.cc --- chromium-119.0.6045.105/media/gpu/chromeos/video_decoder_pipeline.cc 2023-11-01 18:10:31.000000000 +0000 +++ chromium-119.0.6045.159/media/gpu/chromeos/video_decoder_pipeline.cc 2023-11-14 22:56:43.000000000 +0000 @@ -365,6 +365,13 @@ }); } + if (workarounds.disable_accelerated_hevc_decode) { + base::EraseIf(configs.value(), [](const auto& config) { + return config.profile_min >= HEVCPROFILE_MIN && + config.profile_max <= HEVCPROFILE_MAX; + }); + } + return configs; } diff -Nru chromium-119.0.6045.105/net/http/transport_security_state_static.pins chromium-119.0.6045.159/net/http/transport_security_state_static.pins --- chromium-119.0.6045.105/net/http/transport_security_state_static.pins 2023-11-01 18:10:34.000000000 +0000 +++ chromium-119.0.6045.159/net/http/transport_security_state_static.pins 2023-11-14 22:56:45.000000000 +0000 @@ -43,9 +43,9 @@ # hash function for preloaded entries again (we have already done so once). # -# Last updated: 2023-10-23 12:58 UTC +# Last updated: 2023-11-13 12:54 UTC PinsListTimestamp -1698065910 +1699880080 TestSPKI sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= diff -Nru chromium-119.0.6045.105/net/http/transport_security_state_static_pins.json chromium-119.0.6045.159/net/http/transport_security_state_static_pins.json --- chromium-119.0.6045.105/net/http/transport_security_state_static_pins.json 2023-11-01 18:10:34.000000000 +0000 +++ chromium-119.0.6045.159/net/http/transport_security_state_static_pins.json 2023-11-14 22:56:45.000000000 +0000 @@ -31,7 +31,7 @@ // the 'static_spki_hashes' and 'bad_static_spki_hashes' fields in 'pinsets' // refer to, and the timestamp at which the pins list was last updated. // -// Last updated: 2023-10-23 12:58 UTC +// Last updated: 2023-11-13 12:54 UTC // { "pinsets": [ diff -Nru chromium-119.0.6045.105/remoting/resources/remoting_strings_as.xtb chromium-119.0.6045.159/remoting/resources/remoting_strings_as.xtb --- chromium-119.0.6045.105/remoting/resources/remoting_strings_as.xtb 2023-11-01 18:10:34.000000000 +0000 +++ chromium-119.0.6045.159/remoting/resources/remoting_strings_as.xtb 2023-11-14 22:56:46.000000000 +0000 @@ -40,7 +40,7 @@ Chromoting বিশ্বাসযোগ্যতা প্ৰমাণীকৰণ কৰি থাকোঁতে কিবা আসোঁৱাহ হ’ল। পিন দিয়ক -আপুনি বৰ্তমান এই মেচিনটো অন্য এজন ব্যৱহাৰকাৰীৰ সৈতে শ্বেয়াৰ কৰি আছে। আপুনি শ্বেয়াৰ কৰি থাকিব বিচাৰেনে? +আপুনি বৰ্তমান এই মেচিনটো অন্য এগৰাকী ব্যৱহাৰকাৰীৰ সৈতে শ্বেয়াৰ কৰি আছে। আপুনি শ্বেয়াৰ কৰি থাকিব বিচাৰেনে? হ’ষ্টৰ বাবে বিশ্বাসযোগ্যতা সত্যাপন কৰক স্পর্শ ম’ড ৰিম'ট কম্পিউটাৰে সংযোগৰ অনুৰোধলৈ সঁহাৰি জনোৱা নাই। এইটো যে অনলাইন হৈ আছে সেয়া সত্যাপন কৰি আকৌ চেষ্টা কৰক। diff -Nru chromium-119.0.6045.105/sandbox/policy/features.cc chromium-119.0.6045.159/sandbox/policy/features.cc --- chromium-119.0.6045.105/sandbox/policy/features.cc 2023-11-01 18:10:35.000000000 +0000 +++ chromium-119.0.6045.159/sandbox/policy/features.cc 2023-11-14 22:56:46.000000000 +0000 @@ -126,6 +126,20 @@ base::FEATURE_DISABLED_BY_DEFAULT); #endif // BUILDFLAG(IS_CHROMEOS_ASH) +#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) +// Enabling the kNetworkServiceSandbox feature automatically enables Spectre +// variant 2 mitigations in the network service. This can lead to performance +// regressions, so enabling this feature will turn off the Spectre Variant 2 +// mitigations. +// +// On ChromeOS Ash, this overrides the system-wide kSpectreVariant2Mitigation +// feature above, but not the user-controlled kForceSpectreVariant2Mitigation +// feature. +BASE_FEATURE(kForceDisableSpectreVariant2MitigationInNetworkService, + "kForceDisableSpectreVariant2MitigationInNetworkService", + base::FEATURE_DISABLED_BY_DEFAULT); +#endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) + #if BUILDFLAG(IS_MAC) // Enables caching compiled sandbox profiles. Only some profiles support this, // as controlled by CanCacheSandboxPolicy(). diff -Nru chromium-119.0.6045.105/sandbox/policy/features.h chromium-119.0.6045.159/sandbox/policy/features.h --- chromium-119.0.6045.105/sandbox/policy/features.h 2023-11-01 18:10:35.000000000 +0000 +++ chromium-119.0.6045.159/sandbox/policy/features.h 2023-11-14 22:56:46.000000000 +0000 @@ -44,6 +44,11 @@ SANDBOX_POLICY_EXPORT BASE_DECLARE_FEATURE(kForceSpectreVariant2Mitigation); #endif // BUILDFLAG(IS_CHROMEOS_ASH) +#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) +SANDBOX_POLICY_EXPORT BASE_DECLARE_FEATURE( + kForceDisableSpectreVariant2MitigationInNetworkService); +#endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) + #if BUILDFLAG(IS_MAC) SANDBOX_POLICY_EXPORT BASE_DECLARE_FEATURE(kCacheMacSandboxProfiles); #endif // BUILDFLAG(IS_MAC) diff -Nru chromium-119.0.6045.105/sandbox/policy/linux/sandbox_linux.cc chromium-119.0.6045.159/sandbox/policy/linux/sandbox_linux.cc --- chromium-119.0.6045.105/sandbox/policy/linux/sandbox_linux.cc 2023-11-01 18:10:35.000000000 +0000 +++ chromium-119.0.6045.159/sandbox/policy/linux/sandbox_linux.cc 2023-11-14 22:56:46.000000000 +0000 @@ -47,6 +47,7 @@ #include "sandbox/linux/syscall_broker/broker_command.h" #include "sandbox/linux/syscall_broker/broker_process.h" #include "sandbox/linux/system_headers/linux_stat.h" +#include "sandbox/policy/features.h" #include "sandbox/policy/linux/bpf_broker_policy_linux.h" #include "sandbox/policy/linux/sandbox_seccomp_bpf_linux.h" #include "sandbox/policy/mojom/sandbox.mojom.h" @@ -310,12 +311,18 @@ ? SandboxBPF::SeccompLevel::MULTI_THREADED : SandboxBPF::SeccompLevel::SINGLE_THREADED; + bool force_disable_spectre_variant2_mitigation = + base::FeatureList::IsEnabled( + features::kForceDisableSpectreVariant2MitigationInNetworkService) && + sandbox_type == sandbox::mojom::Sandbox::kNetwork; + // If the kernel supports the sandbox, and if the command line says we // should enable it, enable it or die. std::unique_ptr policy = SandboxSeccompBPF::PolicyForSandboxType(sandbox_type, options); SandboxSeccompBPF::StartSandboxWithExternalPolicy( - std::move(policy), OpenProc(proc_fd_), seccomp_level); + std::move(policy), OpenProc(proc_fd_), seccomp_level, + force_disable_spectre_variant2_mitigation); SandboxSeccompBPF::RunSandboxSanityChecks(sandbox_type, options); seccomp_bpf_started_ = true; LogSandboxStarted("seccomp-bpf"); diff -Nru chromium-119.0.6045.105/sandbox/policy/linux/sandbox_seccomp_bpf_linux.cc chromium-119.0.6045.159/sandbox/policy/linux/sandbox_seccomp_bpf_linux.cc --- chromium-119.0.6045.105/sandbox/policy/linux/sandbox_seccomp_bpf_linux.cc 2023-11-01 18:10:35.000000000 +0000 +++ chromium-119.0.6045.159/sandbox/policy/linux/sandbox_seccomp_bpf_linux.cc 2023-11-14 22:56:46.000000000 +0000 @@ -15,6 +15,7 @@ #include "base/check_op.h" #include "base/command_line.h" +#include "base/feature_list.h" #include "base/notreached.h" #include "build/build_config.h" #include "build/chromeos_buildflags.h" @@ -307,7 +308,8 @@ bool SandboxSeccompBPF::StartSandboxWithExternalPolicy( std::unique_ptr policy, base::ScopedFD proc_fd, - SandboxBPF::SeccompLevel seccomp_level) { + SandboxBPF::SeccompLevel seccomp_level, + bool force_disable_spectre_variant2_mitigation) { #if BUILDFLAG(USE_SECCOMP_BPF) if (IsSeccompBPFDesired() && SupportsSandbox()) { CHECK(policy); @@ -320,10 +322,19 @@ sandbox.SetProcFd(std::move(proc_fd)); bool enable_ibpb = true; #if BUILDFLAG(IS_CHROMEOS_ASH) - enable_ibpb = - base::FeatureList::IsEnabled( - features::kForceSpectreVariant2Mitigation) || - base::FeatureList::IsEnabled(features::kSpectreVariant2Mitigation); + if (base::FeatureList::IsEnabled( + features::kForceSpectreVariant2Mitigation)) { + enable_ibpb = true; + } else if (force_disable_spectre_variant2_mitigation) { + enable_ibpb = false; + } else { + enable_ibpb = + base::FeatureList::IsEnabled(features::kSpectreVariant2Mitigation); + } +#else // BUILDFLAG(IS_CHROMEOS_ASH) + // On Linux desktop and Lacros, the Spectre variant 2 mitigation is + // on by default unless force disabled by the caller. + enable_ibpb = !force_disable_spectre_variant2_mitigation; #endif // BUILDFLAG(IS_CHROMEOS_ASH) CHECK(sandbox.StartSandbox(seccomp_level, enable_ibpb)); return true; diff -Nru chromium-119.0.6045.105/sandbox/policy/linux/sandbox_seccomp_bpf_linux.h chromium-119.0.6045.159/sandbox/policy/linux/sandbox_seccomp_bpf_linux.h --- chromium-119.0.6045.105/sandbox/policy/linux/sandbox_seccomp_bpf_linux.h 2023-11-01 18:10:35.000000000 +0000 +++ chromium-119.0.6045.159/sandbox/policy/linux/sandbox_seccomp_bpf_linux.h 2023-11-14 22:56:46.000000000 +0000 @@ -64,11 +64,16 @@ // This is the API to enable a seccomp-bpf sandbox by using an // external policy. + // If `force_disable_spectre_variant2_mitigation` is true, the Spectre variant + // 2 mitigation will be disabled--except on ChromeOS ash if the user always + // wants the mitigation enabled, see the feature + // sandbox::policy::features::kForceSpectreVariant2Mitigation. static bool StartSandboxWithExternalPolicy( std::unique_ptr policy, base::ScopedFD proc_fd, SandboxBPF::SeccompLevel seccomp_level = - SandboxBPF::SeccompLevel::SINGLE_THREADED); + SandboxBPF::SeccompLevel::SINGLE_THREADED, + bool force_disable_spectre_variant2_mitigation = false); // The "baseline" policy can be a useful base to build a sandbox policy. static std::unique_ptr GetBaselinePolicy(); diff -Nru chromium-119.0.6045.105/services/network/oblivious_http_request_handler.cc chromium-119.0.6045.159/services/network/oblivious_http_request_handler.cc --- chromium-119.0.6045.105/services/network/oblivious_http_request_handler.cc 2023-11-01 18:10:35.000000000 +0000 +++ chromium-119.0.6045.159/services/network/oblivious_http_request_handler.cc 2023-11-14 22:56:46.000000000 +0000 @@ -482,7 +482,7 @@ *headers, base::BindOnce( &ObliviousHttpRequestHandler::OnDoneFinalizingTrustTokenOperation, - base::Unretained(this), id, inner_status_code, std::move(headers), + base::Unretained(this), id, inner_status_code, headers, std::string(bhttp_response->body()))); return; } diff -Nru chromium-119.0.6045.105/skia/config/SkUserConfig.h chromium-119.0.6045.159/skia/config/SkUserConfig.h --- chromium-119.0.6045.105/skia/config/SkUserConfig.h 2023-11-01 18:10:35.000000000 +0000 +++ chromium-119.0.6045.159/skia/config/SkUserConfig.h 2023-11-14 22:56:46.000000000 +0000 @@ -235,6 +235,8 @@ #define SK_ENABLE_SKSL_IN_RASTER_PIPELINE +#define SK_USE_PADDED_BLUR_UPSCALE + ///////////////////////// Imported from BUILD.gn and skia_common.gypi /* In some places Skia can use static initializers for global initialization, diff -Nru chromium-119.0.6045.105/skia/ext/skia_commit_hash.h chromium-119.0.6045.159/skia/ext/skia_commit_hash.h --- chromium-119.0.6045.105/skia/ext/skia_commit_hash.h 2023-11-01 18:15:55.000000000 +0000 +++ chromium-119.0.6045.159/skia/ext/skia_commit_hash.h 2023-11-14 22:59:27.000000000 +0000 @@ -3,6 +3,6 @@ #ifndef SKIA_EXT_SKIA_COMMIT_HASH_H_ #define SKIA_EXT_SKIA_COMMIT_HASH_H_ -#define SKIA_COMMIT_HASH "ab212df482c8fd5b1c1fb302717876d542549624" +#define SKIA_COMMIT_HASH "96270e0be6b3acdbd59e5931a122be16958c9c1e" #endif // SKIA_EXT_SKIA_COMMIT_HASH_H_ diff -Nru chromium-119.0.6045.105/testing/buildbot/chrome.json chromium-119.0.6045.159/testing/buildbot/chrome.json --- chromium-119.0.6045.105/testing/buildbot/chrome.json 2023-11-01 18:10:35.000000000 +0000 +++ chromium-119.0.6045.159/testing/buildbot/chrome.json 2023-11-14 22:56:46.000000000 +0000 @@ -1641,7 +1641,7 @@ "skylab_tests": [ { "cros_board": "brya", - "cros_img": "brya-release/R119-15633.23.0", + "cros_img": "brya-release/R119-15633.37.0", "dut_pool": "chrome", "name": "lacros_all_tast_tests BRYA_RELEASE_BETA", "resultdb": { @@ -1676,7 +1676,7 @@ }, { "cros_board": "brya", - "cros_img": "brya-release/R118-15604.45.0", + "cros_img": "brya-release/R118-15604.57.0", "dut_pool": "chrome", "name": "lacros_all_tast_tests BRYA_RELEASE_STABLE", "resultdb": { @@ -1693,7 +1693,7 @@ }, { "cros_board": "dedede", - "cros_img": "dedede-release/R119-15633.23.0", + "cros_img": "dedede-release/R119-15633.37.0", "name": "lacros_all_tast_tests DEDEDE_RELEASE_BETA", "resultdb": { "enable": true, @@ -1726,7 +1726,7 @@ }, { "cros_board": "dedede", - "cros_img": "dedede-release/R118-15604.45.0", + "cros_img": "dedede-release/R118-15604.57.0", "name": "lacros_all_tast_tests DEDEDE_RELEASE_STABLE", "resultdb": { "enable": true, @@ -1742,7 +1742,7 @@ }, { "cros_board": "fizz", - "cros_img": "fizz-release/R119-15633.23.0", + "cros_img": "fizz-release/R119-15633.37.0", "dut_pool": "chrome", "name": "lacros_all_tast_tests FIZZ_RELEASE_BETA", "resultdb": { @@ -1777,7 +1777,7 @@ }, { "cros_board": "fizz", - "cros_img": "fizz-release/R118-15604.45.0", + "cros_img": "fizz-release/R118-15604.56.0", "dut_pool": "chrome", "name": "lacros_all_tast_tests FIZZ_RELEASE_STABLE", "resultdb": { @@ -1794,7 +1794,7 @@ }, { "cros_board": "guybrush", - "cros_img": "guybrush-release/R119-15633.23.0", + "cros_img": "guybrush-release/R119-15633.37.0", "dut_pool": "chrome", "name": "lacros_all_tast_tests GUYBRUSH_RELEASE_BETA", "resultdb": { @@ -1829,7 +1829,7 @@ }, { "cros_board": "guybrush", - "cros_img": "guybrush-release/R118-15604.45.0", + "cros_img": "guybrush-release/R118-15604.57.0", "dut_pool": "chrome", "name": "lacros_all_tast_tests GUYBRUSH_RELEASE_STABLE", "resultdb": { @@ -1846,7 +1846,7 @@ }, { "cros_board": "puff", - "cros_img": "puff-release/R119-15633.23.0", + "cros_img": "puff-release/R119-15633.37.0", "dut_pool": "chrome", "name": "lacros_all_tast_tests PUFF_RELEASE_BETA", "resultdb": { @@ -1881,7 +1881,7 @@ }, { "cros_board": "puff", - "cros_img": "puff-release/R118-15604.45.0", + "cros_img": "puff-release/R118-15604.57.0", "dut_pool": "chrome", "name": "lacros_all_tast_tests PUFF_RELEASE_STABLE", "resultdb": { @@ -1930,7 +1930,7 @@ "skylab_tests": [ { "cros_board": "jacuzzi", - "cros_img": "jacuzzi-release/R119-15633.23.0", + "cros_img": "jacuzzi-release/R119-15633.37.0", "name": "lacros_all_tast_tests JACUZZI_RELEASE_BETA", "resultdb": { "enable": true, @@ -1963,7 +1963,7 @@ }, { "cros_board": "jacuzzi", - "cros_img": "jacuzzi-release/R118-15604.45.0", + "cros_img": "jacuzzi-release/R118-15604.57.0", "name": "lacros_all_tast_tests JACUZZI_RELEASE_STABLE", "resultdb": { "enable": true, diff -Nru chromium-119.0.6045.105/testing/buildbot/chromium.chromiumos.json chromium-119.0.6045.159/testing/buildbot/chromium.chromiumos.json --- chromium-119.0.6045.105/testing/buildbot/chromium.chromiumos.json 2023-11-01 18:10:35.000000000 +0000 +++ chromium-119.0.6045.159/testing/buildbot/chromium.chromiumos.json 2023-11-14 22:56:46.000000000 +0000 @@ -5146,9 +5146,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.38/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.116/test_ash_chrome" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.116", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -5158,8 +5158,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v119.0.6045.38", - "revision": "version:119.0.6045.38" + "location": "lacros_version_skew_tests_v119.0.6045.116", + "revision": "version:119.0.6045.116" } ], "dimensions": { @@ -5176,9 +5176,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6096.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v121.0.6122.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6122.0", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -5188,8 +5188,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6096.0", - "revision": "version:120.0.6096.0" + "location": "lacros_version_skew_tests_v121.0.6122.0", + "revision": "version:121.0.6122.0" } ], "dimensions": { @@ -5206,9 +5206,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6085.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6099.13/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6085.0", + "description": "Run with ash-chrome version 120.0.6099.13", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -5218,8 +5218,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6085.0", - "revision": "version:120.0.6085.0" + "location": "lacros_version_skew_tests_v120.0.6099.13", + "revision": "version:120.0.6099.13" } ], "dimensions": { @@ -5236,9 +5236,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.106/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.124/test_ash_chrome" ], - "description": "Run with ash-chrome version 118.0.5993.106", + "description": "Run with ash-chrome version 118.0.5993.124", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -5248,8 +5248,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v118.0.5993.106", - "revision": "version:118.0.5993.106" + "location": "lacros_version_skew_tests_v118.0.5993.124", + "revision": "version:118.0.5993.124" } ], "dimensions": { @@ -5301,9 +5301,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.38/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.116/test_ash_chrome" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.116", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -5313,8 +5313,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v119.0.6045.38", - "revision": "version:119.0.6045.38" + "location": "lacros_version_skew_tests_v119.0.6045.116", + "revision": "version:119.0.6045.116" } ], "dimensions": { @@ -5330,9 +5330,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6096.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v121.0.6122.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6122.0", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -5342,8 +5342,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6096.0", - "revision": "version:120.0.6096.0" + "location": "lacros_version_skew_tests_v121.0.6122.0", + "revision": "version:121.0.6122.0" } ], "dimensions": { @@ -5359,9 +5359,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6085.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6099.13/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6085.0", + "description": "Run with ash-chrome version 120.0.6099.13", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -5371,8 +5371,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6085.0", - "revision": "version:120.0.6085.0" + "location": "lacros_version_skew_tests_v120.0.6099.13", + "revision": "version:120.0.6099.13" } ], "dimensions": { @@ -5388,9 +5388,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.106/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.124/test_ash_chrome" ], - "description": "Run with ash-chrome version 118.0.5993.106", + "description": "Run with ash-chrome version 118.0.5993.124", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -5400,8 +5400,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v118.0.5993.106", - "revision": "version:118.0.5993.106" + "location": "lacros_version_skew_tests_v118.0.5993.124", + "revision": "version:118.0.5993.124" } ], "dimensions": { @@ -5437,9 +5437,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.38/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.116/test_ash_chrome" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.116", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -5449,8 +5449,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v119.0.6045.38", - "revision": "version:119.0.6045.38" + "location": "lacros_version_skew_tests_v119.0.6045.116", + "revision": "version:119.0.6045.116" } ], "dimensions": { @@ -5467,9 +5467,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6096.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v121.0.6122.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6122.0", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -5479,8 +5479,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6096.0", - "revision": "version:120.0.6096.0" + "location": "lacros_version_skew_tests_v121.0.6122.0", + "revision": "version:121.0.6122.0" } ], "dimensions": { @@ -5497,9 +5497,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6085.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6099.13/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6085.0", + "description": "Run with ash-chrome version 120.0.6099.13", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -5509,8 +5509,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6085.0", - "revision": "version:120.0.6085.0" + "location": "lacros_version_skew_tests_v120.0.6099.13", + "revision": "version:120.0.6099.13" } ], "dimensions": { @@ -5527,9 +5527,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.106/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.124/test_ash_chrome" ], - "description": "Run with ash-chrome version 118.0.5993.106", + "description": "Run with ash-chrome version 118.0.5993.124", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -5539,8 +5539,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v118.0.5993.106", - "revision": "version:118.0.5993.106" + "location": "lacros_version_skew_tests_v118.0.5993.124", + "revision": "version:118.0.5993.124" } ], "dimensions": { diff -Nru chromium-119.0.6045.105/testing/buildbot/chromium.coverage.json chromium-119.0.6045.159/testing/buildbot/chromium.coverage.json --- chromium-119.0.6045.105/testing/buildbot/chromium.coverage.json 2023-11-01 18:10:35.000000000 +0000 +++ chromium-119.0.6045.159/testing/buildbot/chromium.coverage.json 2023-11-14 22:56:46.000000000 +0000 @@ -25355,9 +25355,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.38/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.116/test_ash_chrome" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.116", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -25367,8 +25367,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v119.0.6045.38", - "revision": "version:119.0.6045.38" + "location": "lacros_version_skew_tests_v119.0.6045.116", + "revision": "version:119.0.6045.116" } ], "dimensions": { @@ -25384,9 +25384,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6096.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v121.0.6122.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6122.0", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -25396,8 +25396,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6096.0", - "revision": "version:120.0.6096.0" + "location": "lacros_version_skew_tests_v121.0.6122.0", + "revision": "version:121.0.6122.0" } ], "dimensions": { @@ -25413,9 +25413,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6085.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6099.13/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6085.0", + "description": "Run with ash-chrome version 120.0.6099.13", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -25425,8 +25425,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6085.0", - "revision": "version:120.0.6085.0" + "location": "lacros_version_skew_tests_v120.0.6099.13", + "revision": "version:120.0.6099.13" } ], "dimensions": { @@ -25442,9 +25442,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.106/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.124/test_ash_chrome" ], - "description": "Run with ash-chrome version 118.0.5993.106", + "description": "Run with ash-chrome version 118.0.5993.124", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -25454,8 +25454,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v118.0.5993.106", - "revision": "version:118.0.5993.106" + "location": "lacros_version_skew_tests_v118.0.5993.124", + "revision": "version:118.0.5993.124" } ], "dimensions": { @@ -25504,9 +25504,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.38/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.116/test_ash_chrome" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.116", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -25516,8 +25516,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v119.0.6045.38", - "revision": "version:119.0.6045.38" + "location": "lacros_version_skew_tests_v119.0.6045.116", + "revision": "version:119.0.6045.116" } ], "dimensions": { @@ -25532,9 +25532,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6096.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v121.0.6122.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6122.0", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -25544,8 +25544,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6096.0", - "revision": "version:120.0.6096.0" + "location": "lacros_version_skew_tests_v121.0.6122.0", + "revision": "version:121.0.6122.0" } ], "dimensions": { @@ -25560,9 +25560,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6085.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6099.13/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6085.0", + "description": "Run with ash-chrome version 120.0.6099.13", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -25572,8 +25572,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6085.0", - "revision": "version:120.0.6085.0" + "location": "lacros_version_skew_tests_v120.0.6099.13", + "revision": "version:120.0.6099.13" } ], "dimensions": { @@ -25588,9 +25588,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.106/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.124/test_ash_chrome" ], - "description": "Run with ash-chrome version 118.0.5993.106", + "description": "Run with ash-chrome version 118.0.5993.124", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -25600,8 +25600,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v118.0.5993.106", - "revision": "version:118.0.5993.106" + "location": "lacros_version_skew_tests_v118.0.5993.124", + "revision": "version:118.0.5993.124" } ], "dimensions": { @@ -25635,9 +25635,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.38/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.116/test_ash_chrome" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.116", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -25647,8 +25647,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v119.0.6045.38", - "revision": "version:119.0.6045.38" + "location": "lacros_version_skew_tests_v119.0.6045.116", + "revision": "version:119.0.6045.116" } ], "dimensions": { @@ -25664,9 +25664,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6096.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v121.0.6122.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6122.0", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -25676,8 +25676,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6096.0", - "revision": "version:120.0.6096.0" + "location": "lacros_version_skew_tests_v121.0.6122.0", + "revision": "version:121.0.6122.0" } ], "dimensions": { @@ -25693,9 +25693,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6085.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6099.13/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6085.0", + "description": "Run with ash-chrome version 120.0.6099.13", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -25705,8 +25705,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6085.0", - "revision": "version:120.0.6085.0" + "location": "lacros_version_skew_tests_v120.0.6099.13", + "revision": "version:120.0.6099.13" } ], "dimensions": { @@ -25722,9 +25722,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.106/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.124/test_ash_chrome" ], - "description": "Run with ash-chrome version 118.0.5993.106", + "description": "Run with ash-chrome version 118.0.5993.124", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -25734,8 +25734,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v118.0.5993.106", - "revision": "version:118.0.5993.106" + "location": "lacros_version_skew_tests_v118.0.5993.124", + "revision": "version:118.0.5993.124" } ], "dimensions": { diff -Nru chromium-119.0.6045.105/testing/buildbot/chromium.fyi.json chromium-119.0.6045.159/testing/buildbot/chromium.fyi.json --- chromium-119.0.6045.105/testing/buildbot/chromium.fyi.json 2023-11-01 18:10:35.000000000 +0000 +++ chromium-119.0.6045.159/testing/buildbot/chromium.fyi.json 2023-11-14 22:56:47.000000000 +0000 @@ -43543,9 +43543,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.38/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.116/test_ash_chrome" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.116", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -43554,8 +43554,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v119.0.6045.38", - "revision": "version:119.0.6045.38" + "location": "lacros_version_skew_tests_v119.0.6045.116", + "revision": "version:119.0.6045.116" } ], "dimensions": { @@ -43572,9 +43572,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6096.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v121.0.6122.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6122.0", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -43583,8 +43583,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6096.0", - "revision": "version:120.0.6096.0" + "location": "lacros_version_skew_tests_v121.0.6122.0", + "revision": "version:121.0.6122.0" } ], "dimensions": { @@ -43601,9 +43601,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6085.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6099.13/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6085.0", + "description": "Run with ash-chrome version 120.0.6099.13", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -43612,8 +43612,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6085.0", - "revision": "version:120.0.6085.0" + "location": "lacros_version_skew_tests_v120.0.6099.13", + "revision": "version:120.0.6099.13" } ], "dimensions": { @@ -43630,9 +43630,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.106/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.124/test_ash_chrome" ], - "description": "Run with ash-chrome version 118.0.5993.106", + "description": "Run with ash-chrome version 118.0.5993.124", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -43641,8 +43641,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v118.0.5993.106", - "revision": "version:118.0.5993.106" + "location": "lacros_version_skew_tests_v118.0.5993.124", + "revision": "version:118.0.5993.124" } ], "dimensions": { @@ -43692,9 +43692,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.38/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.116/test_ash_chrome" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.116", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -43703,8 +43703,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v119.0.6045.38", - "revision": "version:119.0.6045.38" + "location": "lacros_version_skew_tests_v119.0.6045.116", + "revision": "version:119.0.6045.116" } ], "dimensions": { @@ -43720,9 +43720,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6096.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v121.0.6122.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6122.0", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -43731,8 +43731,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6096.0", - "revision": "version:120.0.6096.0" + "location": "lacros_version_skew_tests_v121.0.6122.0", + "revision": "version:121.0.6122.0" } ], "dimensions": { @@ -43748,9 +43748,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6085.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6099.13/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6085.0", + "description": "Run with ash-chrome version 120.0.6099.13", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -43759,8 +43759,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6085.0", - "revision": "version:120.0.6085.0" + "location": "lacros_version_skew_tests_v120.0.6099.13", + "revision": "version:120.0.6099.13" } ], "dimensions": { @@ -43776,9 +43776,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.106/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.124/test_ash_chrome" ], - "description": "Run with ash-chrome version 118.0.5993.106", + "description": "Run with ash-chrome version 118.0.5993.124", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -43787,8 +43787,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v118.0.5993.106", - "revision": "version:118.0.5993.106" + "location": "lacros_version_skew_tests_v118.0.5993.124", + "revision": "version:118.0.5993.124" } ], "dimensions": { @@ -43823,9 +43823,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.38/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.116/test_ash_chrome" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.116", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -43834,8 +43834,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v119.0.6045.38", - "revision": "version:119.0.6045.38" + "location": "lacros_version_skew_tests_v119.0.6045.116", + "revision": "version:119.0.6045.116" } ], "dimensions": { @@ -43852,9 +43852,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6096.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v121.0.6122.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6122.0", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -43863,8 +43863,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6096.0", - "revision": "version:120.0.6096.0" + "location": "lacros_version_skew_tests_v121.0.6122.0", + "revision": "version:121.0.6122.0" } ], "dimensions": { @@ -43881,9 +43881,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6085.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6099.13/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6085.0", + "description": "Run with ash-chrome version 120.0.6099.13", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -43892,8 +43892,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6085.0", - "revision": "version:120.0.6085.0" + "location": "lacros_version_skew_tests_v120.0.6099.13", + "revision": "version:120.0.6099.13" } ], "dimensions": { @@ -43910,9 +43910,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.106/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.124/test_ash_chrome" ], - "description": "Run with ash-chrome version 118.0.5993.106", + "description": "Run with ash-chrome version 118.0.5993.124", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -43921,8 +43921,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v118.0.5993.106", - "revision": "version:118.0.5993.106" + "location": "lacros_version_skew_tests_v118.0.5993.124", + "revision": "version:118.0.5993.124" } ], "dimensions": { @@ -45147,9 +45147,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.38/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.116/test_ash_chrome" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.116", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -45158,8 +45158,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v119.0.6045.38", - "revision": "version:119.0.6045.38" + "location": "lacros_version_skew_tests_v119.0.6045.116", + "revision": "version:119.0.6045.116" } ], "dimensions": { @@ -45176,9 +45176,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6096.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v121.0.6122.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6122.0", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -45187,8 +45187,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6096.0", - "revision": "version:120.0.6096.0" + "location": "lacros_version_skew_tests_v121.0.6122.0", + "revision": "version:121.0.6122.0" } ], "dimensions": { @@ -45205,9 +45205,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6085.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6099.13/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6085.0", + "description": "Run with ash-chrome version 120.0.6099.13", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -45216,8 +45216,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6085.0", - "revision": "version:120.0.6085.0" + "location": "lacros_version_skew_tests_v120.0.6099.13", + "revision": "version:120.0.6099.13" } ], "dimensions": { @@ -45234,9 +45234,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.106/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.124/test_ash_chrome" ], - "description": "Run with ash-chrome version 118.0.5993.106", + "description": "Run with ash-chrome version 118.0.5993.124", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -45245,8 +45245,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v118.0.5993.106", - "revision": "version:118.0.5993.106" + "location": "lacros_version_skew_tests_v118.0.5993.124", + "revision": "version:118.0.5993.124" } ], "dimensions": { @@ -45296,9 +45296,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.38/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.116/test_ash_chrome" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.116", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -45307,8 +45307,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v119.0.6045.38", - "revision": "version:119.0.6045.38" + "location": "lacros_version_skew_tests_v119.0.6045.116", + "revision": "version:119.0.6045.116" } ], "dimensions": { @@ -45324,9 +45324,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6096.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v121.0.6122.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6122.0", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -45335,8 +45335,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6096.0", - "revision": "version:120.0.6096.0" + "location": "lacros_version_skew_tests_v121.0.6122.0", + "revision": "version:121.0.6122.0" } ], "dimensions": { @@ -45352,9 +45352,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6085.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6099.13/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6085.0", + "description": "Run with ash-chrome version 120.0.6099.13", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -45363,8 +45363,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6085.0", - "revision": "version:120.0.6085.0" + "location": "lacros_version_skew_tests_v120.0.6099.13", + "revision": "version:120.0.6099.13" } ], "dimensions": { @@ -45380,9 +45380,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.106/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.124/test_ash_chrome" ], - "description": "Run with ash-chrome version 118.0.5993.106", + "description": "Run with ash-chrome version 118.0.5993.124", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -45391,8 +45391,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v118.0.5993.106", - "revision": "version:118.0.5993.106" + "location": "lacros_version_skew_tests_v118.0.5993.124", + "revision": "version:118.0.5993.124" } ], "dimensions": { @@ -45427,9 +45427,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.38/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.116/test_ash_chrome" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.116", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -45438,8 +45438,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v119.0.6045.38", - "revision": "version:119.0.6045.38" + "location": "lacros_version_skew_tests_v119.0.6045.116", + "revision": "version:119.0.6045.116" } ], "dimensions": { @@ -45456,9 +45456,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6096.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v121.0.6122.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6122.0", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -45467,8 +45467,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6096.0", - "revision": "version:120.0.6096.0" + "location": "lacros_version_skew_tests_v121.0.6122.0", + "revision": "version:121.0.6122.0" } ], "dimensions": { @@ -45485,9 +45485,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6085.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6099.13/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6085.0", + "description": "Run with ash-chrome version 120.0.6099.13", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -45496,8 +45496,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6085.0", - "revision": "version:120.0.6085.0" + "location": "lacros_version_skew_tests_v120.0.6099.13", + "revision": "version:120.0.6099.13" } ], "dimensions": { @@ -45514,9 +45514,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.106/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.124/test_ash_chrome" ], - "description": "Run with ash-chrome version 118.0.5993.106", + "description": "Run with ash-chrome version 118.0.5993.124", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -45525,8 +45525,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v118.0.5993.106", - "revision": "version:118.0.5993.106" + "location": "lacros_version_skew_tests_v118.0.5993.124", + "revision": "version:118.0.5993.124" } ], "dimensions": { @@ -46138,9 +46138,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.38/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.116/test_ash_chrome" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.116", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -46149,8 +46149,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v119.0.6045.38", - "revision": "version:119.0.6045.38" + "location": "lacros_version_skew_tests_v119.0.6045.116", + "revision": "version:119.0.6045.116" } ], "dimensions": { @@ -46166,9 +46166,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6096.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v121.0.6122.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6122.0", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -46177,8 +46177,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6096.0", - "revision": "version:120.0.6096.0" + "location": "lacros_version_skew_tests_v121.0.6122.0", + "revision": "version:121.0.6122.0" } ], "dimensions": { @@ -46194,9 +46194,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6085.0/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6099.13/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6085.0", + "description": "Run with ash-chrome version 120.0.6099.13", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -46205,8 +46205,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6085.0", - "revision": "version:120.0.6085.0" + "location": "lacros_version_skew_tests_v120.0.6099.13", + "revision": "version:120.0.6099.13" } ], "dimensions": { @@ -46222,9 +46222,9 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.106/test_ash_chrome" + "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.124/test_ash_chrome" ], - "description": "Run with ash-chrome version 118.0.5993.106", + "description": "Run with ash-chrome version 118.0.5993.124", "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" }, @@ -46233,8 +46233,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v118.0.5993.106", - "revision": "version:118.0.5993.106" + "location": "lacros_version_skew_tests_v118.0.5993.124", + "revision": "version:118.0.5993.124" } ], "dimensions": { diff -Nru chromium-119.0.6045.105/testing/buildbot/chromium.memory.json chromium-119.0.6045.159/testing/buildbot/chromium.memory.json --- chromium-119.0.6045.105/testing/buildbot/chromium.memory.json 2023-11-01 18:10:35.000000000 +0000 +++ chromium-119.0.6045.159/testing/buildbot/chromium.memory.json 2023-11-14 22:56:47.000000000 +0000 @@ -16506,12 +16506,12 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.38/test_ash_chrome", + "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.116/test_ash_chrome", "--test-launcher-print-test-stdio=always", "--combine-ash-logs-on-bots", "--asan-symbolize-output" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.116", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -16521,8 +16521,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v119.0.6045.38", - "revision": "version:119.0.6045.38" + "location": "lacros_version_skew_tests_v119.0.6045.116", + "revision": "version:119.0.6045.116" } ], "dimensions": { @@ -16538,12 +16538,12 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6096.0/test_ash_chrome", + "--ash-chrome-path-override=../../lacros_version_skew_tests_v121.0.6122.0/test_ash_chrome", "--test-launcher-print-test-stdio=always", "--combine-ash-logs-on-bots", "--asan-symbolize-output" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6122.0", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -16553,8 +16553,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6096.0", - "revision": "version:120.0.6096.0" + "location": "lacros_version_skew_tests_v121.0.6122.0", + "revision": "version:121.0.6122.0" } ], "dimensions": { @@ -16570,12 +16570,12 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6085.0/test_ash_chrome", + "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6099.13/test_ash_chrome", "--test-launcher-print-test-stdio=always", "--combine-ash-logs-on-bots", "--asan-symbolize-output" ], - "description": "Run with ash-chrome version 120.0.6085.0", + "description": "Run with ash-chrome version 120.0.6099.13", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -16585,8 +16585,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6085.0", - "revision": "version:120.0.6085.0" + "location": "lacros_version_skew_tests_v120.0.6099.13", + "revision": "version:120.0.6099.13" } ], "dimensions": { @@ -16602,12 +16602,12 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.interactive_ui_tests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.106/test_ash_chrome", + "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.124/test_ash_chrome", "--test-launcher-print-test-stdio=always", "--combine-ash-logs-on-bots", "--asan-symbolize-output" ], - "description": "Run with ash-chrome version 118.0.5993.106", + "description": "Run with ash-chrome version 118.0.5993.124", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -16617,8 +16617,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v118.0.5993.106", - "revision": "version:118.0.5993.106" + "location": "lacros_version_skew_tests_v118.0.5993.124", + "revision": "version:118.0.5993.124" } ], "dimensions": { @@ -16675,12 +16675,12 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.38/test_ash_chrome", + "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.116/test_ash_chrome", "--test-launcher-print-test-stdio=always", "--combine-ash-logs-on-bots", "--asan-symbolize-output" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.116", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -16690,8 +16690,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v119.0.6045.38", - "revision": "version:119.0.6045.38" + "location": "lacros_version_skew_tests_v119.0.6045.116", + "revision": "version:119.0.6045.116" } ], "dimensions": { @@ -16706,12 +16706,12 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6096.0/test_ash_chrome", + "--ash-chrome-path-override=../../lacros_version_skew_tests_v121.0.6122.0/test_ash_chrome", "--test-launcher-print-test-stdio=always", "--combine-ash-logs-on-bots", "--asan-symbolize-output" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6122.0", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -16721,8 +16721,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6096.0", - "revision": "version:120.0.6096.0" + "location": "lacros_version_skew_tests_v121.0.6122.0", + "revision": "version:121.0.6122.0" } ], "dimensions": { @@ -16737,12 +16737,12 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6085.0/test_ash_chrome", + "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6099.13/test_ash_chrome", "--test-launcher-print-test-stdio=always", "--combine-ash-logs-on-bots", "--asan-symbolize-output" ], - "description": "Run with ash-chrome version 120.0.6085.0", + "description": "Run with ash-chrome version 120.0.6099.13", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -16752,8 +16752,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6085.0", - "revision": "version:120.0.6085.0" + "location": "lacros_version_skew_tests_v120.0.6099.13", + "revision": "version:120.0.6099.13" } ], "dimensions": { @@ -16768,12 +16768,12 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.106/test_ash_chrome", + "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.124/test_ash_chrome", "--test-launcher-print-test-stdio=always", "--combine-ash-logs-on-bots", "--asan-symbolize-output" ], - "description": "Run with ash-chrome version 118.0.5993.106", + "description": "Run with ash-chrome version 118.0.5993.124", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -16783,8 +16783,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v118.0.5993.106", - "revision": "version:118.0.5993.106" + "location": "lacros_version_skew_tests_v118.0.5993.124", + "revision": "version:118.0.5993.124" } ], "dimensions": { @@ -16821,12 +16821,12 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.38/test_ash_chrome", + "--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.116/test_ash_chrome", "--test-launcher-print-test-stdio=always", "--combine-ash-logs-on-bots", "--asan-symbolize-output" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.116", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -16836,8 +16836,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v119.0.6045.38", - "revision": "version:119.0.6045.38" + "location": "lacros_version_skew_tests_v119.0.6045.116", + "revision": "version:119.0.6045.116" } ], "dimensions": { @@ -16853,12 +16853,12 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6096.0/test_ash_chrome", + "--ash-chrome-path-override=../../lacros_version_skew_tests_v121.0.6122.0/test_ash_chrome", "--test-launcher-print-test-stdio=always", "--combine-ash-logs-on-bots", "--asan-symbolize-output" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6122.0", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -16868,8 +16868,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6096.0", - "revision": "version:120.0.6096.0" + "location": "lacros_version_skew_tests_v121.0.6122.0", + "revision": "version:121.0.6122.0" } ], "dimensions": { @@ -16885,12 +16885,12 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6085.0/test_ash_chrome", + "--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6099.13/test_ash_chrome", "--test-launcher-print-test-stdio=always", "--combine-ash-logs-on-bots", "--asan-symbolize-output" ], - "description": "Run with ash-chrome version 120.0.6085.0", + "description": "Run with ash-chrome version 120.0.6099.13", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -16900,8 +16900,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v120.0.6085.0", - "revision": "version:120.0.6085.0" + "location": "lacros_version_skew_tests_v120.0.6099.13", + "revision": "version:120.0.6099.13" } ], "dimensions": { @@ -16917,12 +16917,12 @@ { "args": [ "--test-launcher-filter-file=../../testing/buildbot/filters/linux-lacros.lacros_chrome_browsertests.skew.filter", - "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.106/test_ash_chrome", + "--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.124/test_ash_chrome", "--test-launcher-print-test-stdio=always", "--combine-ash-logs-on-bots", "--asan-symbolize-output" ], - "description": "Run with ash-chrome version 118.0.5993.106", + "description": "Run with ash-chrome version 118.0.5993.124", "isolate_profile_data": true, "merge": { "script": "//testing/merge_scripts/standard_gtest_merge.py" @@ -16932,8 +16932,8 @@ "cipd_packages": [ { "cipd_package": "chromium/testing/linux-ash-chromium/x86_64/ash.zip", - "location": "lacros_version_skew_tests_v118.0.5993.106", - "revision": "version:118.0.5993.106" + "location": "lacros_version_skew_tests_v118.0.5993.124", + "revision": "version:118.0.5993.124" } ], "dimensions": { diff -Nru chromium-119.0.6045.105/testing/buildbot/internal.chromeos.fyi.json chromium-119.0.6045.159/testing/buildbot/internal.chromeos.fyi.json --- chromium-119.0.6045.105/testing/buildbot/internal.chromeos.fyi.json 2023-11-01 18:10:35.000000000 +0000 +++ chromium-119.0.6045.159/testing/buildbot/internal.chromeos.fyi.json 2023-11-14 22:56:47.000000000 +0000 @@ -1264,7 +1264,7 @@ "skylab_tests": [ { "cros_board": "octopus", - "cros_img": "octopus-release/R119-15633.23.0", + "cros_img": "octopus-release/R119-15633.37.0", "name": "lacros_fyi_tast_tests OCTOPUS_RELEASE_BETA", "tast_expr": "(\"group:mainline\" && \"dep:lacros\" && !informational)", "test": "lacros_fyi_tast_tests", @@ -1284,7 +1284,7 @@ }, { "cros_board": "octopus", - "cros_img": "octopus-release/R118-15604.45.0", + "cros_img": "octopus-release/R118-15604.57.0", "name": "lacros_fyi_tast_tests OCTOPUS_RELEASE_STABLE", "tast_expr": "(\"group:mainline\" && \"dep:lacros\" && !informational)", "test": "lacros_fyi_tast_tests", @@ -1294,7 +1294,7 @@ }, { "cros_board": "octopus", - "cros_img": "octopus-release/R119-15633.23.0", + "cros_img": "octopus-release/R119-15633.37.0", "name": "ozone_unittests OCTOPUS_RELEASE_BETA", "test": "ozone_unittests", "test_id_prefix": "ninja://ui/ozone:ozone_unittests/", @@ -1312,7 +1312,7 @@ }, { "cros_board": "octopus", - "cros_img": "octopus-release/R118-15604.45.0", + "cros_img": "octopus-release/R118-15604.57.0", "name": "ozone_unittests OCTOPUS_RELEASE_STABLE", "test": "ozone_unittests", "test_id_prefix": "ninja://ui/ozone:ozone_unittests/", @@ -1328,7 +1328,7 @@ "skylab_tests": [ { "cros_board": "hana", - "cros_img": "hana-release/R119-15633.23.0", + "cros_img": "hana-release/R119-15633.37.0", "name": "lacros_all_tast_tests HANA_RELEASE_BETA", "tast_expr": "(\"group:mainline\" && \"dep:lacros\" && !informational)", "test": "lacros_all_tast_tests", @@ -1348,7 +1348,7 @@ }, { "cros_board": "hana", - "cros_img": "hana-release/R118-15604.45.0", + "cros_img": "hana-release/R118-15604.57.0", "name": "lacros_all_tast_tests HANA_RELEASE_STABLE", "tast_expr": "(\"group:mainline\" && \"dep:lacros\" && !informational)", "test": "lacros_all_tast_tests", @@ -1358,7 +1358,7 @@ }, { "cros_board": "strongbad", - "cros_img": "strongbad-release/R119-15633.23.0", + "cros_img": "strongbad-release/R119-15633.37.0", "name": "lacros_all_tast_tests STRONGBAD_RELEASE_BETA", "tast_expr": "(\"group:mainline\" && \"dep:lacros\" && !informational)", "test": "lacros_all_tast_tests", @@ -1379,7 +1379,7 @@ }, { "cros_board": "strongbad", - "cros_img": "strongbad-release/R118-15604.45.0", + "cros_img": "strongbad-release/R118-15604.57.0", "name": "lacros_all_tast_tests STRONGBAD_RELEASE_STABLE", "tast_expr": "(\"group:mainline\" && \"dep:lacros\" && !informational)", "test": "lacros_all_tast_tests", @@ -1389,7 +1389,7 @@ }, { "cros_board": "hana", - "cros_img": "hana-release/R119-15633.23.0", + "cros_img": "hana-release/R119-15633.37.0", "name": "ozone_unittests HANA_RELEASE_BETA", "test": "ozone_unittests", "test_id_prefix": "ninja://ui/ozone:ozone_unittests/", @@ -1407,7 +1407,7 @@ }, { "cros_board": "hana", - "cros_img": "hana-release/R118-15604.45.0", + "cros_img": "hana-release/R118-15604.57.0", "name": "ozone_unittests HANA_RELEASE_STABLE", "test": "ozone_unittests", "test_id_prefix": "ninja://ui/ozone:ozone_unittests/", @@ -1416,7 +1416,7 @@ }, { "cros_board": "strongbad", - "cros_img": "strongbad-release/R119-15633.23.0", + "cros_img": "strongbad-release/R119-15633.37.0", "name": "ozone_unittests STRONGBAD_RELEASE_BETA", "test": "ozone_unittests", "test_id_prefix": "ninja://ui/ozone:ozone_unittests/", @@ -1435,7 +1435,7 @@ }, { "cros_board": "strongbad", - "cros_img": "strongbad-release/R118-15604.45.0", + "cros_img": "strongbad-release/R118-15604.57.0", "name": "ozone_unittests STRONGBAD_RELEASE_STABLE", "test": "ozone_unittests", "test_id_prefix": "ninja://ui/ozone:ozone_unittests/", @@ -1444,7 +1444,7 @@ }, { "cros_board": "hana", - "cros_img": "hana-release/R119-15633.23.0", + "cros_img": "hana-release/R119-15633.37.0", "name": "viz_unittests HANA_RELEASE_BETA", "test": "viz_unittests", "test_id_prefix": "ninja://components/viz:viz_unittests/", @@ -1462,7 +1462,7 @@ }, { "cros_board": "hana", - "cros_img": "hana-release/R118-15604.45.0", + "cros_img": "hana-release/R118-15604.57.0", "name": "viz_unittests HANA_RELEASE_STABLE", "test": "viz_unittests", "test_id_prefix": "ninja://components/viz:viz_unittests/", @@ -1471,7 +1471,7 @@ }, { "cros_board": "strongbad", - "cros_img": "strongbad-release/R119-15633.23.0", + "cros_img": "strongbad-release/R119-15633.37.0", "name": "viz_unittests STRONGBAD_RELEASE_BETA", "test": "viz_unittests", "test_id_prefix": "ninja://components/viz:viz_unittests/", @@ -1490,7 +1490,7 @@ }, { "cros_board": "strongbad", - "cros_img": "strongbad-release/R118-15604.45.0", + "cros_img": "strongbad-release/R118-15604.57.0", "name": "viz_unittests STRONGBAD_RELEASE_STABLE", "test": "viz_unittests", "test_id_prefix": "ninja://components/viz:viz_unittests/", diff -Nru chromium-119.0.6045.105/testing/buildbot/variants.pyl chromium-119.0.6045.159/testing/buildbot/variants.pyl --- chromium-119.0.6045.105/testing/buildbot/variants.pyl 2023-11-01 18:10:35.000000000 +0000 +++ chromium-119.0.6045.159/testing/buildbot/variants.pyl 2023-11-14 22:56:47.000000000 +0000 @@ -70,64 +70,64 @@ }, 'LACROS_VERSION_SKEW_CANARY': { 'identifier': 'Lacros version skew testing ash canary', - 'description': 'Run with ash-chrome version 120.0.6096.0', + 'description': 'Run with ash-chrome version 121.0.6122.0', 'args': [ - '--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6096.0/test_ash_chrome', + '--ash-chrome-path-override=../../lacros_version_skew_tests_v121.0.6122.0/test_ash_chrome', ], 'swarming': { 'cipd_packages': [ { 'cipd_package': 'chromium/testing/linux-ash-chromium/x86_64/ash.zip', - 'location': 'lacros_version_skew_tests_v120.0.6096.0', - 'revision': 'version:120.0.6096.0', + 'location': 'lacros_version_skew_tests_v121.0.6122.0', + 'revision': 'version:121.0.6122.0', }, ], }, }, 'LACROS_VERSION_SKEW_DEV': { 'identifier': 'Lacros version skew testing ash dev', - 'description': 'Run with ash-chrome version 120.0.6085.0', + 'description': 'Run with ash-chrome version 120.0.6099.13', 'args': [ - '--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6085.0/test_ash_chrome', + '--ash-chrome-path-override=../../lacros_version_skew_tests_v120.0.6099.13/test_ash_chrome', ], 'swarming': { 'cipd_packages': [ { 'cipd_package': 'chromium/testing/linux-ash-chromium/x86_64/ash.zip', - 'location': 'lacros_version_skew_tests_v120.0.6085.0', - 'revision': 'version:120.0.6085.0', + 'location': 'lacros_version_skew_tests_v120.0.6099.13', + 'revision': 'version:120.0.6099.13', }, ], }, }, 'LACROS_VERSION_SKEW_BETA': { 'identifier': 'Lacros version skew testing ash beta', - 'description': 'Run with ash-chrome version 119.0.6045.38', + 'description': 'Run with ash-chrome version 119.0.6045.116', 'args': [ - '--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.38/test_ash_chrome', + '--ash-chrome-path-override=../../lacros_version_skew_tests_v119.0.6045.116/test_ash_chrome', ], 'swarming': { 'cipd_packages': [ { 'cipd_package': 'chromium/testing/linux-ash-chromium/x86_64/ash.zip', - 'location': 'lacros_version_skew_tests_v119.0.6045.38', - 'revision': 'version:119.0.6045.38', + 'location': 'lacros_version_skew_tests_v119.0.6045.116', + 'revision': 'version:119.0.6045.116', }, ], }, }, 'LACROS_VERSION_SKEW_STABLE': { 'identifier': 'Lacros version skew testing ash stable', - 'description': 'Run with ash-chrome version 118.0.5993.106', + 'description': 'Run with ash-chrome version 118.0.5993.124', 'args': [ - '--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.106/test_ash_chrome', + '--ash-chrome-path-override=../../lacros_version_skew_tests_v118.0.5993.124/test_ash_chrome', ], 'swarming': { 'cipd_packages': [ { 'cipd_package': 'chromium/testing/linux-ash-chromium/x86_64/ash.zip', - 'location': 'lacros_version_skew_tests_v118.0.5993.106', - 'revision': 'version:118.0.5993.106', + 'location': 'lacros_version_skew_tests_v118.0.5993.124', + 'revision': 'version:118.0.5993.124', }, ], }, @@ -451,7 +451,7 @@ 'enabled': False, 'skylab': { 'cros_board': 'brya', - 'cros_img': 'brya-release/R120-15656.0.0', + 'cros_img': 'brya-release/R120-15662.9.0', 'dut_pool': 'chrome', }, }, @@ -459,7 +459,7 @@ 'identifier': 'BRYA_RELEASE_BETA', 'skylab': { 'cros_board': 'brya', - 'cros_img': 'brya-release/R119-15633.23.0', + 'cros_img': 'brya-release/R119-15633.37.0', 'dut_pool': 'chrome', }, }, @@ -467,7 +467,7 @@ 'identifier': 'BRYA_RELEASE_STABLE', 'skylab': { 'cros_board': 'brya', - 'cros_img': 'brya-release/R118-15604.45.0', + 'cros_img': 'brya-release/R118-15604.57.0', 'dut_pool': 'chrome', }, }, @@ -484,21 +484,21 @@ 'enabled': False, 'skylab': { 'cros_board': 'dedede', - 'cros_img': 'dedede-release/R120-15656.0.0', + 'cros_img': 'dedede-release/R120-15662.9.0', }, }, 'CROS_DEDEDE_RELEASE_BETA': { 'identifier': 'DEDEDE_RELEASE_BETA', 'skylab': { 'cros_board': 'dedede', - 'cros_img': 'dedede-release/R119-15633.23.0', + 'cros_img': 'dedede-release/R119-15633.37.0', }, }, 'CROS_DEDEDE_RELEASE_STABLE': { 'identifier': 'DEDEDE_RELEASE_STABLE', 'skylab': { 'cros_board': 'dedede', - 'cros_img': 'dedede-release/R118-15604.45.0', + 'cros_img': 'dedede-release/R118-15604.57.0', }, }, 'CROS_FIZZ_RELEASE_LKGM': { @@ -515,7 +515,7 @@ 'enabled': False, 'skylab': { 'cros_board': 'fizz', - 'cros_img': 'fizz-release/R120-15656.0.0', + 'cros_img': 'fizz-release/R120-15662.9.0', 'dut_pool': 'chrome', }, }, @@ -523,7 +523,7 @@ 'identifier': 'FIZZ_RELEASE_BETA', 'skylab': { 'cros_board': 'fizz', - 'cros_img': 'fizz-release/R119-15633.23.0', + 'cros_img': 'fizz-release/R119-15633.37.0', 'dut_pool': 'chrome', }, }, @@ -531,7 +531,7 @@ 'identifier': 'FIZZ_RELEASE_STABLE', 'skylab': { 'cros_board': 'fizz', - 'cros_img': 'fizz-release/R118-15604.45.0', + 'cros_img': 'fizz-release/R118-15604.56.0', 'dut_pool': 'chrome', }, }, @@ -549,7 +549,7 @@ 'enabled': False, 'skylab': { 'cros_board': 'guybrush', - 'cros_img': 'guybrush-release/R120-15656.0.0', + 'cros_img': 'guybrush-release/R120-15662.9.0', 'dut_pool': 'chrome', }, }, @@ -557,7 +557,7 @@ 'identifier': 'GUYBRUSH_RELEASE_BETA', 'skylab': { 'cros_board': 'guybrush', - 'cros_img': 'guybrush-release/R119-15633.23.0', + 'cros_img': 'guybrush-release/R119-15633.37.0', 'dut_pool': 'chrome', }, }, @@ -565,7 +565,7 @@ 'identifier': 'GUYBRUSH_RELEASE_STABLE', 'skylab': { 'cros_board': 'guybrush', - 'cros_img': 'guybrush-release/R118-15604.45.0', + 'cros_img': 'guybrush-release/R118-15604.57.0', 'dut_pool': 'chrome', }, }, @@ -583,7 +583,7 @@ 'enabled': False, 'skylab': { 'cros_board': 'puff', - 'cros_img': 'puff-release/R120-15656.0.0', + 'cros_img': 'puff-release/R120-15662.9.0', 'dut_pool': 'chrome', }, }, @@ -591,7 +591,7 @@ 'identifier': 'PUFF_RELEASE_BETA', 'skylab': { 'cros_board': 'puff', - 'cros_img': 'puff-release/R119-15633.23.0', + 'cros_img': 'puff-release/R119-15633.37.0', 'dut_pool': 'chrome', }, }, @@ -599,7 +599,7 @@ 'identifier': 'PUFF_RELEASE_STABLE', 'skylab': { 'cros_board': 'puff', - 'cros_img': 'puff-release/R118-15604.45.0', + 'cros_img': 'puff-release/R118-15604.57.0', 'dut_pool': 'chrome', }, }, @@ -626,21 +626,21 @@ 'enabled': False, 'skylab': { 'cros_board': 'hana', - 'cros_img': 'hana-release/R120-15656.0.0', + 'cros_img': 'hana-release/R120-15662.9.0', }, }, 'CROS_HANA_RELEASE_BETA': { 'identifier': 'HANA_RELEASE_BETA', 'skylab': { 'cros_board': 'hana', - 'cros_img': 'hana-release/R119-15633.23.0', + 'cros_img': 'hana-release/R119-15633.37.0', }, }, 'CROS_HANA_RELEASE_STABLE': { 'identifier': 'HANA_RELEASE_STABLE', 'skylab': { 'cros_board': 'hana', - 'cros_img': 'hana-release/R118-15604.45.0', + 'cros_img': 'hana-release/R118-15604.57.0', }, }, 'CROS_JACUZZI_RELEASE_LKGM': { @@ -656,14 +656,14 @@ 'enabled': False, 'skylab': { 'cros_board': 'jacuzzi', - 'cros_img': 'jacuzzi-release/R120-15656.0.0', + 'cros_img': 'jacuzzi-release/R120-15662.9.0', }, }, 'CROS_JACUZZI_RELEASE_BETA': { 'identifier': 'JACUZZI_RELEASE_BETA', 'skylab': { 'cros_board': 'jacuzzi', - 'cros_img': 'jacuzzi-release/R119-15633.23.0', + 'cros_img': 'jacuzzi-release/R119-15633.37.0', }, }, 'CROS_JACUZZI_RELEASE_CHROME_FROM_TLS_ASH_LKGM': { @@ -678,7 +678,7 @@ 'identifier': 'JACUZZI_RELEASE_STABLE', 'skylab': { 'cros_board': 'jacuzzi', - 'cros_img': 'jacuzzi-release/R118-15604.45.0', + 'cros_img': 'jacuzzi-release/R118-15604.57.0', }, }, 'CROS_JACUZZI_PUBLIC_LKGM': { @@ -735,21 +735,21 @@ 'enabled': False, 'skylab': { 'cros_board': 'octopus', - 'cros_img': 'octopus-release/R120-15656.0.0', + 'cros_img': 'octopus-release/R120-15662.9.0', }, }, 'CROS_OCTOPUS_RELEASE_BETA': { 'identifier': 'OCTOPUS_RELEASE_BETA', 'skylab': { 'cros_board': 'octopus', - 'cros_img': 'octopus-release/R119-15633.23.0', + 'cros_img': 'octopus-release/R119-15633.37.0', }, }, 'CROS_OCTOPUS_RELEASE_STABLE': { 'identifier': 'OCTOPUS_RELEASE_STABLE', 'skylab': { 'cros_board': 'octopus', - 'cros_img': 'octopus-release/R118-15604.45.0', + 'cros_img': 'octopus-release/R118-15604.57.0', }, }, 'CROS_STRONGBAD_RELEASE_LKGM': { @@ -765,21 +765,21 @@ 'enabled': False, 'skylab': { 'cros_board': 'strongbad', - 'cros_img': 'strongbad-release/R120-15656.0.0', + 'cros_img': 'strongbad-release/R120-15662.9.0', }, }, 'CROS_STRONGBAD_RELEASE_BETA': { 'identifier': 'STRONGBAD_RELEASE_BETA', 'skylab': { 'cros_board': 'strongbad', - 'cros_img': 'strongbad-release/R119-15633.23.0', + 'cros_img': 'strongbad-release/R119-15633.37.0', }, }, 'CROS_STRONGBAD_RELEASE_STABLE': { 'identifier': 'STRONGBAD_RELEASE_STABLE', 'skylab': { 'cros_board': 'strongbad', - 'cros_img': 'strongbad-release/R118-15604.45.0', + 'cros_img': 'strongbad-release/R118-15604.57.0', }, }, 'CROS_TROGDOR_RELEASE_ASH_LKGM': { diff -Nru chromium-119.0.6045.105/third_party/blink/renderer/core/css/css_primitive_value_mappings.h chromium-119.0.6045.159/third_party/blink/renderer/core/css/css_primitive_value_mappings.h --- chromium-119.0.6045.105/third_party/blink/renderer/core/css/css_primitive_value_mappings.h 2023-11-01 18:10:37.000000000 +0000 +++ chromium-119.0.6045.159/third_party/blink/renderer/core/css/css_primitive_value_mappings.h 2023-11-14 22:56:48.000000000 +0000 @@ -310,14 +310,63 @@ template <> inline ControlPart CSSIdentifierValue::ConvertTo() const { - if (value_id_ == CSSValueID::kNone) { - return kNoControlPart; + switch (value_id_) { + case CSSValueID::kNone: + return kNoControlPart; + case CSSValueID::kAuto: + return kAutoPart; + case CSSValueID::kCheckbox: + return kCheckboxPart; + case CSSValueID::kRadio: + return kRadioPart; + case CSSValueID::kPushButton: + return kPushButtonPart; + case CSSValueID::kSquareButton: + return kSquareButtonPart; + case CSSValueID::kButton: + return kButtonPart; + case CSSValueID::kInnerSpinButton: + return kInnerSpinButtonPart; + case CSSValueID::kListbox: + return kListboxPart; + case CSSValueID::kMediaSlider: + return kMediaSliderPart; + case CSSValueID::kMediaSliderthumb: + return kMediaSliderThumbPart; + case CSSValueID::kMediaVolumeSlider: + return kMediaVolumeSliderPart; + case CSSValueID::kMediaVolumeSliderthumb: + return kMediaVolumeSliderThumbPart; + case CSSValueID::kInternalMediaControl: + return kMediaControlPart; + case CSSValueID::kMenulist: + return kMenulistPart; + case CSSValueID::kMenulistButton: + return kMenulistButtonPart; + case CSSValueID::kMeter: + return kMeterPart; + case CSSValueID::kProgressBar: + return kProgressBarPart; + case CSSValueID::kSliderHorizontal: + return kSliderHorizontalPart; + case CSSValueID::kSliderVertical: + return kSliderVerticalPart; + case CSSValueID::kSliderthumbHorizontal: + return kSliderThumbHorizontalPart; + case CSSValueID::kSliderthumbVertical: + return kSliderThumbVerticalPart; + case CSSValueID::kSearchfield: + return kSearchFieldPart; + case CSSValueID::kSearchfieldCancelButton: + return kSearchFieldCancelButtonPart; + case CSSValueID::kTextfield: + return kTextFieldPart; + case CSSValueID::kTextarea: + return kTextAreaPart; + default: + NOTREACHED(); + return kNoControlPart; } - if (value_id_ == CSSValueID::kAuto) { - return kAutoPart; - } - return ControlPart(static_cast(value_id_) - - static_cast(CSSValueID::kCheckbox) + kCheckboxPart); } template <> diff -Nru chromium-119.0.6045.105/third_party/blink/renderer/core/css/css_value_keywords.json5 chromium-119.0.6045.159/third_party/blink/renderer/core/css/css_value_keywords.json5 --- chromium-119.0.6045.105/third_party/blink/renderer/core/css/css_value_keywords.json5 2023-11-01 18:10:37.000000000 +0000 +++ chromium-119.0.6045.159/third_party/blink/renderer/core/css/css_value_keywords.json5 2023-11-14 22:56:48.000000000 +0000 @@ -831,11 +831,6 @@ "manual", // -webkit-appearance - // The order here must match the order in the ControlPart enum in - // theme_types.h. - // All appearance values that should be accepted by the parser should be - // listed between 'checkbox' and 'textarea'. This is checked in - // CSSParserFastPaths::IsValidKeywordPropertyAndValue. "checkbox", "radio", "button", diff -Nru chromium-119.0.6045.105/third_party/blink/renderer/core/editing/frame_selection.cc chromium-119.0.6045.159/third_party/blink/renderer/core/editing/frame_selection.cc --- chromium-119.0.6045.105/third_party/blink/renderer/core/editing/frame_selection.cc 2023-11-01 18:10:37.000000000 +0000 +++ chromium-119.0.6045.159/third_party/blink/renderer/core/editing/frame_selection.cc 2023-11-14 22:56:48.000000000 +0000 @@ -902,10 +902,6 @@ element->FocusStateChanged(); } - if (!GetDocument().HaveRenderBlockingStylesheetsLoaded()) { - return; - } - // Selection style may depend on the active state of the document, so style // and paint must be invalidated when active status changes. if (GetDocument().GetLayoutView()) { @@ -975,8 +971,7 @@ void FrameSelection::SetFocusedNodeIfNeeded() { if (ComputeVisibleSelectionInDOMTreeDeprecated().IsNone() || - !FrameIsFocused() || - !GetDocument().HaveRenderBlockingStylesheetsLoaded()) { + !FrameIsFocused()) { return; } diff -Nru chromium-119.0.6045.105/third_party/blink/renderer/core/fetch/body.cc chromium-119.0.6045.159/third_party/blink/renderer/core/fetch/body.cc --- chromium-119.0.6045.105/third_party/blink/renderer/core/fetch/body.cc 2023-11-01 18:10:37.000000000 +0000 +++ chromium-119.0.6045.159/third_party/blink/renderer/core/fetch/body.cc 2023-11-14 22:56:48.000000000 +0000 @@ -135,8 +135,13 @@ void DidFetchDataLoadedString(const String& string) override { auto* formData = MakeGarbageCollected(); - for (const auto& pair : URLSearchParams::Create(string)->Params()) + // URLSearchParams::Create() returns an on-heap object, but it can be + // garbage collected, so making it a persistent variable on the stack + // mitigates use-after-free scenarios. See crbug.com/1497997. + Persistent search_params = URLSearchParams::Create(string); + for (const auto& pair : search_params->Params()) { formData->append(pair.first, pair.second); + } DidFetchDataLoadedFormData(formData); } }; diff -Nru chromium-119.0.6045.105/third_party/blink/renderer/modules/webaudio/realtime_audio_destination_handler.cc chromium-119.0.6045.159/third_party/blink/renderer/modules/webaudio/realtime_audio_destination_handler.cc --- chromium-119.0.6045.105/third_party/blink/renderer/modules/webaudio/realtime_audio_destination_handler.cc 2023-11-01 18:10:41.000000000 +0000 +++ chromium-119.0.6045.159/third_party/blink/renderer/modules/webaudio/realtime_audio_destination_handler.cc 2023-11-14 22:56:50.000000000 +0000 @@ -118,12 +118,21 @@ uint32_t old_channel_count = ChannelCount(); AudioHandler::SetChannelCount(channel_count, exception_state); - // Stop, re-create and start the destination to apply the new channel count. - if (ChannelCount() != old_channel_count && !exception_state.HadException()) { - StopPlatformDestination(); - CreatePlatformDestination(); - StartPlatformDestination(); + // After the context is closed, changing channel count will be ignored + // because it will trigger the recreation of the platform destination. This + // in turn can activate the audio rendering thread. + AudioContext* context = static_cast(Context()); + CHECK(context); + if (context->ContextState() == AudioContext::kClosed || + ChannelCount() == old_channel_count || + exception_state.HadException()) { + return; } + + // Stop, re-create and start the destination to apply the new channel count. + StopPlatformDestination(); + CreatePlatformDestination(); + StartPlatformDestination(); } void RealtimeAudioDestinationHandler::StartRendering() { diff -Nru chromium-119.0.6045.105/third_party/blink/renderer/platform/theme_types.h chromium-119.0.6045.159/third_party/blink/renderer/platform/theme_types.h --- chromium-119.0.6045.105/third_party/blink/renderer/platform/theme_types.h 2023-11-01 18:10:43.000000000 +0000 +++ chromium-119.0.6045.159/third_party/blink/renderer/platform/theme_types.h 2023-11-14 22:56:50.000000000 +0000 @@ -28,7 +28,6 @@ namespace blink { -// Must follow css_value_keywords.json5 order // kAutoPart is never returned by ComputedStyle::EffectiveAppearance() enum ControlPart { kNoControlPart, @@ -45,8 +44,6 @@ kSearchFieldPart, kTextFieldPart, kTextAreaPart, - // Order matters when determinating what keyword is valid in the CSSParser. - // Values after kTextAreaPart should not be recognized as appearance values. kInnerSpinButtonPart, kMediaSliderPart, kMediaSliderThumbPart, diff -Nru chromium-119.0.6045.105/third_party/breakpad/breakpad/src/common/convert_UTF.cc chromium-119.0.6045.159/third_party/breakpad/breakpad/src/common/convert_UTF.cc --- chromium-119.0.6045.105/third_party/breakpad/breakpad/src/common/convert_UTF.cc 1970-01-01 00:00:00.000000000 +0000 +++ chromium-119.0.6045.159/third_party/breakpad/breakpad/src/common/convert_UTF.cc 2023-11-14 22:57:25.000000000 +0000 @@ -0,0 +1,595 @@ +/* + * Copyright © 1991-2015 Unicode, Inc. All rights reserved. + * Distributed under the Terms of Use in + * http://www.unicode.org/copyright.html. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of the Unicode data files and any associated documentation + * (the "Data Files") or Unicode software and any associated documentation + * (the "Software") to deal in the Data Files or Software + * without restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, and/or sell copies of + * the Data Files or Software, and to permit persons to whom the Data Files + * or Software are furnished to do so, provided that + * (a) this copyright and permission notice appear with all copies + * of the Data Files or Software, + * (b) this copyright and permission notice appear in associated + * documentation, and + * (c) there is clear notice in each modified Data File or in the Software + * as well as in the documentation associated with the Data File(s) or + * Software that the data or software has been modified. + * + * THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF + * ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT OF THIRD PARTY RIGHTS. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS + * NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL + * DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THE DATA FILES OR SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, + * use or other dealings in these Data Files or Software without prior + * written authorization of the copyright holder. + */ + +/* --------------------------------------------------------------------- + +Conversions between UTF32, UTF-16, and UTF-8. Source code file. +Author: Mark E. Davis, 1994. +Rev History: Rick McGowan, fixes & updates May 2001. +Sept 2001: fixed const & error conditions per +mods suggested by S. Parent & A. Lillich. +June 2002: Tim Dodd added detection and handling of incomplete +source sequences, enhanced error detection, added casts +to eliminate compiler warnings. +July 2003: slight mods to back out aggressive FFFE detection. +Jan 2004: updated switches in from-UTF8 conversions. +Oct 2004: updated to use UNI_MAX_LEGAL_UTF32 in UTF-32 conversions. + +See the header file "ConvertUTF.h" for complete documentation. + +------------------------------------------------------------------------ */ + + +#ifdef HAVE_CONFIG_H +#include // Must come first +#endif + +#include "convert_UTF.h" +#ifdef CVTUTF_DEBUG +#include +#endif + +#include "common/macros.h" + +namespace google_breakpad { + +namespace { + +const int halfShift = 10; /* used for shifting by 10 bits */ + +const UTF32 halfBase = 0x0010000UL; +const UTF32 halfMask = 0x3FFUL; + +} // namespace + +#define UNI_SUR_HIGH_START (UTF32)0xD800 +#define UNI_SUR_HIGH_END (UTF32)0xDBFF +#define UNI_SUR_LOW_START (UTF32)0xDC00 +#define UNI_SUR_LOW_END (UTF32)0xDFFF + +/* --------------------------------------------------------------------- */ + +ConversionResult ConvertUTF32toUTF16 (const UTF32** sourceStart, const UTF32* sourceEnd, + UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags) { + ConversionResult result = conversionOK; + const UTF32* source = *sourceStart; + UTF16* target = *targetStart; + while (source < sourceEnd) { + UTF32 ch; + if (target >= targetEnd) { + result = targetExhausted; break; + } + ch = *source++; + if (ch <= UNI_MAX_BMP) { /* Target is a character <= 0xFFFF */ + /* UTF-16 surrogate values are illegal in UTF-32; 0xffff or 0xfffe are both reserved values */ + if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) { + if (flags == strictConversion) { + --source; /* return to the illegal value itself */ + result = sourceIllegal; + break; + } else { + *target++ = UNI_REPLACEMENT_CHAR; + } + } else { + *target++ = (UTF16)ch; /* normal case */ + } + } else if (ch > UNI_MAX_LEGAL_UTF32) { + if (flags == strictConversion) { + result = sourceIllegal; + } else { + *target++ = UNI_REPLACEMENT_CHAR; + } + } else { + /* target is a character in range 0xFFFF - 0x10FFFF. */ + if (target + 1 >= targetEnd) { + --source; /* Back up source pointer! */ + result = targetExhausted; break; + } + ch -= halfBase; + *target++ = (UTF16)((ch >> halfShift) + UNI_SUR_HIGH_START); + *target++ = (UTF16)((ch & halfMask) + UNI_SUR_LOW_START); + } + } +*sourceStart = source; +*targetStart = target; +return result; +} + +/* --------------------------------------------------------------------- */ + +ConversionResult ConvertUTF16toUTF32 (const UTF16** sourceStart, const UTF16* sourceEnd, + UTF32** targetStart, UTF32* targetEnd, ConversionFlags flags) { + ConversionResult result = conversionOK; + const UTF16* source = *sourceStart; + UTF32* target = *targetStart; + UTF32 ch, ch2; + while (source < sourceEnd) { + const UTF16* oldSource = source; /* In case we have to back up because of target overflow. */ + ch = *source++; + /* If we have a surrogate pair, convert to UTF32 first. */ + if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_HIGH_END) { + /* If the 16 bits following the high surrogate are in the source buffer... */ + if (source < sourceEnd) { + ch2 = *source; + /* If it's a low surrogate, convert to UTF32. */ + if (ch2 >= UNI_SUR_LOW_START && ch2 <= UNI_SUR_LOW_END) { + ch = ((ch - UNI_SUR_HIGH_START) << halfShift) + + (ch2 - UNI_SUR_LOW_START) + halfBase; + ++source; + } else if (flags == strictConversion) { /* it's an unpaired high surrogate */ + --source; /* return to the illegal value itself */ + result = sourceIllegal; + break; + } + } else { /* We don't have the 16 bits following the high surrogate. */ + --source; /* return to the high surrogate */ + result = sourceExhausted; + break; + } + } else if (flags == strictConversion) { + /* UTF-16 surrogate values are illegal in UTF-32 */ + if (ch >= UNI_SUR_LOW_START && ch <= UNI_SUR_LOW_END) { + --source; /* return to the illegal value itself */ + result = sourceIllegal; + break; + } + } + if (target >= targetEnd) { + source = oldSource; /* Back up source pointer! */ + result = targetExhausted; break; + } + *target++ = ch; + } + *sourceStart = source; + *targetStart = target; +#ifdef CVTUTF_DEBUG + if (result == sourceIllegal) { + fprintf(stderr, "ConvertUTF16toUTF32 illegal seq 0x%04x,%04x\n", ch, ch2); + fflush(stderr); + } +#endif + return result; +} + +/* --------------------------------------------------------------------- */ + +namespace { + +/* + * Index into the table below with the first byte of a UTF-8 sequence to + * get the number of trailing bytes that are supposed to follow it. + * Note that *legal* UTF-8 values can't have 4 or 5-bytes. The table is + * left as-is for anyone who may want to do such conversion, which was + * allowed in earlier algorithms. + */ +const char trailingBytesForUTF8[256] = { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 +}; + +/* + * Magic values subtracted from a buffer value during UTF8 conversion. + * This table contains as many values as there might be trailing bytes + * in a UTF-8 sequence. + */ +const UTF32 offsetsFromUTF8[6] = { 0x00000000UL, 0x00003080UL, 0x000E2080UL, + 0x03C82080UL, 0xFA082080UL, 0x82082080UL }; + +/* + * Once the bits are split out into bytes of UTF-8, this is a mask OR-ed + * into the first byte, depending on how many bytes follow. There are + * as many entries in this table as there are UTF-8 sequence types. + * (I.e., one byte sequence, two byte... etc.). Remember that sequencs + * for *legal* UTF-8 will be 4 or fewer bytes total. + */ +const UTF8 firstByteMark[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC }; + +/* --------------------------------------------------------------------- */ + +/* The interface converts a whole buffer to avoid function-call overhead. +* Constants have been gathered. Loops & conditionals have been removed as +* much as possible for efficiency, in favor of drop-through switches. +* (See "Note A" at the bottom of the file for equivalent code.) +* If your compiler supports it, the "isLegalUTF8" call can be turned +* into an inline function. +*/ + +} // namespace + +/* --------------------------------------------------------------------- */ + +ConversionResult ConvertUTF16toUTF8 (const UTF16** sourceStart, const UTF16* sourceEnd, + UTF8** targetStart, UTF8* targetEnd, ConversionFlags flags) { + ConversionResult result = conversionOK; + const UTF16* source = *sourceStart; + UTF8* target = *targetStart; + while (source < sourceEnd) { + UTF32 ch; + unsigned short bytesToWrite = 0; + const UTF32 byteMask = 0xBF; + const UTF32 byteMark = 0x80; + const UTF16* oldSource = source; /* In case we have to back up because of target overflow. */ + ch = *source++; + /* If we have a surrogate pair, convert to UTF32 first. */ + if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_HIGH_END) { + /* If the 16 bits following the high surrogate are in the source buffer... */ + if (source < sourceEnd) { + UTF32 ch2 = *source; + /* If it's a low surrogate, convert to UTF32. */ + if (ch2 >= UNI_SUR_LOW_START && ch2 <= UNI_SUR_LOW_END) { + ch = ((ch - UNI_SUR_HIGH_START) << halfShift) + + (ch2 - UNI_SUR_LOW_START) + halfBase; + ++source; + } else if (flags == strictConversion) { /* it's an unpaired high surrogate */ + --source; /* return to the illegal value itself */ + result = sourceIllegal; + break; + } + } else { /* We don't have the 16 bits following the high surrogate. */ + --source; /* return to the high surrogate */ + result = sourceExhausted; + break; + } + } else if (flags == strictConversion) { + /* UTF-16 surrogate values are illegal in UTF-32 */ + if (ch >= UNI_SUR_LOW_START && ch <= UNI_SUR_LOW_END) { + --source; /* return to the illegal value itself */ + result = sourceIllegal; + break; + } + } + /* Figure out how many bytes the result will require */ + if (ch < (UTF32)0x80) { bytesToWrite = 1; + } else if (ch < (UTF32)0x800) { bytesToWrite = 2; + } else if (ch < (UTF32)0x10000) { bytesToWrite = 3; + } else if (ch < (UTF32)0x110000) { bytesToWrite = 4; + } else { bytesToWrite = 3; + ch = UNI_REPLACEMENT_CHAR; + } + + target += bytesToWrite; + if (target > targetEnd) { + source = oldSource; /* Back up source pointer! */ + target -= bytesToWrite; result = targetExhausted; break; + } + switch (bytesToWrite) { /* note: everything falls through. */ + case 4: + *--target = (UTF8)((ch | byteMark) & byteMask); + ch >>= 6; + BP_FALLTHROUGH; + case 3: + *--target = (UTF8)((ch | byteMark) & byteMask); + ch >>= 6; + BP_FALLTHROUGH; + case 2: + *--target = (UTF8)((ch | byteMark) & byteMask); + ch >>= 6; + BP_FALLTHROUGH; + case 1: + *--target = (UTF8)(ch | firstByteMark[bytesToWrite]); + } + target += bytesToWrite; + } +*sourceStart = source; +*targetStart = target; +return result; +} + +/* --------------------------------------------------------------------- */ + +namespace { + +/* + * Utility routine to tell whether a sequence of bytes is legal UTF-8. + * This must be called with the length pre-determined by the first byte. + * If not calling this from ConvertUTF8to*, then the length can be set by: + * length = trailingBytesForUTF8[*source]+1; + * and the sequence is illegal right away if there aren't that many bytes + * available. + * If presented with a length > 4, this returns false. The Unicode + * definition of UTF-8 goes up to 4-byte sequences. + */ +Boolean isLegalUTF8(const UTF8 *source, int length) { + UTF8 a; + const UTF8 *srcptr = source+length; + switch (length) { + default: return false; + /* Everything else falls through when "true"... */ + case 4: + if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return false; + BP_FALLTHROUGH; + case 3: + if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return false; + BP_FALLTHROUGH; + case 2: + if ((a = (*--srcptr)) > 0xBF) return false; + + switch (*source) { + /* no fall-through in this inner switch */ + case 0xE0: if (a < 0xA0) return false; break; + case 0xED: if (a > 0x9F) return false; break; + case 0xF0: if (a < 0x90) return false; break; + case 0xF4: if (a > 0x8F) return false; break; + default: if (a < 0x80) return false; + } + BP_FALLTHROUGH; + case 1: if (*source >= 0x80 && *source < 0xC2) return false; + } + if (*source > 0xF4) return false; + return true; +} + +} // namespace + +/* --------------------------------------------------------------------- */ + +/* + * Exported function to return whether a UTF-8 sequence is legal or not. + * This is not used here; it's just exported. + */ +Boolean isLegalUTF8Sequence(const UTF8 *source, const UTF8 *sourceEnd) { + int length = trailingBytesForUTF8[*source]+1; + if (source+length > sourceEnd) { + return false; + } + return isLegalUTF8(source, length); +} + +/* --------------------------------------------------------------------- */ + +ConversionResult ConvertUTF8toUTF16 (const UTF8** sourceStart, const UTF8* sourceEnd, + UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags) { + ConversionResult result = conversionOK; + const UTF8* source = *sourceStart; + UTF16* target = *targetStart; + while (source < sourceEnd) { + UTF32 ch = 0; + unsigned short extraBytesToRead = trailingBytesForUTF8[*source]; + if (source + extraBytesToRead >= sourceEnd) { + result = sourceExhausted; break; + } + /* Do this check whether lenient or strict */ + if (! isLegalUTF8(source, extraBytesToRead+1)) { + result = sourceIllegal; + break; + } + /* + * The cases all fall through. See "Note A" below. + */ + switch (extraBytesToRead) { + /* remember, illegal UTF-8 */ + case 5: ch += *source++; ch <<= 6; BP_FALLTHROUGH; + /* remember, illegal UTF-8 */ + case 4: ch += *source++; ch <<= 6; BP_FALLTHROUGH; + case 3: ch += *source++; ch <<= 6; BP_FALLTHROUGH; + case 2: ch += *source++; ch <<= 6; BP_FALLTHROUGH; + case 1: ch += *source++; ch <<= 6; BP_FALLTHROUGH; + case 0: ch += *source++; + } + ch -= offsetsFromUTF8[extraBytesToRead]; + + if (target >= targetEnd) { + source -= (extraBytesToRead+1); /* Back up source pointer! */ + result = targetExhausted; break; + } + if (ch <= UNI_MAX_BMP) { /* Target is a character <= 0xFFFF */ + /* UTF-16 surrogate values are illegal in UTF-32 */ + if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) { + if (flags == strictConversion) { + source -= (extraBytesToRead+1); /* return to the illegal value itself */ + result = sourceIllegal; + break; + } else { + *target++ = UNI_REPLACEMENT_CHAR; + } + } else { + *target++ = (UTF16)ch; /* normal case */ + } + } else if (ch > UNI_MAX_UTF16) { + if (flags == strictConversion) { + result = sourceIllegal; + source -= (extraBytesToRead+1); /* return to the start */ + break; /* Bail out; shouldn't continue */ + } else { + *target++ = UNI_REPLACEMENT_CHAR; + } + } else { + /* target is a character in range 0xFFFF - 0x10FFFF. */ + if (target + 1 >= targetEnd) { + source -= (extraBytesToRead+1); /* Back up source pointer! */ + result = targetExhausted; break; + } + ch -= halfBase; + *target++ = (UTF16)((ch >> halfShift) + UNI_SUR_HIGH_START); + *target++ = (UTF16)((ch & halfMask) + UNI_SUR_LOW_START); + } + } +*sourceStart = source; +*targetStart = target; +return result; +} + +/* --------------------------------------------------------------------- */ + +ConversionResult ConvertUTF32toUTF8 (const UTF32** sourceStart, const UTF32* sourceEnd, + UTF8** targetStart, UTF8* targetEnd, ConversionFlags flags) { + ConversionResult result = conversionOK; + const UTF32* source = *sourceStart; + UTF8* target = *targetStart; + while (source < sourceEnd) { + UTF32 ch; + unsigned short bytesToWrite = 0; + const UTF32 byteMask = 0xBF; + const UTF32 byteMark = 0x80; + ch = *source++; + if (flags == strictConversion ) { + /* UTF-16 surrogate values are illegal in UTF-32 */ + if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) { + --source; /* return to the illegal value itself */ + result = sourceIllegal; + break; + } + } + /* + * Figure out how many bytes the result will require. Turn any + * illegally large UTF32 things (> Plane 17) into replacement chars. + */ + if (ch < (UTF32)0x80) { bytesToWrite = 1; + } else if (ch < (UTF32)0x800) { bytesToWrite = 2; + } else if (ch < (UTF32)0x10000) { bytesToWrite = 3; + } else if (ch <= UNI_MAX_LEGAL_UTF32) { bytesToWrite = 4; + } else { bytesToWrite = 3; + ch = UNI_REPLACEMENT_CHAR; + result = sourceIllegal; + } + + target += bytesToWrite; + if (target > targetEnd) { + --source; /* Back up source pointer! */ + target -= bytesToWrite; result = targetExhausted; break; + } + switch (bytesToWrite) { /* note: everything falls through. */ + case 4: + *--target = (UTF8)((ch | byteMark) & byteMask); + ch >>= 6; + BP_FALLTHROUGH; + case 3: + *--target = (UTF8)((ch | byteMark) & byteMask); + ch >>= 6; + BP_FALLTHROUGH; + case 2: + *--target = (UTF8)((ch | byteMark) & byteMask); + ch >>= 6; + BP_FALLTHROUGH; + case 1: + *--target = (UTF8) (ch | firstByteMark[bytesToWrite]); + } + target += bytesToWrite; + } +*sourceStart = source; +*targetStart = target; +return result; +} + +/* --------------------------------------------------------------------- */ + +ConversionResult ConvertUTF8toUTF32 (const UTF8** sourceStart, const UTF8* sourceEnd, + UTF32** targetStart, UTF32* targetEnd, ConversionFlags flags) { + ConversionResult result = conversionOK; + const UTF8* source = *sourceStart; + UTF32* target = *targetStart; + while (source < sourceEnd) { + UTF32 ch = 0; + unsigned short extraBytesToRead = trailingBytesForUTF8[*source]; + if (source + extraBytesToRead >= sourceEnd) { + result = sourceExhausted; break; + } + /* Do this check whether lenient or strict */ + if (! isLegalUTF8(source, extraBytesToRead+1)) { + result = sourceIllegal; + break; + } + /* + * The cases all fall through. See "Note A" below. + */ + switch (extraBytesToRead) { + case 5: ch += *source++; ch <<= 6; BP_FALLTHROUGH; + case 4: ch += *source++; ch <<= 6; BP_FALLTHROUGH; + case 3: ch += *source++; ch <<= 6; BP_FALLTHROUGH; + case 2: ch += *source++; ch <<= 6; BP_FALLTHROUGH; + case 1: ch += *source++; ch <<= 6; BP_FALLTHROUGH; + case 0: ch += *source++; + } + ch -= offsetsFromUTF8[extraBytesToRead]; + + if (target >= targetEnd) { + source -= (extraBytesToRead+1); /* Back up the source pointer! */ + result = targetExhausted; break; + } + if (ch <= UNI_MAX_LEGAL_UTF32) { + /* + * UTF-16 surrogate values are illegal in UTF-32, and anything + * over Plane 17 (> 0x10FFFF) is illegal. + */ + if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) { + if (flags == strictConversion) { + source -= (extraBytesToRead+1); /* return to the illegal value itself */ + result = sourceIllegal; + break; + } else { + *target++ = UNI_REPLACEMENT_CHAR; + } + } else { + *target++ = ch; + } + } else { /* i.e., ch > UNI_MAX_LEGAL_UTF32 */ + result = sourceIllegal; + *target++ = UNI_REPLACEMENT_CHAR; + } + } + *sourceStart = source; + *targetStart = target; + return result; +} + +/* --------------------------------------------------------------------- + +Note A. +The fall-through switches in UTF-8 reading code save a +temp variable, some decrements & conditionals. The switches +are equivalent to the following loop: +{ + int tmpBytesToRead = extraBytesToRead+1; + do { + ch += *source++; + --tmpBytesToRead; + if (tmpBytesToRead) ch <<= 6; + } while (tmpBytesToRead > 0); +} +In UTF-8 writing code, the switches on "bytesToWrite" are +similarly unrolled loops. + +--------------------------------------------------------------------- */ + +} // namespace google_breakpad diff -Nru chromium-119.0.6045.105/third_party/breakpad/breakpad/src/common/convert_UTF.h chromium-119.0.6045.159/third_party/breakpad/breakpad/src/common/convert_UTF.h --- chromium-119.0.6045.105/third_party/breakpad/breakpad/src/common/convert_UTF.h 1970-01-01 00:00:00.000000000 +0000 +++ chromium-119.0.6045.159/third_party/breakpad/breakpad/src/common/convert_UTF.h 2023-11-14 22:57:25.000000000 +0000 @@ -0,0 +1,159 @@ +/* + * Copyright © 1991-2015 Unicode, Inc. All rights reserved. + * Distributed under the Terms of Use in + * http://www.unicode.org/copyright.html. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of the Unicode data files and any associated documentation + * (the "Data Files") or Unicode software and any associated documentation + * (the "Software") to deal in the Data Files or Software + * without restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, and/or sell copies of + * the Data Files or Software, and to permit persons to whom the Data Files + * or Software are furnished to do so, provided that + * (a) this copyright and permission notice appear with all copies + * of the Data Files or Software, + * (b) this copyright and permission notice appear in associated + * documentation, and + * (c) there is clear notice in each modified Data File or in the Software + * as well as in the documentation associated with the Data File(s) or + * Software that the data or software has been modified. + * + * THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF + * ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE + * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT OF THIRD PARTY RIGHTS. + * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS + * NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL + * DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THE DATA FILES OR SOFTWARE. + * + * Except as contained in this notice, the name of a copyright holder + * shall not be used in advertising or otherwise to promote the sale, + * use or other dealings in these Data Files or Software without prior + * written authorization of the copyright holder. + */ + +#ifndef COMMON_CONVERT_UTF_H_ +#define COMMON_CONVERT_UTF_H_ + +/* --------------------------------------------------------------------- + +Conversions between UTF32, UTF-16, and UTF-8. Header file. + +Several funtions are included here, forming a complete set of +conversions between the three formats. UTF-7 is not included +here, but is handled in a separate source file. + +Each of these routines takes pointers to input buffers and output +buffers. The input buffers are const. + +Each routine converts the text between *sourceStart and sourceEnd, +putting the result into the buffer between *targetStart and +targetEnd. Note: the end pointers are *after* the last item: e.g. +*(sourceEnd - 1) is the last item. + +The return result indicates whether the conversion was successful, +and if not, whether the problem was in the source or target buffers. +(Only the first encountered problem is indicated.) + +After the conversion, *sourceStart and *targetStart are both +updated to point to the end of last text successfully converted in +the respective buffers. + +Input parameters: +sourceStart - pointer to a pointer to the source buffer. +The contents of this are modified on return so that +it points at the next thing to be converted. +targetStart - similarly, pointer to pointer to the target buffer. +sourceEnd, targetEnd - respectively pointers to the ends of the +two buffers, for overflow checking only. + +These conversion functions take a ConversionFlags argument. When this +flag is set to strict, both irregular sequences and isolated surrogates +will cause an error. When the flag is set to lenient, both irregular +sequences and isolated surrogates are converted. + +Whether the flag is strict or lenient, all illegal sequences will cause +an error return. This includes sequences such as: , , +or in UTF-8, and values above 0x10FFFF in UTF-32. Conformant code +must check for illegal sequences. + +When the flag is set to lenient, characters over 0x10FFFF are converted +to the replacement character; otherwise (when the flag is set to strict) +they constitute an error. + +Output parameters: +The value "sourceIllegal" is returned from some routines if the input +sequence is malformed. When "sourceIllegal" is returned, the source +value will point to the illegal value that caused the problem. E.g., +in UTF-8 when a sequence is malformed, it points to the start of the +malformed sequence. + +Author: Mark E. Davis, 1994. +Rev History: Rick McGowan, fixes & updates May 2001. +Fixes & updates, Sept 2001. + +------------------------------------------------------------------------ */ + +/* --------------------------------------------------------------------- +The following 4 definitions are compiler-specific. +The C standard does not guarantee that wchar_t has at least +16 bits, so wchar_t is no less portable than unsigned short! +All should be unsigned values to avoid sign extension during +bit mask & shift operations. +------------------------------------------------------------------------ */ + +namespace google_breakpad { + +typedef unsigned long UTF32; /* at least 32 bits */ +typedef unsigned short UTF16; /* at least 16 bits */ +typedef unsigned char UTF8; /* typically 8 bits */ +typedef unsigned char Boolean; /* 0 or 1 */ + +/* Some fundamental constants */ +#define UNI_REPLACEMENT_CHAR (UTF32)0x0000FFFD +#define UNI_MAX_BMP (UTF32)0x0000FFFF +#define UNI_MAX_UTF16 (UTF32)0x0010FFFF +#define UNI_MAX_UTF32 (UTF32)0x7FFFFFFF +#define UNI_MAX_LEGAL_UTF32 (UTF32)0x0010FFFF + +typedef enum { + conversionOK, /* conversion successful */ + sourceExhausted, /* partial character in source, but hit end */ + targetExhausted, /* insuff. room in target for conversion */ + sourceIllegal /* source sequence is illegal/malformed */ +} ConversionResult; + +typedef enum { + strictConversion = 0, + lenientConversion +} ConversionFlags; + +ConversionResult ConvertUTF8toUTF16 (const UTF8** sourceStart, const UTF8* sourceEnd, + UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags); + +ConversionResult ConvertUTF16toUTF8 (const UTF16** sourceStart, const UTF16* sourceEnd, + UTF8** targetStart, UTF8* targetEnd, ConversionFlags flags); + +ConversionResult ConvertUTF8toUTF32 (const UTF8** sourceStart, const UTF8* sourceEnd, + UTF32** targetStart, UTF32* targetEnd, ConversionFlags flags); + +ConversionResult ConvertUTF32toUTF8 (const UTF32** sourceStart, const UTF32* sourceEnd, + UTF8** targetStart, UTF8* targetEnd, ConversionFlags flags); + +ConversionResult ConvertUTF16toUTF32 (const UTF16** sourceStart, const UTF16* sourceEnd, + UTF32** targetStart, UTF32* targetEnd, ConversionFlags flags); + +ConversionResult ConvertUTF32toUTF16 (const UTF32** sourceStart, const UTF32* sourceEnd, + UTF16** targetStart, UTF16* targetEnd, ConversionFlags flags); + +Boolean isLegalUTF8Sequence(const UTF8 *source, const UTF8 *sourceEnd); + +} // namespace google_breakpad + +/* --------------------------------------------------------------------- */ + +#endif // COMMON_CONVERT_UTF_H_ diff -Nru chromium-119.0.6045.105/third_party/devtools-frontend/src/front_end/panels/console/consoleView.css chromium-119.0.6045.159/third_party/devtools-frontend/src/front_end/panels/console/consoleView.css --- chromium-119.0.6045.105/third_party/devtools-frontend/src/front_end/panels/console/consoleView.css 2023-11-01 18:12:33.000000000 +0000 +++ chromium-119.0.6045.159/third_party/devtools-frontend/src/front_end/panels/console/consoleView.css 2023-11-14 22:58:13.000000000 +0000 @@ -211,6 +211,10 @@ &:focus { background-color: var(--sys-color-tonal-container); + + & ::selection { + background-color: var(--sys-color-state-focus-select); + } } } diff -Nru chromium-119.0.6045.105/third_party/devtools-frontend/src/front_end/panels/emulation/deviceModeView.css chromium-119.0.6045.159/third_party/devtools-frontend/src/front_end/panels/emulation/deviceModeView.css --- chromium-119.0.6045.105/third_party/devtools-frontend/src/front_end/panels/emulation/deviceModeView.css 2023-11-01 18:12:34.000000000 +0000 +++ chromium-119.0.6045.159/third_party/devtools-frontend/src/front_end/panels/emulation/deviceModeView.css 2023-11-14 22:58:13.000000000 +0000 @@ -128,6 +128,17 @@ background-color: var(--sys-color-inverse-surface); } +.device-mode-content-clip:not(.device-mode-outline-visible) .device-mode-screen-area { + --override-screen-area-box-shadow: hsl(240deg 3% 84%) 0 0 0 0.5px, hsl(0deg 0% 80% / 40%) 0 0 20px; + + box-shadow: var(--override-screen-area-box-shadow); +} + +.-theme-with-dark-background .device-mode-content-clip:not(.device-mode-outline-visible) .device-mode-screen-area, +:host-context(.-theme-with-dark-background) .device-mode-content-clip:not(.device-mode-outline-visible) .device-mode-screen-area { + --override-screen-area-box-shadow: rgb(40 40 42) 0 0 0 0.5px, rgb(51 51 51 / 40%) 0 0 20px; +} + .device-mode-screen-image { position: absolute; left: 0; diff -Nru chromium-119.0.6045.105/third_party/devtools-frontend/src/front_end/ui/legacy/themeColors.css chromium-119.0.6045.159/third_party/devtools-frontend/src/front_end/ui/legacy/themeColors.css --- chromium-119.0.6045.105/third_party/devtools-frontend/src/front_end/ui/legacy/themeColors.css 2023-11-01 18:12:39.000000000 +0000 +++ chromium-119.0.6045.159/third_party/devtools-frontend/src/front_end/ui/legacy/themeColors.css 2023-11-14 22:58:14.000000000 +0000 @@ -284,6 +284,7 @@ --sys-color-state-ripple-neutral-on-subtle: rgb(31 31 31 / 8%); --sys-color-state-ripple-primary: rgb(124 172 248 / 32%); --sys-color-state-focus-ring: var(--ref-palette-primary40); + --sys-color-state-focus-select: var(--ref-palette-primary80); --sys-color-state-focus-highlight: rgb(31 31 31 / 6%); --sys-color-state-disabled: rgb(31 31 31 / 38%); --sys-color-state-disabled-container: rgb(31 31 31 / 12%); @@ -638,6 +639,7 @@ --sys-color-state-ripple-neutral-on-subtle: rgb(253 252 251 / 16%); --sys-color-state-ripple-primary: rgb(76 141 246 / 32%); --sys-color-state-focus-ring: var(--ref-palette-primary80); + --sys-color-state-focus-select: var(--ref-palette-secondary50); --sys-color-state-focus-highlight: rgb(253 252 251 / 10%); --sys-color-state-disabled: rgb(227 227 227 / 100%); --sys-color-state-disabled-container: rgb(227 227 227 / 12%); diff -Nru chromium-119.0.6045.105/third_party/perfetto/src/tracing/internal/tracing_muxer_impl.cc chromium-119.0.6045.159/third_party/perfetto/src/tracing/internal/tracing_muxer_impl.cc --- chromium-119.0.6045.105/third_party/perfetto/src/tracing/internal/tracing_muxer_impl.cc 2023-11-01 18:13:54.000000000 +0000 +++ chromium-119.0.6045.159/third_party/perfetto/src/tracing/internal/tracing_muxer_impl.cc 2023-11-14 22:58:12.000000000 +0000 @@ -1249,8 +1249,9 @@ continue; auto* internal_state = reinterpret_cast(&static_state.instances[i]); - if (internal_state->backend_id == backend_id && internal_state->config && - *internal_state->config == cfg) { + if (internal_state->backend_id == backend_id && + internal_state->backend_connection_id == backend_connection_id && + internal_state->config && *internal_state->config == cfg) { active_for_config = true; break; } @@ -1594,7 +1595,9 @@ } } - if (producer->connected_) { + if (producer->connected_ && + backend.producer->connection_id_.load(std::memory_order_relaxed) == + backend_connection_id) { // Flush any commits that might have been batched by SharedMemoryArbiter. producer->service_->MaybeSharedMemoryArbiter() ->FlushPendingCommitDataRequests(); @@ -1705,7 +1708,12 @@ if (!producer) return; - if (producer->connected_) { + // If the tracing service disconnects and reconnects while a data source is + // handling a flush request, there's no point is sending the flush reply to + // the newly reconnected producer. + if (producer->connected_ && + backend.producer->connection_id_.load(std::memory_order_relaxed) == + backend_connection_id) { producer->NotifyFlushForDataSourceDone(instance_id, flush_id); } } diff -Nru chromium-119.0.6045.105/third_party/perfetto/src/tracing/test/api_integrationtest.cc chromium-119.0.6045.159/third_party/perfetto/src/tracing/test/api_integrationtest.cc --- chromium-119.0.6045.105/third_party/perfetto/src/tracing/test/api_integrationtest.cc 2023-11-01 18:13:54.000000000 +0000 +++ chromium-119.0.6045.159/third_party/perfetto/src/tracing/test/api_integrationtest.cc 2023-11-14 22:58:12.000000000 +0000 @@ -5995,6 +5995,167 @@ EXPECT_THAT(test_strings, AllOf(Not(IsEmpty()), Each("New session"))); } +TEST_P(PerfettoApiTest, SystemDisconnectAsyncOnStopNoTracing) { + if (GetParam() != perfetto::kSystemBackend) { + GTEST_SKIP(); + } + auto* data_source = &data_sources_["my_data_source"]; + data_source->handle_stop_asynchronously = true; + + perfetto::TraceConfig cfg; + auto* buffer = cfg.add_buffers(); + buffer->set_size_kb(64); + auto* ds_cfg = cfg.add_data_sources()->mutable_config(); + ds_cfg->set_name("my_data_source"); + auto* tracing_session = NewTrace(cfg); + tracing_session->get()->StartBlocking(); + + std::atomic quit1{false}; + WaitableTestEvent tracing1; + std::thread t([&] { + while (!quit1) { + MockDataSource::Trace( + [&](MockDataSource::TraceContext) { tracing1.Notify(); }); + std::this_thread::yield(); + } + }); + auto cleanup = MakeCleanup([&] { + if (t.joinable()) { + quit1 = true; + t.join(); + } + }); + tracing1.Wait(); + + // Restarts the system service. This will cause the producer and consumer to + // disconnect. + system_service_.Restart(); + + // The data source instance should be stopped. Don't acknowledge the stop yet. + data_source->on_stop.Wait(); + + tracing_session->on_stop.Wait(); + + std::unique_ptr new_session = + perfetto::Tracing::NewTrace(/*backend=*/GetParam()); + bool reconnected = false; + for (size_t i = 0; i < 100; i++) { + // Blocking read. + auto result = new_session->QueryServiceStateBlocking(); + perfetto::protos::gen::TracingServiceState state; + EXPECT_TRUE(result.success); + EXPECT_TRUE(state.ParseFromArray(result.service_state_data.data(), + result.service_state_data.size())); + // The producer has connected to the new restarted system service. + if (state.producers().size() == 1) { + reconnected = true; + break; + } + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + } + ASSERT_TRUE(reconnected); + + data_source->async_stop_closure(); + + data_source->handle_stop_asynchronously = false; +} + +TEST_P(PerfettoApiTest, SystemDisconnectAsyncOnStopRestartTracing) { + if (GetParam() != perfetto::kSystemBackend) { + GTEST_SKIP(); + } + auto* data_source = &data_sources_["my_data_source"]; + data_source->handle_stop_asynchronously = true; + + perfetto::TraceConfig cfg; + auto* buffer = cfg.add_buffers(); + buffer->set_size_kb(64); + auto* ds_cfg = cfg.add_data_sources()->mutable_config(); + ds_cfg->set_name("my_data_source"); + auto* tracing_session = NewTrace(cfg); + tracing_session->get()->StartBlocking(); + + std::atomic quit1{false}; + WaitableTestEvent tracing1; + std::atomic quit2{false}; + WaitableTestEvent tracing2; + std::thread t([&] { + while (!quit1) { + MockDataSource::Trace( + [&](MockDataSource::TraceContext) { tracing1.Notify(); }); + std::this_thread::yield(); + } + while (!quit2) { + MockDataSource::Trace([&](MockDataSource::TraceContext ctx) { + { + auto packet = ctx.NewTracePacket(); + packet->set_for_testing()->set_str("New session"); + } + { auto packet = ctx.NewTracePacket(); } + tracing2.Notify(); + }); + std::this_thread::yield(); + } + }); + auto cleanup = MakeCleanup([&] { + if (t.joinable()) { + quit1 = true; + quit2 = true; + t.join(); + } + }); + tracing1.Wait(); + + // Restarts the system service. This will cause the producer and consumer to + // disconnect. + system_service_.Restart(); + + // The data source instance should be stopped. Don't acknowledge the stop yet. + data_source->on_stop.Wait(); + + tracing_session->on_stop.Wait(); + + std::unique_ptr new_session = + perfetto::Tracing::NewTrace(/*BackendType=*/GetParam()); + bool reconnected = false; + for (size_t i = 0; i < 100; i++) { + // Blocking read. + auto result = new_session->QueryServiceStateBlocking(); + perfetto::protos::gen::TracingServiceState state; + EXPECT_TRUE(result.success); + EXPECT_TRUE(state.ParseFromArray(result.service_state_data.data(), + result.service_state_data.size())); + // The producer has connected to the new restarted system service. + if (state.producers().size() == 1) { + reconnected = true; + break; + } + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + } + ASSERT_TRUE(reconnected); + + auto* tracing_session2 = NewTrace(cfg); + tracing_session2->get()->StartBlocking(); + + data_source->async_stop_closure(); + + quit1 = true; + tracing2.Wait(); + quit2 = true; + t.join(); + + data_source->handle_stop_asynchronously = false; + + auto trace = StopSessionAndReturnParsedTrace(tracing_session2); + std::vector test_strings; + for (auto& trace_packet : trace.packet()) { + if (trace_packet.has_for_testing()) { + test_strings.push_back(trace_packet.for_testing().str()); + } + } + EXPECT_THAT(test_strings, AllOf(Not(IsEmpty()), Each("New session"))); +} + class PerfettoStartupTracingApiTest : public PerfettoApiTest { public: using SetupStartupTracingOpts = perfetto::Tracing::SetupStartupTracingOpts; diff -Nru chromium-119.0.6045.105/third_party/skia/gm/blurs.cpp chromium-119.0.6045.159/third_party/skia/gm/blurs.cpp --- chromium-119.0.6045.105/third_party/skia/gm/blurs.cpp 2023-11-01 18:12:47.000000000 +0000 +++ chromium-119.0.6045.159/third_party/skia/gm/blurs.cpp 2023-11-14 22:57:43.000000000 +0000 @@ -9,6 +9,7 @@ #include "include/core/SkBlurTypes.h" #include "include/core/SkCanvas.h" #include "include/core/SkColor.h" +#include "include/core/SkColorFilter.h" #include "include/core/SkFont.h" #include "include/core/SkMaskFilter.h" #include "include/core/SkPaint.h" @@ -159,3 +160,41 @@ canvas->drawRect(rect, paint); } } + +// Modeled after crbug.com/1500021, incorporates manual tiling to emulate Chrome's raster tiles +// or the tiled rendering mode in Viewer. +DEF_SIMPLE_GM(TiledBlurBigSigma, canvas, 1024, 768) { + static constexpr int kTileWidth = 342; + static constexpr int kTileHeight = 256; + + SkM44 origCTM = canvas->getLocalToDevice(); + + for (int y = 0; y < 3; ++y) { + for (int x = 0; x < 3; ++x) { + // Define tiled grid in the canvas pixel space + canvas->save(); + canvas->resetMatrix(); + + canvas->clipIRect(SkIRect::MakeXYWH(x*kTileWidth, y*kTileHeight, + kTileWidth, kTileHeight)); + canvas->setMatrix(origCTM); + + auto flood = SkImageFilters::ColorFilter(SkColorFilters::Blend( + SK_ColorBLACK, SkBlendMode::kSrc), nullptr); + auto blend = SkImageFilters::Blend(SkBlendMode::kSrcOver, + std::move(flood), nullptr); + auto blur = SkImageFilters::Blur(206.f, 206.f, std::move(blend)); + + SkPaint p; + p.setImageFilter(std::move(blur)); + + canvas->clipRect({0, 0, 1970, 1223}); + canvas->saveLayer(nullptr, &p); + SkPaint fill; + fill.setColor(SK_ColorBLUE); + canvas->drawCircle(600, 150, 350, fill); + canvas->restore(); + canvas->restore(); + } + } +} diff -Nru chromium-119.0.6045.105/third_party/skia/src/gpu/ganesh/GrBlurUtils.cpp chromium-119.0.6045.159/third_party/skia/src/gpu/ganesh/GrBlurUtils.cpp --- chromium-119.0.6045.105/third_party/skia/src/gpu/ganesh/GrBlurUtils.cpp 2023-11-01 18:13:09.000000000 +0000 +++ chromium-119.0.6045.159/third_party/skia/src/gpu/ganesh/GrBlurUtils.cpp 2023-11-14 22:57:44.000000000 +0000 @@ -2254,6 +2254,12 @@ GrColorType srcColorType = src->colorInfo().colorType(); SkAlphaType srcAlphaType = src->colorInfo().alphaType(); +#if defined(SK_USE_PADDED_BLUR_UPSCALE) + // The blur output completely filled the src SurfaceContext, so that is our subset boundary, + // ensuring we don't access undefined pixels in the approx-fit backing texture. + SkRect srcContent = SkRect::MakeIWH(src->width(), src->height()); +#endif + src.reset(); // no longer needed // Create the sdc with default SkSurfaceProps. Gaussian blurs will soon use a @@ -2278,8 +2284,12 @@ srcAlphaType, SkMatrix::I(), GrSamplerState::Filter::kLinear, +#if defined(SK_USE_PADDED_BLUR_UPSCALE) + srcContent, +#else srcBounds, srcBounds, +#endif *rContext->priv().caps()); paint.setColorFragmentProcessor(std::move(fp)); paint.setPorterDuffXPFactory(SkBlendMode::kSrc); @@ -2562,19 +2572,7 @@ auto srcCtx = rContext->priv().makeSC(srcView, colorInfo); SkASSERT(srcCtx); - float scaleX = sigmaX > kMaxSigma ? kMaxSigma / sigmaX : 1.f; - float scaleY = sigmaY > kMaxSigma ? kMaxSigma / sigmaY : 1.f; - // We round down here so that when we recalculate sigmas we know they will be below - // kMaxSigma (but clamp to 1 do we don't have an empty texture). - SkISize rescaledSize = {std::max(sk_float_floor2int(srcBounds.width() * scaleX), 1), - std::max(sk_float_floor2int(srcBounds.height() * scaleY), 1)}; - // Compute the sigmas using the actual scale factors used once we integerized the - // rescaledSize. - scaleX = static_cast(rescaledSize.width()) / srcBounds.width(); - scaleY = static_cast(rescaledSize.height()) / srcBounds.height(); - sigmaX *= scaleX; - sigmaY *= scaleY; - +#if defined(SK_USE_PADDED_BLUR_UPSCALE) // When we are in clamp mode any artifacts in the edge pixels due to downscaling may be // exacerbated because of the tile mode. The particularly egregious case is when the original // image has transparent black around the edges and the downscaling pulls in some non-zero @@ -2596,6 +2594,31 @@ : 0; int padY = mode == SkTileMode::kClamp || (mode == SkTileMode::kDecal && sigmaY > kMaxSigma) ? 1 : 0; +#endif + + float scaleX = sigmaX > kMaxSigma ? kMaxSigma / sigmaX : 1.f; + float scaleY = sigmaY > kMaxSigma ? kMaxSigma / sigmaY : 1.f; + // We round down here so that when we recalculate sigmas we know they will be below + // kMaxSigma (but clamp to 1 do we don't have an empty texture). + SkISize rescaledSize = {std::max(sk_float_floor2int(srcBounds.width() * scaleX), 1), + std::max(sk_float_floor2int(srcBounds.height() * scaleY), 1)}; + // Compute the sigmas using the actual scale factors used once we integerized the + // rescaledSize. + scaleX = static_cast(rescaledSize.width()) / srcBounds.width(); + scaleY = static_cast(rescaledSize.height()) / srcBounds.height(); + sigmaX *= scaleX; + sigmaY *= scaleY; + +#if !defined(SK_USE_PADDED_BLUR_UPSCALE) + // Historically, padX and padY were calculated after scaling sigmaX,Y, which meant that they + // would never be greater than kMaxSigma. This causes pixel diffs so must be guarded along with + // the rest of the padding dst behavior. + int padX = mode == SkTileMode::kClamp || (mode == SkTileMode::kDecal && sigmaX > kMaxSigma) ? 1 + : 0; + int padY = mode == SkTileMode::kClamp || (mode == SkTileMode::kDecal && sigmaY > kMaxSigma) ? 1 + : 0; +#endif + // Create the sdc with default SkSurfaceProps. Gaussian blurs will soon use a // SurfaceFillContext, at which point the SkSurfaceProps won't exist anymore. auto rescaledSDC = skgpu::ganesh::SurfaceDrawContext::Make( @@ -2686,8 +2709,17 @@ scaledDstBounds.fBottom *= scaleY; // Account for padding in our rescaled src, if any. scaledDstBounds.offset(padX, padY); - // Turn the scaled down dst bounds into an integer pixel rect. + // Turn the scaled down dst bounds into an integer pixel rect, adding 1px of padding to help + // with boundary sampling during re-expansion when there are extreme scale factors. This is + // particularly important when the blurs extend across Chrome raster tiles; w/o it the re-expand + // produces visible seams: crbug.com/1500021. +#if defined(SK_USE_PADDED_BLUR_UPSCALE) + static constexpr int kDstPadding = 1; +#else + static constexpr int kDstPadding = 0; +#endif auto scaledDstBoundsI = scaledDstBounds.roundOut(); + scaledDstBoundsI.outset(kDstPadding, kDstPadding); SkIRect scaledSrcBounds = SkIRect::MakeSize(srcView.dimensions()); auto sdc = GaussianBlur(rContext, @@ -2704,8 +2736,12 @@ if (!sdc) { return nullptr; } + + SkASSERT(sdc->width() == scaledDstBoundsI.width() && + sdc->height() == scaledDstBoundsI.height()); // We rounded out the integer scaled dst bounds. Select the fractional dst bounds from the - // integer dimension blurred result when we scale back up. + // integer dimension blurred result when we scale back up. This also accounts for the padding + // added to 'scaledDstBoundsI' when sampling from the blurred result. scaledDstBounds.offset(-scaledDstBoundsI.left(), -scaledDstBoundsI.top()); return reexpand(rContext, std::move(sdc), diff -Nru chromium-119.0.6045.105/tools/metrics/histograms/enums.xml chromium-119.0.6045.159/tools/metrics/histograms/enums.xml --- chromium-119.0.6045.105/tools/metrics/histograms/enums.xml 2023-11-01 18:11:27.000000000 +0000 +++ chromium-119.0.6045.159/tools/metrics/histograms/enums.xml 2023-11-14 22:57:14.000000000 +0000 @@ -10536,21 +10536,22 @@ - - - - + + + + - - - - - - - - - + + + + + + + + + + @@ -25597,6 +25598,8 @@ + @@ -61086,6 +61089,8 @@ + @@ -67922,6 +67927,8 @@ + @@ -99567,6 +99574,8 @@ + + @@ -110413,6 +110422,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru chromium-119.0.6045.105/tools/metrics/histograms/metadata/ios/histograms.xml chromium-119.0.6045.159/tools/metrics/histograms/metadata/ios/histograms.xml --- chromium-119.0.6045.105/tools/metrics/histograms/metadata/ios/histograms.xml 2023-11-01 18:11:27.000000000 +0000 +++ chromium-119.0.6045.159/tools/metrics/histograms/metadata/ios/histograms.xml 2023-11-14 22:57:14.000000000 +0000 @@ -1675,6 +1675,16 @@ + + christianxu@chromium.org + bling-team@google.com + + Logs the selected steady state (unfocused) omnibox position when starting + the app. This only logged when the position is user selected. + + + christianxu@chromium.org diff -Nru chromium-119.0.6045.105/tools/metrics/histograms/metadata/optimization/histograms.xml chromium-119.0.6045.159/tools/metrics/histograms/metadata/optimization/histograms.xml --- chromium-119.0.6045.105/tools/metrics/histograms/metadata/optimization/histograms.xml 2023-11-01 18:11:27.000000000 +0000 +++ chromium-119.0.6045.159/tools/metrics/histograms/metadata/optimization/histograms.xml 2023-11-14 22:57:14.000000000 +0000 @@ -191,6 +191,8 @@ + diff -Nru chromium-119.0.6045.105/tools/metrics/histograms/metadata/others/histograms.xml chromium-119.0.6045.159/tools/metrics/histograms/metadata/others/histograms.xml --- chromium-119.0.6045.105/tools/metrics/histograms/metadata/others/histograms.xml 2023-11-01 18:11:27.000000000 +0000 +++ chromium-119.0.6045.159/tools/metrics/histograms/metadata/others/histograms.xml 2023-11-14 22:57:14.000000000 +0000 @@ -4826,6 +4826,18 @@ + + llin@chromium.org + xiqiruan@chromium.org + yilkal@chromium.org + cros-demo-mode-eng@google.com + + Records whether a window associated with GMSCore has been created during the + demo session. + + +