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.123-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.123-1~deb11u1.dsc DEPS | 8 ash/constants/ash_features.cc | 19 ash/constants/ash_features.h | 6 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 | 6 ash/strings/ash_strings_or.xtb | 2 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/wm/session_state_animator.h | 2 ash/wm/session_state_animator_impl.cc | 17 ash/wm/session_state_animator_impl_unittest.cc | 43 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/generated_resources_ar.xtb | 3 chrome/app/resources/generated_resources_as.xtb | 4 chrome/app/resources/generated_resources_eu.xtb | 18 chrome/app/resources/generated_resources_fa.xtb | 14 chrome/app/resources/generated_resources_hi.xtb | 6 chrome/app/resources/generated_resources_iw.xtb | 4 chrome/app/resources/generated_resources_my.xtb | 2 chrome/app/resources/generated_resources_or.xtb | 2 chrome/app/resources/generated_resources_pa.xtb | 2 chrome/app/resources/generated_resources_uz.xtb | 2 chrome/app/resources/generated_resources_vi.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/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/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/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/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_hi.xtb | 4 chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.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/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 components/browser_ui/strings/android/translations/browser_ui_strings_iw.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_vi.xtb | 2 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 | 4 components/strings/components_strings_de.xtb | 4 components/strings/components_strings_eu.xtb | 2 components/strings/components_strings_hi.xtb | 2 components/strings/components_strings_iw.xtb | 2 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_th.xtb | 2 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 debian/changelog | 16 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 ---- google_apis/gaia/gaia_constants.cc | 4 google_apis/gaia/gaia_constants.h | 4 gpu/config/gpu_driver_bug_list.json | 17 gpu/config/gpu_lists_version.h | 2 infra/config/generated/testing/variants.pyl | 60 - infra/config/targets/cros-skylab-variants.json | 72 - infra/config/targets/lacros-version-skew-variants.json | 24 media/audio/cras/cras_input.cc | 13 media/base/media_switches.cc | 5 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 testing/buildbot/chrome.json | 24 testing/buildbot/chromium.chromiumos.json | 72 - testing/buildbot/chromium.coverage.json | 72 - testing/buildbot/chromium.fyi.json | 168 +- testing/buildbot/chromium.memory.json | 72 - testing/buildbot/internal.chromeos.fyi.json | 32 testing/buildbot/variants.pyl | 60 - 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/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/perfetto/src/tracing/internal/tracing_muxer_impl.cc | 16 third_party/perfetto/src/tracing/test/api_integrationtest.cc | 161 ++ tools/metrics/histograms/enums.xml | 63 - tools/metrics/histograms/metadata/optimization/histograms.xml | 2 tools/metrics/histograms/metadata/others/histograms.xml | 12 213 files changed, 5215 insertions(+), 2141 deletions(-) diff -Nru chromium-119.0.6045.105/DEPS chromium-119.0.6045.123/DEPS --- chromium-119.0.6045.105/DEPS 2023-11-01 18:10:02.000000000 +0000 +++ chromium-119.0.6045.123/DEPS 2023-11-08 03:24:07.000000000 +0000 @@ -310,7 +310,7 @@ # 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. @@ -845,7 +845,7 @@ 'src/clank': { 'url': Var('chrome_git') + '/clank/internal/apps.git' + '@' + - 'ff998867a5150b2a99ce2b727e5a7a42abb26853', + '49dd460d3365a9efbafe7a4c116a0f20af124186', 'condition': 'checkout_android and 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/constants/ash_features.cc chromium-119.0.6045.123/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.123/ash/constants/ash_features.cc 2023-11-08 03:24:08.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.123/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.123/ash/constants/ash_features.h 2023-11-08 03:24:08.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/shortcut_viewer/strings/shortcut_viewer_strings_eu.xtb chromium-119.0.6045.123/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.123/ash/shortcut_viewer/strings/shortcut_viewer_strings_eu.xtb 2023-11-08 03:24:08.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.123/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.123/ash/strings/ash_strings_ar.xtb 2023-11-08 03:24:08.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.123/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.123/ash/strings/ash_strings_as.xtb 2023-11-08 03:24:08.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.123/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.123/ash/strings/ash_strings_ca.xtb 2023-11-08 03:24:08.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.123/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.123/ash/strings/ash_strings_eu.xtb 2023-11-08 03:24:08.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 @@ -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 @@ -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_or.xtb chromium-119.0.6045.123/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.123/ash/strings/ash_strings_or.xtb 2023-11-08 03:24:08.000000000 +0000 @@ -335,7 +335,7 @@ ୱାଇ-ଫାଇକୁ ଟୋଗଲ କରନ୍ତୁ। ଆପଣଙ୍କ Chromebookରେ ସାଇନ୍ ଇନ୍ କରାଯାଇପାରିବ ନାହିଁ ଆପ୍ସ ଦେଖାନ୍ତୁ -ଚୀନୀୟ ଭାଷାରେ "ନମସ୍କାର" +ଚୀନୀୟ ଭାଷାରେ "ହେଲୋ" କାଷ୍ଟିଂକୁ ବର୍ତ୍ତମାନ ବିରତ କରାଯାଇଛି। ଆପଣ ଯେ କୌଣସି ସମୟରେ କାଷ୍ଟିଂ ପୁଣି ଆରମ୍ଭ କରିପାରିବେ କିମ୍ବା କାଷ୍ଟିଂକୁ ବନ୍ଦ କରିପାରିବେ। ପୃଷ୍ଠାରେ ଥିବା ସବୁକିଛି ଚୟନ କରନ୍ତୁ Chrome ମେନୁ ଦେଖାନ୍ତୁ diff -Nru chromium-119.0.6045.105/ash/system/video_conference/video_conference_tray.cc chromium-119.0.6045.123/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.123/ash/system/video_conference/video_conference_tray.cc 2023-11-08 03:24:08.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.123/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.123/ash/system/video_conference/video_conference_tray_controller.cc 2023-11-08 03:24:08.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.123/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.123/ash/system/video_conference/video_conference_tray_controller.h 2023-11-08 03:24:08.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/wm/session_state_animator.h chromium-119.0.6045.123/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.123/ash/wm/session_state_animator.h 2023-11-08 03:24:09.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.123/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.123/ash/wm/session_state_animator_impl.cc 2023-11-08 03:24:09.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.123/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.123/ash/wm/session_state_animator_impl_unittest.cc 2023-11-08 03:24:09.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/build/util/LASTCHANGE chromium-119.0.6045.123/build/util/LASTCHANGE --- chromium-119.0.6045.105/build/util/LASTCHANGE 2023-11-01 18:15:55.000000000 +0000 +++ chromium-119.0.6045.123/build/util/LASTCHANGE 2023-11-08 03:27:41.000000000 +0000 @@ -1,2 +1,2 @@ -LASTCHANGE=38c72552c5e15ba9b3117c0967a0fd105072d7c6-refs/branch-heads/6045@{#1103} +LASTCHANGE=b9e5b8a154549bb57a57b9c822607bc3289fc5b9-refs/branch-heads/6045@{#1231} LASTCHANGE_YEAR=2023 diff -Nru chromium-119.0.6045.105/build/util/LASTCHANGE.committime chromium-119.0.6045.123/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.123/build/util/LASTCHANGE.committime 2023-11-08 03:27:41.000000000 +0000 @@ -1 +1 @@ -1698683262 \ No newline at end of file +1699304253 \ No newline at end of file diff -Nru chromium-119.0.6045.105/chrome/LACROS_QA_QUALIFIED_VERSION chromium-119.0.6045.123/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.123/chrome/LACROS_QA_QUALIFIED_VERSION 2023-11-08 03:24:10.000000000 +0000 @@ -1 +1 @@ -119.0.6045.59 \ No newline at end of file +119.0.6045.110 \ No newline at end of file diff -Nru chromium-119.0.6045.105/chrome/VERSION chromium-119.0.6045.123/chrome/VERSION --- chromium-119.0.6045.105/chrome/VERSION 2023-11-01 18:10:05.000000000 +0000 +++ chromium-119.0.6045.123/chrome/VERSION 2023-11-08 03:24:10.000000000 +0000 @@ -1,4 +1,4 @@ MAJOR=119 MINOR=0 BUILD=6045 -PATCH=105 +PATCH=123 diff -Nru chromium-119.0.6045.105/chrome/app/resources/chromium_strings_as.xtb chromium-119.0.6045.123/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.123/chrome/app/resources/chromium_strings_as.xtb 2023-11-08 03:24:11.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/generated_resources_ar.xtb chromium-119.0.6045.123/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.123/chrome/app/resources/generated_resources_ar.xtb 2023-11-08 03:24:11.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.123/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.123/chrome/app/resources/generated_resources_as.xtb 2023-11-08 03:24:11.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_eu.xtb chromium-119.0.6045.123/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.123/chrome/app/resources/generated_resources_eu.xtb 2023-11-08 03:24:12.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 @@ -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. @@ -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 @@ -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. @@ -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.123/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.123/chrome/app/resources/generated_resources_fa.xtb 2023-11-08 03:24:12.000000000 +0000 @@ -2355,7 +2355,7 @@ مرورگر جایگزین باز نشد از سیستم این سایت (ازجمله در برگه‌های باز) خارج خواهید شد دوربین خاموش است -پهلو به پهلو +پهلوبه‌پهلو همه چیز آماده است! ‏سیستم فایل رمزگذاری Microsoft برنامه‌ها @@ -3502,7 +3502,7 @@ سایت درحال استفاده از میکروفون شما است درحال ارسال محتوای صفحه تنظیم پین -‏به «دستیار Google» اجازه دهید برای کمک کردن، از اطلاعات روی صفحه استفاده کند +‏به «دستیار Google» اجازه دهید برای کمک کردن، از بافت صفحه استفاده کند سایت‌ها می‌توانند برای جستجوی دستگاه‌های بلوتوث درخواست دهند برداشتن سنجاق از «نوارابزار» سایتی یافت نشد @@ -4022,7 +4022,7 @@ می‌تواند از اطلاعاتتان درحین مرور استفاده کند می‌توانید ورود به سیستم را برای کاربران خاصی محدود کنید. با این کار، گزینه «افزودن شخص» در صفحه ورود به سیستم برداشته می‌شود. همچنین می‌توانید کاربران فعلی را نیز بردارید. صفحه‌نمایش -اطلاعات روی صفحه +بافت صفحه درباره تجربه بازی اخیرتان به ما بگویید نشانک‌ها را اینجا خواهید دید {NUM_TABS,plural, =1{‏۱ برگه}one{‏# برگه}other{‏# برگه}} @@ -6976,7 +6976,7 @@ از کلیدهای پیکان سمت راست و چپ برای پیمایش استفاده کنید. انتخاب کنید سابقه همگام‌سازی شود یا نه قبلاً هیچ کاربری رده‌بندی نکرده است. -به‌نظر می‌رسد قبلاً «دستیار» را در دستگاه دیگری راه‌اندازی کرده‌اید. با روشن کردن «اطلاعات روی صفحه» در این دستگاه، بهره بیشتری از «دستیار» ببرید. +به‌نظر می‌رسد قبلاً «دستیار» را در دستگاه دیگری راه‌اندازی کرده‌اید. با روشن کردن «بافت صفحه» در این دستگاه، بهره بیشتری از «دستیار» ببرید. ا&بزارهای بیشتر ‏درحال‌حاضر را مدیریت می‌کند. برای استفاده از کنترل‌های والدین با «حساب Google» دیگر، بعد از راه‌اندازی از سیستم خارج شوید و سپس «افزودن فرد» را در صفحه ورود به سیستم انتخاب کنید. بازنشانی سیم‌کارت داخلی @@ -7547,7 +7547,7 @@ تنظیم روی اجرای خودکار در حال پردازش میان‌برها... نشانی وب با به‌جای پرسش -به «دستیار» اجازه دهید برای ارائه کمک از اطلاعات روی صفحه استفاده کند +به «دستیار» اجازه دهید برای ارائه کمک از بافت صفحه استفاده کند رفتن به صفحه «گذرواژه‌ها» ‏درحال پیکربندی محتوی Linux. این کار ممکن است تا ۳۰ دقیقه طول بکشد. این دستگاه در حالتی قفل شده است که از ثبت‌نام شرکتی جلوگیری می‌کند. اگر می‌خواهید دستگاه را ثبت‌نام کنید ابتدا باید دستگاه را بازیابی کنید. @@ -8368,7 +8368,7 @@ نشانه‌های تکیه درحال جفت کردن با «» … دستورالعمل دریافت شده است -‏هر زمان خواستید می‌توانید این گزینه را در «تنظیمات > دستیار Google > اطلاعات روی صفحه» تغییر دهید. +‏هر زمان خواستید می‌توانید این گزینه را در «تنظیمات > دستیار Google > بافت صفحه» تغییر دهید. اجازه ندارد از دوربین استفاده کند نمایش نشانه‌های تکیه (اِعراب) و نویسه‌های خاص استاندارد @@ -8471,7 +8471,7 @@ وضعیت بستن نکته جستجو و دستیار -‏به‌نظر می‌رسد ازقبل «دستیار Google» را در دستگاه دیگری راه‌اندازی کرده است. می‌تواند با روشن کردن «اطلاعات روی صفحه» در این دستگاه، بهره بیشتری از «دستیار» ببرد. +‏به‌نظر می‌رسد ازقبل «دستیار Google» را در دستگاه دیگری راه‌اندازی کرده است. می‌تواند با روشن کردن «بافت صفحه» در این دستگاه، بهره بیشتری از «دستیار» ببرد. دسترسی به دوربین شما همیشه مجاز باشد پنجره‌های بازشو در این صفحه مسدود شده‌اند. ‏ورودی باید در قالب $SM-‏DP+ نشانی$شناسه انطباق اختیاری باشد diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_hi.xtb chromium-119.0.6045.123/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.123/chrome/app/resources/generated_resources_hi.xtb 2023-11-08 03:24:12.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_iw.xtb chromium-119.0.6045.123/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.123/chrome/app/resources/generated_resources_iw.xtb 2023-11-08 03:24:12.000000000 +0000 @@ -2838,7 +2838,7 @@ תמיד אפשר לנהל את ההגדרות בכרטיס הזה, או לראות עוד אפשרויות ב'התאמה אישית של Chrome'. מסומן בסימנייה -בדיקה עכשיו +לבדיקה לא מאושר לא ניתן להתחבר למדפסת לא ניתן היה לסיים את ההורדה @@ -8207,7 +8207,7 @@ אירעה שגיאה בהוספת חשבון רישום המכשיר מתבצע... ‏הפעלה של חנות Play -שימוש במצב שקט יותר של התראות +שימוש בהצגת התראות שקטה יותר המערכת לא הצליחה לשמור את תצורת המכשיר. לאתר אין הרשאה להשתמש במידע עליך שנשמר בו לא תהיה אפשרות לשחזר נתונים מקומיים אם שוכחים את הסיסמה או קוד האימות. diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_my.xtb chromium-119.0.6045.123/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.123/chrome/app/resources/generated_resources_my.xtb 2023-11-08 03:24:13.000000000 +0000 @@ -4261,7 +4261,7 @@ သည် ၏ မူလအကောင့်ဖြစ်သည် ‘ကျွန်ုပ်၏ Drive’ ရှိ ဖိုင်အသစ်များကို ဤ Chromebook သို့ အလိုအလျောက် စင့်ခ်လုပ်ခြင်း ရပ်ပါမည် ကာစ်လုပ်ရမည့်စက်ပစ္စည်းတစ်ခုမျှ မတွေ့ပါ။ အကူအညီလိုအပ်ပါသလား။ -ဖရဲသီး +သခွားမ သည်ဝင်းဒိုးတစ်ခုကို မျှဝေနေပါသည်။ ပြသမှု သတိပေးချက်များ ပုံနှိပ်ခြင်း စတင်ပါပြီ diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_or.xtb chromium-119.0.6045.123/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.123/chrome/app/resources/generated_resources_or.xtb 2023-11-08 03:24:13.000000000 +0000 @@ -1151,7 +1151,7 @@ ଚୁକ୍ତି ଓ ସର୍ତ୍ତାବଳୀ ଡିସ୍କ ସ୍ପେସ୍ ଅତ୍ୟନ୍ତ କମ୍ ଅଛି। ଦୟାକରି ଡିସ୍କ ସ୍ପେସ୍ ଖାଲି କରନ୍ତୁ। ପୂର୍ଣ୍ଣ ସ୍କ୍ରିନ୍‌ ଖୋଲନ୍ତୁ -ନମସ୍କାର +ହାଏ ଅନ୍ୟ ଭାଷାଗୁଡ଼ିକ ବନ୍ଦ କରନ୍ତୁ ଟିପଚିହ୍ନ ସେଟ ଅପ କରିବା ପାଇଁ ଆପଣଙ୍କ ପିଲାକୁ କୀବୋର୍ଡର ନିମ୍ନ ଡାହାଣ କୋଣରେ ଥିବା ଟିପଚିହ୍ନ ସେନ୍ସରକୁ ସ୍ପର୍ଶ କରିବା ପାଇଁ ଦିଅନ୍ତୁ। ଆପଣଙ୍କ ପିଲାର ଟିପଚିହ୍ନ ଡାଟାକୁ ସୁରକ୍ଷିତ ଭାବେ ଷ୍ଟୋର କରାଯାଇଛି ଏବଂ ଏହାକୁ କେବେ ବି ଏହି ରୁ କାଢ଼ି ଦିଆଯାଏ ନାହିଁ। diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_pa.xtb chromium-119.0.6045.123/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.123/chrome/app/resources/generated_resources_pa.xtb 2023-11-08 03:24:13.000000000 +0000 @@ -6313,7 +6313,7 @@ ਨੂੰ ਸੂਚਨਾ ਭੇਜੀ ਗਈ QR ਕੋਡ ਬਣਾਓ ਨੋਟ ਕਰੋ: ਕਿਸੇ ਮਿਲਦੀ-ਜੁਲਦੀ ਅਵਾਜ਼ ਜਾਂ ਅਵਾਜ਼ ਦੀ ਰਿਕਾਰਡਿੰਗ ਨਾਲ ਦੇ ਨਿੱਜੀ ਨਤੀਜਿਆਂ ਤੱਕ ਪਹੁੰਚ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ। ਬੈਟਰੀ ਬਚਾਉਣ ਲਈ, ਤੁਸੀਂ ਦੀਆਂ Assistant ਸੈਟਿੰਗਾਂ ਵਿੱਚ "Ok Google" ਨੂੰ ਸਿਰਫ਼ ਉਦੋਂ ਚਾਲੂ ਰੱਖਣ ਦੀ ਚੋਣ ਕਰ ਸਕਦੇ ਹੋ ਜਦੋਂ ਇਹ ਡੀਵਾਈਸ ਕਿਸੇ ਪਾਵਰ ਦੇ ਸਰੋਤ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ ਹੋਵੇ। -ਸਕ੍ਰੀਨ ਲੌਕ +ਸਕ੍ਰੀਨ ਲਾਕ ਕੀ ਆਪਣੀ ਬ੍ਰਾਊਜ਼ਿੰਗ ਨੂੰ ਵੱਖ ਕਰਨਾ ਹੈ? ਪ੍ਰਮਾਣ-ਪੱਤਰ ਵਿਸ਼ਾ ਡਾਇਰੈਕਟਰੀ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਚਿੱਤਰ ਹੈਸ਼ ਸੈੱਟ ਨਹੀਂ ਹੈ diff -Nru chromium-119.0.6045.105/chrome/app/resources/generated_resources_uz.xtb chromium-119.0.6045.123/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.123/chrome/app/resources/generated_resources_uz.xtb 2023-11-08 03:24:14.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.123/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.123/chrome/app/resources/generated_resources_vi.xtb 2023-11-08 03:24:14.000000000 +0000 @@ -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/browser/about_flags.cc chromium-119.0.6045.123/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.123/chrome/browser/about_flags.cc 2023-11-08 03:24:14.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.123/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.123/chrome/browser/ash/BUILD.gn 2023-11-08 03:24:16.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.123/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.123/chrome/browser/ash/crosapi/browser_manager.cc 2023-11-08 03:24:16.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.123/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.123/chrome/browser/ash/crosapi/browser_manager.h 2023-11-08 03:24:16.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.123/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.123/chrome/browser/ash/crosapi/browser_manager_unittest.cc 2023-11-08 03:24:16.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.123/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.123/chrome/browser/ash/crosapi/browser_util.cc 2023-11-08 03:24:16.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.123/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.123/chrome/browser/ash/crosapi/browser_util.h 2023-11-08 03:24:16.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.123/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.123/chrome/browser/ash/crosapi/browser_util_unittest.cc 2023-11-08 03:24:16.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.123/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.123/chrome/browser/ash/login/app_mode/kiosk_launch_controller.cc 2023-11-08 03:24:16.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.123/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.123/chrome/browser/ash/login/app_mode/kiosk_launch_controller_unittest.cc 2023-11-08 03:24:16.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.123/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.123/chrome/browser/ash/login/demo_mode/demo_mode_window_closer.cc 2023-11-08 03:24:16.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.123/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.123/chrome/browser/ash/login/demo_mode/demo_mode_window_closer.h 2023-11-08 03:24:16.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.123/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.123/chrome/browser/ash/login/demo_mode/demo_session.cc 2023-11-08 03:24:16.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.123/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.123/chrome/browser/ash/login/demo_mode/demo_session.h 2023-11-08 03:24:16.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.123/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.123/chrome/browser/ash/login/wizard_controller.cc 2023-11-08 03:24:16.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.123/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.123/chrome/browser/ash/login/wizard_controller.h 2023-11-08 03:24:16.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.123/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.123/chrome/browser/ash/phonehub/attestation_certificate_generator_impl.cc 2023-11-08 03:24:16.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.123/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.123/chrome/browser/ash/phonehub/attestation_certificate_generator_impl.h 2023-11-08 03:24:16.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.123/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.123/chrome/browser/ash/phonehub/attestation_certificate_generator_impl_unittest.cc 2023-11-08 03:24:16.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.123/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.123/chrome/browser/back_press/android/java/src/org/chromium/chrome/browser/back_press/BackPressManager.java 2023-11-08 03:24:17.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.123/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.123/chrome/browser/extensions/api/developer_private/extension_info_generator_unittest.cc 2023-11-08 03:24:17.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.123/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.123/chrome/browser/extensions/api/scripting/scripting_apitest.cc 2023-11-08 03:24:17.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/tabs/tabs_apitest.cc chromium-119.0.6045.123/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.123/chrome/browser/extensions/api/tabs/tabs_apitest.cc 2023-11-08 03:24:17.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.123/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.123/chrome/browser/first_party_sets/first_party_sets_policy_service.cc 2023-11-08 03:24:17.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.123/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.123/chrome/browser/first_party_sets/first_party_sets_policy_service_factory.cc 2023-11-08 03:24:17.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.123/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.123/chrome/browser/first_party_sets/first_party_sets_policy_service_factory_unittest.cc 2023-11-08 03:24:17.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.123/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.123/chrome/browser/first_party_sets/first_party_sets_policy_service_unittest.cc 2023-11-08 03:24:17.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.123/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.123/chrome/browser/flag-metadata.json 2023-11-08 03:24:17.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.123/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.123/chrome/browser/flag_descriptions.cc 2023-11-08 03:24:17.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.123/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.123/chrome/browser/flag_descriptions.h 2023-11-08 03:24:17.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.123/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.123/chrome/browser/google/google_update_win_unittest.cc 2023-11-08 03:24:17.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.123/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.123/chrome/browser/k_anonymity_service/k_anonymity_service_factory.cc 2023-11-08 03:24:17.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/optimization_guide/android/java/src/org/chromium/chrome/browser/optimization_guide/OptimizationGuideBridge.java chromium-119.0.6045.123/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.123/chrome/browser/optimization_guide/android/java/src/org/chromium/chrome/browser/optimization_guide/OptimizationGuideBridge.java 2023-11-08 03:24:18.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.123/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.123/chrome/browser/optimization_guide/hints_fetcher_browsertest.cc 2023-11-08 03:24:18.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.123/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.123/chrome/browser/performance_manager/chrome_browser_main_extra_parts_performance_manager.cc 2023-11-08 03:24:18.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.123/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.123/chrome/browser/privacy_sandbox/privacy_sandbox_settings_delegate.cc 2023-11-08 03:24:18.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.123/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.123/chrome/browser/privacy_sandbox/privacy_sandbox_settings_delegate_unittest.cc 2023-11-08 03:24:18.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.123/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.123/chrome/browser/renderer_context_menu/render_view_context_menu_unittest.cc 2023-11-08 03:24:18.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/supervised_user/linux_mac_windows/supervised_user_extension_browsertest.cc chromium-119.0.6045.123/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.123/chrome/browser/supervised_user/linux_mac_windows/supervised_user_extension_browsertest.cc 2023-11-08 03:24:19.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.123/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.123/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.123/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.123/chrome/browser/supervised_user/supervised_user_extension_unittest.cc 2023-11-08 03:24:19.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.123/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.123/chrome/browser/supervised_user/supervised_user_extensions_manager.cc 2023-11-08 03:24:19.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.123/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.123/chrome/browser/supervised_user/supervised_user_service_browsertest.cc 2023-11-08 03:24:19.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.123/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.123/chrome/browser/touch_to_fill/android/internal/java/strings/translations/android_touch_to_fill_strings_hi.xtb 2023-11-08 03:24:19.000000000 +0000 @@ -1,7 +1,7 @@ -सेव किया गया पासवर्ड इस्तेमाल करें? +क्या आपको सेव किया गया पासवर्ड इस्तेमाल करना है? Use a passkey on a different device टच करके भरी जाने वाली क्रेडेंशियल की सूची आधी स्क्रीन में खुली हुई है. जारी रखें diff -Nru chromium-119.0.6045.105/chrome/browser/tpcd/experiment/eligibility_service_unittest.cc chromium-119.0.6045.123/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.123/chrome/browser/tpcd/experiment/eligibility_service_unittest.cc 2023-11-08 03:24:19.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.123/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.123/chrome/browser/tpcd/experiment/experiment_manager_impl.cc 2023-11-08 03:24:19.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.123/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.123/chrome/browser/tpcd/experiment/tpcd_experiment_features.cc 2023-11-08 03:24:19.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.123/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.123/chrome/browser/tpcd/experiment/tpcd_experiment_features.h 2023-11-08 03:24:19.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.123/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.123/chrome/browser/ui/android/page_insights/BUILD.gn 2023-11-08 03:24:19.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.123/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.123/chrome/browser/ui/android/page_insights/java/res/layout/page_insights_sheet_content.xml 2023-11-08 03:24:19.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.123/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.123/chrome/browser/ui/android/page_insights/java/res/layout/page_insights_sheet_toolbar.xml 2023-11-08 03:24:19.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.123/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.123/chrome/browser/ui/android/page_insights/java/res/values/dimens.xml 2023-11-08 03:24:19.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.123/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.123/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.123/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.123/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.123/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.123/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsCoordinator.java 2023-11-08 03:24:19.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.123/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.123/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsCoordinatorTest.java 2023-11-08 03:24:19.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.123/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.123/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsDataLoader.java 2023-11-08 03:24:19.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.123/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.123/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsDataLoaderTest.java 2023-11-08 03:24:19.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.123/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.123/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsMediator.java 2023-11-08 03:24:19.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.123/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.123/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsMediatorTest.java 2023-11-08 03:24:19.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.123/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.123/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsSheetContent.java 2023-11-08 03:24:19.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.123/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.123/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/PageInsightsSheetContentTest.java 2023-11-08 03:24:19.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.123/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.123/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/TapInterceptingLinearLayout.java 2023-11-08 03:24:19.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.123/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.123/chrome/browser/ui/android/page_insights/java/src/org/chromium/chrome/browser/page_insights/proto/config.proto 2023-11-08 03:24:19.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_hi.xtb chromium-119.0.6045.123/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.123/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb 2023-11-08 03:24:20.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_iw.xtb chromium-119.0.6045.123/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.123/chrome/browser/ui/android/strings/translations/android_chrome_strings_iw.xtb 2023-11-08 03:24:20.000000000 +0000 @@ -423,7 +423,7 @@ Discover מדידת המודעות מסומן בסימנייה -בדיקה עכשיו +לבדיקה מועד המחיקה: היסטוריית החיפושים וסוגי פעילות אחרים יכולים להישמר בחשבון Google אחרי שנכנסים. אפשר למחוק אותם בכל שלב. אם שכחת את ביטוי הסיסמה או אם ברצונך לשנות את ההגדרה הזו, יש לאפס את הסנכרון diff -Nru chromium-119.0.6045.105/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb chromium-119.0.6045.123/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.123/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb 2023-11-08 03:24:20.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.123/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.123/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb 2023-11-08 03:24:20.000000000 +0000 @@ -1484,7 +1484,7 @@ ดูข้อมูลเพิ่มเติม เริ่มเกมไดโนเสาร์ ตรวจสอบการควบคุมที่สำคัญด้านความเป็นส่วนตัวและความปลอดภัย -เข้ารหัสลับข้อมูลที่ซิงค์ด้วยรหัสผ่านการซิงค์ของคุณเอง +เข้ารหัสข้อมูลที่ซิงค์ด้วยรหัสผ่านการซิงค์ของคุณเอง ตรวจสอบว่า เชื่อมต่ออินเทอร์เน็ตอยู่ ที่อยู่และอื่นๆ ท่องเว็บในอุปกรณ์ต่างๆ diff -Nru chromium-119.0.6045.105/chrome/browser/ui/ash/desks/desks_client.cc chromium-119.0.6045.123/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.123/chrome/browser/ui/ash/desks/desks_client.cc 2023-11-08 03:24:20.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.123/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.123/chrome/browser/ui/ash/projector/pending_screencast_manager.cc 2023-11-08 03:24:20.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.123/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.123/chrome/browser/ui/ash/projector/pending_screencast_manager_browsertest.cc 2023-11-08 03:24:20.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.123/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.123/chrome/browser/ui/views/permissions/chip_controller.cc 2023-11-08 03:24:20.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.123/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.123/chrome/browser/ui/webui/policy/policy_test_ui_browsertest.cc 2023-11-08 03:24:20.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.123/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.123/chrome/browser/ui/webui/settings/ash/multidevice_section.cc 2023-11-08 03:24:20.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.123/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.123/chrome/browser/ui/webui/signin/enterprise_profile_welcome_handler.cc 2023-11-08 03:24:20.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.123/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.123/chrome/browser/ui/webui/signin/enterprise_profile_welcome_handler.h 2023-11-08 03:24:20.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.123/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.123/chrome/browser/ui/webui/signin/enterprise_profile_welcome_handler_unittest.cc 2023-11-08 03:24:20.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.123/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.123/chrome/credential_provider/gaiacp/strings/gaia_resources_as.xtb 2023-11-08 03:24:21.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.123/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.123/chrome/test/BUILD.gn 2023-11-08 03:24:21.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.123/chromeos/CHROMEOS_LKGM --- chromium-119.0.6045.105/chromeos/CHROMEOS_LKGM 2023-11-01 18:10:19.000000000 +0000 +++ chromium-119.0.6045.123/chromeos/CHROMEOS_LKGM 2023-11-08 03:24:24.000000000 +0000 @@ -1 +1 @@ -15633.30.0 \ No newline at end of file +15633.37.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.123/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.123/chromeos/ash/components/network/metrics/connection_results.cc 2023-11-08 03:24:24.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.123/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.123/chromeos/ash/components/network/metrics/connection_results.h 2023-11-08 03:24:24.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.123/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.123/chromeos/ash/components/network/metrics/network_metrics_helper.cc 2023-11-08 03:24:24.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.123/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.123/chromeos/ash/components/network/metrics/network_metrics_helper_unittest.cc 2023-11-08 03:24:24.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.123/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.123/chromeos/ash/components/phonehub/BUILD.gn 2023-11-08 03:24:24.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.123/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.123/chromeos/ash/components/phonehub/cros_state_sender.cc 2023-11-08 03:24:24.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.123/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.123/chromeos/ash/components/phonehub/cros_state_sender.h 2023-11-08 03:24:24.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.123/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.123/chromeos/ash/components/phonehub/cros_state_sender_unittest.cc 2023-11-08 03:24:24.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.123/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.123/chromeos/ash/components/phonehub/fake_attestation_certificate_generator.cc 2023-11-08 03:24:24.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.123/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.123/chromeos/ash/components/phonehub/fake_attestation_certificate_generator.h 2023-11-08 03:24:24.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.123/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.123/chromeos/ash/components/phonehub/public/cpp/attestation_certificate_generator.cc 2023-11-08 03:24:24.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.123/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.123/chromeos/ash/components/phonehub/public/cpp/attestation_certificate_generator.h 2023-11-08 03:24:24.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.123/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.123/chromeos/profiles/arm-exp.afdo.newest.txt 2023-11-08 03:24:24.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.123/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.123/chromeos/profiles/arm.afdo.newest.txt 2023-11-08 03:24:24.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.123/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.123/chromeos/profiles/atom.afdo.newest.txt 2023-11-08 03:24:24.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.123/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.123/chromeos/profiles/bigcore.afdo.newest.txt 2023-11-08 03:24:24.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.123/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.123/chromeos/strings/chromeos_strings_eu.xtb 2023-11-08 03:24:24.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/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb chromium-119.0.6045.123/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.123/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb 2023-11-08 03:24:25.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/widget/android/java/src/org/chromium/components/browser_ui/widget/gesture/BackPressHandler.java chromium-119.0.6045.123/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.123/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/gesture/BackPressHandler.java 2023-11-08 03:24:25.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.123/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.123/components/browsing_topics/annotator_impl.cc 2023-11-08 03:24:25.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.123/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.123/components/browsing_topics/annotator_impl.h 2023-11-08 03:24:25.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.123/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.123/components/browsing_topics/annotator_impl_unittest.cc 2023-11-08 03:24:25.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.123/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.123/components/browsing_topics/browsing_topics_calculator_unittest.cc 2023-11-08 03:24:25.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.123/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.123/components/browsing_topics/test_util.cc 2023-11-08 03:24:25.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.123/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.123/components/browsing_topics/test_util.h 2023-11-08 03:24:25.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.123/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.123/components/certificate_transparency/data/log_list.json 2023-11-08 03:24:25.000000000 +0000 @@ -1,6 +1,6 @@ { - "version": "26.21", - "log_list_timestamp": "2023-10-23T12:58:30Z", + "version": "26.35", + "log_list_timestamp": "2023-11-06T12:57:46Z", "operators": [ { "name": "Google", diff -Nru chromium-119.0.6045.105/components/optimization_guide/core/hints_fetcher.cc chromium-119.0.6045.123/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.123/components/optimization_guide/core/hints_fetcher.cc 2023-11-08 03:24:26.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.123/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.123/components/optimization_guide/core/hints_fetcher.h 2023-11-08 03:24:26.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.123/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.123/components/optimization_guide/core/hints_fetcher_unittest.cc 2023-11-08 03:24:26.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.123/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.123/components/optimization_guide/core/hints_manager.cc 2023-11-08 03:24:26.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.123/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.123/components/optimization_guide/core/hints_manager.h 2023-11-08 03:24:26.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.123/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.123/components/optimization_guide/core/optimization_guide_features.cc 2023-11-08 03:24:26.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.123/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.123/components/optimization_guide/core/optimization_guide_features.h 2023-11-08 03:24:26.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.123/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.123/components/optimization_guide/core/optimization_guide_features_unittest.cc 2023-11-08 03:24:26.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.123/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.123/components/optimization_guide/core/optimization_guide_util.cc 2023-11-08 03:24:26.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.123/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.123/components/optimization_guide/core/optimization_guide_util.h 2023-11-08 03:24:26.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.123/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.123/components/optimization_guide/proto/common_types.proto 2023-11-08 03:24:26.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.123/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.123/components/password_manager/core/browser/features/password_features.cc 2023-11-08 03:24:26.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.123/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.123/components/performance_manager/embedder/graph_features.h 2023-11-08 03:24:27.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.123/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.123/components/performance_manager/graph_features_unittest.cc 2023-11-08 03:24:27.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_vi.xtb chromium-119.0.6045.123/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.123/components/policy/resources/policy_templates_vi.xtb 2023-11-08 03:24:27.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/signin/public/identity_manager/access_token_constants.cc chromium-119.0.6045.123/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.123/components/signin/public/identity_manager/access_token_constants.cc 2023-11-08 03:24:28.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.123/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.123/components/strings/components_strings_ar.xtb 2023-11-08 03:24:28.000000000 +0000 @@ -3033,7 +3033,7 @@ جارٍ المعالجة عرض الإشعارات يريد المصرف التأكد من هويتك. -علامة تبويب جديدة للتصفح المتخفي +علامة تبويب للتصفح المتخفي لقد سمحت لهذا الموقع الإلكتروني باستخدام ملفات تعريف الارتباط التابعة لجهات خارجية. يعني هذا أنّه من المفترض أن تعمل معظم ميزات الموقع الإلكتروني، ولكنّك ستحظى بمستوى حماية أقل. سجلّ الأسعار إنّ المهاجمين على الموقع الإلكتروني الذي تحاول الانتقال إليه قد يتمكّنون من خداعك لتثبيت برامج ضارة تؤثر في طريقة التصفُّح من خلال تغيير الصفحة الرئيسية مثلًا أو عرض إعلانات إضافية على المواقع الإلكترونية التي تنتقل إليها. diff -Nru chromium-119.0.6045.105/components/strings/components_strings_as.xtb chromium-119.0.6045.123/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.123/components/strings/components_strings_as.xtb 2023-11-08 03:24:28.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.123/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.123/components/strings/components_strings_ca.xtb 2023-11-08 03:24:28.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 @@ -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.123/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.123/components/strings/components_strings_de.xtb 2023-11-08 03:24:28.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.123/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.123/components/strings/components_strings_eu.xtb 2023-11-08 03:24:28.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 diff -Nru chromium-119.0.6045.105/components/strings/components_strings_hi.xtb chromium-119.0.6045.123/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.123/components/strings/components_strings_hi.xtb 2023-11-08 03:24:28.000000000 +0000 @@ -3310,7 +3310,7 @@ Google Forms में जल्दी से नया फ़ॉर्म बनाएं भाषा के पेज का हमेशा अनुवाद करें लिंक का पता कॉपी करें -मानक +स्टैंडर्ड इस साइट पर, तंग करने वाले या गुमराह करने वाले विज्ञापन दिखते हैं. सेव किए गए पतों की टेबल खतरनाक सामग्री ब्लॉक की गई. diff -Nru chromium-119.0.6045.105/components/strings/components_strings_iw.xtb chromium-119.0.6045.123/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.123/components/strings/components_strings_iw.xtb 2023-11-08 03:24:28.000000000 +0000 @@ -1508,7 +1508,7 @@ ‏עדכון קריטי לביצועים ב-Android ‏רוצה לשמור את פרטי הכרטיס בחשבון Google שלך ובמכשיר הזה? המשך לאתר -אפשר תמיד באתר זה +תמיד מותר באתר הזה JIS B7 RA2 היקף המדיניות אינו נתמך. diff -Nru chromium-119.0.6045.105/components/strings/components_strings_pa.xtb chromium-119.0.6045.123/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.123/components/strings/components_strings_pa.xtb 2023-11-08 03:24:29.000000000 +0000 @@ -2465,7 +2465,7 @@ ਅਵੈਧ DnsOverHttps ਮੋਡ। ਕੁਸ਼ਤੀ ਕੀਮਤ ਟਰੈਕਿੰਗ ਬੰਦ ਕਰੋ -ਸਕ੍ਰੀਨ ਲੌਕ +ਸਕ੍ਰੀਨ ਲਾਕ ਕੂਪਨ ਅਤੇ ਛੋਟ ਪੇਸ਼ਕਸ਼ਾਂ ਤੁਸੀਂ ਇੱਕ ਪ੍ਰਬੰਧਕ ਵੱਲੋਂ-ਮੁਹੱਈਆ ਕੀਤਾ ਪ੍ਰਮਾਣ-ਪੱਤਰ ਵਰਤਦੇ ਹੋਏ ਸਮੱਗਰੀ ਤੱਕ ਪਹੁੰਚ ਪ੍ਰਾਪਤ ਕੀਤੀ ਹੈ। ਜੋ ਡਾਟਾ ਤੁਸੀਂ ਨੂੰ ਮੁਹੱਈਆ ਕਰਦੇ ਹੋ, ਉਹ ਤੁਹਾਡੇ ਪ੍ਰਬੰਧਕ ਵੱਲੋਂ ਰੋਕਿਆ ਜਾ ਸਕਦਾ ਹੈ। ਲੇਬਲ (ਰੰਗੀਨ) diff -Nru chromium-119.0.6045.105/components/strings/components_strings_pl.xtb chromium-119.0.6045.123/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.123/components/strings/components_strings_pl.xtb 2023-11-08 03:24:29.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.123/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.123/components/strings/components_strings_pt-BR.xtb 2023-11-08 03:24:29.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.123/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.123/components/strings/components_strings_pt-PT.xtb 2023-11-08 03:24:29.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_th.xtb chromium-119.0.6045.123/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.123/components/strings/components_strings_th.xtb 2023-11-08 03:24:29.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/supervised_user/core/browser/supervised_user_pref_store.cc chromium-119.0.6045.123/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.123/components/supervised_user/core/browser/supervised_user_pref_store.cc 2023-11-08 03:24:29.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.123/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.123/components/supervised_user/core/browser/supervised_user_pref_store_unittest.cc 2023-11-08 03:24:29.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.123/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.123/content/browser/interest_group/ad_auction_service_impl.cc 2023-11-08 03:24:30.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.123/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.123/content/browser/interest_group/ad_auction_service_impl_unittest.cc 2023-11-08 03:24:30.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/debian/changelog chromium-119.0.6045.123/debian/changelog --- chromium-119.0.6045.105/debian/changelog 2023-11-01 04:50:00.000000000 +0000 +++ chromium-119.0.6045.123/debian/changelog 2023-11-08 04:49:10.000000000 +0000 @@ -1,3 +1,17 @@ +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 +55,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.123/debian/control --- chromium-119.0.6045.105/debian/control 2023-10-15 18:09:54.000000000 +0000 +++ chromium-119.0.6045.123/debian/control 2023-11-08 04:49: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.123/debian/copyright --- chromium-119.0.6045.105/debian/copyright 2023-11-01 04:50:00.000000000 +0000 +++ chromium-119.0.6045.123/debian/copyright 2023-11-08 04:49: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.123/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.123/debian/patches/ppc64le/fixes/fix-breakpad-compile.patch 2023-11-08 04:49: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.123/debian/patches/series --- chromium-119.0.6045.105/debian/patches/series 2023-11-01 04:50:00.000000000 +0000 +++ chromium-119.0.6045.123/debian/patches/series 2023-11-08 04:49: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.123/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.123/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/google_apis/gaia/gaia_constants.cc chromium-119.0.6045.123/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.123/google_apis/gaia/gaia_constants.cc 2023-11-08 03:24:33.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.123/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.123/google_apis/gaia/gaia_constants.h 2023-11-08 03:24:33.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.123/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.123/gpu/config/gpu_driver_bug_list.json 2023-11-08 03:24:33.000000000 +0000 @@ -3787,6 +3787,23 @@ "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.123/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.123/gpu/config/gpu_lists_version.h 2023-11-08 03:27:41.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 "b9e5b8a154549bb57a57b9c822607bc3289fc5b9" #endif // GPU_CONFIG_GPU_LISTS_VERSION_H_ diff -Nru chromium-119.0.6045.105/infra/config/generated/testing/variants.pyl chromium-119.0.6045.123/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.123/infra/config/generated/testing/variants.pyl 2023-11-08 03:24:34.000000000 +0000 @@ -70,16 +70,16 @@ }, '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.6103.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.6103.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.6103.0', + 'revision': 'version:121.0.6103.0', }, ], }, @@ -102,32 +102,32 @@ }, '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.104', '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.104/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.104', + 'revision': 'version:119.0.6045.104', }, ], }, }, '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', }, ], }, @@ -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.30.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', }, }, @@ -491,14 +491,14 @@ 'identifier': 'DEDEDE_RELEASE_BETA', 'skylab': { 'cros_board': 'dedede', - 'cros_img': 'dedede-release/R119-15633.23.0', + 'cros_img': 'dedede-release/R119-15633.30.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': { @@ -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.30.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', }, }, @@ -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.30.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', }, }, @@ -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.30.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', }, }, @@ -633,14 +633,14 @@ 'identifier': 'HANA_RELEASE_BETA', 'skylab': { 'cros_board': 'hana', - 'cros_img': 'hana-release/R119-15633.23.0', + 'cros_img': 'hana-release/R119-15633.30.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': { @@ -663,7 +663,7 @@ 'identifier': 'JACUZZI_RELEASE_BETA', 'skylab': { 'cros_board': 'jacuzzi', - 'cros_img': 'jacuzzi-release/R119-15633.23.0', + 'cros_img': 'jacuzzi-release/R119-15633.30.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': { @@ -742,14 +742,14 @@ 'identifier': 'OCTOPUS_RELEASE_BETA', 'skylab': { 'cros_board': 'octopus', - 'cros_img': 'octopus-release/R119-15633.23.0', + 'cros_img': 'octopus-release/R119-15633.30.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': { @@ -772,14 +772,14 @@ 'identifier': 'STRONGBAD_RELEASE_BETA', 'skylab': { 'cros_board': 'strongbad', - 'cros_img': 'strongbad-release/R119-15633.23.0', + 'cros_img': 'strongbad-release/R119-15633.30.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.123/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.123/infra/config/targets/cros-skylab-variants.json 2023-11-08 03:24:34.000000000 +0000 @@ -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.104", + "cros_img": "brya-release/R119-15633.30.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, @@ -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.104", + "cros_img": "dedede-release/R119-15633.30.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" @@ -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.104", + "cros_img": "fizz-release/R119-15633.30.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, @@ -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.104", + "cros_img": "guybrush-release/R119-15633.30.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, @@ -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.104", + "cros_img": "puff-release/R119-15633.30.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, @@ -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.104", + "cros_img": "hana-release/R119-15633.30.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" @@ -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.104", + "cros_img": "jacuzzi-release/R119-15633.30.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" @@ -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.104", + "cros_img": "octopus-release/R119-15633.30.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" @@ -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.104", + "cros_img": "strongbad-release/R119-15633.30.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.123/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.123/infra/config/targets/lacros-version-skew-variants.json 2023-11-08 03:24:34.000000000 +0000 @@ -1,16 +1,16 @@ { "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.6103.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6103.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.6103.0", + "revision": "version:121.0.6103.0" } ] } @@ -33,32 +33,32 @@ }, "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.104/test_ash_chrome" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.104", "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.104", + "revision": "version:119.0.6045.104" } ] } }, "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.123/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.123/media/audio/cras/cras_input.cc 2023-11-08 03:24:36.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.123/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.123/media/base/media_switches.cc 2023-11-08 03:24:36.000000000 +0000 @@ -563,6 +563,11 @@ BASE_FEATURE(kCrOSSystemVoiceIsolationOption, "CrOSSystemVoiceIsolationOption", base::FEATURE_DISABLED_BY_DEFAULT); + +// TODO(b/306569817): Enable by default +BASE_FEATURE(kAudioFlexibleLoopbackForSystemLoopback, + "AudioFlexibleLoopbackForSystemLoopback", + base::FEATURE_DISABLED_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.123/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.123/media/base/media_switches.h 2023-11-08 03:24:36.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.123/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.123/media/gpu/chromeos/video_decoder_pipeline.cc 2023-11-08 03:24:36.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.123/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.123/net/http/transport_security_state_static.pins 2023-11-08 03:24:39.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-06 12:57 UTC PinsListTimestamp -1698065910 +1699275466 TestSPKI sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= diff -Nru chromium-119.0.6045.105/net/http/transport_security_state_static_pins.json chromium-119.0.6045.123/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.123/net/http/transport_security_state_static_pins.json 2023-11-08 03:24:39.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-06 12:57 UTC // { "pinsets": [ diff -Nru chromium-119.0.6045.105/remoting/resources/remoting_strings_as.xtb chromium-119.0.6045.123/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.123/remoting/resources/remoting_strings_as.xtb 2023-11-08 03:24:40.000000000 +0000 @@ -40,7 +40,7 @@ Chromoting বিশ্বাসযোগ্যতা প্ৰমাণীকৰণ কৰি থাকোঁতে কিবা আসোঁৱাহ হ’ল। পিন দিয়ক -আপুনি বৰ্তমান এই মেচিনটো অন্য এজন ব্যৱহাৰকাৰীৰ সৈতে শ্বেয়াৰ কৰি আছে। আপুনি শ্বেয়াৰ কৰি থাকিব বিচাৰেনে? +আপুনি বৰ্তমান এই মেচিনটো অন্য এগৰাকী ব্যৱহাৰকাৰীৰ সৈতে শ্বেয়াৰ কৰি আছে। আপুনি শ্বেয়াৰ কৰি থাকিব বিচাৰেনে? হ’ষ্টৰ বাবে বিশ্বাসযোগ্যতা সত্যাপন কৰক স্পর্শ ম’ড ৰিম'ট কম্পিউটাৰে সংযোগৰ অনুৰোধলৈ সঁহাৰি জনোৱা নাই। এইটো যে অনলাইন হৈ আছে সেয়া সত্যাপন কৰি আকৌ চেষ্টা কৰক। diff -Nru chromium-119.0.6045.105/sandbox/policy/features.cc chromium-119.0.6045.123/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.123/sandbox/policy/features.cc 2023-11-08 03:24:40.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.123/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.123/sandbox/policy/features.h 2023-11-08 03:24:40.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.123/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.123/sandbox/policy/linux/sandbox_linux.cc 2023-11-08 03:24:40.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.123/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.123/sandbox/policy/linux/sandbox_seccomp_bpf_linux.cc 2023-11-08 03:24:40.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.123/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.123/sandbox/policy/linux/sandbox_seccomp_bpf_linux.h 2023-11-08 03:24:40.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/testing/buildbot/chrome.json chromium-119.0.6045.123/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.123/testing/buildbot/chrome.json 2023-11-08 03:24:40.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.30.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.30.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.30.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.30.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.30.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.30.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.123/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.123/testing/buildbot/chromium.chromiumos.json 2023-11-08 03:24:40.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.104/test_ash_chrome" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.104", "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.104", + "revision": "version:119.0.6045.104" } ], "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.6103.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6103.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.6103.0", + "revision": "version:121.0.6103.0" } ], "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.104/test_ash_chrome" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.104", "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.104", + "revision": "version:119.0.6045.104" } ], "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.6103.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6103.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.6103.0", + "revision": "version:121.0.6103.0" } ], "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.104/test_ash_chrome" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.104", "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.104", + "revision": "version:119.0.6045.104" } ], "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.6103.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6103.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.6103.0", + "revision": "version:121.0.6103.0" } ], "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.123/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.123/testing/buildbot/chromium.coverage.json 2023-11-08 03:24:40.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.104/test_ash_chrome" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.104", "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.104", + "revision": "version:119.0.6045.104" } ], "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.6103.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6103.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.6103.0", + "revision": "version:121.0.6103.0" } ], "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.104/test_ash_chrome" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.104", "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.104", + "revision": "version:119.0.6045.104" } ], "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.6103.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6103.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.6103.0", + "revision": "version:121.0.6103.0" } ], "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.104/test_ash_chrome" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.104", "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.104", + "revision": "version:119.0.6045.104" } ], "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.6103.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6103.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.6103.0", + "revision": "version:121.0.6103.0" } ], "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.123/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.123/testing/buildbot/chromium.fyi.json 2023-11-08 03:24:40.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.104/test_ash_chrome" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.104", "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.104", + "revision": "version:119.0.6045.104" } ], "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.6103.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6103.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.6103.0", + "revision": "version:121.0.6103.0" } ], "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.104/test_ash_chrome" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.104", "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.104", + "revision": "version:119.0.6045.104" } ], "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.6103.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6103.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.6103.0", + "revision": "version:121.0.6103.0" } ], "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.104/test_ash_chrome" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.104", "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.104", + "revision": "version:119.0.6045.104" } ], "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.6103.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6103.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.6103.0", + "revision": "version:121.0.6103.0" } ], "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.104/test_ash_chrome" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.104", "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.104", + "revision": "version:119.0.6045.104" } ], "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.6103.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6103.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.6103.0", + "revision": "version:121.0.6103.0" } ], "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.104/test_ash_chrome" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.104", "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.104", + "revision": "version:119.0.6045.104" } ], "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.6103.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6103.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.6103.0", + "revision": "version:121.0.6103.0" } ], "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.104/test_ash_chrome" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.104", "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.104", + "revision": "version:119.0.6045.104" } ], "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.6103.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6103.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.6103.0", + "revision": "version:121.0.6103.0" } ], "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.104/test_ash_chrome" ], - "description": "Run with ash-chrome version 119.0.6045.38", + "description": "Run with ash-chrome version 119.0.6045.104", "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.104", + "revision": "version:119.0.6045.104" } ], "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.6103.0/test_ash_chrome" ], - "description": "Run with ash-chrome version 120.0.6096.0", + "description": "Run with ash-chrome version 121.0.6103.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.6103.0", + "revision": "version:121.0.6103.0" } ], "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.123/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.123/testing/buildbot/chromium.memory.json 2023-11-08 03:24:40.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.104/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.104", "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.104", + "revision": "version:119.0.6045.104" } ], "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.6103.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.6103.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.6103.0", + "revision": "version:121.0.6103.0" } ], "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.104/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.104", "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.104", + "revision": "version:119.0.6045.104" } ], "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.6103.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.6103.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.6103.0", + "revision": "version:121.0.6103.0" } ], "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.104/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.104", "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.104", + "revision": "version:119.0.6045.104" } ], "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.6103.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.6103.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.6103.0", + "revision": "version:121.0.6103.0" } ], "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.123/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.123/testing/buildbot/internal.chromeos.fyi.json 2023-11-08 03:24:40.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.30.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.30.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.30.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.30.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.30.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.30.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.30.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.30.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.123/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.123/testing/buildbot/variants.pyl 2023-11-08 03:24:40.000000000 +0000 @@ -70,16 +70,16 @@ }, '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.6103.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.6103.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.6103.0', + 'revision': 'version:121.0.6103.0', }, ], }, @@ -102,32 +102,32 @@ }, '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.104', '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.104/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.104', + 'revision': 'version:119.0.6045.104', }, ], }, }, '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', }, ], }, @@ -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.30.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', }, }, @@ -491,14 +491,14 @@ 'identifier': 'DEDEDE_RELEASE_BETA', 'skylab': { 'cros_board': 'dedede', - 'cros_img': 'dedede-release/R119-15633.23.0', + 'cros_img': 'dedede-release/R119-15633.30.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': { @@ -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.30.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', }, }, @@ -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.30.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', }, }, @@ -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.30.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', }, }, @@ -633,14 +633,14 @@ 'identifier': 'HANA_RELEASE_BETA', 'skylab': { 'cros_board': 'hana', - 'cros_img': 'hana-release/R119-15633.23.0', + 'cros_img': 'hana-release/R119-15633.30.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': { @@ -663,7 +663,7 @@ 'identifier': 'JACUZZI_RELEASE_BETA', 'skylab': { 'cros_board': 'jacuzzi', - 'cros_img': 'jacuzzi-release/R119-15633.23.0', + 'cros_img': 'jacuzzi-release/R119-15633.30.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': { @@ -742,14 +742,14 @@ 'identifier': 'OCTOPUS_RELEASE_BETA', 'skylab': { 'cros_board': 'octopus', - 'cros_img': 'octopus-release/R119-15633.23.0', + 'cros_img': 'octopus-release/R119-15633.30.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': { @@ -772,14 +772,14 @@ 'identifier': 'STRONGBAD_RELEASE_BETA', 'skylab': { 'cros_board': 'strongbad', - 'cros_img': 'strongbad-release/R119-15633.23.0', + 'cros_img': 'strongbad-release/R119-15633.30.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.123/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.123/third_party/blink/renderer/core/css/css_primitive_value_mappings.h 2023-11-08 03:24:44.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.123/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.123/third_party/blink/renderer/core/css/css_value_keywords.json5 2023-11-08 03:24:44.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.123/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.123/third_party/blink/renderer/core/editing/frame_selection.cc 2023-11-08 03:24:44.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/modules/webaudio/realtime_audio_destination_handler.cc chromium-119.0.6045.123/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.123/third_party/blink/renderer/modules/webaudio/realtime_audio_destination_handler.cc 2023-11-08 03:24:45.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.123/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.123/third_party/blink/renderer/platform/theme_types.h 2023-11-08 03:24:46.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.123/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.123/third_party/breakpad/breakpad/src/common/convert_UTF.cc 2023-11-08 03:25:45.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.123/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.123/third_party/breakpad/breakpad/src/common/convert_UTF.h 2023-11-08 03:25:45.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/perfetto/src/tracing/internal/tracing_muxer_impl.cc chromium-119.0.6045.123/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.123/third_party/perfetto/src/tracing/internal/tracing_muxer_impl.cc 2023-11-08 03:26:31.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.123/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.123/third_party/perfetto/src/tracing/test/api_integrationtest.cc 2023-11-08 03:26:31.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/tools/metrics/histograms/enums.xml chromium-119.0.6045.123/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.123/tools/metrics/histograms/enums.xml 2023-11-08 03:25:34.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/optimization/histograms.xml chromium-119.0.6045.123/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.123/tools/metrics/histograms/metadata/optimization/histograms.xml 2023-11-08 03:25:34.000000000 +0000 @@ -191,6 +191,8 @@ + diff -Nru chromium-119.0.6045.105/tools/metrics/histograms/metadata/others/histograms.xml chromium-119.0.6045.123/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.123/tools/metrics/histograms/metadata/others/histograms.xml 2023-11-08 03:25:34.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. + + +