diff --git a/DEPS b/DEPS index 8ea41a2..1291b00 100644 --- a/DEPS +++ b/DEPS
@@ -180,7 +180,7 @@ # luci-go CIPD package version. # Make sure the revision is uploaded by infra-packagers builder. # https://ci.chromium.org/p/infra-internal/g/infra-packagers/console - 'luci_go': 'git_revision:e1c81c53ccd0366e8fff438f89030043343d4d6b', + 'luci_go': 'git_revision:40e3c704aad0fceec04344d281ae333de04fd2a5', # This can be overridden, e.g. with custom_vars, to build clang from HEAD # instead of downloading the prebuilt pinned revision. @@ -209,11 +209,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling Skia # and whatever else without interference from each other. - 'skia_revision': 'd1de126c257b74d676ebdf1f11b7815b86d48500', + 'skia_revision': '9753413043001b5b2eae16ab9197fdc9b55138e3', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling V8 # and whatever else without interference from each other. - 'v8_revision': '246e3704f3f6607dacf22c24fb71b5d1e54ecc54', + 'v8_revision': '5b556c639a354045bf8d8991d2c30d2598daf59a', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling swarming_client # and whatever else without interference from each other. @@ -229,7 +229,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. - 'pdfium_revision': '21c8586341999205105ec9a89680d8622fbabb81', + 'pdfium_revision': 'a11d7fa5144a88cd7f0bd7cd05df3a90711d9c6c', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling BoringSSL # and whatever else without interference from each other. @@ -288,7 +288,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling devtools-frontend # and whatever else without interference from each other. - 'devtools_frontend_revision': '543c28e9b344ea2eee940e67ce707be0de1a8c07', + 'devtools_frontend_revision': 'dc5a1c43f9bbdcc46a246486253bdc4f1302fe7c', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libprotobuf-mutator # and whatever else without interference from each other. @@ -723,7 +723,7 @@ 'packages': [ { 'package': 'chromium/third_party/androidx', - 'version': 'g8SLuoOc1bCcY1mN-J9JLpK6ha0jgDwjWRJqsDwEtM4C', + 'version': 'v-p1zbJ800vLETiv98_a04Og1z_1IR6Cph3aB-RvpO0C', }, ], 'condition': 'checkout_android', @@ -1636,7 +1636,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@924f592fada7927f1b3c21774fa95ca33914a1fa', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@9d5b0749e1c36915a8bf0a61c6ec1fe8fb75b6a4', 'condition': 'checkout_src_internal', }, @@ -1644,7 +1644,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/eche_app/app', - 'version': 'o9GqtEifaYwdNlq0ymD7vHlW4ce76Qknjpd535QA5h8C', + 'version': '1nItDYhYyrhWg4RAgQ5uCjojvZ20pmBLG0zZiuRWIf8C', }, ], 'condition': 'checkout_chromeos and checkout_src_internal', @@ -1666,7 +1666,7 @@ 'packages': [ { 'package': 'chromeos_internal/apps/media_app/app', - 'version': 'HerPX5kPiZcf3Z1X2Mr4q2qi9Y-8dCxlANBhoqU0Uf4C', + 'version': 'q4c5UkB_mGNFs6-MYBG9wfHiVuomSNeI-szBxCVlvawC', }, ], 'condition': 'checkout_chromeos and checkout_src_internal',
diff --git a/ash/app_list/app_list_controller_impl_unittest.cc b/ash/app_list/app_list_controller_impl_unittest.cc index a434ce63..36533069 100644 --- a/ash/app_list/app_list_controller_impl_unittest.cc +++ b/ash/app_list/app_list_controller_impl_unittest.cc
@@ -49,6 +49,7 @@ #include "base/test/metrics/histogram_tester.h" #include "base/test/scoped_feature_list.h" #include "base/test/with_feature_override.h" +#include "ui/base/emoji/emoji_panel_helper.h" #include "ui/base/ui_base_features.h" #include "ui/compositor/scoped_animation_duration_scale_mode.h" #include "ui/events/test/event_generator.h" @@ -199,6 +200,8 @@ // Verify that when the emoji panel shows and AppListView is in Peeking state, // AppListView's rounded corners should be hidden (see https://crbug.com/950468) TEST_F(AppListControllerImplTest, HideRoundingCornersWhenEmojiShows) { + ui::SetShowEmojiKeyboardCallback( + base::BindRepeating(ui::ShowTabletModeEmojiPanel)); // Set IME client. Otherwise the emoji panel is unable to show. ImeController* ime_controller = Shell::Get()->ime_controller(); TestImeControllerClient client;
diff --git a/ash/constants/ash_features.cc b/ash/constants/ash_features.cc index 94d7dae..f8e9e26 100644 --- a/ash/constants/ash_features.cc +++ b/ash/constants/ash_features.cc
@@ -420,11 +420,11 @@ // Enable or disable IME decoder via Mojo connection on Chrome OS. const base::Feature kImeMojoDecoder{"ImeMojoDecoder", - base::FEATURE_DISABLED_BY_DEFAULT}; + base::FEATURE_ENABLED_BY_DEFAULT}; // Enable or disable system emoji picker. const base::Feature kImeSystemEmojiPicker{"SystemEmojiPicker", - base::FEATURE_DISABLED_BY_DEFAULT}; + base::FEATURE_ENABLED_BY_DEFAULT}; // Enable or disable using the floating virtual keyboard as the default option // on Chrome OS. @@ -708,6 +708,10 @@ const base::Feature kVmCameraMicIndicatorsAndNotifications{ "VmCameraMicIndicatorsAndNotifications", base::FEATURE_ENABLED_BY_DEFAULT}; +// Controls whether to allow enabling wake on WiFi features in shill. +const base::Feature kWakeOnWifiAllowed{"WakeOnWifiAllowed", + base::FEATURE_DISABLED_BY_DEFAULT}; + // Enable new wallpaper experience in WebUI inside system settings. const base::Feature kWallpaperWebUI{"WallpaperWebUI", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/ash/constants/ash_features.h b/ash/constants/ash_features.h index 9622f32..5a57fed 100644 --- a/ash/constants/ash_features.h +++ b/ash/constants/ash_features.h
@@ -317,6 +317,8 @@ COMPONENT_EXPORT(ASH_CONSTANTS) extern const base::Feature kVmCameraMicIndicatorsAndNotifications; COMPONENT_EXPORT(ASH_CONSTANTS) +extern const base::Feature kWakeOnWifiAllowed; +COMPONENT_EXPORT(ASH_CONSTANTS) extern const base::Feature kWallpaperWebUI; COMPONENT_EXPORT(ASH_CONSTANTS) extern const base::Feature kWifiSyncAndroid;
diff --git a/base/BUILD.gn b/base/BUILD.gn index 9749c2d..b142527 100644 --- a/base/BUILD.gn +++ b/base/BUILD.gn
@@ -1394,7 +1394,10 @@ all_dependent_configs += [ "//base/allocator:wrap_malloc_symbols" ] } if (is_apple) { - sources += [ "allocator/allocator_shim_override_mac_symbols.h" ] + sources += [ + "allocator/allocator_shim_override_mac_default_zone.h", + "allocator/allocator_shim_override_mac_symbols.h", + ] } if (is_chromeos || is_linux) { sources += [
diff --git a/base/allocator/allocator_shim.cc b/base/allocator/allocator_shim.cc index e085adf..37e2f9d 100644 --- a/base/allocator/allocator_shim.cc +++ b/base/allocator/allocator_shim.cc
@@ -27,6 +27,7 @@ #include <malloc/malloc.h> #include "base/allocator/allocator_interception_mac.h" +#include "base/mac/mach_logging.h" #endif // No calls to malloc / new in this file. They would would cause re-entrancy of @@ -338,7 +339,11 @@ // On Windows we use plain link-time overriding of the CRT symbols. #include "base/allocator/allocator_shim_override_ucrt_symbols_win.h" #elif defined(OS_APPLE) +#if BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) +#include "base/allocator/allocator_shim_override_mac_default_zone.h" +#else // BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) #include "base/allocator/allocator_shim_override_mac_symbols.h" +#endif // BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) #else #include "base/allocator/allocator_shim_override_libc_symbols.h" #endif @@ -371,7 +376,11 @@ #if defined(OS_APPLE) namespace base { namespace allocator { + void InitializeAllocatorShim() { +#if BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) + AddMacMallocZoneAsDefaultZone(); +#else // BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) // Prepares the default dispatch. After the intercepted malloc calls have // traversed the shim this will route them to the default malloc zone. InitializeDefaultDispatchToMacAllocator(); @@ -381,7 +390,9 @@ // This replaces the default malloc zone, causing calls to malloc & friends // from the codebase to be routed to ShimMalloc() above. base::allocator::ReplaceFunctionsForStoredZones(&functions); +#endif // BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) } + } // namespace allocator } // namespace base #endif
diff --git a/base/allocator/allocator_shim_default_dispatch_to_partition_alloc.cc b/base/allocator/allocator_shim_default_dispatch_to_partition_alloc.cc index 5a284c4..de2e6e4 100644 --- a/base/allocator/allocator_shim_default_dispatch_to_partition_alloc.cc +++ b/base/allocator/allocator_shim_default_dispatch_to_partition_alloc.cc
@@ -324,8 +324,18 @@ size_t PartitionGetSizeEstimate(const AllocatorDispatch*, void* address, void* context) { + if (!(base::IsManagedByPartitionAllocNonBRPPool(address) || + base::IsManagedByPartitionAllocBRPPool(address))) { + // The object pointed to by `address` is not allocated by the + // PartitionAlloc. The return value `0` means that the pointer does not + // belong to this malloc zone. + return 0; + } + // TODO(lizeb): Returns incorrect values for aligned allocations. - return base::ThreadSafePartitionRoot::GetUsableSize(address); + const size_t size = base::ThreadSafePartitionRoot::GetUsableSize(address); + PA_CHECK(size); + return size; } // static @@ -523,3 +533,21 @@ } // extern "C" #endif // BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) + +#if defined(OS_APPLE) + +namespace base { +namespace allocator { + +void InitializeDefaultAllocatorPartitionRoot() { + // On OS_APPLE, the initialization of PartitionRoot uses memory allocations + // internally, e.g. __builtin_available, and it's not easy to avoid it. + // Thus, we initialize the PartitionRoot with using the system default + // allocator before we intercept the system default allocator. + ignore_result(Allocator()); +} + +} // namespace allocator +} // namespace base + +#endif // defined(OS_APPLE)
diff --git a/base/allocator/allocator_shim_override_mac_default_zone.h b/base/allocator/allocator_shim_override_mac_default_zone.h new file mode 100644 index 0000000..c2a68f4f --- /dev/null +++ b/base/allocator/allocator_shim_override_mac_default_zone.h
@@ -0,0 +1,223 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifdef BASE_ALLOCATOR_ALLOCATOR_SHIM_OVERRIDE_MAC_DEFAULT_ZONE_H_ +#error This header is meant to be included only once by allocator_shim.cc +#endif +#define BASE_ALLOCATOR_ALLOCATOR_SHIM_OVERRIDE_MAC_DEFAULT_ZONE_H_ + +namespace base { +namespace allocator { + +namespace { + +// malloc_introspection_t's callback functions for our own zone + +kern_return_t MallocIntrospectionEnumerator(task_t task, + void*, + unsigned type_mask, + vm_address_t zone_address, + memory_reader_t reader, + vm_range_recorder_t recorder) { + NOTREACHED(); + return KERN_FAILURE; +} + +size_t MallocIntrospectionGoodSize(malloc_zone_t* zone, size_t size) { + return size; +} + +boolean_t MallocIntrospectionCheck(malloc_zone_t* zone) { + NOTREACHED(); + return true; +} + +void MallocIntrospectionPrint(malloc_zone_t* zone, boolean_t verbose) { + NOTREACHED(); +} + +void MallocIntrospectionLog(malloc_zone_t* zone, void* address) { + NOTREACHED(); +} + +void MallocIntrospectionForceLock(malloc_zone_t* zone) { + NOTREACHED(); +} + +void MallocIntrospectionForceUnlock(malloc_zone_t* zone) { + NOTREACHED(); +} + +void MallocIntrospectionStatistics(malloc_zone_t* zone, + malloc_statistics_t* stats) { + NOTREACHED(); +} + +boolean_t MallocIntrospectionZoneLocked(malloc_zone_t* zone) { + NOTREACHED(); + return false; +} + +boolean_t MallocIntrospectionEnableDischargeChecking(malloc_zone_t* zone) { + NOTREACHED(); + return false; +} + +void MallocIntrospectionDisableDischargeChecking(malloc_zone_t* zone) { + NOTREACHED(); +} + +void MallocIntrospectionDischarge(malloc_zone_t* zone, void* memory) { + NOTREACHED(); +} + +void MallocIntrospectionEnumerateDischargedPointers( + malloc_zone_t* zone, + void (^report_discharged)(void* memory, void* info)) { + NOTREACHED(); +} + +void MallocIntrospectionReinitLock(malloc_zone_t* zone) { + NOTREACHED(); +} + +void MallocIntrospectionPrintTask(task_t task, + unsigned level, + vm_address_t zone_address, + memory_reader_t reader, + print_task_printer_t printer) { + NOTREACHED(); +} + +void MallocIntrospectionTaskStatistics(task_t task, + vm_address_t zone_address, + memory_reader_t reader, + malloc_statistics_t* stats) { + NOTREACHED(); +} + +// malloc_zone_t's callback functions for our own zone + +size_t MallocZoneSize(malloc_zone_t* zone, const void* ptr) { + return ShimGetSizeEstimate(ptr, nullptr); +} + +void* MallocZoneMalloc(malloc_zone_t* zone, size_t size) { + return ShimMalloc(size, nullptr); +} + +void* MallocZoneCalloc(malloc_zone_t* zone, size_t n, size_t size) { + return ShimCalloc(n, size, nullptr); +} + +void* MallocZoneValloc(malloc_zone_t* zone, size_t size) { + return ShimValloc(size, nullptr); +} + +void MallocZoneFree(malloc_zone_t* zone, void* ptr) { + return ShimFree(ptr, nullptr); +} + +void* MallocZoneRealloc(malloc_zone_t* zone, void* ptr, size_t size) { + return ShimRealloc(ptr, size, nullptr); +} + +void MallocZoneDestroy(malloc_zone_t* zone) { + NOTREACHED(); + IMMEDIATE_CRASH(); +} + +void* MallocZoneMemalign(malloc_zone_t* zone, size_t alignment, size_t size) { + return ShimMemalign(alignment, size, nullptr); +} + +void MallocZoneFreeDefiniteSize(malloc_zone_t* zone, void* ptr, size_t size) { + return ShimFree(ptr, nullptr); +} + +malloc_introspection_t g_mac_malloc_introspection{}; +malloc_zone_t g_mac_malloc_zone{}; + +} // namespace + +void InitializeDefaultAllocatorPartitionRoot(); + +void AddMacMallocZoneAsDefaultZone() { + // Instantiate the existing regular and purgeable zones in order to make the + // existing purgeable zone use the existing regular zone since PartitionAlloc + // doesn't support a purgeable zone. + ignore_result(malloc_default_zone()); + ignore_result(malloc_default_purgeable_zone()); + + // Initialize the default allocator's PartitionRoot with the existing zone. + InitializeDefaultAllocatorPartitionRoot(); + + // Create our own malloc zone. + g_mac_malloc_introspection.enumerator = MallocIntrospectionEnumerator; + g_mac_malloc_introspection.good_size = MallocIntrospectionGoodSize; + g_mac_malloc_introspection.check = MallocIntrospectionCheck; + g_mac_malloc_introspection.print = MallocIntrospectionPrint; + g_mac_malloc_introspection.log = MallocIntrospectionLog; + g_mac_malloc_introspection.force_lock = MallocIntrospectionForceLock; + g_mac_malloc_introspection.force_unlock = MallocIntrospectionForceUnlock; + g_mac_malloc_introspection.statistics = MallocIntrospectionStatistics; + g_mac_malloc_introspection.zone_locked = MallocIntrospectionZoneLocked; + g_mac_malloc_introspection.enable_discharge_checking = + MallocIntrospectionEnableDischargeChecking; + g_mac_malloc_introspection.disable_discharge_checking = + MallocIntrospectionDisableDischargeChecking; + g_mac_malloc_introspection.discharge = MallocIntrospectionDischarge; + g_mac_malloc_introspection.enumerate_discharged_pointers = + MallocIntrospectionEnumerateDischargedPointers; + g_mac_malloc_introspection.reinit_lock = MallocIntrospectionReinitLock; + g_mac_malloc_introspection.print_task = MallocIntrospectionPrintTask; + g_mac_malloc_introspection.task_statistics = + MallocIntrospectionTaskStatistics; + // `version` member indicates which APIs are supported in this zone. + // version >= 5: memalign is supported + // version >= 6: free_definite_size is supported + // version >= 8: pressure_relief is supported + // version >= 10: claimed_address is supported + g_mac_malloc_zone.version = 6; + g_mac_malloc_zone.zone_name = "PartitionAlloc"; + g_mac_malloc_zone.introspect = &g_mac_malloc_introspection; + g_mac_malloc_zone.size = MallocZoneSize; + g_mac_malloc_zone.malloc = MallocZoneMalloc; + g_mac_malloc_zone.calloc = MallocZoneCalloc; + g_mac_malloc_zone.valloc = MallocZoneValloc; + g_mac_malloc_zone.free = MallocZoneFree; + g_mac_malloc_zone.realloc = MallocZoneRealloc; + g_mac_malloc_zone.destroy = MallocZoneDestroy; + g_mac_malloc_zone.batch_malloc = nullptr; + g_mac_malloc_zone.batch_free = nullptr; + g_mac_malloc_zone.memalign = MallocZoneMemalign; + g_mac_malloc_zone.free_definite_size = MallocZoneFreeDefiniteSize; + g_mac_malloc_zone.pressure_relief = nullptr; + g_mac_malloc_zone.claimed_address = nullptr; + + // Install our own malloc zone. + malloc_zone_register(&g_mac_malloc_zone); + + // Make our own zone the default zone. + for (unsigned int retry_count = 0;; ++retry_count) { + vm_address_t* zones = nullptr; + unsigned int zone_count = 0; + kern_return_t result = + malloc_get_all_zones(mach_task_self(), nullptr, &zones, &zone_count); + MACH_CHECK(result == KERN_SUCCESS, result) << "malloc_get_all_zones"; + + malloc_zone_t* top_zone = reinterpret_cast<malloc_zone_t*>(zones[0]); + if (top_zone == &g_mac_malloc_zone) { + break; // Our own malloc zone is now the default zone. + } + CHECK_LE(retry_count, zone_count); + + // Reorder malloc zones so that our own zone becomes the default one. + malloc_zone_unregister(top_zone); + malloc_zone_register(top_zone); + } +} + +} // namespace allocator +} // namespace base
diff --git a/base/allocator/partition_allocator/starscan/pcscan.cc b/base/allocator/partition_allocator/starscan/pcscan.cc index e0c5228a..313490e1 100644 --- a/base/allocator/partition_allocator/starscan/pcscan.cc +++ b/base/allocator/partition_allocator/starscan/pcscan.cc
@@ -6,7 +6,6 @@ #include <algorithm> #include <array> -#include <atomic> #include <condition_variable> #include <mutex> #include <numeric> @@ -1358,7 +1357,7 @@ void PCScanTask::FinishScanner() { stats_.ReportTracesAndHists(); - LogStats(stats_.swept_size(), pcscan_.quarantine_data_.quarantine_size(), + LogStats(stats_.swept_size(), pcscan_.quarantine_data_.last_size(), stats_.survived_quarantine_size()); const size_t total_pa_heap_size = @@ -1496,10 +1495,10 @@ TaskHandle posted_task_; }; -constexpr intptr_t PCScan::QuarantineData::kQuarantineSizeMinLimit; +constexpr size_t PCScan::QuarantineData::kQuarantineSizeMinLimit; void PCScan::QuarantineData::ResetAndAdvanceEpoch() { - quarantine_size_ = limit_ - trigger_limit_.load(std::memory_order_relaxed); + last_size_ = current_size_.exchange(0, std::memory_order_relaxed); epoch_.fetch_add(1, std::memory_order_relaxed); } @@ -1507,15 +1506,10 @@ static constexpr double kQuarantineSizeFraction = 0.1; // |heap_size| includes the current quarantine size, we intentionally leave // some slack till hitting the limit. - limit_ = std::max(kQuarantineSizeMinLimit, - static_cast<intptr_t>(kQuarantineSizeFraction * heap_size)); - // Force a new scan on the next deallocation if the too many deallocations - // accumulated during the current scan. - const intptr_t old_trigger_limit = - trigger_limit_.fetch_add(limit_, std::memory_order_relaxed); - if (old_trigger_limit + limit_ < 0) { - trigger_limit_.store(0, std::memory_order_relaxed); - } + size_limit_.store( + std::max(kQuarantineSizeMinLimit, + static_cast<size_t>(kQuarantineSizeFraction * heap_size)), + std::memory_order_relaxed); } void PCScan::PerformScan(InvocationMode invocation_mode) {
diff --git a/base/allocator/partition_allocator/starscan/pcscan.h b/base/allocator/partition_allocator/starscan/pcscan.h index e31b9f4..ab4ce44 100644 --- a/base/allocator/partition_allocator/starscan/pcscan.h +++ b/base/allocator/partition_allocator/starscan/pcscan.h
@@ -107,25 +107,22 @@ void ResetAndAdvanceEpoch(); size_t epoch() const { return epoch_.load(std::memory_order_relaxed); } - size_t limit() const { return limit_; } - - size_t quarantine_size() const { return quarantine_size_; } + size_t size() const { + return current_size_.load(std::memory_order_relaxed); + } + size_t last_size() const { return last_size_; } bool MinimumScanningThresholdReached() const { - return limit_ - trigger_limit_.load(std::memory_order_relaxed) > - kQuarantineSizeMinLimit; + return size() > kQuarantineSizeMinLimit; } private: - static constexpr intptr_t kQuarantineSizeMinLimit = 1 * 1024 * 1024; + static constexpr size_t kQuarantineSizeMinLimit = 1 * 1024 * 1024; - // The next scan will be triggered after limit_ deallocations. - intptr_t limit_{kQuarantineSizeMinLimit}; - // Deallocations decrement from this counter. When it reaches <=0 a scan - // is triggered. - std::atomic<intptr_t> trigger_limit_{limit_}; + std::atomic<size_t> current_size_{0u}; + std::atomic<size_t> size_limit_{kQuarantineSizeMinLimit}; std::atomic<size_t> epoch_{0u}; - size_t quarantine_size_ = 0; + size_t last_size_ = 0; }; enum class State : uint8_t { @@ -166,11 +163,8 @@ constexpr PCScan::QuarantineData::QuarantineData() = default; ALWAYS_INLINE bool PCScan::QuarantineData::Account(size_t size) { - const intptr_t trigger_limit_before = - trigger_limit_.fetch_sub(size, std::memory_order_relaxed); - const intptr_t trigger_limit_after = - trigger_limit_before - static_cast<intptr_t>(size); - return trigger_limit_before >= 0 && trigger_limit_after < 0; + size_t size_before = current_size_.fetch_add(size, std::memory_order_relaxed); + return size_before + size > size_limit_.load(std::memory_order_relaxed); } // To please Chromium's clang plugin.
diff --git a/build/fuchsia/linux.sdk.sha1 b/build/fuchsia/linux.sdk.sha1 index db9268b4..c9c6568 100644 --- a/build/fuchsia/linux.sdk.sha1 +++ b/build/fuchsia/linux.sdk.sha1
@@ -1 +1 @@ -3.20210328.0.1 +3.20210329.0.1
diff --git a/build/fuchsia/mac.sdk.sha1 b/build/fuchsia/mac.sdk.sha1 index db9268b4..c9c6568 100644 --- a/build/fuchsia/mac.sdk.sha1 +++ b/build/fuchsia/mac.sdk.sha1
@@ -1 +1 @@ -3.20210328.0.1 +3.20210329.0.1
diff --git a/build/lacros/mojo_connection_lacros_launcher.py b/build/lacros/mojo_connection_lacros_launcher.py index e863685..786176e3 100755 --- a/build/lacros/mojo_connection_lacros_launcher.py +++ b/build/lacros/mojo_connection_lacros_launcher.py
@@ -36,6 +36,9 @@ import subprocess +_NUM_FDS_MAX = 3 + + # contextlib.nullcontext is introduced in 3.7, while Python version on # CrOS is still 3.6. This is for backward compatibility. class NullContext: @@ -63,7 +66,8 @@ fds = array.array("i") # Array of ints # Along with the file descriptor, ash-chrome also sends the version in the # regular data. - version, ancdata, _, _ = sock.recvmsg(1, socket.CMSG_LEN(fds.itemsize)) + version, ancdata, _, _ = sock.recvmsg( + 1, socket.CMSG_LEN(fds.itemsize * _NUM_FDS_MAX)) for cmsg_level, cmsg_type, cmsg_data in ancdata: if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # There are three versions currently this script supports. @@ -78,8 +82,10 @@ # oldest one after M91. # TODO(crbug.com/1180712): Clean up the mojo procedure support of the # the middle one after M92. - assert len(cmsg_data) in (fds.itemsize, fds.itemsize * 2, fds.itemsize * - 3), ('Expecting exactly 1, 2, or 3 FDs') + cmsg_len_candidates = [(i + 1) * fds.itemsize + for i in range(_NUM_FDS_MAX)] + assert len(cmsg_data) in cmsg_len_candidates, ( + 'CMSG_LEN is unexpected: %d' % (len(cmsg_data), )) fds.frombytes(cmsg_data[:]) assert version == b'\x00', 'Expecting version code to be 0'
diff --git a/build/symlink.py b/build/symlink.py index 6c0586b..0f90696 100755 --- a/build/symlink.py +++ b/build/symlink.py
@@ -7,15 +7,14 @@ Make a symlink and optionally touch a file (to handle dependencies). """ usage = "%prog [options] source[ source ...] linkname" -epilog = """ -A sym link to source is created at linkname. If multiple sources are specfied, +epilog = """\ +A symlink to source is created at linkname. If multiple sources are specified, then linkname is assumed to be a directory, and will contain all the links to the sources (basenames identical to their source). On Windows, this will use hard links (mklink /H) to avoid requiring elevation. This means that if the original is deleted and replaced, the link will still -have the old contents. This is not expected to interfere with the Chromium -build. +have the old contents. """ import errno @@ -84,7 +83,7 @@ if options.touch: - with open(options.touch, 'w') as f: + with open(options.touch, 'w'): pass
diff --git a/buildtools/mac/clang-format.sha1 b/buildtools/mac/clang-format.sha1 index feb8155..ab9b8273 100644 --- a/buildtools/mac/clang-format.sha1 +++ b/buildtools/mac/clang-format.sha1
@@ -1 +1 @@ -ae6765c699ed32e9dca305645456dcdf5cda0438 \ No newline at end of file +12625542faa127039e54b0d97efd5c29ce97f275 \ No newline at end of file
diff --git a/chrome/VERSION b/chrome/VERSION index bba6b083..4d2a7e4 100644 --- a/chrome/VERSION +++ b/chrome/VERSION
@@ -1,4 +1,4 @@ MAJOR=91 MINOR=0 -BUILD=4462 +BUILD=4463 PATCH=0
diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni index a4a8de1..cb2747d 100644 --- a/chrome/android/chrome_java_sources.gni +++ b/chrome/android/chrome_java_sources.gni
@@ -1195,10 +1195,10 @@ "java/src/org/chromium/chrome/browser/signin/SigninActivity.java", "java/src/org/chromium/chrome/browser/signin/SigninActivityLauncherImpl.java", "java/src/org/chromium/chrome/browser/signin/SigninBridge.java", - "java/src/org/chromium/chrome/browser/signin/SigninFragmentBase.java", "java/src/org/chromium/chrome/browser/signin/SigninHelperProvider.java", "java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java", "java/src/org/chromium/chrome/browser/signin/SyncConsentFragment.java", + "java/src/org/chromium/chrome/browser/signin/SyncConsentFragmentBase.java", "java/src/org/chromium/chrome/browser/signin/SyncPromoView.java", "java/src/org/chromium/chrome/browser/site_settings/ChromeSiteSettingsDelegate.java", "java/src/org/chromium/chrome/browser/site_settings/CookieControlsServiceBridge.java",
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/v2/FeedProcessScopeDependencyProvider.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/v2/FeedProcessScopeDependencyProvider.java index 8def531..7de82ac6 100644 --- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/v2/FeedProcessScopeDependencyProvider.java +++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/v2/FeedProcessScopeDependencyProvider.java
@@ -64,7 +64,7 @@ CoreAccountInfo primaryAccount = IdentityServicesProvider.get() .getIdentityManager(Profile.getLastUsedRegularProfile()) - .getPrimaryAccountInfo(ConsentLevel.NOT_REQUIRED); + .getPrimaryAccountInfo(ConsentLevel.SIGNIN); return (primaryAccount == null) ? "" : primaryAccount.getEmail(); }
diff --git a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/v2/FeedStreamSurface.java b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/v2/FeedStreamSurface.java index c6b7895..19aab51 100644 --- a/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/v2/FeedStreamSurface.java +++ b/chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/v2/FeedStreamSurface.java
@@ -282,7 +282,7 @@ CoreAccountInfo primaryAccount = IdentityServicesProvider.get() .getIdentityManager(Profile.getLastUsedRegularProfile()) - .getPrimaryAccountInfo(ConsentLevel.NOT_REQUIRED); + .getPrimaryAccountInfo(ConsentLevel.SIGNIN); return (primaryAccount == null) ? "" : primaryAccount.getEmail(); }
diff --git a/chrome/android/java/src/PRESUBMIT.py b/chrome/android/java/src/PRESUBMIT.py index 11c0b1f..13e5b05 100644 --- a/chrome/android/java/src/PRESUBMIT.py +++ b/chrome/android/java/src/PRESUBMIT.py
@@ -96,7 +96,7 @@ SIGNIN_UI_BROWSER_ROOT + 'ConfirmImportSyncDataDialog.java', SIGNIN_UI_BROWSER_ROOT + 'ConfirmManagedSyncDataDialog.java', SIGNIN_UI_BROWSER_ROOT + 'ConfirmSyncDataStateMachineDelegate.java', - BROWSER_ROOT + 'signin/SigninFragmentBase.java', + BROWSER_ROOT + 'signin/SyncConsentFragmentBase.java', SIGNIN_UI_BROWSER_ROOT + 'SignOutDialogFragment.java', BROWSER_ROOT + 'site_settings/AddExceptionPreference.java', BROWSER_ROOT + 'site_settings/ChosenObjectSettings.java',
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPromoHeader.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPromoHeader.java index 98d77d0..0995f5f 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPromoHeader.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkPromoHeader.java
@@ -226,8 +226,7 @@ return PromoState.PROMO_NONE; } CoreAccountInfo primaryAccount = - mSignInManager.getIdentityManager().getPrimaryAccountInfo( - ConsentLevel.NOT_REQUIRED); + mSignInManager.getIdentityManager().getPrimaryAccountInfo(ConsentLevel.SIGNIN); return primaryAccount == null ? PromoState.PROMO_SIGNIN_PERSONALIZED : PromoState.PROMO_SYNC_PERSONALIZED; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/SyncConsentFirstRunFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/SyncConsentFirstRunFragment.java index 7c318f3..91b9db7 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/SyncConsentFirstRunFragment.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/firstrun/SyncConsentFirstRunFragment.java
@@ -14,7 +14,7 @@ import org.chromium.base.metrics.RecordUserAction; import org.chromium.chrome.R; import org.chromium.chrome.browser.ntp.cards.SignInPromo; -import org.chromium.chrome.browser.signin.SigninFragmentBase; +import org.chromium.chrome.browser.signin.SyncConsentFragmentBase; import org.chromium.components.signin.AccountManagerFacadeProvider; import org.chromium.components.signin.ChildAccountStatus; import org.chromium.components.signin.metrics.SigninAccessPoint; @@ -22,9 +22,10 @@ import java.util.List; /** - * Implementation of {@link SigninFragmentBase} for the first run experience. + * Implementation of {@link SyncConsentFragmentBase} for the first run experience. */ -public class SyncConsentFirstRunFragment extends SigninFragmentBase implements FirstRunFragment { +public class SyncConsentFirstRunFragment + extends SyncConsentFragmentBase implements FirstRunFragment { // Per-page parameters: // TODO(crbug/1168516): Remove CHILD_ACCOUNT_STATUS public static final String CHILD_ACCOUNT_STATUS = "ChildAccountStatus";
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/identity_disc/IdentityDiscController.java b/chrome/android/java/src/org/chromium/chrome/browser/identity_disc/IdentityDiscController.java index 5e17d8e..5eb8641 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/identity_disc/IdentityDiscController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/identity_disc/IdentityDiscController.java
@@ -265,7 +265,7 @@ */ @Override public void onPrimaryAccountChanged(PrimaryAccountChangeEvent eventDetails) { - switch (eventDetails.getEventTypeFor(ConsentLevel.NOT_REQUIRED)) { + switch (eventDetails.getEventTypeFor(ConsentLevel.SIGNIN)) { case PrimaryAccountChangeEvent.Type.SET: resetIdentityDiscCache(); notifyObservers(true); @@ -325,7 +325,7 @@ @ConsentLevel int consentLevel = ChromeFeatureList.isEnabled(ChromeFeatureList.MOBILE_IDENTITY_CONSISTENCY) - ? ConsentLevel.NOT_REQUIRED + ? ConsentLevel.SIGNIN : ConsentLevel.SYNC; return mIdentityManager != null ? mIdentityManager.getPrimaryAccountInfo(consentLevel) : null;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java index ebfd3dfe..0134e2e9 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/RecentTabsManager.java
@@ -376,7 +376,7 @@ } if (ChromeFeatureList.isEnabled(ChromeFeatureList.MOBILE_IDENTITY_CONSISTENCY) && mSignInManager.getIdentityManager().getPrimaryAccountInfo( - ConsentLevel.NOT_REQUIRED) + ConsentLevel.SIGNIN) != null) { return PromoState.PROMO_SYNC_PERSONALIZED; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/SignInPromo.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/SignInPromo.java index 91f9717..6c67f45 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/SignInPromo.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/cards/SignInPromo.java
@@ -138,7 +138,7 @@ } IdentityManager identityManager = IdentityServicesProvider.get().getIdentityManager( Profile.getLastUsedRegularProfile()); - return identityManager.getPrimaryAccountInfo(ConsentLevel.NOT_REQUIRED) != null + return identityManager.getPrimaryAccountInfo(ConsentLevel.SIGNIN) != null && identityManager.getPrimaryAccountInfo(ConsentLevel.SYNC) == null; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/services/AccountsChangedReceiver.java b/chrome/android/java/src/org/chromium/chrome/browser/services/AccountsChangedReceiver.java index 12dfa79..6506201 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/services/AccountsChangedReceiver.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/services/AccountsChangedReceiver.java
@@ -24,6 +24,10 @@ * This receiver is notified when accounts are added, accounts are removed, or * an account's credentials (saved password, etc) are changed. * All public methods must be called from the UI thread. + * + * TODO(crbug/1193412): We can trigger the signed-in account validation directly + * after the seeding to avoid listening to the same LOGIN_ACCOUNTS_CHANGED_ACTION + * event in two different places. */ public class AccountsChangedReceiver extends BroadcastReceiver { @Override @@ -44,15 +48,10 @@ AccountTrackerService trackerService = IdentityServicesProvider.get().getAccountTrackerService( Profile.getLastUsedRegularProfile()); - // TODO(bsazonov): Check whether invalidateAccountSeedStatus is needed here. - trackerService.invalidateAccountSeedStatus(false /* don't refresh right now */); + trackerService.seedAccounts(); SigninHelperProvider.get().validateAccountSettings(); }); } - - @Override - public void onStartupFailure(Exception failureCause) { - } }; ChromeBrowserInitializer.getInstance().handlePreNativeStartupAndLoadLibraries(parts); ChromeBrowserInitializer.getInstance().handlePostNativeStartup(true, parts);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java index 949f5a97..3ad2ee3 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/MainSettings.java
@@ -291,7 +291,7 @@ String primaryAccountName = CoreAccountInfo.getEmailFrom( IdentityServicesProvider.get() .getIdentityManager(Profile.getLastUsedRegularProfile()) - .getPrimaryAccountInfo(ConsentLevel.NOT_REQUIRED)); + .getPrimaryAccountInfo(ConsentLevel.SIGNIN)); boolean showManageSync = ChromeFeatureList.isEnabled(ChromeFeatureList.MOBILE_IDENTITY_CONSISTENCY) && primaryAccountName != null;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninActivity.java index ead49519..885af41 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninActivity.java
@@ -17,7 +17,7 @@ /** * Allows the user to pick an account, sign in and enable sync. Started from Settings and various - * sign-in promos. For more details see {@link SigninFragmentBase}. + * sign-in promos. For more details see {@link SyncConsentFragmentBase}. */ // TODO(https://crbug.com/820491): extend AsyncInitializationActivity. public class SigninActivity extends ChromeBaseAppCompatActivity {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninActivityLauncherImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninActivityLauncherImpl.java index 2791a2fe..9bb889d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninActivityLauncherImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninActivityLauncherImpl.java
@@ -90,7 +90,7 @@ SigninManager signinManager = IdentityServicesProvider.get().getSigninManager( Profile.getLastUsedRegularProfile()); if (signinManager.isSignInAllowed()) { - launchInternal(context, SigninFragmentBase.createArguments(accessPoint, null)); + launchInternal(context, SyncConsentFragmentBase.createArguments(accessPoint, null)); return true; } if (signinManager.isSigninDisabledByPolicy()) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java index 305718b..8a9d2496 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninManagerImpl.java
@@ -134,7 +134,7 @@ mIdentityManager::forceRefreshOfExtendedAccountInfo); } mIdentityMutator.reloadAllAccountsFromSystemWithPrimaryAccount(CoreAccountInfo.getIdFrom( - mIdentityManager.getPrimaryAccountInfo(ConsentLevel.NOT_REQUIRED))); + mIdentityManager.getPrimaryAccountInfo(ConsentLevel.SIGNIN))); maybeRollbackMobileIdentityConsistency(); } @@ -158,7 +158,7 @@ private void maybeRollbackMobileIdentityConsistency() { if (ChromeFeatureList.isEnabled(ChromeFeatureList.MOBILE_IDENTITY_CONSISTENCY)) return; // Nothing to do if there's no primary account. - if (mIdentityManager.getPrimaryAccountInfo(ConsentLevel.NOT_REQUIRED) == null) return; + if (mIdentityManager.getPrimaryAccountInfo(ConsentLevel.SIGNIN) == null) return; // Nothing to do if sync is on - this state existed before MobileIdentityConsistency. if (mIdentityManager.getPrimaryAccountInfo(ConsentLevel.SYNC) != null) return; @@ -409,7 +409,7 @@ @ConsentLevel int consentLevel = - mSignInState.shouldTurnSyncOn() ? ConsentLevel.SYNC : ConsentLevel.NOT_REQUIRED; + mSignInState.shouldTurnSyncOn() ? ConsentLevel.SYNC : ConsentLevel.SIGNIN; if (!mIdentityMutator.setPrimaryAccount( mSignInState.mCoreAccountInfo.getId(), consentLevel)) { Log.w(TAG, "Failed to set the PrimaryAccount in IdentityManager, aborting signin"); @@ -441,8 +441,8 @@ RecordUserAction.record("Signin_Signin_Succeed"); RecordHistogram.recordEnumeratedHistogram("Signin.SigninCompletedAccessPoint", mSignInState.getAccessPoint(), SigninAccessPoint.MAX); - RecordHistogram.recordEnumeratedHistogram( - "Signin.SigninReason", SigninReason.SIGNIN_PRIMARY_ACCOUNT, SigninReason.MAX); + RecordHistogram.recordEnumeratedHistogram("Signin.SigninReason", + SigninReason.REASON_SIGNIN_PRIMARY_ACCOUNT, SigninReason.MAX_VALUE + 1); } if (mSignInState.mCallback != null) { @@ -476,7 +476,7 @@ // - Syncing account is signed out. User may choose to delete data from UI prompt // if account is not managed. In this case mSigninOutState is set. // - RevokeSyncConsent() is called in native code. In this case the user may still - // be signed in with Consentlevel::NOT_REQUIRED and just lose sync privileges. + // be signed in with Consentlevel::SIGNIN and just lose sync privileges. // If the account is managed then the data should be wiped. // // TODO(https://crbug.com/1173016): It might be too late to get management status @@ -493,7 +493,7 @@ disableSyncAndWipeData(mSignOutState.mShouldWipeUserData, this::finishSignOut); break; case PrimaryAccountChangeEvent.Type.NONE: - if (eventDetails.getEventTypeFor(ConsentLevel.NOT_REQUIRED) + if (eventDetails.getEventTypeFor(ConsentLevel.SIGNIN) == PrimaryAccountChangeEvent.Type.CLEARED) { if (mSignOutState == null) { // Don't wipe data as the user is not syncing. @@ -626,7 +626,7 @@ @Override public void onAccountsCookieDeletedByUserAction() { - if (mIdentityManager.getPrimaryAccountInfo(ConsentLevel.NOT_REQUIRED) != null + if (mIdentityManager.getPrimaryAccountInfo(ConsentLevel.SIGNIN) != null && mIdentityManager.getPrimaryAccountInfo(ConsentLevel.SYNC) == null) { // Clearing account cookies should trigger sign-out only when user is signed in // without sync.
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SyncConsentFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SyncConsentFragment.java index 1f726f92..6dca9c55 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SyncConsentFragment.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SyncConsentFragment.java
@@ -30,8 +30,8 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; -/** Implementation of {@link SigninFragmentBase} for {@link SigninActivity}. */ -public class SyncConsentFragment extends SigninFragmentBase { +/** Implementation of {@link SyncConsentFragmentBase} for {@link SigninActivity}. */ +public class SyncConsentFragment extends SyncConsentFragmentBase { private static final String ARGUMENT_PERSONALIZED_PROMO_ACTION = "SigninFragment.PersonalizedPromoAction"; @@ -54,7 +54,7 @@ */ public static Bundle createArgumentsForPromoDefaultFlow( @SigninAccessPoint int accessPoint, String accountName) { - Bundle result = SigninFragmentBase.createArguments(accessPoint, accountName); + Bundle result = SyncConsentFragmentBase.createArguments(accessPoint, accountName); result.putInt(ARGUMENT_PERSONALIZED_PROMO_ACTION, PromoAction.WITH_DEFAULT); return result; } @@ -67,8 +67,8 @@ */ public static Bundle createArgumentsForPromoChooseAccountFlow( @SigninAccessPoint int accessPoint, String accountName) { - Bundle result = - SigninFragmentBase.createArgumentsForChooseAccountFlow(accessPoint, accountName); + Bundle result = SyncConsentFragmentBase.createArgumentsForChooseAccountFlow( + accessPoint, accountName); result.putInt(ARGUMENT_PERSONALIZED_PROMO_ACTION, PromoAction.NOT_DEFAULT); return result; } @@ -79,7 +79,7 @@ * @param accessPoint The access point for starting sign-in flow. */ public static Bundle createArgumentsForPromoAddAccountFlow(@SigninAccessPoint int accessPoint) { - Bundle result = SigninFragmentBase.createArgumentsForAddAccountFlow(accessPoint); + Bundle result = SyncConsentFragmentBase.createArgumentsForAddAccountFlow(accessPoint); result.putInt(ARGUMENT_PERSONALIZED_PROMO_ACTION, PromoAction.NEW_ACCOUNT); return result; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninFragmentBase.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/SyncConsentFragmentBase.java similarity index 99% rename from chrome/android/java/src/org/chromium/chrome/browser/signin/SigninFragmentBase.java rename to chrome/android/java/src/org/chromium/chrome/browser/signin/SyncConsentFragmentBase.java index 1aafb5e..f2392a4 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/signin/SigninFragmentBase.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/SyncConsentFragmentBase.java
@@ -74,7 +74,7 @@ * Derived classes must implement {@link #onSigninAccepted}/{@link #onSigninRefused} to define * what happens after the signin flow. */ -public abstract class SigninFragmentBase +public abstract class SyncConsentFragmentBase extends Fragment implements AccountPickerCoordinator.Listener { private static final String TAG = "SigninFragmentBase"; @@ -186,7 +186,7 @@ return result; } - protected SigninFragmentBase() { + protected SyncConsentFragmentBase() { mAccountManagerFacade = AccountManagerFacadeProvider.getInstance(); mAccountsChangedObserver = this::triggerUpdateAccounts; mProfileDataCacheObserver = this::updateProfileData; @@ -489,8 +489,7 @@ mConsentTextTracker.recordConsent(new CoreAccountId(accountId), ConsentAuditorFeature.CHROME_SYNC, confirmationView, mView); } - } - .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } private void showAccountPicker() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/AccountManagementFragment.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/AccountManagementFragment.java index e5e1352..a9433a3 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/AccountManagementFragment.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/AccountManagementFragment.java
@@ -162,7 +162,7 @@ .getPrimaryAccountInfo( ChromeFeatureList.isEnabled( ChromeFeatureList.MOBILE_IDENTITY_CONSISTENCY) - ? ConsentLevel.NOT_REQUIRED + ? ConsentLevel.SIGNIN : ConsentLevel.SYNC)); if (mSignedInAccountName == null) { // The AccountManagementFragment can only be shown when the user is signed in. If the @@ -404,7 +404,7 @@ // we do not hit a native crash. if (IdentityServicesProvider.get() .getIdentityManager(Profile.getLastUsedRegularProfile()) - .getPrimaryAccountInfo(ConsentLevel.NOT_REQUIRED) + .getPrimaryAccountInfo(ConsentLevel.SIGNIN) == null) { return; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/GoogleServicesSettings.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/GoogleServicesSettings.java index 1ae9e04..fce0c5c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/GoogleServicesSettings.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/GoogleServicesSettings.java
@@ -173,7 +173,7 @@ IdentityManager identityManager = IdentityServicesProvider.get().getIdentityManager( Profile.getLastUsedRegularProfile()); boolean shouldSignUserOut = - identityManager.getPrimaryAccountInfo(ConsentLevel.NOT_REQUIRED) != null + identityManager.getPrimaryAccountInfo(ConsentLevel.SIGNIN) != null && !((boolean) newValue); if (!shouldSignUserOut) { mPrefService.setBoolean(Pref.SIGNIN_ALLOWED, (boolean) newValue); @@ -290,7 +290,7 @@ // we do not hit a native crash. if (IdentityServicesProvider.get() .getIdentityManager(Profile.getLastUsedRegularProfile()) - .getPrimaryAccountInfo(ConsentLevel.NOT_REQUIRED) + .getPrimaryAccountInfo(ConsentLevel.SIGNIN) == null) { return; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SignInPreference.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SignInPreference.java index feb3329..e6c2780 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SignInPreference.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SignInPreference.java
@@ -135,7 +135,7 @@ CoreAccountInfo accountInfo = IdentityServicesProvider.get() .getIdentityManager(Profile.getLastUsedRegularProfile()) - .getPrimaryAccountInfo(ConsentLevel.NOT_REQUIRED); + .getPrimaryAccountInfo(ConsentLevel.SIGNIN); if (accountInfo != null) { setupSignedIn(accountInfo.getEmail()); return;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncPromoPreference.java b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncPromoPreference.java index bcd83b2..6412f99b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncPromoPreference.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/sync/settings/SyncPromoPreference.java
@@ -148,7 +148,7 @@ && SigninPromoController.hasNotReachedImpressionLimit(SigninAccessPoint.SETTINGS)) { IdentityManager identityManager = IdentityServicesProvider.get().getIdentityManager( Profile.getLastUsedRegularProfile()); - if (identityManager.getPrimaryAccountInfo(ConsentLevel.NOT_REQUIRED) == null) { + if (identityManager.getPrimaryAccountInfo(ConsentLevel.SIGNIN) == null) { setupPersonalizedPromo(State.PERSONALIZED_SIGNIN_PROMO); return; } else if (identityManager.getPrimaryAccountInfo(ConsentLevel.SYNC) == null) {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/AccountManagementFragmentTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/AccountManagementFragmentTest.java index f8fc2a6..5166e36 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/AccountManagementFragmentTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/AccountManagementFragmentTest.java
@@ -171,7 +171,7 @@ -> Assert.assertNull("Account should be signed out!", IdentityServicesProvider.get() .getIdentityManager(Profile.getLastUsedRegularProfile()) - .getPrimaryAccountInfo(ConsentLevel.NOT_REQUIRED))); + .getPrimaryAccountInfo(ConsentLevel.SIGNIN))); } @Test
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/GoogleServicesSettingsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/GoogleServicesSettingsTest.java index 974a783..cf2edb2 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/sync/GoogleServicesSettingsTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/sync/GoogleServicesSettingsTest.java
@@ -98,7 +98,7 @@ -> Assert.assertNull("Account should be signed out!", IdentityServicesProvider.get() .getIdentityManager(Profile.getLastUsedRegularProfile()) - .getPrimaryAccountInfo(ConsentLevel.NOT_REQUIRED))); + .getPrimaryAccountInfo(ConsentLevel.SIGNIN))); TestThreadUtils.runOnUiThreadBlocking( () -> Assert.assertFalse("SIGNIN_ALLOWED pref should be unset",
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerImplTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerImplTest.java index d43e8fe3..f5ec7dc 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerImplTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/signin/SigninManagerImplTest.java
@@ -141,7 +141,7 @@ // Signin without turning on sync shouldn't apply policies. verify(mNativeMock, never()).fetchAndApplyCloudPolicy(anyLong(), any(), any()); - verify(mIdentityMutator).setPrimaryAccount(ACCOUNT_INFO.getId(), ConsentLevel.NOT_REQUIRED); + verify(mIdentityMutator).setPrimaryAccount(ACCOUNT_INFO.getId(), ConsentLevel.SIGNIN); verify(mAndroidSyncSettings, never()).updateAccount(any()); verify(mAndroidSyncSettings, never()).enableChromeSync(); @@ -319,7 +319,7 @@ @Test public void clearingAccountCookieTriggersSignoutWhenUserIsSignedInWithoutSync() { when(mIdentityManagerNativeMock.getPrimaryAccountInfo( - NATIVE_IDENTITY_MANAGER, ConsentLevel.NOT_REQUIRED)) + NATIVE_IDENTITY_MANAGER, ConsentLevel.SIGNIN)) .thenReturn(ACCOUNT_INFO); mIdentityManager.onAccountsCookieDeletedByUserAction(); @@ -335,7 +335,7 @@ @Test public void rollbackWhenMobileIdentityConsistencyIsDisabled() { when(mIdentityManagerNativeMock.getPrimaryAccountInfo( - NATIVE_IDENTITY_MANAGER, ConsentLevel.NOT_REQUIRED)) + NATIVE_IDENTITY_MANAGER, ConsentLevel.SIGNIN)) .thenReturn(ACCOUNT_INFO); mSigninManager = new SigninManagerImpl(NATIVE_SIGNIN_MANAGER, mAccountTrackerService, @@ -357,7 +357,7 @@ @Features.EnableFeatures(ChromeFeatureList.MOBILE_IDENTITY_CONSISTENCY) public void noRollbackWhenMobileIdentityConsistencyIsEnabled() { when(mIdentityManagerNativeMock.getPrimaryAccountInfo( - NATIVE_IDENTITY_MANAGER, ConsentLevel.NOT_REQUIRED)) + NATIVE_IDENTITY_MANAGER, ConsentLevel.SIGNIN)) .thenReturn(ACCOUNT_INFO); mSigninManager = new SigninManagerImpl(NATIVE_SIGNIN_MANAGER, mAccountTrackerService,
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index b6ba304..aabd5dc 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -887,6 +887,8 @@ "net/system_network_context_manager.h", "net_benchmarking.cc", "net_benchmarking.h", + "nfc/chrome_nfc_permission_context_delegate.cc", + "nfc/chrome_nfc_permission_context_delegate.h", "nfc/nfc_permission_context.cc", "nfc/nfc_permission_context.h", "notifications/metrics/notification_metrics_logger.cc", @@ -1638,8 +1640,6 @@ "signin/identity_manager_factory.h", "signin/investigator_dependency_provider.cc", "signin/investigator_dependency_provider.h", - "signin/local_auth.cc", - "signin/local_auth.h", "signin/reauth_result.h", "signin/reauth_tab_helper.cc", "signin/reauth_tab_helper.h",
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc index 4e84b54..4212da6 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc
@@ -3089,6 +3089,9 @@ {"stylus-battery-status", flag_descriptions::kStylusBatteryStatusName, flag_descriptions::kStylusBatteryStatusDescription, kOsCrOS, FEATURE_VALUE_TYPE(ash::features::kStylusBatteryStatus)}, + {"wake-on-wifi-allowed", flag_descriptions::kWakeOnWifiAllowedName, + flag_descriptions::kWakeOnWifiAllowedDescription, kOsCrOS, + FEATURE_VALUE_TYPE(chromeos::features::kWakeOnWifiAllowed)}, #endif // BUILDFLAG(IS_CHROMEOS_ASH) #if defined(OS_CHROMEOS) @@ -6208,12 +6211,13 @@ {"enable-heavy-ad-intervention", flag_descriptions::kHeavyAdInterventionName, flag_descriptions::kHeavyAdInterventionDescription, kOsAll, - FEATURE_VALUE_TYPE(features::kHeavyAdIntervention)}, + FEATURE_VALUE_TYPE(heavy_ad_intervention::features::kHeavyAdIntervention)}, {"heavy-ad-privacy-mitigations", flag_descriptions::kHeavyAdPrivacyMitigationsName, flag_descriptions::kHeavyAdPrivacyMitigationsDescription, kOsAll, - FEATURE_VALUE_TYPE(features::kHeavyAdPrivacyMitigations)}, + FEATURE_VALUE_TYPE( + heavy_ad_intervention::features::kHeavyAdPrivacyMitigations)}, #if !BUILDFLAG(DISABLE_FTP_SUPPORT) {"enable-ftp", flag_descriptions::kEnableFtpName,
diff --git a/chrome/browser/android/signin/signin_metrics_utils.cc b/chrome/browser/android/signin/signin_metrics_utils.cc index e7b597b..63f489cc 100644 --- a/chrome/browser/android/signin/signin_metrics_utils.cc +++ b/chrome/browser/android/signin/signin_metrics_utils.cc
@@ -51,7 +51,7 @@ const std::vector<std::string>& gaia_ids) { signin::AccountsInCookieJarInfo accounts_in_cookie_jar_info = identity_manager->GetAccountsInCookieJar(); - if (identity_manager->HasPrimaryAccount(signin::ConsentLevel::kNotRequired)) { + if (identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSignin)) { // Account is signed in to Chrome. The metrics recorded here are only for // web signin. return false;
diff --git a/chrome/browser/ash/account_manager/account_manager_policy_controller_browsertest.cc b/chrome/browser/ash/account_manager/account_manager_policy_controller_browsertest.cc index d481c084..a7ac11b4 100644 --- a/chrome/browser/ash/account_manager/account_manager_policy_controller_browsertest.cc +++ b/chrome/browser/ash/account_manager/account_manager_policy_controller_browsertest.cc
@@ -169,7 +169,7 @@ ->GetAccountId() .GetGaiaId(), identity_manager() - ->GetPrimaryAccountInfo(signin::ConsentLevel::kNotRequired) + ->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin) .gaia); EXPECT_EQ(ProfileHelper::Get() ->GetUserByProfile(profile()) @@ -202,7 +202,7 @@ ->GetAccountId() .GetGaiaId(), identity_manager() - ->GetPrimaryAccountInfo(signin::ConsentLevel::kNotRequired) + ->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin) .gaia); EXPECT_EQ(ProfileHelper::Get() ->GetUserByProfile(profile())
diff --git a/chrome/browser/ash/arc/arc_support_host.cc b/chrome/browser/ash/arc/arc_support_host.cc index 6bf5b84..423b9c8 100644 --- a/chrome/browser/ash/arc/arc_support_host.cc +++ b/chrome/browser/ash/arc/arc_support_host.cc
@@ -722,10 +722,9 @@ auto* identity_manager = IdentityManagerFactory::GetForProfile(profile_); // This class doesn't care about browser sync consent. - DCHECK(identity_manager->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired)); - CoreAccountId account_id = identity_manager->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired); + DCHECK(identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSignin)); + CoreAccountId account_id = + identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kSignin); bool is_child = user_manager::UserManager::Get()->IsLoggedInAsChildUser(); // Record acceptance of ToS if it was shown to the user, otherwise simply
diff --git a/chrome/browser/ash/arc/auth/arc_auth_service.cc b/chrome/browser/ash/arc/auth/arc_auth_service.cc index b840778..6bf5077 100644 --- a/chrome/browser/ash/arc/auth/arc_auth_service.cc +++ b/chrome/browser/ash/arc/auth/arc_auth_service.cc
@@ -197,7 +197,7 @@ case mojom::ChromeAccountType::USER_ACCOUNT: case mojom::ChromeAccountType::CHILD_ACCOUNT: // IdentityManager::GetPrimaryAccountInfo( - // signin::ConsentLevel::kNotRequired).email might be more appropriate + // signin::ConsentLevel::kSignin).email might be more appropriate // here, but this is what we have done historically. return chromeos::ProfileHelper::Get() ->GetUserByProfile(profile) @@ -484,11 +484,9 @@ // Optionally retrieve auth code in silent mode. Use the "unconsented" // primary account because this class doesn't care about browser sync // consent. - DCHECK(identity_manager_->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired)); + DCHECK(identity_manager_->HasPrimaryAccount(signin::ConsentLevel::kSignin)); auth_code_fetcher = CreateArcBackgroundAuthCodeFetcher( - identity_manager_->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired), + identity_manager_->GetPrimaryAccountId(signin::ConsentLevel::kSignin), initial_signin); }
diff --git a/chrome/browser/ash/arc/policy/arc_android_management_checker.cc b/chrome/browser/ash/arc/policy/arc_android_management_checker.cc index 8e58c8d..d76b6bc 100644 --- a/chrome/browser/ash/arc/policy/arc_android_management_checker.cc +++ b/chrome/browser/ash/arc/policy/arc_android_management_checker.cc
@@ -41,8 +41,7 @@ IdentityManagerFactory::GetForProfile(profile); // The account is the same whether or not the user consented to browser sync. - return identity_manager->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired); + return identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kSignin); } } // namespace
diff --git a/chrome/browser/ash/arc/session/arc_play_store_enabled_preference_handler.cc b/chrome/browser/ash/arc/session/arc_play_store_enabled_preference_handler.cc index dbc90d0..38d1dc06 100644 --- a/chrome/browser/ash/arc/session/arc_play_store_enabled_preference_handler.cc +++ b/chrome/browser/ash/arc/session/arc_play_store_enabled_preference_handler.cc
@@ -130,12 +130,11 @@ // setting up the state of identity_manager and enable the DCHECK instead // of the conditional below. // DCHECK(identity_manager->HasPrimaryAccount( - // signin::ConsentLevel::kNotRequired)); - if (identity_manager->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired)) { + // signin::ConsentLevel::kSignin)); + if (identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSignin)) { // This class doesn't care about browser sync consent. const CoreAccountId account_id = identity_manager->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired); + signin::ConsentLevel::kSignin); UserConsentTypes::ArcPlayTermsOfServiceConsent play_consent; play_consent.set_status(UserConsentTypes::NOT_GIVEN);
diff --git a/chrome/browser/ash/arc/session/arc_play_store_enabled_preference_handler_unittest.cc b/chrome/browser/ash/arc/session/arc_play_store_enabled_preference_handler_unittest.cc index 0a7c7e1..055221d 100644 --- a/chrome/browser/ash/arc/session/arc_play_store_enabled_preference_handler_unittest.cc +++ b/chrome/browser/ash/arc/session/arc_play_store_enabled_preference_handler_unittest.cc
@@ -123,7 +123,7 @@ identity_test_env_profile_adaptor_->identity_test_env() ->identity_manager(); return identity_manager - ->GetPrimaryAccountInfo(signin::ConsentLevel::kNotRequired) + ->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin) .account_id; }
diff --git a/chrome/browser/ash/arc/session/arc_session_manager_browsertest.cc b/chrome/browser/ash/arc/session/arc_session_manager_browsertest.cc index 7b0b7d78..60d5773 100644 --- a/chrome/browser/ash/arc/session/arc_session_manager_browsertest.cc +++ b/chrome/browser/ash/arc/session/arc_session_manager_browsertest.cc
@@ -236,8 +236,7 @@ IN_PROC_BROWSER_TEST_F(ArcSessionManagerTest, ConsumerAccount) { EnableArc(); identity_test_env()->WaitForAccessTokenRequestIfNecessaryAndRespondWithToken( - identity_manager()->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired), + identity_manager()->GetPrimaryAccountId(signin::ConsentLevel::kSignin), kUnmanagedAuthToken, base::Time::Max()); ASSERT_EQ(ArcSessionManager::State::ACTIVE, ArcSessionManager::Get()->state()); @@ -263,8 +262,7 @@ IN_PROC_BROWSER_TEST_F(ArcSessionManagerTest, ManagedAndroidAccount) { EnableArc(); identity_test_env()->WaitForAccessTokenRequestIfNecessaryAndRespondWithToken( - identity_manager()->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired), + identity_manager()->GetPrimaryAccountId(signin::ConsentLevel::kSignin), kManagedAuthToken, base::Time::Max()); ArcPlayStoreDisabledWaiter().Wait(); EXPECT_FALSE(IsArcPlayStoreEnabledForProfile(profile()));
diff --git a/chrome/browser/ash/assistant/assistant_util.cc b/chrome/browser/ash/assistant/assistant_util.cc index b56f742..de6caeb 100644 --- a/chrome/browser/ash/assistant/assistant_util.cc +++ b/chrome/browser/ash/assistant/assistant_util.cc
@@ -32,8 +32,7 @@ if (!identity_manager) return false; - return identity_manager->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired); + return identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSignin); } bool IsGoogleDevice() {
diff --git a/chrome/browser/ash/assistant/assistant_util_unittest.cc b/chrome/browser/ash/assistant/assistant_util_unittest.cc index 42f3e19..c9364f25 100644 --- a/chrome/browser/ash/assistant/assistant_util_unittest.cc +++ b/chrome/browser/ash/assistant/assistant_util_unittest.cc
@@ -103,7 +103,7 @@ return; if (!identity_test_env_->identity_manager()->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired)) { + signin::ConsentLevel::kSignin)) { identity_test_env_->MakeUnconsentedPrimaryAccountAvailable( account_id_.GetUserEmail()); }
diff --git a/chrome/browser/ash/borealis/borealis_context_manager_impl.cc b/chrome/browser/ash/borealis/borealis_context_manager_impl.cc index e6eaa3e..f7b08b84 100644 --- a/chrome/browser/ash/borealis/borealis_context_manager_impl.cc +++ b/chrome/browser/ash/borealis/borealis_context_manager_impl.cc
@@ -16,6 +16,7 @@ #include "chrome/browser/ash/borealis/borealis_task.h" #include "chrome/browser/ash/borealis/infra/described.h" #include "chrome/browser/ash/profiles/profile_helper.h" +#include "chromeos/dbus/concierge_client.h" #include "chromeos/dbus/dbus_thread_manager.h" namespace { @@ -84,6 +85,7 @@ : profile_(profile), weak_factory_(this) { // DBusThreadManager may not be initialized in tests. if (chromeos::DBusThreadManager::IsInitialized()) { + ShutDownBorealisIfChromeCrashed(); chromeos::DBusThreadManager::Get()->GetConciergeClient()->AddVmObserver( this); } @@ -100,6 +102,61 @@ } } +// Note that this method gets called in the constructor. +void BorealisContextManagerImpl::ShutDownBorealisIfChromeCrashed() { + if (profile_->GetLastSessionExitType() != Profile::EXIT_CRASHED) { + return; + } + vm_tools::concierge::GetVmInfoRequest request; + request.set_owner_id( + chromeos::ProfileHelper::GetUserIdHashFromProfile(profile_)); + request.set_name(kBorealisVmName); + chromeos::DBusThreadManager::Get()->GetConciergeClient()->GetVmInfo( + std::move(request), + base::BindOnce( + [](base::WeakPtr<BorealisContextManagerImpl> weak_this, + base::Optional<vm_tools::concierge::GetVmInfoResponse> reply) { + if (reply.has_value() && reply->success()) { + weak_this->SendShutdownRequest(base::DoNothing(), + kBorealisVmName); + } + }, + weak_factory_.GetWeakPtr())); +} + +void BorealisContextManagerImpl::SendShutdownRequest( + base::OnceCallback<void(BorealisShutdownResult)> on_shutdown_callback, + const std::string& vm_name) { + // TODO(b/172178036): This could have been a task-sequence but that + // abstraction is proving insufficient. + vm_tools::concierge::StopVmRequest request; + request.set_owner_id( + chromeos::ProfileHelper::GetUserIdHashFromProfile(profile_)); + request.set_name(vm_name); + chromeos::DBusThreadManager::Get()->GetConciergeClient()->StopVm( + std::move(request), + base::BindOnce( + [](base::OnceCallback<void(BorealisShutdownResult)> + on_shutdown_callback, + base::Optional<vm_tools::concierge::StopVmResponse> response) { + // We don't have a good way to deal with a vm failing to stop (and + // this would be a very rare occurrence anyway). We log an error if + // it actually wasn't successful. + BorealisShutdownResult result = BorealisShutdownResult::kSuccess; + if (!response.has_value()) { + LOG(ERROR) << "Failed to stop Borealis VM: No response"; + result = BorealisShutdownResult::kFailed; + } else if (!response.value().success()) { + LOG(ERROR) << "Failed to stop Borealis VM: " + << response.value().failure_reason(); + result = BorealisShutdownResult::kFailed; + } + RecordBorealisShutdownResultHistogram(result); + std::move(on_shutdown_callback).Run(result); + }, + std::move(on_shutdown_callback))); +} + void BorealisContextManagerImpl::StartBorealis(ResultCallback callback) { if (context_) { std::move(callback).Run( @@ -137,34 +194,8 @@ } RecordBorealisShutdownNumAttemptsHistogram(); - // TODO(b/172178036): This could have been a task-sequence but that - // abstraction is proving insufficient. - vm_tools::concierge::StopVmRequest request; - request.set_owner_id( - chromeos::ProfileHelper::GetUserIdHashFromProfile(profile_)); - request.set_name(shutdown_context->vm_name()); - chromeos::DBusThreadManager::Get()->GetConciergeClient()->StopVm( - std::move(request), - base::BindOnce( - [](base::OnceCallback<void(BorealisShutdownResult)> - on_shutdown_callback, - base::Optional<vm_tools::concierge::StopVmResponse> response) { - // We don't have a good way to deal with a vm failing to stop (and - // this would be a very rare occurrence anyway). We log an error if - // it actually wasn't successful. - BorealisShutdownResult result = BorealisShutdownResult::kSuccess; - if (!response.has_value()) { - LOG(ERROR) << "Failed to stop Borealis VM: No response"; - result = BorealisShutdownResult::kFailed; - } else if (!response.value().success()) { - LOG(ERROR) << "Failed to stop Borealis VM: " - << response.value().failure_reason(); - result = BorealisShutdownResult::kFailed; - } - RecordBorealisShutdownResultHistogram(result); - std::move(on_shutdown_callback).Run(result); - }, - std::move(on_shutdown_callback))); + SendShutdownRequest(std::move(on_shutdown_callback), + shutdown_context->vm_name()); } base::queue<std::unique_ptr<BorealisTask>>
diff --git a/chrome/browser/ash/borealis/borealis_context_manager_impl.h b/chrome/browser/ash/borealis/borealis_context_manager_impl.h index 4f8cec5..b14a0e9 100644 --- a/chrome/browser/ash/borealis/borealis_context_manager_impl.h +++ b/chrome/browser/ash/borealis/borealis_context_manager_impl.h
@@ -90,6 +90,12 @@ void OnVmStarted(const vm_tools::concierge::VmStartedSignal& signal) override; void OnVmStopped(const vm_tools::concierge::VmStoppedSignal& signal) override; + void SendShutdownRequest( + base::OnceCallback<void(BorealisShutdownResult)> on_shutdown_callback, + const std::string& vm_name); + + void ShutDownBorealisIfChromeCrashed(); + Profile* const profile_; std::unique_ptr<Startup> in_progress_startup_;
diff --git a/chrome/browser/ash/borealis/borealis_context_manager_unittest.cc b/chrome/browser/ash/borealis/borealis_context_manager_unittest.cc index ca0d2de..e7a1b6a 100644 --- a/chrome/browser/ash/borealis/borealis_context_manager_unittest.cc +++ b/chrome/browser/ash/borealis/borealis_context_manager_unittest.cc
@@ -428,5 +428,15 @@ guest_os::FailureClasses::VmStopped, 1); } +TEST_F(BorealisContextManagerTest, VmShutsDownAfterChromeCrashes) { + chromeos::FakeConciergeClient* fake_concierge_client = + static_cast<chromeos::FakeConciergeClient*>( + chromeos::DBusThreadManager::Get()->GetConciergeClient()); + profile_->set_last_session_exited_cleanly(false); + BorealisContextManagerImpl context_manager(profile_.get()); + task_environment_.RunUntilIdle(); + EXPECT_TRUE(fake_concierge_client->stop_vm_called()); +} + } // namespace } // namespace borealis
diff --git a/chrome/browser/ash/login/app_mode/kiosk_browsertest.cc b/chrome/browser/ash/login/app_mode/kiosk_browsertest.cc index e3510511..8433cc1 100644 --- a/chrome/browser/ash/login/app_mode/kiosk_browsertest.cc +++ b/chrome/browser/ash/login/app_mode/kiosk_browsertest.cc
@@ -1016,7 +1016,7 @@ Profile* app_profile = ProfileManager::GetPrimaryUserProfile(); ASSERT_TRUE(app_profile); EXPECT_FALSE(IdentityManagerFactory::GetForProfile(app_profile) - ->HasPrimaryAccount(signin::ConsentLevel::kNotRequired)); + ->HasPrimaryAccount(signin::ConsentLevel::kSignin)); } IN_PROC_BROWSER_TEST_F(KioskDeviceOwnedTest, PRE_LaunchAppNetworkDown) { @@ -2586,7 +2586,7 @@ Profile* app_profile = ProfileManager::GetPrimaryUserProfile(); ASSERT_TRUE(app_profile); EXPECT_FALSE(IdentityManagerFactory::GetForProfile(app_profile) - ->HasPrimaryAccount(signin::ConsentLevel::kNotRequired)); + ->HasPrimaryAccount(signin::ConsentLevel::kSignin)); // Terminate the app. window->GetBaseWindow()->Close();
diff --git a/chrome/browser/ash/login/encryption_migration_browsertest.cc b/chrome/browser/ash/login/encryption_migration_browsertest.cc index 936d96e..52de088 100644 --- a/chrome/browser/ash/login/encryption_migration_browsertest.cc +++ b/chrome/browser/ash/login/encryption_migration_browsertest.cc
@@ -23,10 +23,10 @@ #include "chrome/browser/ui/webui/chromeos/login/gaia_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" #include "chromeos/dbus/cryptohome/account_identifier_operators.h" -#include "chromeos/dbus/cryptohome/fake_cryptohome_client.h" #include "chromeos/dbus/cryptohome/rpc.pb.h" #include "chromeos/dbus/power/fake_power_manager_client.h" #include "chromeos/dbus/session_manager/fake_session_manager_client.h" +#include "chromeos/dbus/userdataauth/fake_userdataauth_client.h" #include "chromeos/login/auth/stub_authenticator_builder.h" #include "chromeos/login/auth/user_context.h" #include "components/account_id/account_id.h" @@ -73,9 +73,9 @@ void SetUpOnMainThread() override { OobeBaseTest::SetUpOnMainThread(); - FakeCryptohomeClient::Get()->SetEcryptfsUserHome(GetTestCryptohomeId(), - true); - FakeCryptohomeClient::Get()->set_run_default_dircrypto_migration(false); + FakeUserDataAuthClient::Get()->SetEcryptfsUserHome(GetTestCryptohomeId(), + true); + FakeUserDataAuthClient::Get()->set_run_default_dircrypto_migration(false); // Configure encryption migration screen for test. EncryptionMigrationScreen* screen = @@ -122,23 +122,25 @@ EXPECT_EQ( GetTestCryptohomeId(), - FakeCryptohomeClient::Get()->get_id_for_disk_migrated_to_dircrypto()); - EXPECT_FALSE(FakeCryptohomeClient::Get()->minimal_migration()); + FakeUserDataAuthClient::Get()->get_id_for_disk_migrated_to_dircrypto()); + EXPECT_FALSE(FakeUserDataAuthClient::Get()->minimal_migration()); EXPECT_EQ(0, FakePowerManagerClient::Get()->num_request_restart_calls()); // Simulate successful migration - restart should be requested immediately // after success is reported. - FakeCryptohomeClient::Get()->NotifyDircryptoMigrationProgress( - cryptohome::DIRCRYPTO_MIGRATION_INITIALIZING, 0 /*current*/, - 5 /*total*/); + FakeUserDataAuthClient::Get()->NotifyDircryptoMigrationProgress( + ::user_data_auth::DircryptoMigrationStatus:: + DIRCRYPTO_MIGRATION_INITIALIZING, + 0 /*current*/, 5 /*total*/); EXPECT_EQ(0, FakePowerManagerClient::Get()->num_request_restart_calls()); test::OobeJS().ExpectAttributeEQ("indeterminate", kMigrationProgress, true); - FakeCryptohomeClient::Get()->NotifyDircryptoMigrationProgress( - cryptohome::DIRCRYPTO_MIGRATION_IN_PROGRESS, 3 /*current*/, - 5 /*total*/); + FakeUserDataAuthClient::Get()->NotifyDircryptoMigrationProgress( + ::user_data_auth::DircryptoMigrationStatus:: + DIRCRYPTO_MIGRATION_IN_PROGRESS, + 3 /*current*/, 5 /*total*/); EXPECT_EQ(0, FakePowerManagerClient::Get()->num_request_restart_calls()); test::OobeJS().ExpectAttributeEQ("indeterminate", kMigrationProgress, @@ -146,8 +148,9 @@ test::OobeJS().ExpectAttributeEQ("value * 100", kMigrationProgress, 60); test::OobeJS().ExpectAttributeEQ("max", kMigrationProgress, 1); - FakeCryptohomeClient::Get()->NotifyDircryptoMigrationProgress( - cryptohome::DIRCRYPTO_MIGRATION_SUCCESS, 5 /*current*/, 5 /*total*/); + FakeUserDataAuthClient::Get()->NotifyDircryptoMigrationProgress( + ::user_data_auth::DircryptoMigrationStatus::DIRCRYPTO_MIGRATION_SUCCESS, + 5 /*current*/, 5 /*total*/); EXPECT_EQ(1, FakePowerManagerClient::Get()->num_request_restart_calls()); } @@ -198,7 +201,7 @@ WaitForActiveSession(); - EXPECT_FALSE(FakeCryptohomeClient::Get() + EXPECT_FALSE(FakeUserDataAuthClient::Get() ->get_id_for_disk_migrated_to_dircrypto() .has_account_id()); } @@ -216,7 +219,7 @@ test::OobeJS().ExpectVisiblePath(kSkipButton); test::OobeJS().ExpectVisiblePath(kUpgradeButton); - EXPECT_FALSE(FakeCryptohomeClient::Get() + EXPECT_FALSE(FakeUserDataAuthClient::Get() ->get_id_for_disk_migrated_to_dircrypto() .has_account_id()); @@ -271,7 +274,7 @@ test::OobeJS().TapOnPath(kInsufficientSpaceSkipButton); WaitForActiveSession(); - EXPECT_FALSE(FakeCryptohomeClient::Get() + EXPECT_FALSE(FakeUserDataAuthClient::Get() ->get_id_for_disk_migrated_to_dircrypto() .has_account_id()); } @@ -295,7 +298,7 @@ test::OobeJS().TapOnPath(kInsufficientSpaceRestartButton); EXPECT_EQ(1, FakePowerManagerClient::Get()->num_request_restart_calls()); - EXPECT_FALSE(FakeCryptohomeClient::Get() + EXPECT_FALSE(FakeUserDataAuthClient::Get() ->get_id_for_disk_migrated_to_dircrypto() .has_account_id()); } @@ -319,7 +322,7 @@ test::OobeJS().TapOnPath(kInsufficientSpaceRestartButton); EXPECT_EQ(1, FakePowerManagerClient::Get()->num_request_restart_calls()); - EXPECT_FALSE(FakeCryptohomeClient::Get() + EXPECT_FALSE(FakeUserDataAuthClient::Get() ->get_id_for_disk_migrated_to_dircrypto() .has_account_id()); } @@ -336,9 +339,10 @@ EXPECT_EQ( GetTestCryptohomeId(), - FakeCryptohomeClient::Get()->get_id_for_disk_migrated_to_dircrypto()); - FakeCryptohomeClient::Get()->NotifyDircryptoMigrationProgress( - cryptohome::DIRCRYPTO_MIGRATION_FAILED, 5 /*current*/, 5 /*total*/); + FakeUserDataAuthClient::Get()->get_id_for_disk_migrated_to_dircrypto()); + FakeUserDataAuthClient::Get()->NotifyDircryptoMigrationProgress( + ::user_data_auth::DircryptoMigrationStatus::DIRCRYPTO_MIGRATION_FAILED, + 5 /*current*/, 5 /*total*/); EXPECT_EQ(0, FakePowerManagerClient::Get()->num_request_restart_calls()); @@ -376,7 +380,7 @@ test::OobeJS().TapOnPath(kSkipButton); WaitForActiveSession(); - EXPECT_FALSE(FakeCryptohomeClient::Get() + EXPECT_FALSE(FakeUserDataAuthClient::Get() ->get_id_for_disk_migrated_to_dircrypto() .has_account_id()); } @@ -398,7 +402,7 @@ test::OobeJS().ExpectPathDisplayed(false, kSkipButton); test::OobeJS().ExpectPathDisplayed(false, kUpgradeButton); - EXPECT_FALSE(FakeCryptohomeClient::Get() + EXPECT_FALSE(FakeUserDataAuthClient::Get() ->get_id_for_disk_migrated_to_dircrypto() .has_account_id()); } @@ -417,7 +421,7 @@ test::OobeJS().ExpectHiddenPath(kInsufficientSpaceDialog); test::OobeJS().ExpectHiddenPath(kErrorDialog); - EXPECT_FALSE(FakeCryptohomeClient::Get() + EXPECT_FALSE(FakeUserDataAuthClient::Get() ->get_id_for_disk_migrated_to_dircrypto() .has_account_id());
diff --git a/chrome/browser/ash/login/saml/password_sync_token_fetcher.cc b/chrome/browser/ash/login/saml/password_sync_token_fetcher.cc index fa432463..5e801a0 100644 --- a/chrome/browser/ash/login/saml/password_sync_token_fetcher.cc +++ b/chrome/browser/ash/login/saml/password_sync_token_fetcher.cc
@@ -167,7 +167,7 @@ base::BindOnce(&PasswordSyncTokenFetcher::OnAccessTokenFetchComplete, weak_ptr_factory_.GetWeakPtr()), signin::PrimaryAccountAccessTokenFetcher::Mode::kWaitUntilAvailable, - signin::ConsentLevel::kNotRequired); + signin::ConsentLevel::kSignin); } void PasswordSyncTokenFetcher::OnAccessTokenFetchComplete(
diff --git a/chrome/browser/ash/login/screens/encryption_migration_screen.cc b/chrome/browser/ash/login/screens/encryption_migration_screen.cc index ee48fc2..9c4b0d87 100644 --- a/chrome/browser/ash/login/screens/encryption_migration_screen.cc +++ b/chrome/browser/ash/login/screens/encryption_migration_screen.cc
@@ -31,11 +31,13 @@ #include "chrome/browser/profiles/profile.h" #include "chromeos/cryptohome/cryptohome_util.h" #include "chromeos/cryptohome/homedir_methods.h" +#include "chromeos/cryptohome/userdataauth_util.h" #include "chromeos/dbus/cryptohome/cryptohome_client.h" #include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/power/power_manager_client.h" #include "chromeos/dbus/power/power_policy_controller.h" #include "chromeos/dbus/power_manager/power_supply_properties.pb.h" +#include "chromeos/dbus/userdataauth/userdataauth_client.h" #include "components/user_manager/user_manager.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/device_service.h" @@ -250,7 +252,7 @@ } EncryptionMigrationScreen::~EncryptionMigrationScreen() { - cryptohome_observer_.reset(); + userdataauth_observer_.reset(); power_manager_observer_.reset(); if (view_) view_->SetDelegate(nullptr); @@ -484,7 +486,9 @@ initial_battery_percent_ = *current_battery_percent_; // Mount the existing eCryptfs vault to a temporary location for migration. - cryptohome::MountRequest mount; + user_data_auth::MountRequest mount; + *mount.mutable_account() = cryptohome::CreateAccountIdentifierFromAccountId( + user_context_.GetAccountId()); cryptohome::AuthorizationRequest auth_request; mount.set_to_migrate_from_ecryptfs(true); if (IsArcKiosk()) { @@ -492,18 +496,15 @@ } else { auth_request = CreateAuthorizationRequest(); } - CryptohomeClient::Get()->MountEx( - cryptohome::CreateAccountIdentifierFromAccountId( - user_context_.GetAccountId()), - auth_request, mount, - base::BindOnce(&EncryptionMigrationScreen::OnMountExistingVault, - weak_ptr_factory_.GetWeakPtr())); + *mount.mutable_authorization() = auth_request; + UserDataAuthClient::Get()->Mount( + mount, base::BindOnce(&EncryptionMigrationScreen::OnMountExistingVault, + weak_ptr_factory_.GetWeakPtr())); } void EncryptionMigrationScreen::OnMountExistingVault( - base::Optional<cryptohome::BaseReply> reply) { - cryptohome::MountError return_code = - cryptohome::MountExReplyToMountError(reply); + base::Optional<user_data_auth::MountReply> reply) { + cryptohome::MountError return_code = user_data_auth::ReplyToMountError(reply); if (return_code != cryptohome::MOUNT_ERROR_NONE) { RecordMigrationResultMountFailure(IsResumingIncompleteMigration(), IsArcKiosk()); @@ -512,16 +513,16 @@ return; } - cryptohome::MigrateToDircryptoRequest request; - cryptohome_observer_ = std::make_unique< - ScopedObserver<CryptohomeClient, CryptohomeClient::Observer>>(this); - cryptohome_observer_->Add(CryptohomeClient::Get()); - CryptohomeClient::Get()->MigrateToDircrypto( + user_data_auth::StartMigrateToDircryptoRequest request; + *request.mutable_account_id() = cryptohome::CreateAccountIdentifierFromAccountId( - user_context_.GetAccountId()), - request, - base::BindOnce(&EncryptionMigrationScreen::OnMigrationRequested, - weak_ptr_factory_.GetWeakPtr())); + user_context_.GetAccountId()); + userdataauth_observer_ = std::make_unique<base::ScopedObservation< + UserDataAuthClient, UserDataAuthClient::Observer>>(this); + userdataauth_observer_->Observe(UserDataAuthClient::Get()); + UserDataAuthClient::Get()->StartMigrateToDircrypto( + request, base::BindOnce(&EncryptionMigrationScreen::OnMigrationRequested, + weak_ptr_factory_.GetWeakPtr())); } device::mojom::WakeLock* EncryptionMigrationScreen::GetWakeLock() { @@ -553,24 +554,21 @@ const cryptohome::Identification cryptohome_id(user_context_.GetAccountId()); - cryptohome::AccountIdentifier account_id_proto; - account_id_proto.set_account_id(cryptohome_id.id()); - - CryptohomeClient::Get()->RemoveEx( - account_id_proto, - base::BindOnce(&EncryptionMigrationScreen::OnRemoveCryptohome, - weak_ptr_factory_.GetWeakPtr())); + user_data_auth::RemoveRequest request; + request.mutable_identifier()->set_account_id(cryptohome_id.id()); + UserDataAuthClient::Get()->Remove( + request, base::BindOnce(&EncryptionMigrationScreen::OnRemoveCryptohome, + weak_ptr_factory_.GetWeakPtr())); } void EncryptionMigrationScreen::OnRemoveCryptohome( - base::Optional<cryptohome::BaseReply> reply) { - cryptohome::MountError error = BaseReplyToMountError(reply); + base::Optional<user_data_auth::RemoveReply> reply) { + cryptohome::MountError error = user_data_auth::ReplyToMountError(reply); if (error == cryptohome::MOUNT_ERROR_NONE) { RecordRemoveCryptohomeResultSuccess(IsResumingIncompleteMigration(), IsArcKiosk()); } else { - LOG(ERROR) << "Removing cryptohome failed. return code: " - << reply.value().error(); + LOG(ERROR) << "Removing cryptohome failed. return code: " << reply->error(); RecordRemoveCryptohomeResultFailure(IsResumingIncompleteMigration(), IsArcKiosk()); } @@ -601,22 +599,24 @@ } void EncryptionMigrationScreen::DircryptoMigrationProgress( - cryptohome::DircryptoMigrationStatus status, - uint64_t current, - uint64_t total) { - switch (status) { - case cryptohome::DIRCRYPTO_MIGRATION_INITIALIZING: + const ::user_data_auth::DircryptoMigrationProgress& progress) { + switch (progress.status()) { + case user_data_auth::DircryptoMigrationStatus:: + DIRCRYPTO_MIGRATION_INITIALIZING: UpdateUIState(EncryptionMigrationScreenView::MIGRATING); break; - case cryptohome::DIRCRYPTO_MIGRATION_IN_PROGRESS: + case user_data_auth::DircryptoMigrationStatus:: + DIRCRYPTO_MIGRATION_IN_PROGRESS: UpdateUIState(EncryptionMigrationScreenView::MIGRATING); - view_->SetMigrationProgress(static_cast<double>(current) / total); + view_->SetMigrationProgress( + static_cast<double>(progress.current_bytes()) / + progress.total_bytes()); break; - case cryptohome::DIRCRYPTO_MIGRATION_SUCCESS: + case user_data_auth::DircryptoMigrationStatus::DIRCRYPTO_MIGRATION_SUCCESS: RecordMigrationResultSuccess(IsResumingIncompleteMigration(), IsArcKiosk()); // Stop listening to the progress updates. - cryptohome_observer_.reset(); + userdataauth_observer_.reset(); // If the battery level decreased during migration, record the consumed // battery level. if (current_battery_percent_ && @@ -631,11 +631,11 @@ power_manager::REQUEST_RESTART_OTHER, "login encryption migration success"); break; - case cryptohome::DIRCRYPTO_MIGRATION_FAILED: + case user_data_auth::DircryptoMigrationStatus::DIRCRYPTO_MIGRATION_FAILED: RecordMigrationResultGeneralFailure(IsResumingIncompleteMigration(), IsArcKiosk()); // Stop listening to the progress updates. - cryptohome_observer_.reset(); + userdataauth_observer_.reset(); // Shows error screen after removing user directory is completed. RemoveCryptohome(); break; @@ -644,8 +644,11 @@ } } -void EncryptionMigrationScreen::OnMigrationRequested(bool success) { - if (!success) { +void EncryptionMigrationScreen::OnMigrationRequested( + base::Optional<user_data_auth::StartMigrateToDircryptoReply> reply) { + if (!reply.has_value() || + reply->error() != + user_data_auth::CryptohomeErrorCode::CRYPTOHOME_ERROR_NOT_SET) { LOG(ERROR) << "Requesting MigrateToDircrypto failed."; RecordMigrationResultRequestFailure(IsResumingIncompleteMigration(), IsArcKiosk());
diff --git a/chrome/browser/ash/login/screens/encryption_migration_screen.h b/chrome/browser/ash/login/screens/encryption_migration_screen.h index a9acb6d..7abf1157 100644 --- a/chrome/browser/ash/login/screens/encryption_migration_screen.h +++ b/chrome/browser/ash/login/screens/encryption_migration_screen.h
@@ -11,6 +11,7 @@ #include "base/callback_forward.h" #include "base/macros.h" #include "base/optional.h" +#include "base/scoped_observation.h" #include "base/scoped_observer.h" #include "chrome/browser/ash/login/screens/base_screen.h" #include "chrome/browser/ash/login/screens/encryption_migration_mode.h" @@ -19,6 +20,7 @@ #include "chromeos/dbus/cryptohome/cryptohome_client.h" #include "chromeos/dbus/cryptohome/rpc.pb.h" #include "chromeos/dbus/power/power_manager_client.h" +#include "chromeos/dbus/userdataauth/userdataauth_client.h" #include "chromeos/login/auth/user_context.h" #include "mojo/public/cpp/bindings/remote.h" #include "services/device/public/mojom/wake_lock.mojom.h" @@ -32,7 +34,7 @@ class EncryptionMigrationScreen : public BaseScreen, public PowerManagerClient::Observer, - public CryptohomeClient::Observer { + public UserDataAuthClient::Observer { public: using TView = EncryptionMigrationScreenView; @@ -81,10 +83,9 @@ // PowerManagerClient::Observer implementation: void PowerChanged(const power_manager::PowerSupplyProperties& proto) override; - // CryptohomeClient::Observer implementation: - void DircryptoMigrationProgress(cryptohome::DircryptoMigrationStatus status, - uint64_t current, - uint64_t total) override; + // UserDataAuthClient::Observer implementation: + void DircryptoMigrationProgress( + const ::user_data_auth::DircryptoMigrationProgress& progress) override; // Handlers for user actions. void HandleStartMigration(); void HandleSkipMigration(); @@ -99,10 +100,10 @@ void OnGetAvailableStorage(int64_t size); void WaitBatteryAndMigrate(); void StartMigration(); - void OnMountExistingVault(base::Optional<cryptohome::BaseReply> reply); + void OnMountExistingVault(base::Optional<user_data_auth::MountReply> reply); // Removes cryptohome and shows the error screen after the removal finishes. void RemoveCryptohome(); - void OnRemoveCryptohome(base::Optional<cryptohome::BaseReply> reply); + void OnRemoveCryptohome(base::Optional<user_data_auth::RemoveReply> reply); // Creates authorization request for MountEx method using |user_context_|. cryptohome::AuthorizationRequest CreateAuthorizationRequest(); @@ -111,7 +112,8 @@ bool IsArcKiosk() const; // Handlers for cryptohome API callbacks. - void OnMigrationRequested(bool success); + void OnMigrationRequested( + base::Optional<user_data_auth::StartMigrateToDircryptoReply> reply); // Records UMA about visible screen after delay. void OnDelayedRecordVisibleScreen( @@ -159,8 +161,9 @@ FreeDiskSpaceFetcher free_disk_space_fetcher_; - std::unique_ptr<ScopedObserver<CryptohomeClient, CryptohomeClient::Observer>> - cryptohome_observer_; + std::unique_ptr< + base::ScopedObservation<UserDataAuthClient, UserDataAuthClient::Observer>> + userdataauth_observer_; std::unique_ptr< ScopedObserver<PowerManagerClient, PowerManagerClient::Observer>>
diff --git a/chrome/browser/ash/login/screens/encryption_migration_screen_unittest.cc b/chrome/browser/ash/login/screens/encryption_migration_screen_unittest.cc index 694ba453..6c2213a 100644 --- a/chrome/browser/ash/login/screens/encryption_migration_screen_unittest.cc +++ b/chrome/browser/ash/login/screens/encryption_migration_screen_unittest.cc
@@ -16,9 +16,9 @@ #include "chrome/browser/ui/webui/chromeos/login/encryption_migration_screen_handler.h" #include "chromeos/cryptohome/homedir_methods.h" #include "chromeos/dbus/cryptohome/account_identifier_operators.h" -#include "chromeos/dbus/cryptohome/fake_cryptohome_client.h" #include "chromeos/dbus/power/fake_power_manager_client.h" #include "chromeos/dbus/power/power_policy_controller.h" +#include "chromeos/dbus/userdataauth/fake_userdataauth_client.h" #include "chromeos/login/auth/key.h" #include "chromeos/login/auth/user_context.h" #include "components/account_id/account_id.h" @@ -126,8 +126,8 @@ base::WrapUnique(mock_user_manager)); // Set up fake dbus clients. - CryptohomeClient::InitializeFake(); - fake_cryptohome_client_ = FakeCryptohomeClient::Get(); + UserDataAuthClient::InitializeFake(); + fake_userdataauth_client_ = FakeUserDataAuthClient::Get(); PowerManagerClient::InitializeFake(); PowerPolicyController::Initialize(PowerManagerClient::Get()); @@ -152,7 +152,7 @@ PowerPolicyController::Shutdown(); PowerManagerClient::Shutdown(); - CryptohomeClient::Shutdown(); + UserDataAuthClient::Shutdown(); } protected: @@ -166,7 +166,7 @@ base::test::TaskEnvironment task_environment_; std::unique_ptr<user_manager::ScopedUserManager> scoped_user_manager_enabler_; - FakeCryptohomeClient* fake_cryptohome_client_ = nullptr; // unowned + FakeUserDataAuthClient* fake_userdataauth_client_ = nullptr; // unowned // Will be set to true in ContinueLogin. bool skip_migration_callback_called_ = false;
diff --git a/chrome/browser/ash/login/screens/locale_switch_screen.cc b/chrome/browser/ash/login/screens/locale_switch_screen.cc index 06ee9a91..1eef7b8 100644 --- a/chrome/browser/ash/login/screens/locale_switch_screen.cc +++ b/chrome/browser/ash/login/screens/locale_switch_screen.cc
@@ -97,7 +97,7 @@ } CoreAccountId primary_account_id = - identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kNotRequired); + identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kSignin); if (!identity_manager->HasAccountWithRefreshToken(primary_account_id)) { exit_callback_.Run(Result::LOCALE_FETCH_FAILED);
diff --git a/chrome/browser/ash/login/screens/sync_consent_screen.cc b/chrome/browser/ash/login/screens/sync_consent_screen.cc index bca2ba8..87176d4 100644 --- a/chrome/browser/ash/login/screens/sync_consent_screen.cc +++ b/chrome/browser/ash/login/screens/sync_consent_screen.cc
@@ -230,7 +230,7 @@ // Set a "sync-consented" primary account. See comment above. auto* identity_manager = IdentityManagerFactory::GetForProfile(profile_); CoreAccountId account_id = - identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kNotRequired); + identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kSignin); DCHECK(!account_id.empty()); identity_manager->GetPrimaryAccountMutator()->SetPrimaryAccount(account_id); @@ -345,7 +345,7 @@ // The user might not consent to browser sync, so use the "unconsented" ID. const CoreAccountId& google_account_id = IdentityManagerFactory::GetForProfile(profile_)->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired); + signin::ConsentLevel::kSignin); // TODO(alemate): Support unified_consent_enabled sync_pb::UserConsentTypes::SyncConsent sync_consent; sync_consent.set_confirmation_grd_id(consent_confirmation);
diff --git a/chrome/browser/ash/login/session/user_session_manager.cc b/chrome/browser/ash/login/session/user_session_manager.cc index 9fd1386..0dfa094b 100644 --- a/chrome/browser/ash/login/session/user_session_manager.cc +++ b/chrome/browser/ash/login/session/user_session_manager.cc
@@ -642,8 +642,7 @@ auto* identity_manager = IdentityManagerFactory::GetForProfile(user_profile); const bool account_id_valid = identity_manager && - !identity_manager->GetPrimaryAccountId(ConsentLevel::kNotRequired) - .empty(); + !identity_manager->GetPrimaryAccountId(ConsentLevel::kSignin).empty(); if (!account_id_valid) LOG(ERROR) << "No account is associated with sign-in manager on restore."; @@ -945,8 +944,7 @@ user_status = (identity_manager && identity_manager->HasAccountWithRefreshTokenInPersistentErrorState( - identity_manager - ->GetPrimaryAccountInfo(ConsentLevel::kNotRequired) + identity_manager->GetPrimaryAccountInfo(ConsentLevel::kSignin) .account_id)) ? user_manager::User::OAUTH2_TOKEN_STATUS_INVALID : user_manager::User::OAUTH2_TOKEN_STATUS_VALID; @@ -1333,16 +1331,15 @@ // profile prefs failed to save or the prefs are corrupted by a crash then // the IdentityManager will start up without a primary account. See test // CrashRestoreComplexTest.RestoreSessionForThreeUsers. - if (!identity_manager->HasPrimaryAccount(ConsentLevel::kNotRequired)) { + if (!identity_manager->HasPrimaryAccount(ConsentLevel::kSignin)) { // Set the account without recording browser sync consent. identity_manager->GetPrimaryAccountMutator() ->SetUnconsentedPrimaryAccount(account_info->account_id); } - CHECK(identity_manager->HasPrimaryAccount(ConsentLevel::kNotRequired)); + CHECK(identity_manager->HasPrimaryAccount(ConsentLevel::kSignin)); CHECK_EQ( - identity_manager->GetPrimaryAccountInfo(ConsentLevel::kNotRequired) - .gaia, + identity_manager->GetPrimaryAccountInfo(ConsentLevel::kSignin).gaia, gaia_id); } else { // Set a primary account here because the profile might have been @@ -1358,7 +1355,7 @@ } CoreAccountId account_id = - identity_manager->GetPrimaryAccountId(ConsentLevel::kNotRequired); + identity_manager->GetPrimaryAccountId(ConsentLevel::kSignin); VLOG(1) << "Seed IdentityManager with the authenticated account info, " << "success=" << !account_id.empty();
diff --git a/chrome/browser/ash/login/signin/auth_error_observer.cc b/chrome/browser/ash/login/signin/auth_error_observer.cc index 8bea583..fc4da71 100644 --- a/chrome/browser/ash/login/signin/auth_error_observer.cc +++ b/chrome/browser/ash/login/signin/auth_error_observer.cc
@@ -72,8 +72,7 @@ signin::IdentityManager* identity_manager = IdentityManagerFactory::GetForProfile(profile_); HandleAuthError(identity_manager->GetErrorStateOfRefreshTokenForAccount( - identity_manager->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired))); + identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kSignin))); } void AuthErrorObserver::HandleAuthError(
diff --git a/chrome/browser/ash/login/signin/oauth2_login_manager.cc b/chrome/browser/ash/login/signin/oauth2_login_manager.cc index 5117fa0..245fa785 100644 --- a/chrome/browser/ash/login/signin/oauth2_login_manager.cc +++ b/chrome/browser/ash/login/signin/oauth2_login_manager.cc
@@ -95,7 +95,7 @@ user_manager::UserManager::Get()->SaveUserOAuthStatus( AccountId::FromUserEmail( identity_manager - ->GetPrimaryAccountInfo(signin::ConsentLevel::kNotRequired) + ->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin) .email), user_manager::User::OAUTH_TOKEN_STATUS_UNKNOWN); } @@ -147,8 +147,7 @@ CoreAccountId OAuth2LoginManager::GetUnconsentedPrimaryAccountId() { // Use the primary ID whether or not the user has consented to browser sync. const CoreAccountId primary_account_id = - GetIdentityManager()->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired); + GetIdentityManager()->GetPrimaryAccountId(signin::ConsentLevel::kSignin); LOG_IF(ERROR, primary_account_id.empty()) << "Primary account id is empty."; return primary_account_id; } @@ -158,11 +157,9 @@ signin::IdentityManager* identity_manager = GetIdentityManager(); // The primary account must be already set at this point. - DCHECK( - identity_manager->HasPrimaryAccount(signin::ConsentLevel::kNotRequired)); + DCHECK(identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSignin)); const CoreAccountInfo primary_account_info = - identity_manager->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin); // We already have the refresh token at this // point, and will not get any additional callbacks from Account Manager or
diff --git a/chrome/browser/ash/login/signin/signin_error_notifier_ash.cc b/chrome/browser/ash/login/signin/signin_error_notifier_ash.cc index 85050a92..ac4f3d5 100644 --- a/chrome/browser/ash/login/signin/signin_error_notifier_ash.cc +++ b/chrome/browser/ash/login/signin/signin_error_notifier_ash.cc
@@ -178,8 +178,7 @@ const CoreAccountId error_account_id = error_controller_->error_account_id(); const CoreAccountId primary_account_id = - identity_manager_->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired); + identity_manager_->GetPrimaryAccountId(signin::ConsentLevel::kSignin); if (error_account_id == primary_account_id) { RecordReauthReason(account_id, chromeos::ReauthReason::SYNC_FAILED); HandleDeviceAccountError();
diff --git a/chrome/browser/ash/login/signin/token_handle_fetcher.cc b/chrome/browser/ash/login/signin/token_handle_fetcher.cc index 89285f0..64e693a3 100644 --- a/chrome/browser/ash/login/signin/token_handle_fetcher.cc +++ b/chrome/browser/ash/login/signin/token_handle_fetcher.cc
@@ -62,7 +62,7 @@ // This class doesn't care about browser sync consent. if (!identity_manager_->HasAccountWithRefreshToken( identity_manager_->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired))) { + signin::ConsentLevel::kSignin))) { profile_shutdown_subscription_ = TokenHandleFetcherShutdownNotifierFactory::GetInstance() ->Get(profile) @@ -87,7 +87,7 @@ base::BindOnce(&TokenHandleFetcher::OnAccessTokenFetchComplete, base::Unretained(this)), signin::PrimaryAccountAccessTokenFetcher::Mode::kWaitUntilAvailable, - signin::ConsentLevel::kNotRequired); + signin::ConsentLevel::kSignin); } void TokenHandleFetcher::OnAccessTokenFetchComplete(
diff --git a/chrome/browser/ash/login/users/avatar/user_image_manager_browsertest.cc b/chrome/browser/ash/login/users/avatar/user_image_manager_browsertest.cc index 97cdc72..6ac9ad1 100644 --- a/chrome/browser/ash/login/users/avatar/user_image_manager_browsertest.cc +++ b/chrome/browser/ash/login/users/avatar/user_image_manager_browsertest.cc
@@ -258,8 +258,8 @@ void UpdatePrimaryAccountInfo(Profile* profile) { auto* identity_manager = IdentityManagerFactory::GetForProfile(profile); // Sync consent level doesn't matter here. - CoreAccountInfo core_info = identity_manager->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + CoreAccountInfo core_info = + identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin); signin::SetRefreshTokenForAccount(identity_manager, core_info.account_id, kRandomTokenStrForTesting); AccountInfo account_info;
diff --git a/chrome/browser/ash/plugin_vm/plugin_vm_drive_image_download_service.cc b/chrome/browser/ash/plugin_vm/plugin_vm_drive_image_download_service.cc index dd4af2f..5e541f0 100644 --- a/chrome/browser/ash/plugin_vm/plugin_vm_drive_image_download_service.cc +++ b/chrome/browser/ash/plugin_vm/plugin_vm_drive_image_download_service.cc
@@ -140,8 +140,8 @@ identity_manager, url_loader_factory, blocking_task_runner.get(), base_url, base_thumbnail_url, std::string{}, kPluginVmNetworkTrafficAnnotation); - drive_service_->Initialize(identity_manager->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired)); + drive_service_->Initialize( + identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kSignin)); } void PluginVmDriveImageDownloadService::StartDownload(
diff --git a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc index dec02fc..f80828c 100644 --- a/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc +++ b/chrome/browser/browsing_data/chrome_browsing_data_remover_delegate.cc
@@ -558,7 +558,7 @@ } } - HeavyAdService* heavy_ad_service = + heavy_ad_intervention::HeavyAdService* heavy_ad_service = HeavyAdServiceFactory::GetForBrowserContext(profile_); if (heavy_ad_service && heavy_ad_service->heavy_ad_blocklist()) { heavy_ad_service->heavy_ad_blocklist()->ClearBlockList(delete_begin_,
diff --git a/chrome/browser/chrome_browser_interface_binders.cc b/chrome/browser/chrome_browser_interface_binders.cc index e1087c20..8f78a67 100644 --- a/chrome/browser/chrome_browser_interface_binders.cc +++ b/chrome/browser/chrome_browser_interface_binders.cc
@@ -304,8 +304,7 @@ frame_host->GetProcess()->GetBrowserContext()); auto* identity_manager = IdentityManagerFactory::GetForProfile(profile); ProfileManager* profile_manager = g_browser_process->profile_manager(); - if (!identity_manager->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired) && + if (!identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSignin) && profile_manager->GetNumberOfProfiles() <= 1) { return; }
diff --git a/chrome/browser/chromeos/child_accounts/secondary_account_consent_logger.cc b/chrome/browser/chromeos/child_accounts/secondary_account_consent_logger.cc index 777e5ae1..962e97e6 100644 --- a/chrome/browser/chromeos/child_accounts/secondary_account_consent_logger.cc +++ b/chrome/browser/chromeos/child_accounts/secondary_account_consent_logger.cc
@@ -108,8 +108,8 @@ const std::string& parent_obfuscated_gaia_id, const std::string& re_auth_proof_token, base::OnceCallback<void(Result)> callback) - : primary_account_id_(identity_manager->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired)), + : primary_account_id_( + identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kSignin)), identity_manager_(identity_manager), url_loader_factory_(std::move(url_loader_factory)), pref_service_(pref_service), @@ -132,7 +132,7 @@ base::Unretained(this)), signin::PrimaryAccountAccessTokenFetcher::Mode:: kWaitUntilAvailable /*mode*/, - signin::ConsentLevel::kNotRequired /*consent*/); + signin::ConsentLevel::kSignin /*consent*/); } void SecondaryAccountConsentLogger::OnAccessTokenFetchComplete(
diff --git a/chrome/browser/chromeos/child_accounts/secondary_account_consent_logger_unittest.cc b/chrome/browser/chromeos/child_accounts/secondary_account_consent_logger_unittest.cc index 9ab377ae..0510e9e0 100644 --- a/chrome/browser/chromeos/child_accounts/secondary_account_consent_logger_unittest.cc +++ b/chrome/browser/chromeos/child_accounts/secondary_account_consent_logger_unittest.cc
@@ -109,7 +109,7 @@ void WaitForAccessTokenRequestAndIssueToken() { identity_test_env_.WaitForAccessTokenRequestIfNecessaryAndRespondWithToken( identity_test_env_.identity_manager()->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired), + signin::ConsentLevel::kSignin), "access_token", base::Time::Now() + base::TimeDelta::FromHours(1)); } @@ -163,7 +163,7 @@ SecondaryAccountConsentLogger::Result::kTokenError)); identity_test_env_.WaitForAccessTokenRequestIfNecessaryAndRespondWithError( identity_test_env_.identity_manager()->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired), + signin::ConsentLevel::kSignin), GoogleServiceAuthError(GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS)); }
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_drive.cc b/chrome/browser/chromeos/extensions/file_manager/private_api_drive.cc index 5c246794..41d57571 100644 --- a/chrome/browser/chromeos/extensions/file_manager/private_api_drive.cc +++ b/chrome/browser/chromeos/extensions/file_manager/private_api_drive.cc
@@ -861,7 +861,7 @@ IdentityManagerFactory::GetForProfile(chrome_details.GetProfile()); // This class doesn't care about browser sync consent. const CoreAccountId& account_id = - identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kNotRequired); + identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kSignin); std::vector<std::string> scopes; scopes.emplace_back("https://www.googleapis.com/auth/drive.readonly");
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc b/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc index ba56492..94e8fe1 100644 --- a/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc +++ b/chrome/browser/chromeos/extensions/file_manager/private_api_misc.cc
@@ -379,7 +379,7 @@ // "Unconsented" because this class doesn't care about browser sync consent. auth_service_ = std::make_unique<google_apis::AuthService>( identity_manager, - identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kNotRequired), + identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kSignin), g_browser_process->system_network_context_manager() ->GetSharedURLLoaderFactory(), scopes);
diff --git a/chrome/browser/chromeos/file_manager/file_manager_string_util.cc b/chrome/browser/chromeos/file_manager/file_manager_string_util.cc index 9e652cb..f432993 100644 --- a/chrome/browser/chromeos/file_manager/file_manager_string_util.cc +++ b/chrome/browser/chromeos/file_manager/file_manager_string_util.cc
@@ -1074,15 +1074,9 @@ dict->SetBoolean("FILES_SINGLE_PARTITION_FORMAT_ENABLED", base::FeatureList::IsEnabled( chromeos::features::kFilesSinglePartitionFormat)); - dict->SetBoolean( - "FILES_JS_MODULES_ENABLED", - base::FeatureList::IsEnabled(chromeos::features::kFilesJsModules)); - dict->SetBoolean( - "AUDIO_PLAYER_JS_MODULES_ENABLED", - base::FeatureList::IsEnabled(chromeos::features::kAudioPlayerJsModules)); - dict->SetBoolean( - "VIDEO_PLAYER_JS_MODULES_ENABLED", - base::FeatureList::IsEnabled(chromeos::features::kVideoPlayerJsModules)); + dict->SetBoolean("FILES_JS_MODULES_ENABLED", true); + dict->SetBoolean("AUDIO_PLAYER_JS_MODULES_ENABLED", true); + dict->SetBoolean("VIDEO_PLAYER_JS_MODULES_ENABLED", true); dict->SetString("UI_LOCALE", locale); }
diff --git a/chrome/browser/chromeos/file_manager/url_util.cc b/chrome/browser/chromeos/file_manager/url_util.cc index 872b716..78a6938 100644 --- a/chrome/browser/chromeos/file_manager/url_util.cc +++ b/chrome/browser/chromeos/file_manager/url_util.cc
@@ -9,7 +9,6 @@ #include <memory> #include <utility> -#include "ash/constants/ash_features.h" #include "base/json/json_writer.h" #include "base/values.h" #include "chrome/browser/chromeos/file_manager/app_id.h" @@ -66,11 +65,7 @@ } // namespace GURL GetFileManagerMainPageUrl() { - if (base::FeatureList::IsEnabled(chromeos::features::kFilesJsModules)) { - return GetFileManagerUrl("/main_modules.html"); - } else { - return GetFileManagerUrl("/main.html"); - } + return GetFileManagerUrl("/main_modules.html"); } GURL GetFileManagerMainPageUrlWithParams(
diff --git a/chrome/browser/chromeos/file_manager/url_util_unittest.cc b/chrome/browser/chromeos/file_manager/url_util_unittest.cc index bfbc3e2..70fa2a7 100644 --- a/chrome/browser/chromeos/file_manager/url_util_unittest.cc +++ b/chrome/browser/chromeos/file_manager/url_util_unittest.cc
@@ -6,7 +6,6 @@ #include <memory> -#include "ash/constants/ash_features.h" #include "base/files/file_path.h" #include "base/json/json_reader.h" #include "base/json/json_writer.h" @@ -38,14 +37,9 @@ } TEST(FileManagerUrlUtilTest, GetFileManagerMainPageUrl) { - if (base::FeatureList::IsEnabled(chromeos::features::kFilesJsModules)) { - EXPECT_EQ( - "chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj/main_modules.html", - GetFileManagerMainPageUrl().spec()); - } else { - EXPECT_EQ("chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj/main.html", - GetFileManagerMainPageUrl().spec()); - } + EXPECT_EQ( + "chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj/main_modules.html", + GetFileManagerMainPageUrl().spec()); } TEST(FileManagerUrlUtilTest, GetFileManagerMainPageUrlWithParams_NoFileTypes) { @@ -60,11 +54,7 @@ ); EXPECT_EQ(extensions::kExtensionScheme, url.scheme()); EXPECT_EQ("hhaomjibdihmijegdhdafkllkbggdgoj", url.host()); - if (base::FeatureList::IsEnabled(chromeos::features::kFilesJsModules)) { - EXPECT_EQ("/main_modules.html", url.path()); - } else { - EXPECT_EQ("/main.html", url.path()); - } + EXPECT_EQ("/main_modules.html", url.path()); // Confirm that "%20" is used instead of "+" in the query. EXPECT_TRUE(url.query().find("+") == std::string::npos); EXPECT_TRUE(url.query().find("%20") != std::string::npos); @@ -112,11 +102,7 @@ ); EXPECT_EQ(extensions::kExtensionScheme, url.scheme()); EXPECT_EQ("hhaomjibdihmijegdhdafkllkbggdgoj", url.host()); - if (base::FeatureList::IsEnabled(chromeos::features::kFilesJsModules)) { - EXPECT_EQ("/main_modules.html", url.path()); - } else { - EXPECT_EQ("/main.html", url.path()); - } + EXPECT_EQ("/main_modules.html", url.path()); // Confirm that "%20" is used instead of "+" in the query. EXPECT_TRUE(url.query().find("+") == std::string::npos); EXPECT_TRUE(url.query().find("%20") != std::string::npos);
diff --git a/chrome/browser/chromeos/policy/device_local_account_browsertest.cc b/chrome/browser/chromeos/policy/device_local_account_browsertest.cc index 1bac6d6..b9c09f4 100644 --- a/chrome/browser/chromeos/policy/device_local_account_browsertest.cc +++ b/chrome/browser/chromeos/policy/device_local_account_browsertest.cc
@@ -1028,7 +1028,7 @@ ASSERT_TRUE(profile); EXPECT_FALSE( IdentityManagerFactory::GetForProfile(profile)->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired)); + signin::ConsentLevel::kSignin)); } IN_PROC_BROWSER_TEST_F(DeviceLocalAccountTest, FullscreenAllowed) {
diff --git a/chrome/browser/chromeos/policy/lock_to_single_user_manager.cc b/chrome/browser/chromeos/policy/lock_to_single_user_manager.cc index 6094a1bf..a89ad2f 100644 --- a/chrome/browser/chromeos/policy/lock_to_single_user_manager.cc +++ b/chrome/browser/chromeos/policy/lock_to_single_user_manager.cc
@@ -14,8 +14,8 @@ #include "chrome/browser/chromeos/crostini/crostini_manager.h" #include "chrome/browser/lifetime/application_lifetime.h" #include "chromeos/cryptohome/cryptohome_parameters.h" -#include "chromeos/dbus/cryptohome/cryptohome_client.h" #include "chromeos/dbus/dbus_thread_manager.h" +#include "chromeos/dbus/userdataauth/cryptohome_misc_client.h" #include "chromeos/login/session/session_termination_manager.h" #include "chromeos/settings/cros_settings_names.h" #include "components/policy/proto/chrome_device_policy.pb.h" @@ -23,10 +23,9 @@ using RebootOnSignOutPolicy = enterprise_management::DeviceRebootOnUserSignoutProto; using RebootOnSignOutRequest = - cryptohome::LockToSingleUserMountUntilRebootRequest; -using RebootOnSignOutReply = cryptohome::LockToSingleUserMountUntilRebootReply; -using RebootOnSignOutResult = - cryptohome::LockToSingleUserMountUntilRebootResult; + user_data_auth::LockToSingleUserMountUntilRebootRequest; +using RebootOnSignOutReply = + user_data_auth::LockToSingleUserMountUntilRebootReply; namespace policy { @@ -144,7 +143,7 @@ user_manager::UserManager::Get()->GetPrimaryUser()->GetAccountId()); RebootOnSignOutRequest request; request.mutable_account_id()->CopyFrom(account_id); - chromeos::CryptohomeClient::Get()->LockToSingleUserMountUntilReboot( + chromeos::CryptohomeMiscClient::Get()->LockToSingleUserMountUntilReboot( request, base::BindOnce( &LockToSingleUserManager::OnLockToSingleUserMountUntilRebootDone, @@ -152,8 +151,8 @@ } void LockToSingleUserManager::OnLockToSingleUserMountUntilRebootDone( - base::Optional<cryptohome::BaseReply> reply) { - if (!reply || !reply->HasExtension(RebootOnSignOutReply::reply)) { + base::Optional<RebootOnSignOutReply> reply) { + if (!reply.has_value()) { LOG(ERROR) << "Signing out user: no reply from " "LockToSingleUserMountUntilReboot D-Bus call."; chrome::AttemptUserExit(); @@ -161,17 +160,15 @@ } // Force user logout if failed to lock the device to single user mount. - const RebootOnSignOutReply extension = - reply->GetExtension(RebootOnSignOutReply::reply); - - if (extension.result() == RebootOnSignOutResult::SUCCESS || - extension.result() == RebootOnSignOutResult::PCR_ALREADY_EXTENDED) { + if (reply->error() == + user_data_auth::CryptohomeErrorCode::CRYPTOHOME_ERROR_NOT_SET || + reply->error() == user_data_auth::CRYPTOHOME_ERROR_PCR_ALREADY_EXTENDED) { // The device is locked to single user on TPM level. Update the cache in // SessionTerminationManager, so that it triggers reboot on sign out. chromeos::SessionTerminationManager::Get()->SetDeviceLockedToSingleUser(); } else { LOG(ERROR) << "Signing out user: failed to lock device to single user: " - << extension.result(); + << reply->error(); chrome::AttemptUserExit(); } }
diff --git a/chrome/browser/chromeos/policy/lock_to_single_user_manager.h b/chrome/browser/chromeos/policy/lock_to_single_user_manager.h index eeaf53e..97a0665c 100644 --- a/chrome/browser/chromeos/policy/lock_to_single_user_manager.h +++ b/chrome/browser/chromeos/policy/lock_to_single_user_manager.h
@@ -12,7 +12,7 @@ #include "chrome/browser/ash/arc/session/arc_session_manager.h" #include "chrome/browser/chromeos/vm_starting_observer.h" #include "chromeos/dbus/concierge_client.h" -#include "chromeos/dbus/cryptohome/rpc.pb.h" +#include "chromeos/dbus/cryptohome/UserDataAuth.pb.h" #include "components/user_manager/user_manager.h" namespace policy { @@ -60,7 +60,8 @@ // Processes the response from D-Bus call. void OnLockToSingleUserMountUntilRebootDone( - base::Optional<cryptohome::BaseReply> reply); + base::Optional<user_data_auth::LockToSingleUserMountUntilRebootReply> + reply); // true if locking is required when DbusNotifyVmStarting() is called bool lock_to_single_user_on_dbus_call_ = false;
diff --git a/chrome/browser/chromeos/policy/lock_to_single_user_manager_unittest.cc b/chrome/browser/chromeos/policy/lock_to_single_user_manager_unittest.cc index 8a03155f..18a17c9 100644 --- a/chrome/browser/chromeos/policy/lock_to_single_user_manager_unittest.cc +++ b/chrome/browser/chromeos/policy/lock_to_single_user_manager_unittest.cc
@@ -14,9 +14,9 @@ #include "chrome/browser/ash/login/users/fake_chrome_user_manager.h" #include "chrome/browser/ui/app_list/arc/arc_app_test.h" #include "chrome/test/base/browser_with_test_window_test.h" -#include "chromeos/dbus/cryptohome/fake_cryptohome_client.h" #include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/fake_concierge_client.h" +#include "chromeos/dbus/userdataauth/fake_cryptohome_misc_client.h" #include "chromeos/login/session/session_termination_manager.h" #include "chromeos/settings/cros_settings_names.h" #include "components/account_id/account_id.h" @@ -42,7 +42,7 @@ arc::SetArcAvailableCommandLineForTesting( base::CommandLine::ForCurrentProcess()); - chromeos::CryptohomeClient::InitializeFake(); + chromeos::CryptohomeMiscClient::InitializeFake(); lock_to_single_user_manager_ = std::make_unique<LockToSingleUserManager>(); BrowserWithTestWindowTest::SetUp(); @@ -71,7 +71,7 @@ arc_service_manager_->set_browser_context(nullptr); arc_service_manager_.reset(); BrowserWithTestWindowTest::TearDown(); - chromeos::CryptohomeClient::Shutdown(); + chromeos::CryptohomeMiscClient::Shutdown(); chromeos::DBusThreadManager::Shutdown(); } @@ -127,7 +127,7 @@ } bool is_device_locked() const { - return chromeos::FakeCryptohomeClient::Get() + return chromeos::FakeCryptohomeMiscClient::Get() ->is_device_locked_to_single_user(); } @@ -235,8 +235,8 @@ } TEST_F(LockToSingleUserManagerTest, DbusCallErrorTest) { - chromeos::FakeCryptohomeClient::Get()->set_cryptohome_error( - cryptohome::CRYPTOHOME_ERROR_KEY_NOT_FOUND); + chromeos::FakeCryptohomeMiscClient::Get()->set_cryptohome_error( + ::user_data_auth::CryptohomeErrorCode::CRYPTOHOME_ERROR_KEY_NOT_FOUND); SetPolicyValue(enterprise_management::DeviceRebootOnUserSignoutProto::ALWAYS); LogInUser(false /* is_affiliated */); EXPECT_FALSE(is_device_locked());
diff --git a/chrome/browser/chromeos/policy/user_cloud_policy_token_forwarder.cc b/chrome/browser/chromeos/policy/user_cloud_policy_token_forwarder.cc index 99be3355..a7310df 100644 --- a/chrome/browser/chromeos/policy/user_cloud_policy_token_forwarder.cc +++ b/chrome/browser/chromeos/policy/user_cloud_policy_token_forwarder.cc
@@ -114,7 +114,7 @@ &UserCloudPolicyTokenForwarder::OnAccessTokenFetchCompleted, base::Unretained(this)), signin::PrimaryAccountAccessTokenFetcher::Mode::kWaitUntilAvailable, - signin::ConsentLevel::kNotRequired); + signin::ConsentLevel::kSignin); } void UserCloudPolicyTokenForwarder::OnAccessTokenFetchCompleted(
diff --git a/chrome/browser/chromeos/sync/turn_sync_on_helper.cc b/chrome/browser/chromeos/sync/turn_sync_on_helper.cc index 71baba3..67ebc2fd 100644 --- a/chrome/browser/chromeos/sync/turn_sync_on_helper.cc +++ b/chrome/browser/chromeos/sync/turn_sync_on_helper.cc
@@ -204,8 +204,8 @@ } if (consent_service) consent_service->SetUrlKeyedAnonymizedDataCollectionEnabled(true); - CoreAccountId account_id = identity_manager_->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired); + CoreAccountId account_id = + identity_manager_->GetPrimaryAccountId(signin::ConsentLevel::kSignin); DCHECK(!account_id.empty()); // TODO(https://crbug.com/1046746): Switch to consent-aware API // PrimaryAccountMutator::GrantSyncConsent() when that exists.
diff --git a/chrome/browser/chromeos/ui/low_disk_notification.cc b/chrome/browser/chromeos/ui/low_disk_notification.cc index 9735d76..51e0a361 100644 --- a/chrome/browser/chromeos/ui/low_disk_notification.cc +++ b/chrome/browser/chromeos/ui/low_disk_notification.cc
@@ -21,7 +21,6 @@ #include "chrome/browser/ui/webui/settings/chromeos/constants/routes.mojom.h" #include "chrome/common/webui_url_constants.h" #include "chrome/grit/generated_resources.h" -#include "chromeos/dbus/cryptohome/cryptohome_client.h" #include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/settings/cros_settings_names.h" #include "components/user_manager/user_manager.h" @@ -47,16 +46,17 @@ LowDiskNotification::LowDiskNotification() : notification_interval_(kNotificationInterval) { - DCHECK(CryptohomeClient::Get()); - CryptohomeClient::Get()->AddObserver(this); + DCHECK(UserDataAuthClient::Get()); + UserDataAuthClient::Get()->AddObserver(this); } LowDiskNotification::~LowDiskNotification() { - DCHECK(CryptohomeClient::Get()); - CryptohomeClient::Get()->RemoveObserver(this); + DCHECK(UserDataAuthClient::Get()); + UserDataAuthClient::Get()->RemoveObserver(this); } -void LowDiskNotification::LowDiskSpace(uint64_t free_disk_bytes) { +void LowDiskNotification::LowDiskSpace( + const ::user_data_auth::LowDiskSpace& status) { DCHECK(thread_checker_.CalledOnValidThread()); bool show_low_disk_space_notification = true; @@ -75,7 +75,7 @@ << "suppressed on a managed device."; return; } - Severity severity = GetSeverity(free_disk_bytes); + Severity severity = GetSeverity(status.disk_free_bytes()); base::Time now = base::Time::Now(); if (severity != last_notification_severity_ || (severity == HIGH &&
diff --git a/chrome/browser/chromeos/ui/low_disk_notification.h b/chrome/browser/chromeos/ui/low_disk_notification.h index 38241c75..0f2250d 100644 --- a/chrome/browser/chromeos/ui/low_disk_notification.h +++ b/chrome/browser/chromeos/ui/low_disk_notification.h
@@ -13,7 +13,7 @@ #include "base/memory/weak_ptr.h" #include "base/threading/thread_checker.h" #include "base/time/time.h" -#include "chromeos/dbus/cryptohome/cryptohome_client.h" +#include "chromeos/dbus/userdataauth/userdataauth_client.h" namespace message_center { class Notification; @@ -27,19 +27,19 @@ // This class should be created after DBus has been initialized and destroyed // before DBus has been shutdown. // This class must be instantiated on the UI thread. -class LowDiskNotification : public CryptohomeClient::Observer { +class LowDiskNotification : public UserDataAuthClient::Observer { public: - // Registers this class as the CryptohomeClient LowDiskSpaceHandler. + // Registers this class as the UserDataAuthClient LowDiskSpaceHandler. LowDiskNotification(); - // Resets CryptohomeClient LowDiskSpaceHandler. + // Resets UserDataAuthClient LowDiskSpaceHandler. ~LowDiskNotification() override; // Called when the device is running low on disk space. This is responsible // for deciding whether a notification should be shown or not and showing it // if appropriate. This must be called from the thread that instantiated this // object. - void LowDiskSpace(uint64_t free_disk_bytes) override; + void LowDiskSpace(const ::user_data_auth::LowDiskSpace& status) override; private: friend class LowDiskNotificationTest;
diff --git a/chrome/browser/chromeos/ui/low_disk_notification_unittest.cc b/chrome/browser/chromeos/ui/low_disk_notification_unittest.cc index 0caf6da..8d400b5 100644 --- a/chrome/browser/chromeos/ui/low_disk_notification_unittest.cc +++ b/chrome/browser/chromeos/ui/low_disk_notification_unittest.cc
@@ -17,8 +17,8 @@ #include "chrome/test/base/browser_with_test_window_test.h" #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_profile_manager.h" -#include "chromeos/dbus/cryptohome/fake_cryptohome_client.h" #include "chromeos/dbus/dbus_thread_manager.h" +#include "chromeos/dbus/userdataauth/fake_userdataauth_client.h" #include "chromeos/settings/cros_settings_names.h" #include "components/user_manager/fake_user_manager.h" #include "components/user_manager/scoped_user_manager.h" @@ -43,7 +43,7 @@ void SetUp() override { BrowserWithTestWindowTest::SetUp(); - CryptohomeClient::InitializeFake(); + UserDataAuthClient::InitializeFake(); GetCrosSettingsHelper()->ReplaceDeviceSettingsProviderWithStub(); GetCrosSettingsHelper()->SetBoolean( @@ -62,11 +62,14 @@ &LowDiskNotificationTest::OnNotificationAdded, base::Unretained(this))); low_disk_notification_ = std::make_unique<LowDiskNotification>(); notification_count_ = 0; + + medium_message_.set_disk_free_bytes(kMediumNotification); + high_message_.set_disk_free_bytes(kHighNotification); } void TearDown() override { low_disk_notification_.reset(); - CryptohomeClient::Shutdown(); + UserDataAuthClient::Shutdown(); BrowserWithTestWindowTest::TearDown(); } @@ -87,12 +90,17 @@ std::unique_ptr<NotificationDisplayServiceTester> tester_; std::unique_ptr<LowDiskNotification> low_disk_notification_; int notification_count_; + + // A LowDiskSpace protobuf message that contains `kMediumNotification`. + ::user_data_auth::LowDiskSpace medium_message_; + // A LowDiskSpace protobuf message that contains `kHighNotification`. + ::user_data_auth::LowDiskSpace high_message_; }; TEST_F(LowDiskNotificationTest, MediumLevelNotification) { std::u16string expected_title = l10n_util::GetStringUTF16(IDS_LOW_DISK_NOTIFICATION_TITLE); - low_disk_notification_->LowDiskSpace(kMediumNotification); + low_disk_notification_->LowDiskSpace(medium_message_); auto notification = GetNotification(); ASSERT_TRUE(notification); EXPECT_EQ(expected_title, notification->title()); @@ -102,8 +110,8 @@ TEST_F(LowDiskNotificationTest, HighLevelReplacesMedium) { std::u16string expected_title = l10n_util::GetStringUTF16(IDS_CRITICALLY_LOW_DISK_NOTIFICATION_TITLE); - low_disk_notification_->LowDiskSpace(kMediumNotification); - low_disk_notification_->LowDiskSpace(kHighNotification); + low_disk_notification_->LowDiskSpace(medium_message_); + low_disk_notification_->LowDiskSpace(high_message_); auto notification = GetNotification(); ASSERT_TRUE(notification); EXPECT_EQ(expected_title, notification->title()); @@ -112,22 +120,22 @@ TEST_F(LowDiskNotificationTest, NotificationsAreThrottled) { SetNotificationThrottlingInterval(10000000); - low_disk_notification_->LowDiskSpace(kHighNotification); - low_disk_notification_->LowDiskSpace(kHighNotification); + low_disk_notification_->LowDiskSpace(high_message_); + low_disk_notification_->LowDiskSpace(high_message_); EXPECT_EQ(1, notification_count_); } TEST_F(LowDiskNotificationTest, HighNotificationsAreShownAfterThrottling) { SetNotificationThrottlingInterval(-1); - low_disk_notification_->LowDiskSpace(kHighNotification); - low_disk_notification_->LowDiskSpace(kHighNotification); + low_disk_notification_->LowDiskSpace(high_message_); + low_disk_notification_->LowDiskSpace(high_message_); EXPECT_EQ(2, notification_count_); } TEST_F(LowDiskNotificationTest, MediumNotificationsAreNotShownAfterThrottling) { SetNotificationThrottlingInterval(-1); - low_disk_notification_->LowDiskSpace(kMediumNotification); - low_disk_notification_->LowDiskSpace(kMediumNotification); + low_disk_notification_->LowDiskSpace(medium_message_); + low_disk_notification_->LowDiskSpace(medium_message_); EXPECT_EQ(1, notification_count_); } @@ -138,7 +146,7 @@ AccountId::FromUserEmailGaiaId("test_user2@example.com", "1234567892")); SetNotificationThrottlingInterval(-1); - low_disk_notification_->LowDiskSpace(kHighNotification); + low_disk_notification_->LowDiskSpace(high_message_); EXPECT_EQ(1, notification_count_); } @@ -152,7 +160,7 @@ chromeos::kDeviceShowLowDiskSpaceNotification, false); SetNotificationThrottlingInterval(-1); - low_disk_notification_->LowDiskSpace(kHighNotification); + low_disk_notification_->LowDiskSpace(high_message_); EXPECT_EQ(0, notification_count_); }
diff --git a/chrome/browser/extensions/api/feedback_private/chrome_feedback_private_delegate.cc b/chrome/browser/extensions/api/feedback_private/chrome_feedback_private_delegate.cc index 58082d00..d2eb14c 100644 --- a/chrome/browser/extensions/api/feedback_private/chrome_feedback_private_delegate.cc +++ b/chrome/browser/extensions/api/feedback_private/chrome_feedback_private_delegate.cc
@@ -258,8 +258,7 @@ if (!identity_manager) return std::string(); // Browser sync consent is not required to use feedback. - return identity_manager - ->GetPrimaryAccountInfo(signin::ConsentLevel::kNotRequired) + return identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin) .email; }
diff --git a/chrome/browser/extensions/api/identity/gaia_remote_consent_flow.cc b/chrome/browser/extensions/api/identity/gaia_remote_consent_flow.cc index c94ddd0..25cb3d2 100644 --- a/chrome/browser/extensions/api/identity/gaia_remote_consent_flow.cc +++ b/chrome/browser/extensions/api/identity/gaia_remote_consent_flow.cc
@@ -144,9 +144,10 @@ std::unique_ptr<GaiaAuthFetcher> GaiaRemoteConsentFlow::CreateGaiaAuthFetcherForPartition( - GaiaAuthConsumer* consumer) { + GaiaAuthConsumer* consumer, + const gaia::GaiaSource& source) { return std::make_unique<GaiaAuthFetcher>( - consumer, gaia::GaiaSource::kChrome, + consumer, source, web_flow_->GetGuestPartition()->GetURLLoaderFactoryForBrowserProcess()); } @@ -211,6 +212,7 @@ this, {gaia::MultiloginMode::MULTILOGIN_UPDATE_COOKIE_ACCOUNTS_ORDER, accounts}, + gaia::GaiaSource::kChrome, base::BindOnce(&GaiaRemoteConsentFlow::OnSetAccountsComplete, base::Unretained(this))); }
diff --git a/chrome/browser/extensions/api/identity/gaia_remote_consent_flow.h b/chrome/browser/extensions/api/identity/gaia_remote_consent_flow.h index ec2b56e..169ed44f 100644 --- a/chrome/browser/extensions/api/identity/gaia_remote_consent_flow.h +++ b/chrome/browser/extensions/api/identity/gaia_remote_consent_flow.h
@@ -73,7 +73,9 @@ // signin::AccountsCookieMutator::PartitionDelegate: std::unique_ptr<GaiaAuthFetcher> CreateGaiaAuthFetcherForPartition( - GaiaAuthConsumer* consumer) override; + + GaiaAuthConsumer* consumer, + const gaia::GaiaSource& source) override; network::mojom::CookieManager* GetCookieManagerForPartition() override; // signin::IdentityManager::Observer:
diff --git a/chrome/browser/extensions/api/identity/identity_get_profile_user_info_function.cc b/chrome/browser/extensions/api/identity/identity_get_profile_user_info_function.cc index 5ce89bdf..aac2b5c 100644 --- a/chrome/browser/extensions/api/identity/identity_get_profile_user_info_function.cc +++ b/chrome/browser/extensions/api/identity/identity_get_profile_user_info_function.cc
@@ -26,7 +26,7 @@ switch (account_status) { case api::identity::ACCOUNT_STATUS_ANY: - return signin::ConsentLevel::kNotRequired; + return signin::ConsentLevel::kSignin; case api::identity::ACCOUNT_STATUS_NONE: case api::identity::ACCOUNT_STATUS_SYNC: return signin::ConsentLevel::kSync;
diff --git a/chrome/browser/feedback/feedback_uploader_chrome.cc b/chrome/browser/feedback/feedback_uploader_chrome.cc index 2b54c36..2d7db98 100644 --- a/chrome/browser/feedback/feedback_uploader_chrome.cc +++ b/chrome/browser/feedback/feedback_uploader_chrome.cc
@@ -128,7 +128,7 @@ // Sync consent is not required to send feedback because the feedback dialog // has its own privacy notice. if (identity_manager && - identity_manager->HasPrimaryAccount(signin::ConsentLevel::kNotRequired)) { + identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSignin)) { signin::ScopeSet scopes; scopes.insert(kScope); primary_account_token_fetcher_ = @@ -138,7 +138,7 @@ &FeedbackUploaderChrome::PrimaryAccountAccessTokenAvailable, base::Unretained(this)), signin::PrimaryAccountAccessTokenFetcher::Mode::kImmediate, - signin::ConsentLevel::kNotRequired); + signin::ConsentLevel::kSignin); return; }
diff --git a/chrome/browser/feedback/show_feedback_page.cc b/chrome/browser/feedback/show_feedback_page.cc index 6ac0043..5fd7e58 100644 --- a/chrome/browser/feedback/show_feedback_page.cc +++ b/chrome/browser/feedback/show_feedback_page.cc
@@ -47,8 +47,8 @@ if (!identity_manager) // Non-GAIA account, e.g. guest mode. return false; // Browser sync consent is not required to use feedback. - CoreAccountInfo account_info = identity_manager->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + CoreAccountInfo account_info = + identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin); return gaia::IsGoogleInternalAccountEmail(account_info.email); }
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 3613208..85f7b96 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -5183,6 +5183,11 @@ "expiry_milestone": 93 }, { + "name": "wake-on-wifi-allowed", + "owners": [ "yenlinlai", "chromeos-wifi-team" ], + "expiry_milestone": 95 + }, + { "name": "wallet-requires-first-sync-setup", "owners": [ "treib", "butter-team@google.com" ], "expiry_milestone": 95
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc index e3fe615..38174f97 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc
@@ -4805,6 +4805,10 @@ const char kVmCameraMicIndicatorsAndNotificationsDescription[] = "Show VM camera/mic indicators/notifications"; +const char kWakeOnWifiAllowedName[] = "Allow enabling wake on WiFi features"; +const char kWakeOnWifiAllowedDescription[] = + "Allows wake on WiFi features in shill to be enabled."; + const char kWebuiDarkModeName[] = "WebUI dark mode"; const char kWebuiDarkModeDescription[] = "Allows dark mode usage in WebUI. Note that this does not necessary enable "
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h index e9cfc8f..ce36af0 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h
@@ -2792,6 +2792,9 @@ extern const char kVmCameraMicIndicatorsAndNotificationsName[]; extern const char kVmCameraMicIndicatorsAndNotificationsDescription[]; +extern const char kWakeOnWifiAllowedName[]; +extern const char kWakeOnWifiAllowedDescription[]; + extern const char kWebuiDarkModeName[]; extern const char kWebuiDarkModeDescription[];
diff --git a/chrome/browser/heavy_ad_intervention/heavy_ad_helper_browsertest.cc b/chrome/browser/heavy_ad_intervention/heavy_ad_helper_browsertest.cc index 91e7c73..bc90980 100644 --- a/chrome/browser/heavy_ad_intervention/heavy_ad_helper_browsertest.cc +++ b/chrome/browser/heavy_ad_intervention/heavy_ad_helper_browsertest.cc
@@ -66,7 +66,8 @@ content::TestNavigationObserver error_observer(web_contents); controller.LoadPostCommitErrorPage( child, url, - heavy_ads::PrepareHeavyAdPage(g_browser_process->GetApplicationLocale()), + heavy_ad_intervention::PrepareHeavyAdPage( + g_browser_process->GetApplicationLocale()), net::ERR_BLOCKED_BY_CLIENT); error_observer.Wait(); @@ -94,7 +95,8 @@ content::TestNavigationObserver error_observer(web_contents); controller.LoadPostCommitErrorPage( child, url, - heavy_ads::PrepareHeavyAdPage(g_browser_process->GetApplicationLocale()), + heavy_ad_intervention::PrepareHeavyAdPage( + g_browser_process->GetApplicationLocale()), net::ERR_BLOCKED_BY_CLIENT); error_observer.Wait();
diff --git a/chrome/browser/heavy_ad_intervention/heavy_ad_service_factory.cc b/chrome/browser/heavy_ad_intervention/heavy_ad_service_factory.cc index 8a749e50..f918aea 100644 --- a/chrome/browser/heavy_ad_intervention/heavy_ad_service_factory.cc +++ b/chrome/browser/heavy_ad_intervention/heavy_ad_service_factory.cc
@@ -18,9 +18,9 @@ } // namespace // static -HeavyAdService* HeavyAdServiceFactory::GetForBrowserContext( - content::BrowserContext* context) { - return static_cast<HeavyAdService*>( +heavy_ad_intervention::HeavyAdService* +HeavyAdServiceFactory::GetForBrowserContext(content::BrowserContext* context) { + return static_cast<heavy_ad_intervention::HeavyAdService*>( GetInstance()->GetServiceForBrowserContext(context, true)); } @@ -38,7 +38,7 @@ KeyedService* HeavyAdServiceFactory::BuildServiceInstanceFor( content::BrowserContext* context) const { - return new HeavyAdService(); + return new heavy_ad_intervention::HeavyAdService(); } content::BrowserContext* HeavyAdServiceFactory::GetBrowserContextToUse(
diff --git a/chrome/browser/heavy_ad_intervention/heavy_ad_service_factory.h b/chrome/browser/heavy_ad_intervention/heavy_ad_service_factory.h index 2a97731..71f67b87 100644 --- a/chrome/browser/heavy_ad_intervention/heavy_ad_service_factory.h +++ b/chrome/browser/heavy_ad_intervention/heavy_ad_service_factory.h
@@ -13,14 +13,17 @@ class BrowserContext; } +namespace heavy_ad_intervention { class HeavyAdService; +} // LazyInstance that owns all HeavyAdServices and associates them with // Profiles. class HeavyAdServiceFactory : public BrowserContextKeyedServiceFactory { public: // Gets the HeavyAdService instance for |context|. - static HeavyAdService* GetForBrowserContext(content::BrowserContext* context); + static heavy_ad_intervention::HeavyAdService* GetForBrowserContext( + content::BrowserContext* context); // Gets the LazyInstance that owns all HeavyAdServices. static HeavyAdServiceFactory* GetInstance();
diff --git a/chrome/browser/lacros/feedback_util.cc b/chrome/browser/lacros/feedback_util.cc index e8d39f1..0db82d8 100644 --- a/chrome/browser/lacros/feedback_util.cc +++ b/chrome/browser/lacros/feedback_util.cc
@@ -18,8 +18,7 @@ if (!identity_manager) return std::string(); // Browser sync consent is not required to use feedback. - return identity_manager - ->GetPrimaryAccountInfo(signin::ConsentLevel::kNotRequired) + return identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin) .email; }
diff --git a/chrome/browser/metrics/family_link_user_metrics_provider.cc b/chrome/browser/metrics/family_link_user_metrics_provider.cc index 62ede665..b8843d5 100644 --- a/chrome/browser/metrics/family_link_user_metrics_provider.cc +++ b/chrome/browser/metrics/family_link_user_metrics_provider.cc
@@ -84,7 +84,7 @@ // primary_account_access_token_fetcher.h. base::Unretained(this)), signin::PrimaryAccountAccessTokenFetcher::Mode::kImmediate, - signin::ConsentLevel::kNotRequired); + signin::ConsentLevel::kSignin); } // static
diff --git a/chrome/browser/nearby_sharing/client/nearby_share_client_impl.cc b/chrome/browser/nearby_sharing/client/nearby_share_client_impl.cc index b8d2bf8..90bd3090 100644 --- a/chrome/browser/nearby_sharing/client/nearby_share_client_impl.cc +++ b/chrome/browser/nearby_sharing/client/nearby_share_client_impl.cc
@@ -305,7 +305,7 @@ weak_ptr_factory_.GetWeakPtr(), request_type, serialized_request, request_as_query_parameters, std::move(response_callback)), signin::PrimaryAccountAccessTokenFetcher::Mode::kWaitUntilAvailable, - signin::ConsentLevel::kNotRequired); + signin::ConsentLevel::kSignin); } template <class ResponseProto>
diff --git a/chrome/browser/nearby_sharing/instantmessaging/token_fetcher.cc b/chrome/browser/nearby_sharing/instantmessaging/token_fetcher.cc index f49354cf..c74f3fe 100644 --- a/chrome/browser/nearby_sharing/instantmessaging/token_fetcher.cc +++ b/chrome/browser/nearby_sharing/instantmessaging/token_fetcher.cc
@@ -22,8 +22,7 @@ // users. token_fetcher_ = identity_manager_->CreateAccessTokenFetcherForAccount( - identity_manager_->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired), + identity_manager_->GetPrimaryAccountId(signin::ConsentLevel::kSignin), kOAuthConsumerName, {GaiaConstants::kTachyonOAuthScope}, base::BindOnce(&TokenFetcher::OnOAuthTokenFetched, weak_ptr_factory_.GetWeakPtr(), std::move(callback)),
diff --git a/chrome/browser/nfc/chrome_nfc_permission_context_delegate.cc b/chrome/browser/nfc/chrome_nfc_permission_context_delegate.cc new file mode 100644 index 0000000..d450e770 --- /dev/null +++ b/chrome/browser/nfc/chrome_nfc_permission_context_delegate.cc
@@ -0,0 +1,23 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/nfc/chrome_nfc_permission_context_delegate.h" + +#if defined(OS_ANDROID) +#include "chrome/browser/android/tab_android.h" +#endif + +ChromeNfcPermissionContextDelegate::ChromeNfcPermissionContextDelegate() = + default; + +ChromeNfcPermissionContextDelegate::~ChromeNfcPermissionContextDelegate() = + default; + +#if defined(OS_ANDROID) +bool ChromeNfcPermissionContextDelegate::IsInteractable( + content::WebContents* web_contents) { + TabAndroid* tab = TabAndroid::FromWebContents(web_contents); + return tab && tab->IsUserInteractable(); +} +#endif
diff --git a/chrome/browser/nfc/chrome_nfc_permission_context_delegate.h b/chrome/browser/nfc/chrome_nfc_permission_context_delegate.h new file mode 100644 index 0000000..ada03bb --- /dev/null +++ b/chrome/browser/nfc/chrome_nfc_permission_context_delegate.h
@@ -0,0 +1,29 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_NFC_CHROME_NFC_PERMISSION_CONTEXT_DELEGATE_H_ +#define CHROME_BROWSER_NFC_CHROME_NFC_PERMISSION_CONTEXT_DELEGATE_H_ + +#include "build/build_config.h" +#include "chrome/browser/nfc/nfc_permission_context.h" + +class ChromeNfcPermissionContextDelegate + : public NfcPermissionContext::Delegate { + public: + ChromeNfcPermissionContextDelegate(); + + ChromeNfcPermissionContextDelegate( + const ChromeNfcPermissionContextDelegate&) = delete; + ChromeNfcPermissionContextDelegate& operator=( + const ChromeNfcPermissionContextDelegate&) = delete; + + ~ChromeNfcPermissionContextDelegate() override; + + // NfcPermissionContext::Delegate: +#if defined(OS_ANDROID) + bool IsInteractable(content::WebContents* web_contents) override; +#endif +}; + +#endif // CHROME_BROWSER_NFC_CHROME_NFC_PERMISSION_CONTEXT_DELEGATE_H_
diff --git a/chrome/browser/nfc/nfc_permission_context.cc b/chrome/browser/nfc/nfc_permission_context.cc index e688a0d6..fb6682fc 100644 --- a/chrome/browser/nfc/nfc_permission_context.cc +++ b/chrome/browser/nfc/nfc_permission_context.cc
@@ -8,11 +8,12 @@ #include "components/permissions/permission_request_id.h" NfcPermissionContext::NfcPermissionContext( - content::BrowserContext* browser_context) + content::BrowserContext* browser_context, + std::unique_ptr<Delegate> delegate) : PermissionContextBase(browser_context, ContentSettingsType::NFC, - blink::mojom::PermissionsPolicyFeature::kNotFound) { -} + blink::mojom::PermissionsPolicyFeature::kNotFound), + delegate_(std::move(delegate)) {} NfcPermissionContext::~NfcPermissionContext() = default;
diff --git a/chrome/browser/nfc/nfc_permission_context.h b/chrome/browser/nfc/nfc_permission_context.h index 063a4eb2..20ea5aa 100644 --- a/chrome/browser/nfc/nfc_permission_context.h +++ b/chrome/browser/nfc/nfc_permission_context.h
@@ -5,17 +5,33 @@ #ifndef CHROME_BROWSER_NFC_NFC_PERMISSION_CONTEXT_H_ #define CHROME_BROWSER_NFC_NFC_PERMISSION_CONTEXT_H_ +#include "build/build_config.h" #include "components/permissions/permission_context_base.h" class NfcPermissionContext : public permissions::PermissionContextBase { public: - explicit NfcPermissionContext(content::BrowserContext* browser_context); + // The delegate allows embedders to modify the permission context logic. + class Delegate { + public: + virtual ~Delegate() = default; + +#if defined(OS_ANDROID) + // Returns whether or not this |web_contents| is interactable. + virtual bool IsInteractable(content::WebContents* web_contents) = 0; +#endif + }; + + NfcPermissionContext(content::BrowserContext* browser_context, + std::unique_ptr<Delegate> delegate); NfcPermissionContext(const NfcPermissionContext&) = delete; NfcPermissionContext& operator=(const NfcPermissionContext&) = delete; ~NfcPermissionContext() override; + protected: + std::unique_ptr<Delegate> delegate_; + private: // PermissionContextBase: #if !defined(OS_ANDROID)
diff --git a/chrome/browser/nfc/nfc_permission_context_android.cc b/chrome/browser/nfc/nfc_permission_context_android.cc index eba079f8..ce9df96 100644 --- a/chrome/browser/nfc/nfc_permission_context_android.cc +++ b/chrome/browser/nfc/nfc_permission_context_android.cc
@@ -6,14 +6,14 @@ #include "base/android/jni_android.h" #include "base/bind.h" -#include "chrome/browser/android/tab_android.h" #include "components/permissions/android/nfc/nfc_system_level_setting_impl.h" #include "components/permissions/permission_request_id.h" #include "content/public/browser/web_contents.h" NfcPermissionContextAndroid::NfcPermissionContextAndroid( - content::BrowserContext* browser_context) - : NfcPermissionContext(browser_context), + content::BrowserContext* browser_context, + std::unique_ptr<Delegate> delegate) + : NfcPermissionContext(browser_context, std::move(delegate)), nfc_system_level_setting_( std::make_unique<permissions::NfcSystemLevelSettingImpl>()) {} @@ -49,8 +49,7 @@ // Only show the NFC system level setting prompt if the tab for |web_contents| // is user-interactable (i.e. is the current tab, and Chrome is active and not // in tab-switching mode). - TabAndroid* tab = TabAndroid::FromWebContents(web_contents); - if (tab && !tab->IsUserInteractable()) { + if (!delegate_->IsInteractable(web_contents)) { permissions::PermissionContextBase::NotifyPermissionSet( id, requesting_origin, embedding_origin, std::move(callback), false /* persist */, CONTENT_SETTING_BLOCK, /*is_one_time=*/false);
diff --git a/chrome/browser/nfc/nfc_permission_context_android.h b/chrome/browser/nfc/nfc_permission_context_android.h index 9b2f2bf..1bc0e7dc 100644 --- a/chrome/browser/nfc/nfc_permission_context_android.h +++ b/chrome/browser/nfc/nfc_permission_context_android.h
@@ -14,8 +14,8 @@ class NfcPermissionContextAndroid : public NfcPermissionContext { public: - explicit NfcPermissionContextAndroid( - content::BrowserContext* browser_context); + NfcPermissionContextAndroid(content::BrowserContext* browser_context, + std::unique_ptr<Delegate> delegate); ~NfcPermissionContextAndroid() override; private:
diff --git a/chrome/browser/nfc/nfc_permission_context_unittest.cc b/chrome/browser/nfc/nfc_permission_context_unittest.cc index 7a189c9d..c2b2e993 100644 --- a/chrome/browser/nfc/nfc_permission_context_unittest.cc +++ b/chrome/browser/nfc/nfc_permission_context_unittest.cc
@@ -5,14 +5,12 @@ #include "chrome/browser/nfc/nfc_permission_context.h" #include "build/build_config.h" -#include "chrome/browser/content_settings/host_content_settings_map_factory.h" -#include "chrome/browser/content_settings/page_specific_content_settings_delegate.h" -#include "chrome/browser/permissions/permission_manager_factory.h" #include "chrome/test/base/chrome_render_view_host_test_harness.h" -#include "components/content_settings/browser/page_specific_content_settings.h" +#include "components/content_settings/browser/test_page_specific_content_settings_delegate.h" #include "components/permissions/permission_manager.h" #include "components/permissions/permission_request_id.h" #include "components/permissions/permission_request_manager.h" +#include "components/permissions/permissions_client.h" #include "components/permissions/test/mock_permission_prompt_factory.h" #include "content/public/test/mock_render_process_host.h" #include "content/public/test/test_utils.h" @@ -26,6 +24,17 @@ using content::MockRenderProcessHost; +namespace { +class TestNfcPermissionContextDelegate : public NfcPermissionContext::Delegate { + public: +#if defined(OS_ANDROID) + bool IsInteractable(content::WebContents* web_contents) override { + return true; + } +#endif +}; +} // namespace + // NfcPermissionContextTests ------------------------------------------ class NfcPermissionContextTests : public ChromeRenderViewHostTestHarness { @@ -61,10 +70,11 @@ void DenyPrompt(); void ClosePrompt(); - // owned by the browser context + // Owned by |manager_|. NfcPermissionContext* nfc_permission_context_; std::vector<std::unique_ptr<permissions::MockPermissionPromptFactory>> mock_permission_prompt_factories_; + std::unique_ptr<permissions::PermissionManager> manager_; // A map between renderer child id and a pair represending the bridge id and // whether the requested permission was allowed. @@ -117,26 +127,43 @@ content_settings::PageSpecificContentSettings::CreateForWebContents( web_contents(), - std::make_unique<chrome::PageSpecificContentSettingsDelegate>( - web_contents())); - nfc_permission_context_ = static_cast<NfcPermissionContext*>( - PermissionManagerFactory::GetForProfile(profile()) - ->GetPermissionContextForTesting(ContentSettingsType::NFC)); + std::make_unique< + content_settings::TestPageSpecificContentSettingsDelegate>( + /*prefs=*/nullptr, + permissions::PermissionsClient::Get()->GetSettingsMap( + browser_context()))); SetupRequestManager(web_contents()); + auto delegate = std::make_unique<TestNfcPermissionContextDelegate>(); + #if defined(OS_ANDROID) - static_cast<NfcPermissionContextAndroid*>(nfc_permission_context_) - ->set_nfc_system_level_setting_for_testing( - std::unique_ptr<permissions::NfcSystemLevelSetting>( - new MockNfcSystemLevelSetting())); + auto context = std::make_unique<NfcPermissionContextAndroid>( + browser_context(), std::move(delegate)); + context->set_nfc_system_level_setting_for_testing( + std::unique_ptr<permissions::NfcSystemLevelSetting>( + new MockNfcSystemLevelSetting())); MockNfcSystemLevelSetting::SetNfcSystemLevelSettingEnabled(true); MockNfcSystemLevelSetting::SetNfcAccessIsPossible(true); MockNfcSystemLevelSetting::ClearHasShownNfcSettingPrompt(); +#else + auto context = std::make_unique<NfcPermissionContext>(browser_context(), + std::move(delegate)); #endif + + nfc_permission_context_ = context.get(); + + permissions::PermissionManager::PermissionContextMap context_map; + context_map[ContentSettingsType::NFC] = std::move(context); + manager_ = std::make_unique<permissions::PermissionManager>( + browser_context(), std::move(context_map)); } void NfcPermissionContextTests::TearDown() { mock_permission_prompt_factories_.clear(); + DeleteContents(); + nfc_permission_context_ = nullptr; + manager_->Shutdown(); + manager_.reset(); ChromeRenderViewHostTestHarness::TearDown(); } @@ -166,7 +193,8 @@ ContentSetting NfcPermissionContextTests::GetNfcContentSetting(GURL frame_0, GURL frame_1) { - return HostContentSettingsMapFactory::GetForProfile(profile()) + return permissions::PermissionsClient::Get() + ->GetSettingsMap(browser_context()) ->GetContentSetting(frame_0, frame_1, ContentSettingsType::NFC); } @@ -174,7 +202,8 @@ GURL frame_0, GURL frame_1, ContentSetting content_setting) { - return HostContentSettingsMapFactory::GetForProfile(profile()) + return permissions::PermissionsClient::Get() + ->GetSettingsMap(browser_context()) ->SetContentSettingDefaultScope( frame_0, frame_1, ContentSettingsType::NFC, content_setting); }
diff --git a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_browsertest.cc b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_browsertest.cc index 489ed63..0a7a8d2 100644 --- a/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_browsertest.cc +++ b/chrome/browser/page_load_metrics/observers/ad_metrics/ads_page_load_metrics_observer_browsertest.cc
@@ -1261,8 +1261,9 @@ scoped_feature_list_.InitWithFeaturesAndParameters( {{subresource_filter::kAdTagging, {}}, {subresource_filter::kAdsInterventionsEnforced, {}}, - {features::kHeavyAdIntervention, {}}, - {features::kHeavyAdPrivacyMitigations, {{"host-threshold", "3"}}}}, + {heavy_ad_intervention::features::kHeavyAdIntervention, {}}, + {heavy_ad_intervention::features::kHeavyAdPrivacyMitigations, + {{"host-threshold", "3"}}}}, {}); } @@ -1708,8 +1709,9 @@ public: AdsPageLoadMetricsObserverResourceBrowserTestWithoutHeavyAdIntervention() { // The experiment is "on" if either intervention or reporting is active. - feature_list_.InitWithFeatures({}, {features::kHeavyAdIntervention, - features::kHeavyAdInterventionWarning}); + feature_list_.InitWithFeatures( + {}, {heavy_ad_intervention::features::kHeavyAdIntervention, + heavy_ad_intervention::features::kHeavyAdInterventionWarning}); } private: @@ -1779,7 +1781,8 @@ // Verify that the trial is not activated if no heavy ads are seen. EXPECT_FALSE(base::FieldTrialList::IsTrialActive( - base::FeatureList::GetFieldTrial(features::kHeavyAdIntervention) + base::FeatureList::GetFieldTrial( + heavy_ad_intervention::features::kHeavyAdIntervention) ->trial_name())); }
diff --git a/chrome/browser/page_load_metrics/observers/core/amp_page_load_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/core/amp_page_load_metrics_observer.cc index 8ebaa08..d0d652d 100644 --- a/chrome/browser/page_load_metrics/observers/core/amp_page_load_metrics_observer.cc +++ b/chrome/browser/page_load_metrics/observers/core/amp_page_load_metrics_observer.cc
@@ -161,7 +161,8 @@ subframe_info.navigation_start = navigation_handle->NavigationStart(); } -void AMPPageLoadMetricsObserver::OnFrameDeleted(content::RenderFrameHost* rfh) { +void AMPPageLoadMetricsObserver::OnRenderFrameDeleted( + content::RenderFrameHost* rfh) { if (current_main_frame_nav_info_ && current_main_frame_nav_info_->subframe_rfh == rfh) { MaybeRecordAmpDocumentMetrics();
diff --git a/chrome/browser/page_load_metrics/observers/core/amp_page_load_metrics_observer.h b/chrome/browser/page_load_metrics/observers/core/amp_page_load_metrics_observer.h index 3b7e4e3..1abbe310 100644 --- a/chrome/browser/page_load_metrics/observers/core/amp_page_load_metrics_observer.h +++ b/chrome/browser/page_load_metrics/observers/core/amp_page_load_metrics_observer.h
@@ -55,7 +55,7 @@ content::NavigationHandle* navigation_handle) override; void OnDidFinishSubFrameNavigation( content::NavigationHandle* navigation_handle) override; - void OnFrameDeleted(content::RenderFrameHost* rfh) override; + void OnRenderFrameDeleted(content::RenderFrameHost* rfh) override; void OnTimingUpdate( content::RenderFrameHost* subframe_rfh, const page_load_metrics::mojom::PageLoadTiming& timing) override;
diff --git a/chrome/browser/page_load_metrics/observers/third_party_metrics_observer.cc b/chrome/browser/page_load_metrics/observers/third_party_metrics_observer.cc index 8a9ecf5..0632d2f 100644 --- a/chrome/browser/page_load_metrics/observers/third_party_metrics_observer.cc +++ b/chrome/browser/page_load_metrics/observers/third_party_metrics_observer.cc
@@ -199,7 +199,7 @@ recorded_frames_.erase(navigation_handle->GetRenderFrameHost()); } -void ThirdPartyMetricsObserver::OnFrameDeleted( +void ThirdPartyMetricsObserver::OnRenderFrameDeleted( content::RenderFrameHost* render_frame_host) { recorded_frames_.erase(render_frame_host); }
diff --git a/chrome/browser/page_load_metrics/observers/third_party_metrics_observer.h b/chrome/browser/page_load_metrics/observers/third_party_metrics_observer.h index 92180dc..78752dd 100644 --- a/chrome/browser/page_load_metrics/observers/third_party_metrics_observer.h +++ b/chrome/browser/page_load_metrics/observers/third_party_metrics_observer.h
@@ -58,7 +58,8 @@ page_load_metrics::StorageType storage_type) override; void OnDidFinishSubFrameNavigation( content::NavigationHandle* navigation_handle) override; - void OnFrameDeleted(content::RenderFrameHost* render_frame_host) override; + void OnRenderFrameDeleted( + content::RenderFrameHost* render_frame_host) override; void OnTimingUpdate( content::RenderFrameHost* subframe_rfh, const page_load_metrics::mojom::PageLoadTiming& timing) override;
diff --git a/chrome/browser/password_entry_edit/android/internal/java/src/org/chromium/chrome/browser/password_entry_edit/CredentialEditMediator.java b/chrome/browser/password_entry_edit/android/internal/java/src/org/chromium/chrome/browser/password_entry_edit/CredentialEditMediator.java index 705cb0d..e1ec979 100644 --- a/chrome/browser/password_entry_edit/android/internal/java/src/org/chromium/chrome/browser/password_entry_edit/CredentialEditMediator.java +++ b/chrome/browser/password_entry_edit/android/internal/java/src/org/chromium/chrome/browser/password_entry_edit/CredentialEditMediator.java
@@ -168,8 +168,8 @@ mOriginalPassword = password; mModel.set(USERNAME, username); - mModel.set(PASSWORD, password); mModel.set(PASSWORD_VISIBLE, false); + mModel.set(PASSWORD, password); } void setExistingUsernames(String[] existingUsernames) {
diff --git a/chrome/browser/password_entry_edit/android/internal/java/src/org/chromium/chrome/browser/password_entry_edit/CredentialEditViewBinder.java b/chrome/browser/password_entry_edit/android/internal/java/src/org/chromium/chrome/browser/password_entry_edit/CredentialEditViewBinder.java index 0844818..16a39c2e 100644 --- a/chrome/browser/password_entry_edit/android/internal/java/src/org/chromium/chrome/browser/password_entry_edit/CredentialEditViewBinder.java +++ b/chrome/browser/password_entry_edit/android/internal/java/src/org/chromium/chrome/browser/password_entry_edit/CredentialEditViewBinder.java
@@ -38,9 +38,7 @@ } else if (propertyKey == PASSWORD_VISIBLE) { fragmentView.changePasswordVisibility(model.get(PASSWORD_VISIBLE)); } else if (propertyKey == PASSWORD) { - if (model.get(FEDERATION_ORIGIN).isEmpty()) { fragmentView.setPassword(model.get(PASSWORD)); - } } else if (propertyKey == EMPTY_PASSWORD_ERROR) { fragmentView.changePasswordError(model.get(EMPTY_PASSWORD_ERROR)); } else if (propertyKey == UI_DISMISSED_BY_NATIVE) {
diff --git a/chrome/browser/password_entry_edit/android/java/res/layout/credential_edit_view.xml b/chrome/browser/password_entry_edit/android/java/res/layout/credential_edit_view.xml index 828c323..167ce57 100644 --- a/chrome/browser/password_entry_edit/android/java/res/layout/credential_edit_view.xml +++ b/chrome/browser/password_entry_edit/android/java/res/layout/credential_edit_view.xml
@@ -9,9 +9,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:paddingStart="@dimen/password_entry_editor_content_spacing" - android:paddingEnd="@dimen/password_entry_editor_content_spacing" - android:paddingLeft="@dimen/password_entry_editor_content_spacing" - android:paddingRight="@dimen/password_entry_editor_content_spacing"> + android:paddingEnd="@dimen/password_entry_editor_content_spacing"> <LinearLayout android:layout_width="match_parent" @@ -23,18 +21,18 @@ <!-- Username --> <FrameLayout android:layout_width="match_parent" - android:layout_height="wrap_content"> + android:layout_height="wrap_content" + android:layout_marginTop="14dp"> <com.google.android.material.textfield.TextInputLayout android:id="@+id/username_text_input_layout" android:labelFor="@+id/username" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="@dimen/password_entry_editor_field_top_margin" - android:layout_marginBottom="@dimen/password_entry_editor_field_bottom_margin" android:hint="@string/password_entry_viewer_username_title" app:hintTextAppearance="@style/TextAppearance.TextSmall.Secondary" - app:errorTextAppearance="@style/TextAppearance.ErrorCaption"> + app:errorTextAppearance="@style/TextAppearance.ErrorCaption" + app:errorEnabled="true"> <com.google.android.material.textfield.TextInputEditText tools:ignore="LabelFor" @@ -43,7 +41,7 @@ android:layout_height="wrap_content" android:imeOptions="flagNoExtractUi" android:importantForAutofill="noExcludeDescendants" - android:inputType="text" + android:inputType="textMultiLine" android:textAppearance="@style/TextAppearance.TextLarge.Primary"/> </com.google.android.material.textfield.TextInputLayout> @@ -53,6 +51,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical | end" + android:layout_marginBottom="@dimen/credential_edit_text_icon_margin_bottom" android:contentDescription="@string/password_entry_viewer_copy_stored_username" app:srcCompat="@drawable/ic_content_copy_black" app:tint="@color/default_icon_color_tint_list" @@ -69,11 +68,10 @@ android:labelFor="@+id/password" android:layout_height="wrap_content" android:layout_width="match_parent" - android:layout_marginTop="@dimen/password_entry_editor_field_top_margin" - android:layout_marginBottom="@dimen/password_entry_editor_field_bottom_margin" android:hint="@string/password_entry_viewer_password" app:hintTextAppearance="@style/TextAppearance.TextSmall.Secondary" - app:errorTextAppearance="@style/TextAppearance.ErrorCaption"> + app:errorTextAppearance="@style/TextAppearance.ErrorCaption" + app:errorEnabled="true"> <com.google.android.material.textfield.TextInputEditText tools:ignore="LabelFor" @@ -90,6 +88,7 @@ android:id="@+id/password_icons" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginBottom="@dimen/credential_edit_text_icon_margin_bottom" android:layout_gravity="center_vertical | end" android:orientation="horizontal">
diff --git a/chrome/browser/password_entry_edit/android/java/res/values/dimens.xml b/chrome/browser/password_entry_edit/android/java/res/values/dimens.xml index 0cc4261..a95a276c 100644 --- a/chrome/browser/password_entry_edit/android/java/res/values/dimens.xml +++ b/chrome/browser/password_entry_edit/android/java/res/values/dimens.xml
@@ -8,6 +8,7 @@ of the TextInputLayout elements --> <dimen name="credential_edit_text_view_margin">4dp</dimen> <dimen name="credential_edit_text_view_label_margin_bottom">2dp</dimen> + <dimen name="credential_edit_text_icon_margin_bottom">12dp</dimen> <dimen name="credential_edit_button_layout_padding">10dp</dimen> <dimen name="credential_edit_button_layout_stacked_margin">24dp</dimen> </resources>
diff --git a/chrome/browser/password_manager/generated_password_leak_detection_pref.cc b/chrome/browser/password_manager/generated_password_leak_detection_pref.cc index cf328b19..88d81b1 100644 --- a/chrome/browser/password_manager/generated_password_leak_detection_pref.cc +++ b/chrome/browser/password_manager/generated_password_leak_detection_pref.cc
@@ -36,8 +36,7 @@ // Password leak detection only requires a signed in account and a functioning // sync service, it does not require sync consent. - return identity_manager->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired) && + return identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSignin) && !sync_error; }
diff --git a/chrome/browser/permissions/permission_manager_factory.cc b/chrome/browser/permissions/permission_manager_factory.cc index b42cf18..3949d27 100644 --- a/chrome/browser/permissions/permission_manager_factory.cc +++ b/chrome/browser/permissions/permission_manager_factory.cc
@@ -19,6 +19,7 @@ #include "chrome/browser/media/midi_sysex_permission_context.h" #include "chrome/browser/media/webrtc/camera_pan_tilt_zoom_permission_context.h" #include "chrome/browser/media/webrtc/media_stream_device_permission_context.h" +#include "chrome/browser/nfc/chrome_nfc_permission_context_delegate.h" #include "chrome/browser/notifications/notification_permission_context.h" #include "chrome/browser/profiles/incognito_helpers.h" #include "chrome/browser/profiles/profile.h" @@ -111,12 +112,14 @@ permission_contexts[ContentSettingsType::WAKE_LOCK_SYSTEM] = std::make_unique<WakeLockPermissionContext>( profile, ContentSettingsType::WAKE_LOCK_SYSTEM); + auto nfc_delegate = std::make_unique<ChromeNfcPermissionContextDelegate>(); #if !defined(OS_ANDROID) permission_contexts[ContentSettingsType::NFC] = - std::make_unique<NfcPermissionContext>(profile); + std::make_unique<NfcPermissionContext>(profile, std::move(nfc_delegate)); #else permission_contexts[ContentSettingsType::NFC] = - std::make_unique<NfcPermissionContextAndroid>(profile); + std::make_unique<NfcPermissionContextAndroid>(profile, + std::move(nfc_delegate)); #endif permission_contexts[ContentSettingsType::VR] = std::make_unique<permissions::WebXrPermissionContext>(
diff --git a/chrome/browser/printing/cloud_print/privet_notifications.cc b/chrome/browser/printing/cloud_print/privet_notifications.cc index 77b3828..c6c60f24 100644 --- a/chrome/browser/printing/cloud_print/privet_notifications.cc +++ b/chrome/browser/printing/cloud_print/privet_notifications.cc
@@ -280,8 +280,8 @@ Profile::FromBrowserContext(profile_)); // Only show notifications for signed-in accounts. https://crbug.com/349098 - if (!identity_manager || !identity_manager->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired)) { + if (!identity_manager || + !identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSignin)) { return; } #endif // BUILDFLAG(IS_CHROMEOS_ASH)
diff --git a/chrome/browser/profiles/gaia_info_update_service.cc b/chrome/browser/profiles/gaia_info_update_service.cc index 5fe513fc..b58c719 100644 --- a/chrome/browser/profiles/gaia_info_update_service.cc +++ b/chrome/browser/profiles/gaia_info_update_service.cc
@@ -63,8 +63,7 @@ return; auto unconsented_primary_account_info = - identity_manager_->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + identity_manager_->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin); if (!gaia_id_of_profile_attribute_entry_.empty() && unconsented_primary_account_info.gaia != @@ -149,7 +148,7 @@ void GAIAInfoUpdateService::OnPrimaryAccountChanged( const signin::PrimaryAccountChangeEvent& event) { - switch (event.GetEventTypeFor(signin::ConsentLevel::kNotRequired)) { + switch (event.GetEventTypeFor(signin::ConsentLevel::kSignin)) { case signin::PrimaryAccountChangeEvent::Type::kSet: UpdatePrimaryAccount(); break; @@ -168,8 +167,8 @@ if (!ShouldUpdatePrimaryAccount()) return; - CoreAccountInfo account_info = identity_manager_->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + CoreAccountInfo account_info = + identity_manager_->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin); if (info.account_id != account_info.account_id) return; @@ -209,6 +208,5 @@ } bool GAIAInfoUpdateService::ShouldUpdatePrimaryAccount() { - return identity_manager_->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired); + return identity_manager_->HasPrimaryAccount(signin::ConsentLevel::kSignin); }
diff --git a/chrome/browser/profiles/gaia_info_update_service_unittest.cc b/chrome/browser/profiles/gaia_info_update_service_unittest.cc index bd44fa8..74e84ef8 100644 --- a/chrome/browser/profiles/gaia_info_update_service_unittest.cc +++ b/chrome/browser/profiles/gaia_info_update_service_unittest.cc
@@ -216,7 +216,7 @@ // Revoke sync consent (stay signed in with the primary account). identity_test_env()->RevokeSyncConsent(); ASSERT_TRUE(identity_test_env()->identity_manager()->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired)); + signin::ConsentLevel::kSignin)); // Verify that the GAIA name and picture, and picture URL are not cleared // as unconsented primary account still exists. EXPECT_EQ(entry->GetGAIAGivenName(), u"Pat"); @@ -230,7 +230,7 @@ AccountInfo info = identity_test_env()->MakeUnconsentedPrimaryAccountAvailable(email); EXPECT_TRUE(identity_test_env()->identity_manager()->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired)); + signin::ConsentLevel::kSignin)); EXPECT_FALSE(identity_test_env()->identity_manager()->HasPrimaryAccount( signin::ConsentLevel::kSync)); info = GetValidAccountInfo(info.email, info.account_id, "Pat", "Pat Foo", @@ -387,7 +387,7 @@ // Simulate a state where the profile entry has GAIA related information // when there is not primary account set. ASSERT_FALSE(identity_test_env()->identity_manager()->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired)); + signin::ConsentLevel::kSignin)); ASSERT_EQ(1u, storage()->GetNumberOfProfiles()); ProfileAttributesEntry* entry = storage()->GetAllProfilesAttributes().front(); entry->SetGAIAName(u"foo");
diff --git a/chrome/browser/profiles/guest_signin_observer_factory.cc b/chrome/browser/profiles/guest_signin_observer_factory.cc index 9038ef9..a53b2d5 100644 --- a/chrome/browser/profiles/guest_signin_observer_factory.cc +++ b/chrome/browser/profiles/guest_signin_observer_factory.cc
@@ -26,7 +26,7 @@ void OnPrimaryAccountChanged( const signin::PrimaryAccountChangeEvent& event) override { - switch (event.GetEventTypeFor(signin::ConsentLevel::kNotRequired)) { + switch (event.GetEventTypeFor(signin::ConsentLevel::kSignin)) { case signin::PrimaryAccountChangeEvent::Type::kSet: base::UmaHistogramBoolean("Profile.EphemeralGuest.Signin", true); break;
diff --git a/chrome/browser/profiles/profile_attributes_entry.cc b/chrome/browser/profiles/profile_attributes_entry.cc index e0035d6..7bf5dc4e 100644 --- a/chrome/browser/profiles/profile_attributes_entry.cc +++ b/chrome/browser/profiles/profile_attributes_entry.cc
@@ -50,8 +50,6 @@ const char kGAIANameKey[] = "gaia_name"; const char kShortcutNameKey[] = "shortcut_name"; const char kActiveTimeKey[] = "active_time"; -const char kAuthCredentialsKey[] = "local_auth_credentials"; -const char kPasswordTokenKey[] = "gaia_password_token"; const char kIsAuthErrorKey[] = "is_auth_error"; const char kMetricsBucketIndex[] = "metrics_bucket_index"; const char kSigninRequiredKey[] = "signin_required"; @@ -73,6 +71,10 @@ // Deprecated 2/2021. const char kIsOmittedFromProfileListKey[] = "is_omitted_from_profile_list"; +// Deprecated 3/2021. +const char kAuthCredentialsKey[] = "local_auth_credentials"; +const char kPasswordTokenKey[] = "gaia_password_token"; + constexpr int kIntegerNotSet = -1; // Persisted in prefs. @@ -163,7 +165,6 @@ // Profiles that require signin in the absence of an enterprise policy are // left-overs from legacy supervised users. Just unlock them, so users can // keep using them. - SetLocalAuthCredentials(std::string()); SetAuthInfo(std::string(), std::u16string(), false); SetIsSigninRequired(false); #endif @@ -324,14 +325,6 @@ resource_id); } -std::string ProfileAttributesEntry::GetLocalAuthCredentials() const { - return GetString(kAuthCredentialsKey); -} - -std::string ProfileAttributesEntry::GetPasswordChangeDetectionToken() const { - return GetString(kPasswordTokenKey); -} - bool ProfileAttributesEntry::GetBackgroundStatus() const { return GetBool(kBackgroundAppsKey); } @@ -527,15 +520,6 @@ profile_info_cache_->NotifyProfileSupervisedUserIdChanged(GetPath()); } -void ProfileAttributesEntry::SetLocalAuthCredentials(const std::string& auth) { - SetString(kAuthCredentialsKey, auth); -} - -void ProfileAttributesEntry::SetPasswordChangeDetectionToken( - const std::string& token) { - SetString(kPasswordTokenKey, token); -} - void ProfileAttributesEntry::SetBackgroundStatus(bool running_background_apps) { SetBool(kBackgroundAppsKey, running_background_apps); } @@ -959,4 +943,8 @@ void ProfileAttributesEntry::MigrateObsoleteProfileAttributes() { // Added 2/2021. ClearValue(kIsOmittedFromProfileListKey); + + // Added 3/2021. + ClearValue(kAuthCredentialsKey); + ClearValue(kPasswordTokenKey); }
diff --git a/chrome/browser/profiles/profile_attributes_entry.h b/chrome/browser/profiles/profile_attributes_entry.h index 7c741c9..3109a536 100644 --- a/chrome/browser/profiles/profile_attributes_entry.h +++ b/chrome/browser/profiles/profile_attributes_entry.h
@@ -84,8 +84,6 @@ // profiles::GetSizedAvatarIcon(). gfx::Image GetAvatarIcon(int size_for_placeholder_avatar = 74, bool use_high_res_file = true) const; - std::string GetLocalAuthCredentials() const; - std::string GetPasswordChangeDetectionToken() const; // Returns true if the profile is currently running any background apps. Note // that a return value of false could mean an error in collection or that // there are currently no background apps running. However, the action which @@ -165,8 +163,6 @@ // Only ephemeral profiles can be set as omitted. void SetIsOmitted(bool is_omitted); void SetSupervisedUserId(const std::string& id); - void SetLocalAuthCredentials(const std::string& auth); - void SetPasswordChangeDetectionToken(const std::string& token); void SetBackgroundStatus(bool running_background_apps); void SetGAIAName(const std::u16string& name); void SetGAIAGivenName(const std::u16string& name);
diff --git a/chrome/browser/profiles/profile_attributes_storage_unittest.cc b/chrome/browser/profiles/profile_attributes_storage_unittest.cc index a093cbb..dcd45f1 100644 --- a/chrome/browser/profiles/profile_attributes_storage_unittest.cc +++ b/chrome/browser/profiles/profile_attributes_storage_unittest.cc
@@ -329,9 +329,6 @@ VerifyAndResetCallExpectations(); TEST_STRING16_ACCESSORS(ProfileAttributesEntry, entry, ShortcutName); - TEST_STRING_ACCESSORS(ProfileAttributesEntry, entry, LocalAuthCredentials); - TEST_STRING_ACCESSORS( - ProfileAttributesEntry, entry, PasswordChangeDetectionToken); TEST_ACCESSORS(ProfileAttributesEntry, entry, BackgroundStatus, true, false); EXPECT_CALL(observer(), OnProfileNameChanged(path, _)).Times(4);
diff --git a/chrome/browser/profiles/profile_downloader.cc b/chrome/browser/profiles/profile_downloader.cc index 0167b10c..a50809df 100644 --- a/chrome/browser/profiles/profile_downloader.cc +++ b/chrome/browser/profiles/profile_downloader.cc
@@ -66,7 +66,7 @@ } account_id_ = account_id.empty() ? identity_manager_->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired) + signin::ConsentLevel::kSignin) : account_id; StartFetchingOAuth2AccessToken(); }
diff --git a/chrome/browser/profiles/profile_list_desktop_browsertest.cc b/chrome/browser/profiles/profile_list_desktop_browsertest.cc index 55e19f1..1475d46 100644 --- a/chrome/browser/profiles/profile_list_desktop_browsertest.cc +++ b/chrome/browser/profiles/profile_list_desktop_browsertest.cc
@@ -55,55 +55,6 @@ DISALLOW_COPY_AND_ASSIGN(ProfileListDesktopBrowserTest); }; -#if defined(OS_WIN) || defined(OS_MAC) -// SignOut is flaky on Windows (crbug.com/357329) -// and Mac (crbug.com/674497, crbug.com/1110452). -#define MAYBE_SignOut DISABLED_SignOut -#elif BUILDFLAG(IS_CHROMEOS_ASH) -// This test doesn't make sense for Chrome OS since it has a different -// multi-profiles menu in the system tray instead. -#define MAYBE_SignOut DISABLED_SignOut -#elif defined(OS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS) -// Flaky on Linux debug builds with libc++ (https://crbug.com/734875) -#define MAYBE_SignOut DISABLED_SignOut -#else -#define MAYBE_SignOut SignOut -#endif -IN_PROC_BROWSER_TEST_F(ProfileListDesktopBrowserTest, MAYBE_SignOut) { - if (!profiles::IsMultipleProfilesEnabled()) - return; - - ProfileManager* profile_manager = g_browser_process->profile_manager(); - Profile* current_profile = browser()->profile(); - ProfileAttributesStorage& storage = - profile_manager->GetProfileAttributesStorage(); - ProfileAttributesEntry* entry = - storage.GetProfileAttributesWithPath(current_profile->GetPath()); - ASSERT_NE(entry, nullptr); - - std::unique_ptr<AvatarMenu> menu = CreateAvatarMenu(&storage); - menu->RebuildMenu(); - - BrowserList* browser_list = BrowserList::GetInstance(); - EXPECT_EQ(1u, browser_list->size()); - - ProfileWaiter profile_waiter; - - EXPECT_FALSE(entry->IsSigninRequired()); - profiles::LockProfile(current_profile); - // Rely on test time-out for failure indication. - ui_test_utils::WaitForBrowserToClose(browser()); - - EXPECT_TRUE(entry->IsSigninRequired()); - EXPECT_EQ(0u, browser_list->size()); - - // Signing out brings up the User Manager which we should close before exit. - // But the User Manager is shown only when the system profile is created, - // which happens asynchronously. - profile_waiter.WaitForProfileAdded(); - ProfilePicker::Hide(); -} - #if BUILDFLAG(IS_CHROMEOS_ASH) // This test doesn't make sense for Chrome OS since it has a different // multi-profiles menu in the system tray instead.
diff --git a/chrome/browser/profiles/profile_manager.cc b/chrome/browser/profiles/profile_manager.cc index 4a0a8f42..0d45661 100644 --- a/chrome/browser/profiles/profile_manager.cc +++ b/chrome/browser/profiles/profile_manager.cc
@@ -1893,8 +1893,8 @@ IdentityManagerFactory::GetForProfile(profile); bool is_consented_primary_account = identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSync); - CoreAccountInfo account_info = identity_manager->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + CoreAccountInfo account_info = + identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin); std::u16string username = base::UTF8ToUTF16(account_info.email);
diff --git a/chrome/browser/profiles/profile_window.cc b/chrome/browser/profiles/profile_window.cc index 81641fd8..dde5b55 100644 --- a/chrome/browser/profiles/profile_window.cc +++ b/chrome/browser/profiles/profile_window.cc
@@ -73,12 +73,6 @@ namespace { #if BUILDFLAG(ENABLE_EXTENSIONS) -void BlockExtensions(Profile* profile) { - extensions::ExtensionService* extension_service = - extensions::ExtensionSystem::Get(profile)->extension_service(); - extension_service->BlockAllExtensions(); -} - void UnblockExtensions(Profile* profile) { extensions::ExtensionService* extension_service = extensions::ExtensionSystem::Get(profile)->extension_service(); @@ -248,69 +242,6 @@ return number_of_profiles >= min_profiles; } -void LockBrowserCloseSuccess(const base::FilePath& profile_path) { - ProfileManager* profile_manager = g_browser_process->profile_manager(); - ProfileAttributesEntry* entry = - profile_manager->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile_path); - DCHECK(entry); - entry->SetIsSigninRequired(true); - -#if BUILDFLAG(ENABLE_EXTENSIONS) - // Profile guaranteed to exist for it to have been locked. - BlockExtensions(profile_manager->GetProfileByPath(profile_path)); -#endif // BUILDFLAG(ENABLE_EXTENSIONS) - - chrome::HideTaskManager(); -#if !BUILDFLAG(IS_CHROMEOS_ASH) - ProfilePicker::Show(ProfilePicker::EntryPoint::kProfileLocked); -#endif // !BUILDFLAG(IS_CHROMEOS_ASH) -} - -void LockProfile(Profile* profile) { - DCHECK(profile); - if (profile) { - BrowserList::CloseAllBrowsersWithProfile( - profile, base::BindRepeating(&LockBrowserCloseSuccess), - BrowserList::CloseCallback(), false); - } -} - -bool IsLockAvailable(Profile* profile) { - DCHECK(profile); - if (profile->IsGuestSession() || profile->IsSystemProfile() || - profile->IsEphemeralGuestProfile()) { - return false; - } - - signin::IdentityManager* identity_manager = - IdentityManagerFactory::GetForProfile(profile); - if (!identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSync)) - return false; - base::Optional<AccountInfo> primary_account_info = - identity_manager->FindExtendedAccountInfoForAccountWithRefreshToken( - identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSync)); - std::string hosted_domain = primary_account_info.has_value() - ? primary_account_info.value().hosted_domain - : ""; - - // TODO(mlerman): Prohibit only users who authenticate using SAML. Until then, - // prohibited users who use hosted domains (aside from google.com). - if (hosted_domain != kNoHostedDomainFound && hosted_domain != "google.com") { - return false; - } - - // Lock only when there is at least one supervised user on the machine. - std::vector<ProfileAttributesEntry*> entries = - g_browser_process->profile_manager()->GetProfileAttributesStorage(). - GetAllProfilesAttributes(); - for (ProfileAttributesEntry* entry : entries) { - if (entry->IsSupervised()) - return true; - } - return false; -} - void CloseProfileWindows(Profile* profile) { DCHECK(profile); BrowserList::CloseAllBrowsersWithProfile(profile,
diff --git a/chrome/browser/profiles/profile_window.h b/chrome/browser/profiles/profile_window.h index b2c97138..2f3f8ec 100644 --- a/chrome/browser/profiles/profile_window.h +++ b/chrome/browser/profiles/profile_window.h
@@ -75,16 +75,9 @@ // one and the current window is a guest window. bool HasProfileSwitchTargets(Profile* profile); -// Closes and locks all the browser windows for |profile| and opens the user -// manager. -void LockProfile(Profile* profile); - // Close all the browser windows for |profile|. void CloseProfileWindows(Profile* profile); -// Returns whether lock is available to this profile. -bool IsLockAvailable(Profile* profile); - // Converts from modes in the avatar menu to modes understood by // ProfileMenuView. void BubbleViewModeFromAvatarBubbleMode(BrowserWindow::AvatarBubbleMode mode,
diff --git a/chrome/browser/profiles/profiles_state.cc b/chrome/browser/profiles/profiles_state.cc index 7aea889..1a12b92 100644 --- a/chrome/browser/profiles/profiles_state.cc +++ b/chrome/browser/profiles/profiles_state.cc
@@ -334,30 +334,6 @@ profile->Wipe(); } -#if !BUILDFLAG(IS_CHROMEOS_ASH) -bool AreAllNonChildNonSupervisedProfilesLocked() { - bool at_least_one_regular_profile_present = false; - - std::vector<ProfileAttributesEntry*> entries = - g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetAllProfilesAttributes(); - for (const ProfileAttributesEntry* entry : entries) { - if (entry->IsOmitted()) - continue; - - // Only consider non-child profiles. - if (!entry->IsChild()) { - at_least_one_regular_profile_present = true; - - if (!entry->IsSigninRequired()) - return false; - } - } - return at_least_one_regular_profile_present; -} -#endif - bool IsPublicSession() { #if BUILDFLAG(IS_CHROMEOS_ASH) if (chromeos::LoginState::IsInitialized()) {
diff --git a/chrome/browser/profiles/profiles_state.h b/chrome/browser/profiles/profiles_state.h index 6be2532..331675ae 100644 --- a/chrome/browser/profiles/profiles_state.h +++ b/chrome/browser/profiles/profiles_state.h
@@ -112,12 +112,6 @@ // a BrowsingDataRemover to delete all the Profile's data. void RemoveBrowsingDataForProfile(const base::FilePath& profile_path); -#if !BUILDFLAG(IS_CHROMEOS_ASH) -// Returns true if there exists at least one non-supervised or non-child profile -// and they are all locked. -bool AreAllNonChildNonSupervisedProfilesLocked(); -#endif - // Returns whether a public session is being run currently. bool IsPublicSession();
diff --git a/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc b/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc index 36c3f7a..0441ebc 100644 --- a/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc +++ b/chrome/browser/renderer_context_menu/render_view_context_menu_browsertest.cc
@@ -720,7 +720,20 @@ // Emoji context menu item should never be present on a non-editable field. EXPECT_FALSE(menu.IsItemPresent(IDC_CONTENT_CONTEXT_EMOJI)); } - +#if BUILDFLAG(IS_CHROMEOS_ASH) +// Executing the emoji panel item with no associated browser should not crash. +IN_PROC_BROWSER_TEST_F(ContextMenuBrowserTest, + ContextMenuForEmojiPanel_NullBrowserCrash) { + ui::SetShowEmojiKeyboardCallback( + base::BindRepeating(ui::ShowTabletModeEmojiPanel)); + std::unique_ptr<content::WebContents> detached_web_contents = + content::WebContents::Create( + content::WebContents::CreateParams(browser()->profile())); + TestRenderViewContextMenu menu(detached_web_contents->GetMainFrame(), {}); + menu.Init(); + menu.ExecuteCommand(IDC_CONTENT_CONTEXT_EMOJI, 0); +} +#else // Executing the emoji panel item with no associated browser should not crash. IN_PROC_BROWSER_TEST_F(ContextMenuBrowserTest, ContextMenuForEmojiPanel_NullBrowserCrash) { @@ -731,6 +744,7 @@ menu.Init(); menu.ExecuteCommand(IDC_CONTENT_CONTEXT_EMOJI, 0); } +#endif // BUILDFLAG(IS_CHROMEOS_ASH) // Only Chrome OS supports emoji panel callbacks. #if BUILDFLAG(IS_CHROMEOS_ASH)
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.html b/chrome/browser/resources/settings/privacy_page/privacy_page.html index 1095f8e..5063ac2 100644 --- a/chrome/browser/resources/settings/privacy_page/privacy_page.html +++ b/chrome/browser/resources/settings/privacy_page/privacy_page.html
@@ -1327,37 +1327,37 @@ <settings-subpage page-title="$i18n{fonts}" search-label="$i18n{siteSettingsAllSitesSearch}" search-term="{{searchFilter_}}"> - <template is="dom-if" if="[[enableContentSettingsRedesign_]]"> - <div class="content-settings-header secondary"> - $i18n{siteSettingsFontsDescription} - </div> - <settings-category-default-radio-group - category="[[ContentSettingsTypes.FONT_ACCESS]]" - allow-option-label="$i18n{siteSettingsFontsAllowed}" - allow-option-icon="settings:font-access" - block-option-label="$i18n{siteSettingsFontsBlocked}" - block-option-icon="settings:font-access-off"> - </settings-category-default-radio-group> - <category-setting-exceptions - category="[[ContentSettingsTypes.FONT_ACCESS]]" - block-header="$i18n{siteSettingsFontsBlockedExceptions}" - allow-header="$i18n{siteSettingsFontsAllowedExceptions}" - search-filter="[[searchFilter_]]"> - </category-setting-exceptions> - </template> - <template is="dom-if" if="[[!enableContentSettingsRedesign_]]"> - <category-default-setting - toggle-off-label="$i18n{siteSettingsFontAccessBlock}" - toggle-on-label="$i18n{siteSettingsFontAccessAsk}" - category="[[ContentSettingsTypes.FONT_ACCESS]]"> - </category-default-setting> - <category-setting-exceptions - category="[[ContentSettingsTypes.FONT_ACCESS]]" - block-header="$i18n{siteSettingsBlock}" - allow-header="$i18n{siteSettingsAllow}" - search-filter="[[searchFilter_]]"> - </category-setting-exceptions> - </template> + <template is="dom-if" if="[[enableContentSettingsRedesign_]]"> + <div class="content-settings-header secondary"> + $i18n{siteSettingsFontsDescription} + </div> + <settings-category-default-radio-group + category="[[ContentSettingsTypes.FONT_ACCESS]]" + allow-option-label="$i18n{siteSettingsFontsAllowed}" + allow-option-icon="settings:font-access" + block-option-label="$i18n{siteSettingsFontsBlocked}" + block-option-icon="settings:font-access-off"> + </settings-category-default-radio-group> + <category-setting-exceptions + category="[[ContentSettingsTypes.FONT_ACCESS]]" + block-header="$i18n{siteSettingsFontsBlockedExceptions}" + allow-header="$i18n{siteSettingsFontsAllowedExceptions}" + search-filter="[[searchFilter_]]"> + </category-setting-exceptions> + </template> + <template is="dom-if" if="[[!enableContentSettingsRedesign_]]"> + <category-default-setting + toggle-off-label="$i18n{siteSettingsFontAccessBlock}" + toggle-on-label="$i18n{siteSettingsFontAccessAsk}" + category="[[ContentSettingsTypes.FONT_ACCESS]]"> + </category-default-setting> + <category-setting-exceptions + category="[[ContentSettingsTypes.FONT_ACCESS]]" + block-header="$i18n{siteSettingsBlock}" + allow-header="$i18n{siteSettingsAllow}" + search-filter="[[searchFilter_]]"> + </category-setting-exceptions> + </template> </settings-subpage> </template> </template>
diff --git a/chrome/browser/resources/settings/site_settings/settings_category_default_radio_group.js b/chrome/browser/resources/settings/site_settings/settings_category_default_radio_group.js index 1c518cb7..70cf461 100644 --- a/chrome/browser/resources/settings/site_settings/settings_category_default_radio_group.js +++ b/chrome/browser/resources/settings/site_settings/settings_category_default_radio_group.js
@@ -110,6 +110,7 @@ case ContentSettingsTypes.VR: case ContentSettingsTypes.AR: case ContentSettingsTypes.WINDOW_PLACEMENT: + case ContentSettingsTypes.FONT_ACCESS: // "Ask" vs "Blocked". return ContentSetting.ASK; default:
diff --git a/chrome/browser/resources/tools/optimize_webui.gni b/chrome/browser/resources/tools/optimize_webui.gni index 88d4b6fd..f21fbd98 100644 --- a/chrome/browser/resources/tools/optimize_webui.gni +++ b/chrome/browser/resources/tools/optimize_webui.gni
@@ -2,32 +2,7 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -import("//build/config/python.gni") - -template("node") { - # TODO(crbug.com/1112471): Get this to run cleanly under Python 3. - python2_action(target_name) { - forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY) - forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) - - # Declare dependencies to all involved tools. - inputs += [ - "//third_party/node/node.py", - "//third_party/node/node_modules.py", - "//third_party/node/node_modules.tar.gz.sha1", - ] - - if (is_linux || is_chromeos) { - inputs += [ "//third_party/node/linux/node-linux-x64.tar.gz.sha1" ] - } - if (is_win) { - inputs += [ "//third_party/node/win/node.exe.sha1" ] - } - if (is_mac) { - inputs += [ "//third_party/node/mac/node-darwin-x64.tar.gz.sha1" ] - } - } -} +import("//third_party/node/node.gni") template("optimize_webui") { node(target_name) {
diff --git a/chrome/browser/safe_browsing/advanced_protection_status_manager.cc b/chrome/browser/safe_browsing/advanced_protection_status_manager.cc index 1e6f299..ba0ef3d5 100644 --- a/chrome/browser/safe_browsing/advanced_protection_status_manager.cc +++ b/chrome/browser/safe_browsing/advanced_protection_status_manager.cc
@@ -55,8 +55,8 @@ void AdvancedProtectionStatusManager::MaybeRefreshOnStartUp() { // Retrieves advanced protection service status from primary account's info. - CoreAccountInfo core_info = identity_manager_->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + CoreAccountInfo core_info = + identity_manager_->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin); if (core_info.account_id.empty()) return; @@ -125,7 +125,7 @@ void AdvancedProtectionStatusManager::OnPrimaryAccountChanged( const signin::PrimaryAccountChangeEvent& event) { - switch (event.GetEventTypeFor(signin::ConsentLevel::kNotRequired)) { + switch (event.GetEventTypeFor(signin::ConsentLevel::kSignin)) { case signin::PrimaryAccountChangeEvent::Type::kSet: { // TODO(crbug.com/926204): remove IdentityManager ensures that primary // account always has valid refresh token when it is set. @@ -298,7 +298,7 @@ CoreAccountId AdvancedProtectionStatusManager::GetUnconsentedPrimaryAccountId() const { return identity_manager_ ? identity_manager_->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired) + signin::ConsentLevel::kSignin) : CoreAccountId(); }
diff --git a/chrome/browser/safe_browsing/chrome_password_protection_service.cc b/chrome/browser/safe_browsing/chrome_password_protection_service.cc index 753e042f..6337d21 100644 --- a/chrome/browser/safe_browsing/chrome_password_protection_service.cc +++ b/chrome/browser/safe_browsing/chrome_password_protection_service.cc
@@ -735,7 +735,7 @@ if (identity_manager) { CoreAccountInfo unconsented_primary_account_info = identity_manager->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + signin::ConsentLevel::kSignin); // SecurityEventRecorder only supports unconsented primary accounts. if (gaia::AreEmailsSame(unconsented_primary_account_info.email, username_for_last_shown_warning())) {
diff --git a/chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_utils.cc b/chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_utils.cc index 64607585..7e33556 100644 --- a/chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_utils.cc +++ b/chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_utils.cc
@@ -338,7 +338,7 @@ // empty account info. return identity_manager ? identity_manager - ->GetPrimaryAccountInfo(signin::ConsentLevel::kNotRequired) + ->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin) .email : std::string(); }
diff --git a/chrome/browser/signin/account_reconcilor_factory.cc b/chrome/browser/signin/account_reconcilor_factory.cc index 36bc499..df21e94 100644 --- a/chrome/browser/signin/account_reconcilor_factory.cc +++ b/chrome/browser/signin/account_reconcilor_factory.cc
@@ -86,7 +86,7 @@ if (!GetIdentityManager()->HasAccountWithRefreshTokenInPersistentErrorState( GetIdentityManager()->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired))) { + signin::ConsentLevel::kSignin))) { return; }
diff --git a/chrome/browser/signin/chrome_signin_client.cc b/chrome/browser/signin/chrome_signin_client.cc index e65b7f5..0ed9cc9d 100644 --- a/chrome/browser/signin/chrome_signin_client.cc +++ b/chrome/browser/signin/chrome_signin_client.cc
@@ -109,7 +109,6 @@ } void ChromeSigninClient::DoFinalInit() { - MaybeFetchSigninTokenHandle(); VerifySyncToken(); } @@ -205,46 +204,6 @@ } } -void ChromeSigninClient::OnGetTokenInfoResponse( - std::unique_ptr<base::DictionaryValue> token_info) { - if (!token_info->HasKey("error")) { - std::string handle; - if (token_info->GetString("token_handle", &handle)) { - ProfileAttributesEntry* entry = - g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile_->GetPath()); - DCHECK(entry); - entry->SetPasswordChangeDetectionToken(handle); - } - } - access_token_fetcher_.reset(); -} - -void ChromeSigninClient::OnOAuthError() { - // Ignore the failure. It's not essential and we'll try again next time. - access_token_fetcher_.reset(); -} - -void ChromeSigninClient::OnNetworkError(int response_code) { - // Ignore the failure. It's not essential and we'll try again next time. - access_token_fetcher_.reset(); -} - -void ChromeSigninClient::OnAccessTokenAvailable( - GoogleServiceAuthError error, - signin::AccessTokenInfo access_token_info) { - access_token_fetcher_.reset(); - - // Exchange the access token for a handle that can be used for later - // verification that the token is still valid (i.e. the password has not - // been changed). - if (!oauth_client_) { - oauth_client_.reset(new gaia::GaiaOAuthClient(GetURLLoaderFactory())); - } - oauth_client_->GetTokenInfo(access_token_info.token, 3 /* retries */, this); -} - #if !BUILDFLAG(IS_CHROMEOS_ASH) void ChromeSigninClient::OnConnectionChanged( network::mojom::ConnectionType type) { @@ -295,36 +254,6 @@ #endif } -void ChromeSigninClient::MaybeFetchSigninTokenHandle() { -#if !defined(OS_ANDROID) && !BUILDFLAG(IS_CHROMEOS_ASH) - // We get a "handle" that can be used to reference the signin token on the - // server. We fetch this if we don't have one so that later we can check - // it to know if the signin token to which it is attached has been revoked - // and thus distinguish between a password mismatch due to the password - // being changed and the user simply mis-typing it. - if (profiles::IsLockAvailable(profile_)) { - ProfileAttributesStorage& storage = - g_browser_process->profile_manager()->GetProfileAttributesStorage(); - ProfileAttributesEntry* entry = - storage.GetProfileAttributesWithPath(profile_->GetPath()); - // If we don't have a token for detecting a password change, create one. - if (entry && entry->GetPasswordChangeDetectionToken().empty() && - !access_token_fetcher_) { - auto* identity_manager = IdentityManagerFactory::GetForProfile(profile_); - if (identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSync)) { - const signin::ScopeSet scopes{GaiaConstants::kGoogleUserInfoEmail}; - access_token_fetcher_ = - std::make_unique<signin::PrimaryAccountAccessTokenFetcher>( - "chrome_signin_client", identity_manager, scopes, - base::BindOnce(&ChromeSigninClient::OnAccessTokenAvailable, - base::Unretained(this)), - signin::PrimaryAccountAccessTokenFetcher::Mode::kImmediate); - } - } - } -#endif -} - void ChromeSigninClient::SetDiceMigrationCompleted() { #if BUILDFLAG(ENABLE_DICE_SUPPORT) AccountConsistencyModeManager::GetForProfile(profile_)
diff --git a/chrome/browser/signin/chrome_signin_client.h b/chrome/browser/signin/chrome_signin_client.h index ecc45caf..3395faf7 100644 --- a/chrome/browser/signin/chrome_signin_client.h +++ b/chrome/browser/signin/chrome_signin_client.h
@@ -16,8 +16,6 @@ #include "build/build_config.h" #include "build/chromeos_buildflags.h" #include "components/signin/public/base/signin_client.h" -#include "components/signin/public/identity_manager/primary_account_access_token_fetcher.h" -#include "google_apis/gaia/gaia_oauth_client.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/mojom/network_change_manager.mojom-forward.h" @@ -31,11 +29,12 @@ class Profile; class ChromeSigninClient - : public SigninClient, + : public SigninClient #if !BUILDFLAG(IS_CHROMEOS_ASH) - public network::NetworkConnectionTracker::NetworkConnectionObserver, + , + public network::NetworkConnectionTracker::NetworkConnectionObserver #endif - public gaia::GaiaOAuthClient::Delegate { +{ public: explicit ChromeSigninClient(Profile* profile); ~ChromeSigninClient() override; @@ -64,12 +63,6 @@ gaia::GaiaSource source) override; bool IsNonEnterpriseUser(const std::string& username) override; - // gaia::GaiaOAuthClient::Delegate implementation. - void OnGetTokenInfoResponse( - std::unique_ptr<base::DictionaryValue> token_info) override; - void OnOAuthError() override; - void OnNetworkError(int response_code) override; - #if !BUILDFLAG(IS_CHROMEOS_ASH) // network::NetworkConnectionTracker::NetworkConnectionObserver // implementation. @@ -88,17 +81,12 @@ virtual void LockForceSigninProfile(const base::FilePath& profile_path); private: - void MaybeFetchSigninTokenHandle(); void VerifySyncToken(); void OnCloseBrowsersSuccess( const signin_metrics::ProfileSignout signout_source_metric, const base::FilePath& profile_path); void OnCloseBrowsersAborted(const base::FilePath& profile_path); - // signin::PrimaryAccountAccessTokenFetcher callback - void OnAccessTokenAvailable(GoogleServiceAuthError error, - signin::AccessTokenInfo access_token_info); - Profile* profile_; // Stored callback from PreSignOut(); @@ -113,10 +101,6 @@ std::unique_ptr<ForceSigninVerifier> force_signin_verifier_; #endif - std::unique_ptr<gaia::GaiaOAuthClient> oauth_client_; - std::unique_ptr<signin::PrimaryAccountAccessTokenFetcher> - access_token_fetcher_; - scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_for_testing_;
diff --git a/chrome/browser/signin/chrome_signin_helper.cc b/chrome/browser/signin/chrome_signin_helper.cc index b0902763..d2c4da4 100644 --- a/chrome/browser/signin/chrome_signin_helper.cc +++ b/chrome/browser/signin/chrome_signin_helper.cc
@@ -253,8 +253,8 @@ // (See the reason below.) signin::IdentityManager* const identity_manager = IdentityManagerFactory::GetForProfile(profile); - CoreAccountInfo primary_account = identity_manager->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + CoreAccountInfo primary_account = + identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin); if (profile->IsChild() && gaia::AreEmailsSame(primary_account.email, manage_accounts_params.email)) {
diff --git a/chrome/browser/signin/dice_web_signin_interceptor.cc b/chrome/browser/signin/dice_web_signin_interceptor.cc index 1645c50..def1cd7 100644 --- a/chrome/browser/signin/dice_web_signin_interceptor.cc +++ b/chrome/browser/signin/dice_web_signin_interceptor.cc
@@ -63,7 +63,7 @@ // fields may be missing if they are not available. AccountInfo GetPrimaryAccountInfo(signin::IdentityManager* manager) { CoreAccountInfo primary_core_account_info = - manager->GetPrimaryAccountInfo(signin::ConsentLevel::kNotRequired); + manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin); if (primary_core_account_info.IsEmpty()) return AccountInfo(); @@ -362,8 +362,7 @@ DCHECK(intercepted_account_info.IsValid()); // Check if the intercepted account or the primary account is managed. CoreAccountInfo primary_core_account_info = - identity_manager_->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + identity_manager_->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin); if (primary_core_account_info.IsEmpty() || primary_core_account_info.account_id ==
diff --git a/chrome/browser/signin/dice_web_signin_interceptor_unittest.cc b/chrome/browser/signin/dice_web_signin_interceptor_unittest.cc index 0569c9e..d247094 100644 --- a/chrome/browser/signin/dice_web_signin_interceptor_unittest.cc +++ b/chrome/browser/signin/dice_web_signin_interceptor_unittest.cc
@@ -258,7 +258,7 @@ MakeValidAccountInfo(&account_info); identity_test_env()->UpdateAccountInfoForAccount(account_info); ASSERT_EQ(identity_test_env()->identity_manager()->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired), + signin::ConsentLevel::kSignin), primary_account_info.account_id); // The primary account does not have full account info (empty domain). @@ -301,7 +301,7 @@ // Primary account is not set. ASSERT_FALSE(identity_test_env()->identity_manager()->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired)); + signin::ConsentLevel::kSignin)); EXPECT_FALSE(interceptor()->ShouldShowEnterpriseBubble(account_info_1)); }
diff --git a/chrome/browser/signin/header_modification_delegate_impl.cc b/chrome/browser/signin/header_modification_delegate_impl.cc index 38e4597..4b83419 100644 --- a/chrome/browser/signin/header_modification_delegate_impl.cc +++ b/chrome/browser/signin/header_modification_delegate_impl.cc
@@ -73,7 +73,7 @@ ConsentLevel consent_level = ConsentLevel::kSync; #if defined(OS_ANDROID) if (base::FeatureList::IsEnabled(kMobileIdentityConsistency)) - consent_level = ConsentLevel::kNotRequired; + consent_level = ConsentLevel::kSignin; #endif IdentityManager* identity_manager =
diff --git a/chrome/browser/signin/local_auth.cc b/chrome/browser/signin/local_auth.cc deleted file mode 100644 index d534b7c..0000000 --- a/chrome/browser/signin/local_auth.cc +++ /dev/null
@@ -1,270 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/signin/local_auth.h" - -#include <memory> - -#include "base/base64.h" -#include "base/check_op.h" -#include "base/files/file_path.h" -#include "base/metrics/histogram_macros.h" -#include "base/notreached.h" -#include "base/strings/string_util.h" -#include "chrome/browser/browser_process.h" -#include "chrome/browser/profiles/profile.h" -#include "chrome/browser/profiles/profile_attributes_entry.h" -#include "chrome/browser/profiles/profile_attributes_storage.h" -#include "chrome/browser/profiles/profile_manager.h" -#include "chrome/common/pref_names.h" -#include "components/os_crypt/os_crypt.h" -#include "components/pref_registry/pref_registry_syncable.h" -#include "components/prefs/pref_service.h" -#include "crypto/random.h" -#include "crypto/secure_util.h" -#include "crypto/symmetric_key.h" - -namespace { - -struct HashEncoding { - char version; - unsigned hash_bits; - unsigned hash_bytes; - unsigned iteration_count; - unsigned stored_bits; - unsigned stored_bytes; - - public: - HashEncoding(char version, - unsigned hash_bits, - unsigned hash_bytes, - unsigned iteration_count, - unsigned stored_bits, - unsigned stored_bytes) : - version(version), - hash_bits(hash_bits), - hash_bytes(hash_bytes), - iteration_count(iteration_count), - stored_bits(stored_bits), - stored_bytes(stored_bytes) {} -}; - -// WARNING: Changing these values will make it impossible to do off-line -// authentication until the next successful on-line authentication. To change -// these safely, add a new HashEncoding object below and increment -// NUM_HASH_ENCODINGS. -const char kHash1Version = '1'; -const unsigned kHash1Bits = 256; -const unsigned kHash1Bytes = kHash1Bits / 8; -const unsigned kHash1IterationCount = 100000; - -// Store 13 bits to provide pin-like security (8192 possible values), without -// providing a complete oracle for the user's GAIA password. -const char kHash2Version = '2'; -const unsigned kHash2Bits = 256; -const unsigned kHash2Bytes = kHash2Bits / 8; -const unsigned kHash2IterationCount = 100000; -const unsigned kHash2StoredBits = 13; -const unsigned kHash2StoredBytes = (kHash2StoredBits + 7) / 8; - -const int NUM_HASH_ENCODINGS = 2; -HashEncoding encodings[NUM_HASH_ENCODINGS] = { - HashEncoding( - kHash1Version, kHash1Bits, kHash1Bytes, kHash1IterationCount, 0, 0), - HashEncoding( - kHash2Version, kHash2Bits, kHash2Bytes, kHash2IterationCount, - kHash2StoredBits, kHash2StoredBytes) -}; - -const HashEncoding* GetEncodingForVersion(char version) { - // Note that versions are 1-indexed. - DCHECK(version > '0' && version <= ('0' + NUM_HASH_ENCODINGS)); - return &encodings[(version - '0') - 1]; -} - -std::string TruncateStringByBits(const std::string& str, - const size_t len_bits) { - if (len_bits % 8 == 0) - return str.substr(0, len_bits / 8); - - // The initial truncation copies whole bytes - int number_bytes = (len_bits + 7) / 8; - std::string truncated_string = str.substr(0, number_bytes); - - // Keep the prescribed number of bits from the last byte. - unsigned last_char_bitmask = (1 << (len_bits % 8)) - 1; - truncated_string[number_bytes - 1] &= last_char_bitmask; - return truncated_string; -} - -std::string CreateSecurePasswordHash(const std::string& salt, - const std::string& password, - const HashEncoding& encoding) { - DCHECK_EQ(encoding.hash_bytes, salt.length()); - base::Time start_time = base::Time::Now(); - - // Library call to create secure password hash as SymmetricKey (uses PBKDF2). - std::unique_ptr<crypto::SymmetricKey> password_key( - crypto::SymmetricKey::DeriveKeyFromPasswordUsingPbkdf2( - crypto::SymmetricKey::AES, password, salt, encoding.iteration_count, - encoding.hash_bits)); - std::string password_hash = password_key->key(); - DCHECK_EQ(encoding.hash_bytes, password_hash.length()); - - UMA_HISTOGRAM_TIMES("PasswordHash.CreateTime", - base::Time::Now() - start_time); - - if (encoding.stored_bits) { - password_hash = TruncateStringByBits(password_hash, encoding.stored_bits); - DCHECK_EQ(encoding.stored_bytes, password_hash.length()); - } - DCHECK_EQ(encoding.stored_bytes ? encoding.stored_bytes : encoding.hash_bytes, - password_hash.length()); - return password_hash; -} - -std::string EncodePasswordHashRecord(const std::string& record, - const HashEncoding& encoding) { - // Encrypt the hash using the OS account-password protection (if available). - std::string encoded; - const bool success = OSCrypt::EncryptString(record, &encoded); - DCHECK(success); - - // Convert binary record to text for preference database. - std::string encoded64; - base::Base64Encode(encoded, &encoded64); - - // Stuff the "encoding" value into the first byte. - encoded64.insert(0, &encoding.version, sizeof(encoding.version)); - - return encoded64; -} - -bool DecodePasswordHashRecord(const std::string& encoded, - std::string* decoded, - char* encoding) { - // Extract the "encoding" value from the first byte and validate. - if (encoded.length() < 1) - return false; - *encoding = encoded[0]; - if (!GetEncodingForVersion(*encoding)) - return false; - - // Stored record is base64; convert to binary. - std::string unbase64; - if (!base::Base64Decode(encoded.substr(1), &unbase64)) - return false; - - // Decrypt the record using the OS account-password protection (if available). - return OSCrypt::DecryptString(unbase64, decoded); -} - -} // namespace - -std::string LocalAuth::TruncateStringByBits(const std::string& str, - const size_t len_bits) { - return ::TruncateStringByBits(str, len_bits); -} - -void LocalAuth::SetLocalAuthCredentialsWithEncoding( - ProfileAttributesEntry* entry, - const std::string& password, - char encoding_version) { - const HashEncoding& encoding = encodings[(encoding_version - '0') - 1]; - - // Salt should be random data, as long as the hash length, and different with - // every save. - std::string salt_str; - crypto::RandBytes(base::WriteInto(&salt_str, encoding.hash_bytes + 1), - encoding.hash_bytes); - - // Perform secure hash of password for storage. - std::string password_hash = CreateSecurePasswordHash( - salt_str, password, encoding); - - // Group all fields into a single record for storage; - std::string record; - record.append(salt_str); - record.append(password_hash); - - // Encode it and store it. - std::string encoded = EncodePasswordHashRecord(record, encoding); - entry->SetLocalAuthCredentials(encoded); -} - -void LocalAuth::SetLocalAuthCredentials(ProfileAttributesEntry* entry, - const std::string& password) { - DCHECK(entry); - DCHECK(password.length()); - SetLocalAuthCredentialsWithEncoding( - entry, password, '0' + NUM_HASH_ENCODINGS); -} - -void LocalAuth::SetLocalAuthCredentials(const Profile* profile, - const std::string& password) { - DCHECK(g_browser_process->profile_manager()->IsValidProfile(profile)); - ProfileAttributesEntry* entry = - g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile->GetPath()); - DCHECK(entry); - SetLocalAuthCredentials(entry, password); -} - -bool LocalAuth::ValidateLocalAuthCredentials(ProfileAttributesEntry* entry, - const std::string& password) { - DCHECK(entry); - - std::string record; - char encoding; - - std::string encodedhash = entry->GetLocalAuthCredentials(); - if (encodedhash.length() == 0 && password.length() == 0) - return true; - if (!DecodePasswordHashRecord(encodedhash, &record, &encoding)) - return false; - - std::string password_hash; - const char* password_saved; - const char* password_check; - size_t password_length; - - const HashEncoding* hash_encoding = GetEncodingForVersion(encoding); - if (!hash_encoding) { - // Unknown encoding. - return false; - } - - // Extract salt. - std::string salt_str(record.data(), hash_encoding->hash_bytes); - // Extract password. - password_saved = record.data() + hash_encoding->hash_bytes; - password_hash = CreateSecurePasswordHash(salt_str, password, *hash_encoding); - password_length = hash_encoding->stored_bytes; - password_check = password_hash.data(); - - bool passwords_match = crypto::SecureMemEqual( - password_saved, password_check, password_length); - - // Update the stored credentials to the latest encoding if necessary. - if (passwords_match && (hash_encoding->version - '0') != NUM_HASH_ENCODINGS) - SetLocalAuthCredentials(entry, password); - return passwords_match; -} - -bool LocalAuth::ValidateLocalAuthCredentials(const Profile* profile, - const std::string& password) { - DCHECK(g_browser_process->profile_manager()->IsValidProfile(profile)); - ProfileAttributesEntry* entry = - g_browser_process->profile_manager() - ->GetProfileAttributesStorage() - .GetProfileAttributesWithPath(profile->GetPath()); - - if (!entry) { - NOTREACHED(); - return false; - } - - return ValidateLocalAuthCredentials(entry, password); -}
diff --git a/chrome/browser/signin/local_auth.h b/chrome/browser/signin/local_auth.h deleted file mode 100644 index df764e8..0000000 --- a/chrome/browser/signin/local_auth.h +++ /dev/null
@@ -1,51 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -// -// The local-auth module allows for user authentication in the case when -// on-line authentication is not possible (e.g. there is no network -// connection). - -#ifndef CHROME_BROWSER_SIGNIN_LOCAL_AUTH_H_ -#define CHROME_BROWSER_SIGNIN_LOCAL_AUTH_H_ - -#include <stddef.h> - -#include <string> - -#include "base/gtest_prod_util.h" - -class LocalAuthTest; -class Profile; -class ProfileAttributesEntry; - -class LocalAuth { - public: - static void SetLocalAuthCredentials(ProfileAttributesEntry* entry, - const std::string& password); - - static void SetLocalAuthCredentials(const Profile* profile, - const std::string& password); - - static bool ValidateLocalAuthCredentials(ProfileAttributesEntry* entry, - const std::string& password); - - static bool ValidateLocalAuthCredentials(const Profile* profile, - const std::string& password); - - private: - FRIEND_TEST_ALL_PREFIXES(LocalAuthTest, SetUpgradeAndCheckCredentials); - FRIEND_TEST_ALL_PREFIXES(LocalAuthTest, TruncateStringEvenly); - FRIEND_TEST_ALL_PREFIXES(LocalAuthTest, TruncateStringUnevenly); - - // Return only the first |len_bits| bits of the string |str|. Defined here for - // testing. - static std::string TruncateStringByBits(const std::string& str, - const size_t len_bits); - - static void SetLocalAuthCredentialsWithEncoding(ProfileAttributesEntry* entry, - const std::string& password, - char encoding_version); -}; - -#endif // CHROME_BROWSER_SIGNIN_LOCAL_AUTH_H_
diff --git a/chrome/browser/signin/local_auth_unittest.cc b/chrome/browser/signin/local_auth_unittest.cc deleted file mode 100644 index 4dbee9f6..0000000 --- a/chrome/browser/signin/local_auth_unittest.cc +++ /dev/null
@@ -1,121 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/signin/local_auth.h" - -#include <stddef.h> - -#include "base/base64.h" -#include "build/build_config.h" -#include "chrome/browser/profiles/profile_attributes_entry.h" -#include "chrome/browser/profiles/profile_attributes_storage.h" -#include "chrome/test/base/testing_browser_process.h" -#include "chrome/test/base/testing_profile.h" -#include "chrome/test/base/testing_profile_manager.h" -#include "components/os_crypt/os_crypt_mocker.h" -#include "components/prefs/pref_service.h" -#include "components/sync_preferences/testing_pref_service_syncable.h" -#include "content/public/test/browser_task_environment.h" - -#include "testing/gtest/include/gtest/gtest.h" - -class LocalAuthTest : public testing::Test { - public: - LocalAuthTest() { OSCryptMocker::SetUp(); } - - ~LocalAuthTest() override { OSCryptMocker::TearDown(); } - - private: - content::BrowserTaskEnvironment task_environment_; -}; - -TEST_F(LocalAuthTest, SetAndCheckCredentials) { - TestingProfileManager testing_profile_manager( - TestingBrowserProcess::GetGlobal()); - ASSERT_TRUE(testing_profile_manager.SetUp()); - Profile* prof = testing_profile_manager.CreateTestingProfile("p1"); - ProfileAttributesEntry* entry = - testing_profile_manager.profile_attributes_storage() - ->GetProfileAttributesWithPath(prof->GetPath()); - ASSERT_NE(entry, nullptr); - EXPECT_EQ("", entry->GetLocalAuthCredentials()); - - std::string password("Some Password"); - EXPECT_FALSE(LocalAuth::ValidateLocalAuthCredentials(prof, password)); - - LocalAuth::SetLocalAuthCredentials(prof, password); - std::string passhash = entry->GetLocalAuthCredentials(); - - // We perform basic validation on the written record to ensure bugs don't slip - // in that cannot be seen from the API: - // - The encoding exists (we can guarantee future backward compatibility). - // - The plaintext version of the password is not mistakenly stored anywhere. - EXPECT_FALSE(passhash.empty()); - EXPECT_EQ('2', passhash[0]); - EXPECT_EQ(passhash.find(password), std::string::npos); - - std::string decodedhash; - base::Base64Decode(passhash.substr(1), &decodedhash); - EXPECT_FALSE(decodedhash.empty()); - EXPECT_EQ(decodedhash.find(password), std::string::npos); - - EXPECT_TRUE(LocalAuth::ValidateLocalAuthCredentials(prof, password)); - EXPECT_FALSE(LocalAuth::ValidateLocalAuthCredentials(prof, password + "1")); - - LocalAuth::SetLocalAuthCredentials(prof, password); // makes different salt - EXPECT_NE(passhash, entry->GetLocalAuthCredentials()); -} - -TEST_F(LocalAuthTest, SetUpgradeAndCheckCredentials) { - TestingProfileManager testing_profile_manager( - TestingBrowserProcess::GetGlobal()); - ASSERT_TRUE(testing_profile_manager.SetUp()); - Profile* prof = testing_profile_manager.CreateTestingProfile("p1"); - - std::string password("Some Password"); - ProfileAttributesEntry* entry = - testing_profile_manager.profile_attributes_storage() - ->GetProfileAttributesWithPath(prof->GetPath()); - ASSERT_NE(entry, nullptr); - LocalAuth::SetLocalAuthCredentialsWithEncoding(entry, password, '1'); - - // Ensure we indeed persisted the correct encoding. - std::string oldpasshash = entry->GetLocalAuthCredentials(); - EXPECT_EQ('1', oldpasshash[0]); - - // Validate, ensure we can validate against the old encoding. - EXPECT_TRUE(LocalAuth::ValidateLocalAuthCredentials(prof, password)); - - // Ensure we updated the encoding. - std::string newpasshash = entry->GetLocalAuthCredentials(); - EXPECT_EQ('2', newpasshash[0]); - // Encoding '2' writes fewer bytes than encoding '1'. - EXPECT_LE(newpasshash.length(), oldpasshash.length()); - - // Validate, ensure we validate against the new encoding. - EXPECT_TRUE(LocalAuth::ValidateLocalAuthCredentials(prof, password)); -} - -// Test truncation where each byte is left whole. -TEST_F(LocalAuthTest, TruncateStringEvenly) { - std::string two_chars = "A6"; - std::string three_chars = "A6C"; - EXPECT_EQ(two_chars, LocalAuth::TruncateStringByBits(two_chars, 16)); - EXPECT_EQ(two_chars, LocalAuth::TruncateStringByBits(three_chars, 16)); - - EXPECT_EQ(two_chars, LocalAuth::TruncateStringByBits(two_chars, 14)); - EXPECT_EQ(two_chars, LocalAuth::TruncateStringByBits(three_chars, 14)); -} - -// Test truncation that affects the results within a byte. -TEST_F(LocalAuthTest, TruncateStringUnevenly) { - std::string two_chars = "Az"; - std::string three_chars = "AzC"; - // 'z' = 0x7A, ':' = 0x3A. - std::string two_chars_truncated = "A:"; - EXPECT_EQ(two_chars_truncated, - LocalAuth::TruncateStringByBits(two_chars, 14)); - EXPECT_EQ(two_chars_truncated, - LocalAuth::TruncateStringByBits(three_chars, 14)); -}
diff --git a/chrome/browser/signin/signin_manager.cc b/chrome/browser/signin/signin_manager.cc index 9c28467..61c8a41f 100644 --- a/chrome/browser/signin/signin_manager.cc +++ b/chrome/browser/signin/signin_manager.cc
@@ -28,14 +28,14 @@ DCHECK(!account || !account->IsEmpty()); if (account) { if (identity_manager_->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired) != account) { + signin::ConsentLevel::kSignin) != account) { DCHECK( !identity_manager_->HasPrimaryAccount(signin::ConsentLevel::kSync)); identity_manager_->GetPrimaryAccountMutator() ->SetUnconsentedPrimaryAccount(account->account_id); } } else if (identity_manager_->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired)) { + signin::ConsentLevel::kSignin)) { DCHECK(!identity_manager_->HasPrimaryAccount(signin::ConsentLevel::kSync)); identity_manager_->GetPrimaryAccountMutator()->ClearPrimaryAccount( signin_metrics::USER_DELETED_ACCOUNT_COOKIES, @@ -82,14 +82,14 @@ return error_state ? base::nullopt : account_info; } - if (!identity_manager_->HasPrimaryAccount(signin::ConsentLevel::kNotRequired)) + if (!identity_manager_->HasPrimaryAccount(signin::ConsentLevel::kSignin)) return base::nullopt; // If cookies or tokens are not loaded, it is not possible to fully compute // the unconsented primary account. However, if the current unconsented // primary account is no longer valid, it has to be removed. - CoreAccountId current_account = identity_manager_->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired); + CoreAccountId current_account = + identity_manager_->GetPrimaryAccountId(signin::ConsentLevel::kSignin); if (are_refresh_tokens_loaded && !identity_manager_->HasAccountWithRefreshToken(current_account)) { @@ -115,7 +115,7 @@ // No indication that the current UPA is invalid, return current UPA. return identity_manager_->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + signin::ConsentLevel::kSignin); } // signin::IdentityManager::Observer implementation. @@ -149,10 +149,9 @@ void SigninManager::OnRefreshTokenRemovedForAccount( const CoreAccountId& account_id) { if (!identity_manager_->AreRefreshTokensLoaded() && - identity_manager_->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired) && + identity_manager_->HasPrimaryAccount(signin::ConsentLevel::kSignin) && account_id == identity_manager_->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired)) { + signin::ConsentLevel::kSignin)) { unconsented_primary_account_revoked_during_load_ = true; } UpdateUnconsentedPrimaryAccount(); @@ -175,8 +174,8 @@ void SigninManager::OnErrorStateOfRefreshTokenUpdatedForAccount( const CoreAccountInfo& account_info, const GoogleServiceAuthError& error) { - CoreAccountInfo current_account = identity_manager_->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + CoreAccountInfo current_account = + identity_manager_->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin); bool should_update = false; if (error == GoogleServiceAuthError::AuthErrorNone()) {
diff --git a/chrome/browser/signin/signin_manager_unittest.cc b/chrome/browser/signin/signin_manager_unittest.cc index 3bd0628..1502232 100644 --- a/chrome/browser/signin/signin_manager_unittest.cc +++ b/chrome/browser/signin/signin_manager_unittest.cc
@@ -81,7 +81,7 @@ EXPECT_EQ(1U, observer().events().size()); auto event = observer().events()[0]; EXPECT_EQ(PrimaryAccountChangeEvent::Type::kSet, - event.GetEventTypeFor(ConsentLevel::kNotRequired)); + event.GetEventTypeFor(ConsentLevel::kSignin)); EXPECT_TRUE(event.GetPreviousState().primary_account.IsEmpty()); EXPECT_EQ(expected_primary_account, event.GetCurrentState().primary_account); @@ -93,7 +93,7 @@ EXPECT_EQ(1U, observer().events().size()); auto event = observer().events()[0]; EXPECT_EQ(PrimaryAccountChangeEvent::Type::kCleared, - event.GetEventTypeFor(ConsentLevel::kNotRequired)); + event.GetEventTypeFor(ConsentLevel::kSignin)); EXPECT_EQ(expected_cleared_account, event.GetPreviousState().primary_account); EXPECT_TRUE(event.GetCurrentState().primary_account.IsEmpty()); @@ -105,7 +105,7 @@ EXPECT_EQ(1U, observer().events().size()); auto event = observer().events()[0]; EXPECT_EQ(PrimaryAccountChangeEvent::Type::kSet, - event.GetEventTypeFor(ConsentLevel::kNotRequired)); + event.GetEventTypeFor(ConsentLevel::kSignin)); EXPECT_EQ(PrimaryAccountChangeEvent::Type::kSet, event.GetEventTypeFor(ConsentLevel::kSync)); EXPECT_TRUE(event.GetPreviousState().primary_account.IsEmpty()); @@ -125,10 +125,9 @@ identity_test_env_.MakeAccountAvailableWithCookies(account.email, account.gaia); EXPECT_FALSE(account.IsEmpty()); - EXPECT_TRUE( - identity_manager()->HasPrimaryAccount(ConsentLevel::kNotRequired)); - EXPECT_EQ(account, identity_manager()->GetPrimaryAccountInfo( - ConsentLevel::kNotRequired)); + EXPECT_TRUE(identity_manager()->HasPrimaryAccount(ConsentLevel::kSignin)); + EXPECT_EQ(account, + identity_manager()->GetPrimaryAccountInfo(ConsentLevel::kSignin)); EXPECT_FALSE(identity_manager()->HasPrimaryAccount(ConsentLevel::kSync)); return account; } @@ -136,8 +135,8 @@ AccountInfo MakeSyncAccountAvailableWithCookies(const std::string& email) { AccountInfo account = identity_test_env_.MakePrimaryAccountAvailable(email); identity_test_env_.SetCookieAccounts({{account.email, account.gaia}}); - EXPECT_EQ(account, identity_manager()->GetPrimaryAccountInfo( - ConsentLevel::kNotRequired)); + EXPECT_EQ(account, + identity_manager()->GetPrimaryAccountInfo(ConsentLevel::kSignin)); EXPECT_EQ(account, identity_manager()->GetPrimaryAccountInfo(ConsentLevel::kSync)); EXPECT_TRUE(identity_manager()->HasPrimaryAccountWithRefreshToken( @@ -161,8 +160,8 @@ // Add an unconsented primary account, incl. proper cookies. AccountInfo account = MakeAccountAvailableWithCookies(kTestEmail); ExpectUnconsentedPrimaryAccountSetEvent(account); - EXPECT_EQ(account, identity_manager()->GetPrimaryAccountInfo( - ConsentLevel::kNotRequired)); + EXPECT_EQ(account, + identity_manager()->GetPrimaryAccountInfo(ConsentLevel::kSignin)); } TEST_F( @@ -175,15 +174,13 @@ // Invalid token. SetInvalidRefreshTokenForAccount(identity_manager(), account.account_id); ExpectUnconsentedPrimaryAccountClearedEvent(account); - EXPECT_FALSE( - identity_manager()->HasPrimaryAccount(ConsentLevel::kNotRequired)); + EXPECT_FALSE(identity_manager()->HasPrimaryAccount(ConsentLevel::kSignin)); // Update with a valid token. SetRefreshTokenForAccount(identity_manager(), account.account_id, ""); ExpectUnconsentedPrimaryAccountSetEvent(account); - EXPECT_EQ( - identity_manager()->GetPrimaryAccountInfo(ConsentLevel::kNotRequired), - account); + EXPECT_EQ(identity_manager()->GetPrimaryAccountInfo(ConsentLevel::kSignin), + account); } TEST_F( @@ -196,15 +193,14 @@ // With no refresh token, there is no unconsented primary account any more. identity_test_env()->RemoveRefreshTokenForAccount(account.account_id); ExpectUnconsentedPrimaryAccountClearedEvent(account); - EXPECT_FALSE( - identity_manager()->HasPrimaryAccount(ConsentLevel::kNotRequired)); + EXPECT_FALSE(identity_manager()->HasPrimaryAccount(ConsentLevel::kSignin)); } TEST_F(SigninManagerTest, UnconsentedPrimaryAccountNotChangedOnSignout) { // Set a primary account at sync consent level. AccountInfo account = MakeSyncAccountAvailableWithCookies(kTestEmail); - EXPECT_EQ(account, identity_manager()->GetPrimaryAccountInfo( - ConsentLevel::kNotRequired)); + EXPECT_EQ(account, + identity_manager()->GetPrimaryAccountInfo(ConsentLevel::kSignin)); EXPECT_EQ(account, identity_manager()->GetPrimaryAccountInfo(ConsentLevel::kSync)); EXPECT_TRUE(identity_manager()->HasPrimaryAccountWithRefreshToken( @@ -217,14 +213,14 @@ identity_test_env()->RevokeSyncConsent(); base::RunLoop().RunUntilIdle(); - EXPECT_EQ(account, identity_manager()->GetPrimaryAccountInfo( - ConsentLevel::kNotRequired)); + EXPECT_EQ(account, + identity_manager()->GetPrimaryAccountInfo(ConsentLevel::kSignin)); EXPECT_FALSE(identity_manager()->HasPrimaryAccount(ConsentLevel::kSync)); EXPECT_EQ(1U, observer().events().size()); auto event = observer().events()[0]; EXPECT_EQ(PrimaryAccountChangeEvent::Type::kNone, - event.GetEventTypeFor(ConsentLevel::kNotRequired)); + event.GetEventTypeFor(ConsentLevel::kSignin)); EXPECT_EQ(PrimaryAccountChangeEvent::Type::kCleared, event.GetEventTypeFor(ConsentLevel::kSync)); EXPECT_EQ(account, event.GetPreviousState().primary_account); @@ -245,8 +241,7 @@ ASSERT_FALSE(identity_manager()->GetAccountsInCookieJar().accounts_are_fresh); // Unconsented account was removed. - EXPECT_FALSE( - identity_manager()->HasPrimaryAccount(ConsentLevel::kNotRequired)); + EXPECT_FALSE(identity_manager()->HasPrimaryAccount(ConsentLevel::kSignin)); ExpectUnconsentedPrimaryAccountClearedEvent(account); } @@ -261,11 +256,10 @@ {{main_account.email, main_account.gaia}, {secondary_account.email, secondary_account.gaia}}); - EXPECT_TRUE( - identity_manager()->HasPrimaryAccount(ConsentLevel::kNotRequired)); + EXPECT_TRUE(identity_manager()->HasPrimaryAccount(ConsentLevel::kSignin)); EXPECT_FALSE(identity_manager()->HasPrimaryAccount(ConsentLevel::kSync)); - EXPECT_EQ(main_account, identity_manager()->GetPrimaryAccountInfo( - ConsentLevel::kNotRequired)); + EXPECT_EQ(main_account, + identity_manager()->GetPrimaryAccountInfo(ConsentLevel::kSignin)); ExpectUnconsentedPrimaryAccountSetEvent(main_account); // Make the cookies stale and remove the main account. @@ -274,8 +268,7 @@ ASSERT_FALSE(identity_manager()->GetAccountsInCookieJar().accounts_are_fresh); // Unconsented account was removed. - EXPECT_FALSE( - identity_manager()->HasPrimaryAccount(ConsentLevel::kNotRequired)); + EXPECT_FALSE(identity_manager()->HasPrimaryAccount(ConsentLevel::kSignin)); ExpectUnconsentedPrimaryAccountClearedEvent(main_account); } @@ -288,8 +281,8 @@ identity_test_env()->SetCookieAccounts( {{main_account.email, main_account.gaia}, {secondary_account.email, secondary_account.gaia}}); - ASSERT_EQ(main_account, identity_manager()->GetPrimaryAccountInfo( - ConsentLevel::kNotRequired)); + ASSERT_EQ(main_account, + identity_manager()->GetPrimaryAccountInfo(ConsentLevel::kSignin)); ASSERT_FALSE(identity_manager()->HasPrimaryAccount(ConsentLevel::kSync)); ExpectUnconsentedPrimaryAccountSetEvent(main_account); @@ -298,27 +291,25 @@ RecreateSigninManager(); // Unconsented primary account is available while tokens are not loaded. - EXPECT_EQ(main_account, identity_manager()->GetPrimaryAccountInfo( - ConsentLevel::kNotRequired)); + EXPECT_EQ(main_account, + identity_manager()->GetPrimaryAccountInfo(ConsentLevel::kSignin)); EXPECT_TRUE(observer().events().empty()); // Revoking an unrelated token doesn't change the unconsented primary account. identity_test_env()->RemoveRefreshTokenForAccount( secondary_account.account_id); - EXPECT_EQ(main_account, identity_manager()->GetPrimaryAccountInfo( - ConsentLevel::kNotRequired)); + EXPECT_EQ(main_account, + identity_manager()->GetPrimaryAccountInfo(ConsentLevel::kSignin)); EXPECT_TRUE(observer().events().empty()); // Revoke the unconsented primary account while tokens are not loaded. identity_test_env()->RemoveRefreshTokenForAccount(main_account.account_id); - EXPECT_FALSE( - identity_manager()->HasPrimaryAccount(ConsentLevel::kNotRequired)); + EXPECT_FALSE(identity_manager()->HasPrimaryAccount(ConsentLevel::kSignin)); ExpectUnconsentedPrimaryAccountClearedEvent(main_account); // Finish the token load. identity_test_env()->ReloadAccountsFromDisk(); - EXPECT_FALSE( - identity_manager()->HasPrimaryAccount(ConsentLevel::kNotRequired)); + EXPECT_FALSE(identity_manager()->HasPrimaryAccount(ConsentLevel::kSignin)); EXPECT_TRUE(observer().events().empty()); } @@ -331,8 +322,8 @@ identity_test_env()->SetCookieAccounts( {{first_account.email, first_account.gaia}, {second_account.email, second_account.gaia}}); - ASSERT_EQ(first_account, identity_manager()->GetPrimaryAccountInfo( - ConsentLevel::kNotRequired)); + ASSERT_EQ(first_account, + identity_manager()->GetPrimaryAccountInfo(ConsentLevel::kSignin)); ExpectUnconsentedPrimaryAccountSetEvent(first_account); // Set the sync primary account to the second account in cookies. @@ -357,17 +348,16 @@ EXPECT_FALSE( identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSync)); EXPECT_FALSE(identity_manager()->HasPrimaryAccount(ConsentLevel::kSync)); - EXPECT_TRUE( - identity_manager()->HasPrimaryAccount(ConsentLevel::kNotRequired)); - EXPECT_EQ(first_account, identity_manager()->GetPrimaryAccountInfo( - ConsentLevel::kNotRequired)); + EXPECT_TRUE(identity_manager()->HasPrimaryAccount(ConsentLevel::kSignin)); + EXPECT_EQ(first_account, + identity_manager()->GetPrimaryAccountInfo(ConsentLevel::kSignin)); EXPECT_EQ(2U, observer().events().size()); event = observer().events()[0]; EXPECT_EQ(PrimaryAccountChangeEvent::Type::kCleared, event.GetEventTypeFor(ConsentLevel::kSync)); EXPECT_EQ(PrimaryAccountChangeEvent::Type::kNone, - event.GetEventTypeFor(ConsentLevel::kNotRequired)); + event.GetEventTypeFor(ConsentLevel::kSignin)); EXPECT_EQ(second_account, event.GetPreviousState().primary_account); EXPECT_EQ(second_account, event.GetCurrentState().primary_account); @@ -375,7 +365,7 @@ EXPECT_EQ(PrimaryAccountChangeEvent::Type::kNone, event.GetEventTypeFor(ConsentLevel::kSync)); EXPECT_EQ(PrimaryAccountChangeEvent::Type::kSet, - event.GetEventTypeFor(ConsentLevel::kNotRequired)); + event.GetEventTypeFor(ConsentLevel::kSignin)); EXPECT_EQ(second_account, event.GetPreviousState().primary_account); EXPECT_EQ(first_account, event.GetCurrentState().primary_account); } @@ -390,7 +380,7 @@ EXPECT_EQ(1U, observer().events().size()); auto event = observer().events()[0]; EXPECT_EQ(PrimaryAccountChangeEvent::Type::kCleared, - event.GetEventTypeFor(ConsentLevel::kNotRequired)); + event.GetEventTypeFor(ConsentLevel::kSignin)); EXPECT_EQ(PrimaryAccountChangeEvent::Type::kCleared, event.GetEventTypeFor(ConsentLevel::kSync)); EXPECT_EQ(account, event.GetPreviousState().primary_account);
diff --git a/chrome/browser/signin/signin_profile_attributes_updater.cc b/chrome/browser/signin/signin_profile_attributes_updater.cc index 2af891a..51d3624 100644 --- a/chrome/browser/signin/signin_profile_attributes_updater.cc +++ b/chrome/browser/signin/signin_profile_attributes_updater.cc
@@ -51,8 +51,8 @@ return; } - CoreAccountInfo account_info = identity_manager_->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + CoreAccountInfo account_info = + identity_manager_->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin); bool clear_profile = account_info.IsEmpty(); @@ -65,7 +65,6 @@ } if (clear_profile) { - entry->SetLocalAuthCredentials(std::string()); entry->SetAuthInfo(std::string(), std::u16string(), /*is_consented_primary_account=*/false); if (!signin_util::IsForceSigninEnabled())
diff --git a/chrome/browser/signin/signin_promo.cc b/chrome/browser/signin/signin_promo.cc index 7ae725c..007be6c 100644 --- a/chrome/browser/signin/signin_promo.cc +++ b/chrome/browser/signin/signin_promo.cc
@@ -42,8 +42,8 @@ static_cast<int>(signin_metrics::AccessPoint::ACCESS_POINT_MAX)); CHECK_NE(static_cast<int>(access_point), static_cast<int>(signin_metrics::AccessPoint::ACCESS_POINT_UNKNOWN)); - CHECK_LT(static_cast<int>(reason), - static_cast<int>(signin_metrics::Reason::REASON_MAX)); + CHECK_LE(static_cast<int>(reason), + static_cast<int>(signin_metrics::Reason::kMaxValue)); CHECK_NE(static_cast<int>(reason), static_cast<int>(signin_metrics::Reason::REASON_UNKNOWN_REASON)); @@ -129,23 +129,13 @@ base::StringToInt(value, &reason); if (reason < static_cast<int>( signin_metrics::Reason::REASON_SIGNIN_PRIMARY_ACCOUNT) || - reason >= static_cast<int>(signin_metrics::Reason::REASON_MAX)) { + reason > static_cast<int>(signin_metrics::Reason::kMaxValue)) { return signin_metrics::Reason::REASON_UNKNOWN_REASON; } return static_cast<signin_metrics::Reason>(reason); } -bool IsAutoCloseEnabledInEmbeddedURL(const GURL& url) { - std::string value; - if (net::GetValueForKeyInQuery(url, kSignInPromoQueryKeyAutoClose, &value)) { - int enabled = 0; - if (base::StringToInt(value, &enabled) && enabled == 1) - return true; - } - return false; -} - void RegisterProfilePrefs( user_prefs::PrefRegistrySyncable* registry) { registry->RegisterIntegerPref(prefs::kDiceSigninUserMenuPromoCount, 0);
diff --git a/chrome/browser/signin/signin_promo.h b/chrome/browser/signin/signin_promo.h index 9a3fe0c5..ad9551c 100644 --- a/chrome/browser/signin/signin_promo.h +++ b/chrome/browser/signin/signin_promo.h
@@ -74,9 +74,6 @@ // Gets the sign in reason from the query portion of the sign in promo URL. signin_metrics::Reason GetSigninReasonForEmbeddedPromoURL(const GURL& url); -// Returns true if the auto_close parameter in the given URL is set to true. -bool IsAutoCloseEnabledInEmbeddedURL(const GURL& url); - // Registers the preferences the Sign In Promo needs. void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
diff --git a/chrome/browser/signin/signin_promo_unittest.cc b/chrome/browser/signin/signin_promo_unittest.cc index 28c3b9a..7d863f4 100644 --- a/chrome/browser/signin/signin_promo_unittest.cc +++ b/chrome/browser/signin/signin_promo_unittest.cc
@@ -21,25 +21,25 @@ GetEmbeddedPromoURL(signin_metrics::AccessPoint::ACCESS_POINT_START_PAGE, signin_metrics::Reason::REASON_SIGNIN_PRIMARY_ACCOUNT, true)); - replace_query.SetQueryStr("access_point=15&reason=3"); + replace_query.SetQueryStr("access_point=15&reason=1"); EXPECT_EQ( GURL(chrome::kChromeUIChromeSigninURL).ReplaceComponents(replace_query), GetEmbeddedPromoURL( signin_metrics::AccessPoint::ACCESS_POINT_SIGNIN_PROMO, - signin_metrics::Reason::REASON_UNLOCK, false)); + signin_metrics::Reason::REASON_ADD_SECONDARY_ACCOUNT, false)); } TEST(SigninPromoTest, TestReauthURL) { GURL::Replacements replace_query; replace_query.SetQueryStr( - "access_point=0&reason=3&auto_close=1" + "access_point=0&reason=6&auto_close=1" "&email=example%40domain.com&validateEmail=1" "&readOnlyEmail=1"); EXPECT_EQ( GURL(chrome::kChromeUIChromeSigninURL).ReplaceComponents(replace_query), GetEmbeddedReauthURLWithEmail( signin_metrics::AccessPoint::ACCESS_POINT_START_PAGE, - signin_metrics::Reason::REASON_UNLOCK, "example@domain.com")); + signin_metrics::Reason::REASON_FETCH_LST_ONLY, "example@domain.com")); } #endif // !BUILDFLAG(IS_CHROMEOS_ASH)
diff --git a/chrome/browser/signin/signin_ui_util.cc b/chrome/browser/signin/signin_ui_util.cc index 3a1ae45..4785638 100644 --- a/chrome/browser/signin/signin_ui_util.cc +++ b/chrome/browser/signin/signin_ui_util.cc
@@ -297,7 +297,7 @@ // Compute the default account. CoreAccountId default_account_id = - identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kNotRequired); + identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kSignin); // Fetch account information for each id and make sure that the first account // in the list matches the unconsented primary account (if available). @@ -331,8 +331,8 @@ DCHECK(profile); signin::IdentityManager* identity_manager = IdentityManagerFactory::GetForProfile(profile); - CoreAccountInfo core_info = identity_manager->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + CoreAccountInfo core_info = + identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin); // If there's no unconsented primary account, simply return the name of the // profile according to profile attributes. if (core_info.IsEmpty())
diff --git a/chrome/browser/signin/signin_ui_util_unittest.cc b/chrome/browser/signin/signin_ui_util_unittest.cc index 1fd7a8b..f6abe9f 100644 --- a/chrome/browser/signin/signin_ui_util_unittest.cc +++ b/chrome/browser/signin/signin_ui_util_unittest.cc
@@ -101,7 +101,8 @@ signin_metrics::AccessPoint::ACCESS_POINT_MAX; signin_metrics::PromoAction signin_promo_action = signin_metrics::PromoAction::PROMO_ACTION_NO_SIGNIN_PROMO; - signin_metrics::Reason signin_reason = signin_metrics::Reason::REASON_MAX; + signin_metrics::Reason signin_reason = + signin_metrics::Reason::REASON_UNKNOWN_REASON; CoreAccountId account_id; DiceTurnSyncOnHelper::SigninAbortedMode signin_aborted_mode = DiceTurnSyncOnHelper::SigninAbortedMode::REMOVE_ACCOUNT;
diff --git a/chrome/browser/signin/signin_util_win.cc b/chrome/browser/signin/signin_util_win.cc index 9f053eb..c524678 100644 --- a/chrome/browser/signin/signin_util_win.cc +++ b/chrome/browser/signin/signin_util_win.cc
@@ -305,16 +305,6 @@ return false; } -// Chrome doesn't allow signing into current profile if the same user is signed -// in another profile. -bool CanSignInToCurrentProfile(const std::string& gaia_id, - const std::string& email, - Profile* profile) { - return CanOfferSignin(profile, CAN_OFFER_SIGNIN_FOR_ALL_ACCOUNTS, gaia_id, - email) - .IsOk(); -} - void SigninWithCredentialProviderIfPossible(Profile* profile) { bool import_only_on_first_run = true; bool import_when_primary_account_exists = false; @@ -327,9 +317,11 @@ if (cred_provider_gaia_id.empty() || cred_provider_email.empty()) return; - if (!CanSignInToCurrentProfile(base::WideToUTF8(cred_provider_gaia_id), - base::WideToUTF8(cred_provider_email), - profile) || + // Chrome doesn't allow signing into current profile if the same user is + // signed in another profile. + if (!CanOfferSignin(profile, base::WideToUTF8(cred_provider_gaia_id), + base::WideToUTF8(cred_provider_email)) + .IsOk() || IsGCPWUsedInOtherProfile(profile)) { return; }
diff --git a/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/SigninPromoUtil.java b/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/SigninPromoUtil.java index 21e41198..65e923809 100644 --- a/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/SigninPromoUtil.java +++ b/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/SigninPromoUtil.java
@@ -121,7 +121,7 @@ String signedInAccount = CoreAccountInfo.getEmailFrom( IdentityServicesProvider.get() .getIdentityManager(Profile.getLastUsedRegularProfile()) - .getPrimaryAccountInfo(ConsentLevel.NOT_REQUIRED)); + .getPrimaryAccountInfo(ConsentLevel.SIGNIN)); assert signedInAccount != null : "Sync promo should only be shown for a signed in account"; signinPromoController.setupPromoView( view, profileDataCache.getProfileDataOrDefault(signedInAccount), listener);
diff --git a/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerDelegateImpl.java b/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerDelegateImpl.java index 9f527c20..b7cc4c14 100644 --- a/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerDelegateImpl.java +++ b/chrome/browser/signin/ui/android/java/src/org/chromium/chrome/browser/signin/ui/account_picker/AccountPickerDelegateImpl.java
@@ -82,7 +82,7 @@ @Override public void signIn(CoreAccountInfo coreAccountInfo, Callback<GoogleServiceAuthError> onSignInErrorCallback) { - if (mIdentityManager.getPrimaryAccountInfo(ConsentLevel.NOT_REQUIRED) != null) { + if (mIdentityManager.getPrimaryAccountInfo(ConsentLevel.SIGNIN) != null) { // In case an error is fired because cookies are taking longer to generate than usual, // if user retries the sign-in from the error screen, we need to sign out the user // first before signing in again.
diff --git a/chrome/browser/supervised_user/child_accounts/child_account_service.cc b/chrome/browser/supervised_user/child_accounts/child_account_service.cc index dfde8b52..c29c35b7 100644 --- a/chrome/browser/supervised_user/child_accounts/child_account_service.cc +++ b/chrome/browser/supervised_user/child_accounts/child_account_service.cc
@@ -105,7 +105,7 @@ base::Optional<AccountInfo> primary_account_info = identity_manager_->FindExtendedAccountInfoForAccountWithRefreshToken( identity_manager_->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired)); + signin::ConsentLevel::kSignin)); if (primary_account_info.has_value()) OnExtendedAccountInfoUpdated(primary_account_info.value()); @@ -248,7 +248,7 @@ void ChildAccountService::OnPrimaryAccountChanged( const signin::PrimaryAccountChangeEvent& event_details) { - if (event_details.GetEventTypeFor(signin::ConsentLevel::kNotRequired) == + if (event_details.GetEventTypeFor(signin::ConsentLevel::kSignin) == signin::PrimaryAccountChangeEvent::Type::kSet) { auto account_info = identity_manager_->FindExtendedAccountInfoForAccountWithRefreshToken( @@ -273,8 +273,8 @@ } // This class doesn't care about browser sync consent. - CoreAccountId auth_account_id = identity_manager_->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired); + CoreAccountId auth_account_id = + identity_manager_->GetPrimaryAccountId(signin::ConsentLevel::kSignin); if (info.account_id != auth_account_id) return; @@ -284,8 +284,8 @@ void ChildAccountService::OnExtendedAccountInfoRemoved( const AccountInfo& info) { // This class doesn't care about browser sync consent. - if (info.account_id != identity_manager_->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired)) + if (info.account_id != + identity_manager_->GetPrimaryAccountId(signin::ConsentLevel::kSignin)) return; SetIsChildAccount(false);
diff --git a/chrome/browser/supervised_user/child_accounts/family_info_fetcher.cc b/chrome/browser/supervised_user/child_accounts/family_info_fetcher.cc index 313c4606..c83a887 100644 --- a/chrome/browser/supervised_user/child_accounts/family_info_fetcher.cc +++ b/chrome/browser/supervised_user/child_accounts/family_info_fetcher.cc
@@ -89,8 +89,8 @@ scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) : consumer_(consumer), // This feature doesn't care about browser sync consent. - primary_account_id_(identity_manager->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired)), + primary_account_id_( + identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kSignin)), identity_manager_(identity_manager), url_loader_factory_(std::move(url_loader_factory)), access_token_expired_(false) {} @@ -134,7 +134,7 @@ base::Unretained(this)), signin::PrimaryAccountAccessTokenFetcher::Mode::kWaitUntilAvailable, // This feature doesn't care about browser sync consent. - signin::ConsentLevel::kNotRequired); + signin::ConsentLevel::kSignin); } void FamilyInfoFetcher::OnAccessTokenFetchComplete(
diff --git a/chrome/browser/supervised_user/child_accounts/family_info_fetcher_unittest.cc b/chrome/browser/supervised_user/child_accounts/family_info_fetcher_unittest.cc index a7cd79fe..764609d 100644 --- a/chrome/browser/supervised_user/child_accounts/family_info_fetcher_unittest.cc +++ b/chrome/browser/supervised_user/child_accounts/family_info_fetcher_unittest.cc
@@ -173,7 +173,7 @@ void WaitForAccessTokenRequestAndIssueToken() { identity_test_env_.WaitForAccessTokenRequestIfNecessaryAndRespondWithToken( identity_test_env_.identity_manager()->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired), + signin::ConsentLevel::kSignin), "access_token", base::Time::Now() + base::TimeDelta::FromHours(1)); } @@ -322,7 +322,7 @@ EXPECT_CALL(*this, OnFailure(FamilyInfoFetcher::ErrorCode::kTokenError)); identity_test_env_.WaitForAccessTokenRequestIfNecessaryAndRespondWithError( identity_test_env_.identity_manager()->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired), + signin::ConsentLevel::kSignin), GoogleServiceAuthError(GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS)); }
diff --git a/chrome/browser/supervised_user/child_accounts/permission_request_creator_apiary.cc b/chrome/browser/supervised_user/child_accounts/permission_request_creator_apiary.cc index e3da8f2..dddb065e 100644 --- a/chrome/browser/supervised_user/child_accounts/permission_request_creator_apiary.cc +++ b/chrome/browser/supervised_user/child_accounts/permission_request_creator_apiary.cc
@@ -161,7 +161,7 @@ base::Unretained(this), request), signin::PrimaryAccountAccessTokenFetcher::Mode::kImmediate, // This class doesn't care about browser sync consent. - signin::ConsentLevel::kNotRequired); + signin::ConsentLevel::kSignin); } void PermissionRequestCreatorApiary::OnAccessTokenFetchComplete( @@ -263,8 +263,7 @@ scopes.insert(GetApiScope()); // "Unconsented" because this class doesn't care about browser sync consent. identity_manager_->RemoveAccessTokenFromCache( - identity_manager_->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired), + identity_manager_->GetPrimaryAccountId(signin::ConsentLevel::kSignin), scopes, request->access_token); StartFetching(request); return;
diff --git a/chrome/browser/supervised_user/kids_chrome_management/kids_chrome_management_client.cc b/chrome/browser/supervised_user/kids_chrome_management/kids_chrome_management_client.cc index 0457d7f..59ab846 100644 --- a/chrome/browser/supervised_user/kids_chrome_management/kids_chrome_management_client.cc +++ b/chrome/browser/supervised_user/kids_chrome_management/kids_chrome_management_client.cc
@@ -230,7 +230,7 @@ base::Unretained(this), it), signin::PrimaryAccountAccessTokenFetcher::Mode::kImmediate, // This class doesn't care about browser sync consent. - signin::ConsentLevel::kNotRequired); + signin::ConsentLevel::kSignin); } void KidsChromeManagementClient::OnAccessTokenFetchComplete( @@ -302,8 +302,7 @@ req->access_token_expired = true; signin::ScopeSet scopes{req->scope}; identity_manager_->RemoveAccessTokenFromCache( - identity_manager_->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired), + identity_manager_->GetPrimaryAccountId(signin::ConsentLevel::kSignin), scopes, token_info.token); StartFetching(it); return;
diff --git a/chrome/browser/supervised_user/supervised_user_google_auth_navigation_throttle.cc b/chrome/browser/supervised_user/supervised_user_google_auth_navigation_throttle.cc index f407ea5..cc7d471b 100644 --- a/chrome/browser/supervised_user/supervised_user_google_auth_navigation_throttle.cc +++ b/chrome/browser/supervised_user/supervised_user_google_auth_navigation_throttle.cc
@@ -138,8 +138,8 @@ Profile::FromBrowserContext(web_contents->GetBrowserContext()); auto* identity_manager = IdentityManagerFactory::GetForProfile(profile); // This class doesn't care about browser sync consent. - CoreAccountInfo account_info = identity_manager->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + CoreAccountInfo account_info = + identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin); if (account_info.IsEmpty()) { // No primary account (can happen when it was removed from the device). return content::NavigationThrottle::DEFER;
diff --git a/chrome/browser/sync/test/integration/migration_test.cc b/chrome/browser/sync/test/integration/migration_test.cc index 1f28ca0..db0f423 100644 --- a/chrome/browser/sync/test/integration/migration_test.cc +++ b/chrome/browser/sync/test/integration/migration_test.cc
@@ -316,14 +316,13 @@ class MigrationTwoClientTest : public MigrationTest { public: MigrationTwoClientTest() : MigrationTest(TWO_CLIENT) {} - ~MigrationTwoClientTest() override {} + ~MigrationTwoClientTest() override = default; // Helper function that verifies that preferences sync still works. void VerifyPrefSync() { ASSERT_TRUE(BooleanPrefMatches(prefs::kShowHomeButton)); ChangeBooleanPref(0, prefs::kShowHomeButton); - ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); - ASSERT_TRUE(BooleanPrefMatches(prefs::kShowHomeButton)); + ASSERT_TRUE(BooleanPrefMatchChecker(prefs::kShowHomeButton).Wait()); } void RunTwoClientMigrationTest(const MigrationList& migration_list,
diff --git a/chrome/browser/sync/test/integration/sync_test.cc b/chrome/browser/sync/test/integration/sync_test.cc index b7fff5d5..fa888fed 100644 --- a/chrome/browser/sync/test/integration/sync_test.cc +++ b/chrome/browser/sync/test/integration/sync_test.cc
@@ -181,7 +181,7 @@ signin::IdentityManager* identity_manager = IdentityManagerFactory::GetForProfile(profile); if (!identity_manager || - !identity_manager->HasPrimaryAccount(signin::ConsentLevel::kNotRequired)) + !identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSignin)) return nullptr; auto it = profile_to_fcm_network_handler_map->find(profile);
diff --git a/chrome/browser/sync/test/integration/two_client_bookmarks_sync_test.cc b/chrome/browser/sync/test/integration/two_client_bookmarks_sync_test.cc index 77e9cb8..f6837de 100644 --- a/chrome/browser/sync/test/integration/two_client_bookmarks_sync_test.cc +++ b/chrome/browser/sync/test/integration/two_client_bookmarks_sync_test.cc
@@ -19,7 +19,6 @@ #include "chrome/browser/sync/test/integration/profile_sync_service_harness.h" #include "chrome/browser/sync/test/integration/sync_integration_test_util.h" #include "chrome/browser/sync/test/integration/sync_test.h" -#include "chrome/browser/sync/test/integration/updated_progress_marker_checker.h" #include "components/bookmarks/browser/bookmark_model.h" #include "components/bookmarks/browser/bookmark_node.h" #include "components/policy/core/common/mock_configuration_policy_provider.h" @@ -41,6 +40,7 @@ using bookmarks_helper::AddFolder; using bookmarks_helper::AddURL; using bookmarks_helper::AllModelsMatch; +using bookmarks_helper::BookmarkModelMatchesFakeServerChecker; using bookmarks_helper::BookmarksMatchChecker; using bookmarks_helper::BookmarksTitleChecker; using bookmarks_helper::CheckFaviconExpired; @@ -83,6 +83,7 @@ using testing::IsEmpty; using testing::NotNull; using testing::SizeIs; +using testing::UnorderedElementsAreArray; using BookmarkNodeMatcher = testing::Matcher<std::unique_ptr<BookmarkNode>>; @@ -112,7 +113,8 @@ GURL google_url("http://www.google.com"); ASSERT_NE(nullptr, AddURL(0, "Google", google_url)); - ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + ASSERT_NE(nullptr, AddURL(1, "Yahoo", GURL("http://www.yahoo.com"))); ASSERT_TRUE(BookmarksMatchChecker().Wait()); @@ -137,15 +139,14 @@ IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, SimultaneousURLChanges) { ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE(BookmarksMatchChecker().Wait()); - GURL initial_url("http://www.google.com"); - GURL second_url("http://www.google.com/abc"); - GURL third_url("http://www.google.com/def"); - std::string title = "Google"; + const GURL initial_url("http://www.google.com"); + const GURL second_url("http://www.google.com/abc"); + const GURL third_url("http://www.google.com/def"); + const std::string title = "Google"; ASSERT_NE(nullptr, AddURL(0, title, initial_url)); - ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); ASSERT_NE(nullptr, SetURL(0, GetUniqueNodeByURL(0, initial_url), second_url)); ASSERT_NE(nullptr, SetURL(1, GetUniqueNodeByURL(1, initial_url), third_url)); @@ -200,7 +201,8 @@ const BookmarkNode* bookmark = AddURL(0, kGenericURLTitle, page_url); ASSERT_NE(nullptr, bookmark); - ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); + SetFavicon(0, bookmark, icon_url, favicon, bookmarks_helper::FROM_UI); EXPECT_TRUE(BookmarksMatchChecker().Wait()); @@ -233,7 +235,7 @@ const BookmarkNode* bookmark0 = AddURL(0, kGenericURLTitle, page_url); ASSERT_NE(nullptr, bookmark0); - ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); gfx::Image favicon = CreateFavicon(SK_ColorWHITE); SetFavicon(0, bookmark0, icon_url1, favicon, bookmarks_helper::FROM_UI); @@ -1194,7 +1196,6 @@ matchers_in_folder.push_back(matchers[2]); matchers.erase(matchers.begin() + 2); - ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); ASSERT_TRUE(BookmarksMatchChecker().Wait()); EXPECT_THAT(GetBookmarkBarNode(1)->children(), ElementsAreArray(matchers)); @@ -1238,7 +1239,6 @@ matchers.back() = IsFolderWithTitleAndChildren( kGenericFolderName, ElementsAreArray(matchers_in_folder)); - ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); ASSERT_TRUE(BookmarksMatchChecker().Wait()); EXPECT_THAT(GetBookmarkBarNode(1)->children(), ElementsAreArray(matchers)); } @@ -2163,12 +2163,10 @@ IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, DisableBookmarks) { ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE(BookmarksMatchChecker().Wait()); ASSERT_TRUE( GetClient(1)->DisableSyncForType(syncer::UserSelectableType::kBookmarks)); ASSERT_NE(nullptr, AddFolder(1, kGenericFolderName)); - ASSERT_TRUE(AwaitQuiescence()); ASSERT_FALSE(AllModelsMatch()); ASSERT_TRUE( @@ -2178,11 +2176,12 @@ IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, DisableSync) { ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE(BookmarksMatchChecker().Wait()); ASSERT_TRUE(GetClient(1)->DisableSyncForAllDatatypes()); ASSERT_NE(nullptr, AddFolder(0, IndexedFolderName(0))); - ASSERT_TRUE(UpdatedProgressMarkerChecker(GetSyncService(0)).Wait()); + ASSERT_TRUE(BookmarkModelMatchesFakeServerChecker(0, GetSyncService(0), + GetFakeServer()) + .Wait()); ASSERT_FALSE(AllModelsMatch()); ASSERT_NE(nullptr, AddFolder(1, IndexedFolderName(1))); @@ -2210,7 +2209,6 @@ } ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE(BookmarksMatchChecker().Wait()); ASSERT_FALSE(ContainsDuplicateBookmarks(0)); } @@ -2225,7 +2223,9 @@ ASSERT_NE(nullptr, AddURL(0, GetBookmarkBarNode(0), 0, "bar", bar_url)); ASSERT_NE(nullptr, AddURL(0, GetOtherNode(0), 0, "other", other_url)); - ASSERT_TRUE(UpdatedProgressMarkerChecker(GetSyncService(0)).Wait()); + ASSERT_TRUE(BookmarkModelMatchesFakeServerChecker(0, GetSyncService(0), + GetFakeServer()) + .Wait()); ASSERT_TRUE(HasNodeWithURL(0, bar_url)); ASSERT_TRUE(HasNodeWithURL(0, other_url)); @@ -2233,14 +2233,16 @@ ASSERT_FALSE(HasNodeWithURL(1, other_url)); Remove(0, GetBookmarkBarNode(0), 0); - ASSERT_TRUE(UpdatedProgressMarkerChecker(GetSyncService(0)).Wait()); + ASSERT_TRUE(BookmarkModelMatchesFakeServerChecker(0, GetSyncService(0), + GetFakeServer()) + .Wait()); ASSERT_FALSE(HasNodeWithURL(0, bar_url)); ASSERT_TRUE(HasNodeWithURL(0, other_url)); ASSERT_TRUE( GetClient(1)->EnableSyncForType(syncer::UserSelectableType::kBookmarks)); - ASSERT_TRUE(AwaitQuiescence()); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); ASSERT_FALSE(HasNodeWithURL(0, bar_url)); ASSERT_TRUE(HasNodeWithURL(0, other_url)); @@ -2419,16 +2421,16 @@ // order is). IN_PROC_BROWSER_TEST_F(TwoClientBookmarksSyncTest, RacyPositionChanges) { ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; - ASSERT_TRUE(BookmarksMatchChecker().Wait()); // Add initial bookmarks. - size_t num_bookmarks = 5; + const size_t num_bookmarks = 5; + std::vector<BookmarkNodeMatcher> matchers; for (size_t i = 0; i < num_bookmarks; ++i) { ASSERT_NE(nullptr, AddURL(0, i, IndexedURLTitle(i), GURL(IndexedURL(i)))); + matchers.push_back( + IsUrlBookmarkWithTitleAndUrl(IndexedURLTitle(i), GURL(IndexedURL(i)))); } - // Once we make diverging changes the verifer is helpless. - ASSERT_TRUE(AwaitQuiescence()); ASSERT_TRUE(BookmarksMatchChecker().Wait()); // Make changes on client 0. @@ -2469,7 +2471,9 @@ Move(0, node, node->parent(), rand_pos); } - ASSERT_TRUE(BookmarksMatchChecker().Wait()); + EXPECT_TRUE(BookmarksMatchChecker().Wait()); + EXPECT_THAT(GetBookmarkBarNode(0)->children(), + UnorderedElementsAreArray(matchers)); } // Trigger the server side creation of Synced Bookmarks. Ensure both clients @@ -2543,12 +2547,11 @@ // Remove all RemoveAll(0); + ASSERT_TRUE(BookmarksMatchChecker().Wait()); - ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1))); // Verify other node has no children now. - EXPECT_TRUE(GetOtherNode(0)->children().empty()); - EXPECT_TRUE(GetBookmarkBarNode(0)->children().empty()); - ASSERT_TRUE(AllModelsMatch()); + EXPECT_TRUE(GetOtherNode(1)->children().empty()); + EXPECT_TRUE(GetBookmarkBarNode(1)->children().empty()); } // Verifies that managed bookmarks (installed by policy) don't get synced.
diff --git a/chrome/browser/ui/ash/ambient/ambient_client_impl.cc b/chrome/browser/ui/ash/ambient/ambient_client_impl.cc index 29b97b2..ceb7ff4 100644 --- a/chrome/browser/ui/ash/ambient/ambient_client_impl.cc +++ b/chrome/browser/ui/ash/ambient/ambient_client_impl.cc
@@ -61,8 +61,7 @@ if (!identity_manager) return false; - return identity_manager->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired); + return identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSignin); } bool IsEmailDomainSupported(const user_manager::User* user) { @@ -120,8 +119,8 @@ IdentityManagerFactory::GetForProfile(profile); DCHECK(identity_manager); - CoreAccountInfo account_info = identity_manager->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + CoreAccountInfo account_info = + identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin); const signin::ScopeSet scopes{kPhotosOAuthScope, kBackdropOAuthScope}; // TODO(b/148463064): Handle retry refresh token and multiple requests. // Currently only one request is allowed.
diff --git a/chrome/browser/ui/ash/ambient/ambient_client_impl_unittest.cc b/chrome/browser/ui/ash/ambient/ambient_client_impl_unittest.cc index fb94be9..de1b6e1e 100644 --- a/chrome/browser/ui/ash/ambient/ambient_client_impl_unittest.cc +++ b/chrome/browser/ui/ash/ambient/ambient_client_impl_unittest.cc
@@ -73,7 +73,7 @@ void MaybeMakeAccountAsPrimaryAccount(const AccountId& account_id) { if (!identity_test_env()->identity_manager()->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired)) { + signin::ConsentLevel::kSignin)) { identity_test_env()->MakeUnconsentedPrimaryAccountAvailable( account_id.GetUserEmail()); }
diff --git a/chrome/browser/ui/ash/quick_answers/quick_answers_browser_client_impl.cc b/chrome/browser/ui/ash/quick_answers/quick_answers_browser_client_impl.cc index 1df6d09..dbd3f89 100644 --- a/chrome/browser/ui/ash/quick_answers/quick_answers_browser_client_impl.cc +++ b/chrome/browser/ui/ash/quick_answers/quick_answers_browser_client_impl.cc
@@ -64,8 +64,8 @@ IdentityManagerFactory::GetForProfile(profile); DCHECK(identity_manager); - CoreAccountInfo account_info = identity_manager->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + CoreAccountInfo account_info = + identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin); const signin::ScopeSet scopes{kCloudTranslationScope}; DCHECK(!access_token_fetcher_);
diff --git a/chrome/browser/ui/autofill/chrome_autofill_client.cc b/chrome/browser/ui/autofill/chrome_autofill_client.cc index c6637d73..81c0f91 100644 --- a/chrome/browser/ui/autofill/chrome_autofill_client.cc +++ b/chrome/browser/ui/autofill/chrome_autofill_client.cc
@@ -824,7 +824,7 @@ signin::IdentityManager* identity_manager = IdentityManagerFactory::GetForProfile(GetProfile()); CoreAccountId account_id = - identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kNotRequired); + identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kSignin); return identity_manager ->FindExtendedAccountInfoForAccountWithRefreshTokenByAccountId( account_id);
diff --git a/chrome/browser/ui/chrome_pages.cc b/chrome/browser/ui/chrome_pages.cc index 5b3ee8b6..a20362b 100644 --- a/chrome/browser/ui/chrome_pages.cc +++ b/chrome/browser/ui/chrome_pages.cc
@@ -500,7 +500,7 @@ case signin::ConsentLevel::kSync: bubble_view_mode = profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN; break; - case signin::ConsentLevel::kNotRequired: + case signin::ConsentLevel::kSignin: bubble_view_mode = profiles::BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT; break; }
diff --git a/chrome/browser/ui/passwords/account_storage_auth_helper.cc b/chrome/browser/ui/passwords/account_storage_auth_helper.cc index f2e62c1..79b8d36 100644 --- a/chrome/browser/ui/passwords/account_storage_auth_helper.cc +++ b/chrome/browser/ui/passwords/account_storage_auth_helper.cc
@@ -56,7 +56,7 @@ return; } CoreAccountId primary_account_id = - identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kNotRequired); + identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kSignin); if (primary_account_id.empty()) { std::move(reauth_callback).Run(ReauthSucceeded(false)); return;
diff --git a/chrome/browser/ui/passwords/bubble_controllers/move_to_account_store_bubble_controller.cc b/chrome/browser/ui/passwords/bubble_controllers/move_to_account_store_bubble_controller.cc index af8a14e..078c559 100644 --- a/chrome/browser/ui/passwords/bubble_controllers/move_to_account_store_bubble_controller.cc +++ b/chrome/browser/ui/passwords/bubble_controllers/move_to_account_store_bubble_controller.cc
@@ -88,7 +88,7 @@ base::Optional<AccountInfo> primary_account_info = identity_manager->FindExtendedAccountInfoForAccountWithRefreshToken( identity_manager->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired)); + signin::ConsentLevel::kSignin)); DCHECK(primary_account_info.has_value()); gfx::Image account_icon = primary_account_info->account_image;
diff --git a/chrome/browser/ui/passwords/bubble_controllers/save_update_with_account_store_bubble_controller.cc b/chrome/browser/ui/passwords/bubble_controllers/save_update_with_account_store_bubble_controller.cc index 046d452e..6f0b039 100644 --- a/chrome/browser/ui/passwords/bubble_controllers/save_update_with_account_store_bubble_controller.cc +++ b/chrome/browser/ui/passwords/bubble_controllers/save_update_with_account_store_bubble_controller.cc
@@ -269,8 +269,7 @@ IdentityManagerFactory::GetForProfile(profile); if (!identity_manager) return std::string(); - return identity_manager - ->GetPrimaryAccountInfo(signin::ConsentLevel::kNotRequired) + return identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin) .email; } @@ -287,7 +286,7 @@ base::Optional<AccountInfo> primary_account_info = identity_manager->FindExtendedAccountInfoForAccountWithRefreshToken( identity_manager->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired)); + signin::ConsentLevel::kSignin)); DCHECK(primary_account_info.has_value()); gfx::Image account_icon = primary_account_info->account_image; if (account_icon.IsEmpty()) {
diff --git a/chrome/browser/ui/profile_picker.h b/chrome/browser/ui/profile_picker.h index 56c849a..65f7c6c9 100644 --- a/chrome/browser/ui/profile_picker.h +++ b/chrome/browser/ui/profile_picker.h
@@ -172,19 +172,6 @@ static constexpr int kDialogHeight = 512; static constexpr int kDialogWidth = 448; - // Shows a dialog where the user can re-authenticate the profile with the - // given |email|. This is called from the profile picker when a profile is - // locked and the user's password is detected to have been changed. - static void ShowUnlockDialog(content::BrowserContext* browser_context, - const std::string& email); - - // Shows a reauth dialog with profile path so that the sign in error message - // can be displayed without browser window. - static void ShowUnlockDialogWithProfilePath( - content::BrowserContext* browser_context, - const std::string& email, - const base::FilePath& profile_path); - // Shows a dialog where the user logs into their profile for the first time // via the profile picker, when force signin is enabled. static void ShowForceSigninDialog(content::BrowserContext* browser_context,
diff --git a/chrome/browser/ui/signin_view_controller.cc b/chrome/browser/ui/signin_view_controller.cc index ef457b1f..1659324 100644 --- a/chrome/browser/ui/signin_view_controller.cc +++ b/chrome/browser/ui/signin_view_controller.cc
@@ -205,7 +205,7 @@ // For now, Reauth is restricted to the primary account only. // TODO(crbug.com/1083429): add support for secondary accounts. CoreAccountId primary_account_id = - identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kNotRequired); + identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kSignin); if (account_id != primary_account_id) { signin_ui_util::RecordTransactionalReauthResult(
diff --git a/chrome/browser/ui/startup/startup_browser_creator_corrupt_profiles_browsertest_win.cc b/chrome/browser/ui/startup/startup_browser_creator_corrupt_profiles_browsertest_win.cc index ff075e383..61149c9b 100644 --- a/chrome/browser/ui/startup/startup_browser_creator_corrupt_profiles_browsertest_win.cc +++ b/chrome/browser/ui/startup/startup_browser_creator_corrupt_profiles_browsertest_win.cc
@@ -374,18 +374,6 @@ ADD_FAILURE() << "Test body is not expected to run."; } -// DoNotStartLockedProfile : Profiles that are locked should never be -// initialized. Since there are no unlocked profiles, the browser should not -// start. -IN_PROC_BROWSER_TEST_P(StartupBrowserCreatorCorruptProfileTest, - PRE_DoNotStartLockedProfile) { - // Lock the default profile. The user manager is shown after the profile is - // locked. - signin_util::SetForceSigninForTesting(true); - profiles::LockProfile(browser()->profile()); - ExpectUserManagerToShow(); -} - bool StartupBrowserCreatorCorruptProfileTest:: SetUpUserDataDirectoryForDoNotStartLockedProfile() { SetExpectTestBodyToRun(false);
diff --git a/chrome/browser/ui/views/profiles/avatar_toolbar_button_delegate.cc b/chrome/browser/ui/views/profiles/avatar_toolbar_button_delegate.cc index ee9cf742..bc72ec4 100644 --- a/chrome/browser/ui/views/profiles/avatar_toolbar_button_delegate.cc +++ b/chrome/browser/ui/views/profiles/avatar_toolbar_button_delegate.cc
@@ -146,12 +146,12 @@ signin::IdentityManager* identity_manager = IdentityManagerFactory::GetForProfile(profile_); if (identity_manager && - identity_manager->HasPrimaryAccount(signin::ConsentLevel::kNotRequired)) { + identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSignin)) { base::Optional<AccountInfo> account_info = identity_manager ->FindExtendedAccountInfoForAccountWithRefreshTokenByAccountId( identity_manager->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired)); + signin::ConsentLevel::kSignin)); if (account_info.has_value()) return account_info->account_image; } @@ -184,8 +184,7 @@ IdentityManagerFactory::GetForProfile(profile_); ProfileAttributesEntry* entry = GetProfileAttributesEntry(profile_); if (!entry || // This can happen if the user deletes the current profile. - (!identity_manager->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired) && + (!identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSignin) && IsGenericProfile(*entry))) { return AvatarToolbarButton::State::kGenericProfile; } @@ -250,7 +249,7 @@ // Check that the user is still signed in. See https://crbug.com/1025674 CoreAccountInfo user_identity = IdentityManagerFactory::GetForProfile(profile_)->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + signin::ConsentLevel::kSignin); if (user_identity.IsEmpty()) { identity_animation_state_ = IdentityAnimationState::kNotShowing; return; @@ -326,7 +325,7 @@ void AvatarToolbarButtonDelegate::OnPrimaryAccountChanged( const signin::PrimaryAccountChangeEvent& event) { - if (event.GetEventTypeFor(signin::ConsentLevel::kNotRequired) != + if (event.GetEventTypeFor(signin::ConsentLevel::kSignin) != signin::PrimaryAccountChangeEvent::Type::kSet) { return; } @@ -351,7 +350,7 @@ } CoreAccountInfo account = IdentityManagerFactory::GetForProfile(profile_)->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + signin::ConsentLevel::kSignin); if (account.IsEmpty()) return; OnUserIdentityChanged(); @@ -390,7 +389,7 @@ CoreAccountId account_id) { CoreAccountInfo user_identity = IdentityManagerFactory::GetForProfile(profile_)->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + signin::ConsentLevel::kSignin); // If another account is signed-in then the one that initiated this animation, // don't hide it. There's one more pending OnIdentityAnimationTimeout() that // will properly hide it after the proper delay.
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view.cc b/chrome/browser/ui/views/profiles/profile_menu_view.cc index 55f8a7cc..18fb6f13 100644 --- a/chrome/browser/ui/views/profiles/profile_menu_view.cc +++ b/chrome/browser/ui/views/profiles/profile_menu_view.cc
@@ -284,12 +284,11 @@ Profile* profile = browser()->profile(); signin::IdentityManager* identity_manager = IdentityManagerFactory::GetForProfile(profile); - DCHECK( - identity_manager->HasPrimaryAccount(signin::ConsentLevel::kNotRequired)); + DCHECK(identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSignin)); NavigateToGoogleAccountPage( - profile, identity_manager - ->GetPrimaryAccountInfo(signin::ConsentLevel::kNotRequired) - .email); + profile, + identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin) + .email); } void ProfileMenuView::OnPasswordsButtonClicked() { @@ -475,8 +474,8 @@ Profile* profile = browser()->profile(); signin::IdentityManager* identity_manager = IdentityManagerFactory::GetForProfile(profile); - CoreAccountInfo account = identity_manager->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + CoreAccountInfo account = + identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin); base::Optional<AccountInfo> account_info = identity_manager->FindExtendedAccountInfoForAccountWithRefreshToken( account); @@ -594,8 +593,8 @@ } // Show sync promos. - CoreAccountInfo unconsented_account = identity_manager->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + CoreAccountInfo unconsented_account = + identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin); base::Optional<AccountInfo> account_info = identity_manager->FindExtendedAccountInfoForAccountWithRefreshToken( unconsented_account); @@ -627,7 +626,7 @@ IdentityManagerFactory::GetForProfile(profile); const bool has_unconsented_account = !IsGuest(profile) && - identity_manager->HasPrimaryAccount(signin::ConsentLevel::kNotRequired); + identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSignin); if (has_unconsented_account && !IsSyncPaused(profile)) { #if BUILDFLAG(GOOGLE_CHROME_BRANDING)
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view_browsertest.cc b/chrome/browser/ui/views/profiles/profile_menu_view_browsertest.cc index c5a6f2b..215a46b 100644 --- a/chrome/browser/ui/views/profiles/profile_menu_view_browsertest.cc +++ b/chrome/browser/ui/views/profiles/profile_menu_view_browsertest.cc
@@ -88,8 +88,7 @@ // StatusChangeChecker overrides: bool IsExitConditionSatisfied(std::ostream* os) override { *os << "Waiting for unconsented primary account"; - return identity_manager_->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired); + return identity_manager_->HasPrimaryAccount(signin::ConsentLevel::kSignin); } // signin::IdentityManager::Observer overrides: @@ -789,8 +788,8 @@ // Check that the setup was successful. ASSERT_FALSE( identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSync)); - ASSERT_TRUE(identity_manager()->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired)); + ASSERT_TRUE( + identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSignin)); RunTest(); }
diff --git a/chrome/browser/ui/views/profiles/profile_picker_view.cc b/chrome/browser/ui/views/profiles/profile_picker_view.cc index 65f773f3..47401a4 100644 --- a/chrome/browser/ui/views/profiles/profile_picker_view.cc +++ b/chrome/browser/ui/views/profiles/profile_picker_view.cc
@@ -391,30 +391,6 @@ // ------------------------------------------------------------- // static -void ProfilePickerForceSigninDialog::ShowUnlockDialog( - content::BrowserContext* browser_context, - const std::string& email) { - ShowUnlockDialogWithProfilePath(browser_context, email, base::FilePath()); -} - -// static -void ProfilePickerForceSigninDialog::ShowUnlockDialogWithProfilePath( - content::BrowserContext* browser_context, - const std::string& email, - const base::FilePath& profile_path) { - // This method should only be called if the profile picker is already showing. - if (!ProfilePicker::IsActive()) - return; - // Load the re-auth URL, prepopulated with the user's email address. - // Add the index of the profile to the URL so that the inline login page - // knows which profile to load and update the credentials. - GURL url = signin::GetEmbeddedReauthURLWithEmail( - signin_metrics::AccessPoint::ACCESS_POINT_USER_MANAGER, - signin_metrics::Reason::REASON_UNLOCK, email); - ProfilePicker::ShowDialog(browser_context, url, profile_path); -} - -// static void ProfilePickerForceSigninDialog::ShowForceSigninDialog( content::BrowserContext* browser_context, const base::FilePath& profile_path) {
diff --git a/chrome/browser/ui/views/sync/inline_login_ui_browsertest.cc b/chrome/browser/ui/views/sync/inline_login_ui_browsertest.cc index 737639d..76ea153a 100644 --- a/chrome/browser/ui/views/sync/inline_login_ui_browsertest.cc +++ b/chrome/browser/ui/views/sync/inline_login_ui_browsertest.cc
@@ -338,17 +338,14 @@ } IN_PROC_BROWSER_TEST_F(InlineLoginUIBrowserTest, CanOfferNoProfile) { - SigninUIError error = CanOfferSignin( - nullptr, CAN_OFFER_SIGNIN_FOR_ALL_ACCOUNTS, "12345", "user@gmail.com"); + SigninUIError error = CanOfferSignin(nullptr, "12345", "user@gmail.com"); EXPECT_FALSE(error.IsOk()); EXPECT_EQ(error, SigninUIError::Other("user@gmail.com")); } IN_PROC_BROWSER_TEST_F(InlineLoginUIBrowserTest, CanOffer) { - EXPECT_TRUE(CanOfferSignin(browser()->profile(), - CAN_OFFER_SIGNIN_FOR_ALL_ACCOUNTS, "12345", - "user@gmail.com") - .IsOk()); + EXPECT_TRUE( + CanOfferSignin(browser()->profile(), "12345", "user@gmail.com").IsOk()); } IN_PROC_BROWSER_TEST_F(InlineLoginUIBrowserTest, CanOfferProfileConnected) { @@ -357,16 +354,11 @@ signin::MakePrimaryAccountAvailable(identity_manager, "foo@gmail.com"); EnableSigninAllowed(true); - EXPECT_TRUE(CanOfferSignin(browser()->profile(), - CAN_OFFER_SIGNIN_FOR_ALL_ACCOUNTS, "12345", - "foo@gmail.com") - .IsOk()); - EXPECT_TRUE(CanOfferSignin(browser()->profile(), - CAN_OFFER_SIGNIN_FOR_ALL_ACCOUNTS, "12345", "foo") - .IsOk()); + EXPECT_TRUE( + CanOfferSignin(browser()->profile(), "12345", "foo@gmail.com").IsOk()); + EXPECT_TRUE(CanOfferSignin(browser()->profile(), "12345", "foo").IsOk()); SigninUIError error = - CanOfferSignin(browser()->profile(), CAN_OFFER_SIGNIN_FOR_ALL_ACCOUNTS, - "12345", "user@gmail.com"); + CanOfferSignin(browser()->profile(), "12345", "user@gmail.com"); EXPECT_FALSE(error.IsOk()); EXPECT_EQ(error, SigninUIError::WrongReauthAccount("user@gmail.com", "foo@gmail.com")); @@ -376,8 +368,7 @@ SetAllowedUsernamePattern("*.google.com"); SigninUIError error = - CanOfferSignin(browser()->profile(), CAN_OFFER_SIGNIN_FOR_ALL_ACCOUNTS, - "12345", "foo@gmail.com"); + CanOfferSignin(browser()->profile(), "12345", "foo@gmail.com"); EXPECT_FALSE(error.IsOk()); EXPECT_EQ(error, SigninUIError::UsernameNotAllowedByPatternFromPrefs( "foo@gmail.com")); @@ -389,14 +380,10 @@ AddEmailToOneClickRejectedList("foo@gmail.com"); AddEmailToOneClickRejectedList("user@gmail.com"); - EXPECT_TRUE(CanOfferSignin(browser()->profile(), - CAN_OFFER_SIGNIN_FOR_ALL_ACCOUNTS, "12345", - "foo@gmail.com") - .IsOk()); - EXPECT_TRUE(CanOfferSignin(browser()->profile(), - CAN_OFFER_SIGNIN_FOR_ALL_ACCOUNTS, "12345", - "user@gmail.com") - .IsOk()); + EXPECT_TRUE( + CanOfferSignin(browser()->profile(), "12345", "foo@gmail.com").IsOk()); + EXPECT_TRUE( + CanOfferSignin(browser()->profile(), "12345", "user@gmail.com").IsOk()); } IN_PROC_BROWSER_TEST_F(InlineLoginUIBrowserTest, CanOfferNoSigninCookies) { @@ -404,8 +391,7 @@ EnableSigninAllowed(true); SigninUIError error = - CanOfferSignin(browser()->profile(), CAN_OFFER_SIGNIN_FOR_ALL_ACCOUNTS, - "12345", "user@gmail.com"); + CanOfferSignin(browser()->profile(), "12345", "user@gmail.com"); EXPECT_FALSE(error.IsOk()); EXPECT_EQ(error, SigninUIError::Other("user@gmail.com")); } @@ -675,32 +661,6 @@ SimulateOnClientOAuthSuccess(helper, "refresh_token"); } -// Test signin helper does not create sync starter when reauthenticating. -IN_PROC_BROWSER_TEST_F(InlineLoginHelperBrowserTest, - ReauthCallsUpdateCredentials) { - ASSERT_EQ(0ul, identity_manager()->GetAccountsWithRefreshTokens().size()); - - std::string email = "foo@gmail.com"; - signin::SetPrimaryAccount(identity_manager(), email); - - InlineLoginHandlerImpl handler; - // See Source enum in components/signin/public/base/signin_metrics.h for - // possible values of access_point=, reason=. - GURL url("chrome://chrome-signin/?access_point=3&reason=3"); - // InlineSigninHelper will delete itself when done using - // base::ThreadTaskRunnerHandle::DeleteSoon(), so need to delete here. But - // do need the RunUntilIdle() at the end. - InlineSigninHelper* helper = new InlineSigninHelper( - handler.GetWeakPtr(), test_shared_loader_factory(), profile(), - Profile::CreateStatus::CREATE_STATUS_INITIALIZED, url, email, - signin::GetTestGaiaIdForEmail(email), "password", "auth_code", - /*signin_scoped_device_id=*/std::string(), - /*confirm_untrusted_signin=*/false, - /*is_force_sign_in_with_usermanager=*/false); - SimulateOnClientOAuthSuccess(helper, "refresh_token"); - ASSERT_EQ(1ul, identity_manager()->GetAccountsWithRefreshTokens().size()); -} - IN_PROC_BROWSER_TEST_F(InlineLoginHelperBrowserTest, ForceSigninWithUserManager) { InlineLoginHandlerImpl handler;
diff --git a/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.cc b/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.cc index 9d789f65..5f60d36 100644 --- a/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.cc +++ b/chrome/browser/ui/webui/chromeos/add_supervision/add_supervision_handler.cc
@@ -100,8 +100,7 @@ oauth2_access_token_fetcher_ = identity_manager_->CreateAccessTokenFetcherForAccount( - identity_manager_->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired), + identity_manager_->GetPrimaryAccountId(signin::ConsentLevel::kSignin), "add_supervision", scopes, base::BindOnce(&AddSupervisionHandler::OnAccessTokenFetchComplete, weak_ptr_factory_.GetWeakPtr(), std::move(callback)),
diff --git a/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_utils.cc b/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_utils.cc index c689f9a..750c79d 100644 --- a/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_utils.cc +++ b/chrome/browser/ui/webui/chromeos/assistant_optin/assistant_optin_utils.cc
@@ -234,10 +234,9 @@ bool opted_in) { auto* identity_manager = IdentityManagerFactory::GetForProfile(profile); // This function doesn't care about browser sync consent. - DCHECK( - identity_manager->HasPrimaryAccount(signin::ConsentLevel::kNotRequired)); + DCHECK(identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSignin)); const CoreAccountId account_id = - identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kNotRequired); + identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kSignin); using sync_pb::UserConsentTypes; UserConsentTypes::AssistantActivityControlConsent consent;
diff --git a/chrome/browser/ui/webui/chromeos/edu_account_login_handler_chromeos.cc b/chrome/browser/ui/webui/chromeos/edu_account_login_handler_chromeos.cc index c88265b..c60b8b0e 100644 --- a/chrome/browser/ui/webui/chromeos/edu_account_login_handler_chromeos.cc +++ b/chrome/browser/ui/webui/chromeos/edu_account_login_handler_chromeos.cc
@@ -261,7 +261,7 @@ base::Unretained(this), std::move(obfuscated_gaia_id), std::move(password)), signin::PrimaryAccountAccessTokenFetcher::Mode::kImmediate, - signin::ConsentLevel::kNotRequired); + signin::ConsentLevel::kSignin); } void EduAccountLoginHandler::FetchReAuthProofTokenForParent(
diff --git a/chrome/browser/ui/webui/chromeos/edu_coexistence/edu_coexistence_login_handler_chromeos.cc b/chrome/browser/ui/webui/chromeos/edu_coexistence/edu_coexistence_login_handler_chromeos.cc index 6f3ad29..9880a5b 100644 --- a/chrome/browser/ui/webui/chromeos/edu_coexistence/edu_coexistence_login_handler_chromeos.cc +++ b/chrome/browser/ui/webui/chromeos/edu_coexistence/edu_coexistence_login_handler_chromeos.cc
@@ -159,7 +159,7 @@ &EduCoexistenceLoginHandler::OnOAuthAccessTokensFetched, base::Unretained(this)), signin::PrimaryAccountAccessTokenFetcher::Mode::kWaitUntilAvailable, - signin::ConsentLevel::kNotRequired); + signin::ConsentLevel::kSignin); } EduCoexistenceLoginHandler::~EduCoexistenceLoginHandler() {
diff --git a/chrome/browser/ui/webui/chromeos/login/arc_terms_of_service_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/arc_terms_of_service_screen_handler.cc index 7479250..22452b5 100644 --- a/chrome/browser/ui/webui/chromeos/login/arc_terms_of_service_screen_handler.cc +++ b/chrome/browser/ui/webui/chromeos/login/arc_terms_of_service_screen_handler.cc
@@ -375,10 +375,9 @@ ConsentAuditorFactory::GetForProfile(profile); auto* identity_manager = IdentityManagerFactory::GetForProfile(profile); // The account may or may not have consented to browser sync. - DCHECK( - identity_manager->HasPrimaryAccount(signin::ConsentLevel::kNotRequired)); + DCHECK(identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSignin)); const CoreAccountId account_id = - identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kNotRequired); + identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kSignin); ArcPlayTermsOfServiceConsent play_consent; play_consent.set_status(tos_accepted ? UserConsentTypes::GIVEN
diff --git a/chrome/browser/ui/webui/settings/chromeos/account_manager_handler.cc b/chrome/browser/ui/webui/settings/chromeos/account_manager_handler.cc index a28fc07..2568153 100644 --- a/chrome/browser/ui/webui/settings/chromeos/account_manager_handler.cc +++ b/chrome/browser/ui/webui/settings/chromeos/account_manager_handler.cc
@@ -272,7 +272,7 @@ device_account.SetOrganization( chrome::enterprise_util::GetDomainFromEmail( identity_manager_ - ->GetPrimaryAccountInfo(signin::ConsentLevel::kNotRequired) + ->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin) .email)); }
diff --git a/chrome/browser/ui/webui/settings/people_handler.cc b/chrome/browser/ui/webui/settings/people_handler.cc index bea45dc9..e86763d 100644 --- a/chrome/browser/ui/webui/settings/people_handler.cc +++ b/chrome/browser/ui/webui/settings/people_handler.cc
@@ -491,7 +491,7 @@ auto* identity_manager = IdentityManagerFactory::GetForProfile(profile_); base::Optional<AccountInfo> primary_account_info = identity_manager->FindExtendedAccountInfoForAccountWithRefreshToken( - identity_manager->GetPrimaryAccountInfo(ConsentLevel::kNotRequired)); + identity_manager->GetPrimaryAccountInfo(ConsentLevel::kSignin)); if (primary_account_info.has_value()) accounts.Append(GetAccountValue(primary_account_info.value())); return accounts;
diff --git a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.cc b/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.cc index e720d0e..867be2a 100644 --- a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.cc +++ b/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper.cc
@@ -281,8 +281,7 @@ bool DiceTurnSyncOnHelper::HasCanOfferSigninError() { SigninUIError can_offer_error = - CanOfferSignin(profile_, CAN_OFFER_SIGNIN_FOR_ALL_ACCOUNTS, - account_info_.gaia, account_info_.email); + CanOfferSignin(profile_, account_info_.gaia, account_info_.email); if (can_offer_error.IsOk()) return false;
diff --git a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_unittest.cc b/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_unittest.cc index c2a8b96..8e6c176 100644 --- a/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_unittest.cc +++ b/chrome/browser/ui/webui/signin/dice_turn_sync_on_helper_unittest.cc
@@ -885,7 +885,7 @@ IdentityManagerFactory::GetForProfile(new_profile()); DCHECK_NE(new_identity_manager, identity_manager()); EXPECT_EQ(account_id(), new_identity_manager->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired)); + signin::ConsentLevel::kSignin)); CheckDelegateCalls(); }
diff --git a/chrome/browser/ui/webui/signin/inline_login_handler.cc b/chrome/browser/ui/webui/signin/inline_login_handler.cc index 25a5f21..488daa03 100644 --- a/chrome/browser/ui/webui/signin/inline_login_handler.cc +++ b/chrome/browser/ui/webui/signin/inline_login_handler.cc
@@ -112,7 +112,6 @@ signin::GetSigninReasonForEmbeddedPromoURL(current_url); if (reason != signin_metrics::Reason::REASON_REAUTHENTICATION && - reason != signin_metrics::Reason::REASON_UNLOCK && reason != signin_metrics::Reason::REASON_ADD_SECONDARY_ACCOUNT) { signin_metrics::LogSigninAccessPointStarted( access_point,
diff --git a/chrome/browser/ui/webui/signin/inline_login_handler_chromeos.cc b/chrome/browser/ui/webui/signin/inline_login_handler_chromeos.cc index 969ba20..1c681e36a 100644 --- a/chrome/browser/ui/webui/signin/inline_login_handler_chromeos.cc +++ b/chrome/browser/ui/webui/signin/inline_login_handler_chromeos.cc
@@ -74,7 +74,7 @@ std::string primary_account_email = IdentityManagerFactory::GetForProfile(profile) - ->GetPrimaryAccountInfo(signin::ConsentLevel::kNotRequired) + ->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin) .email; // If provided email is for primary account - it's a reauthentication, use // normal add account flow. @@ -336,8 +336,7 @@ signin::IdentityManager* identity_manager = IdentityManagerFactory::GetForProfile(profile); std::string primary_account_email = - identity_manager - ->GetPrimaryAccountInfo(signin::ConsentLevel::kNotRequired) + identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin) .email; // Child user added a secondary account.
diff --git a/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc b/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc index 9a0b312..b77ce6b7 100644 --- a/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc +++ b/chrome/browser/ui/webui/signin/inline_login_handler_impl.cc
@@ -36,7 +36,6 @@ #include "chrome/browser/signin/account_consistency_mode_manager.h" #include "chrome/browser/signin/chrome_device_id_helper.h" #include "chrome/browser/signin/identity_manager_factory.h" -#include "chrome/browser/signin/local_auth.h" #include "chrome/browser/signin/signin_promo.h" #include "chrome/browser/signin/signin_util.h" #include "chrome/browser/themes/theme_service.h" @@ -94,7 +93,6 @@ // InlineLoginHandlerImpl. enum class HandlerSigninReason { FORCED_SIGNIN_PRIMARY_ACCOUNT, - UNLOCK, FETCH_LST_ONLY }; @@ -105,8 +103,6 @@ switch (reason) { case signin_metrics::Reason::REASON_FORCED_SIGNIN_PRIMARY_ACCOUNT: return HandlerSigninReason::FORCED_SIGNIN_PRIMARY_ACCOUNT; - case signin_metrics::Reason::REASON_UNLOCK: - return HandlerSigninReason::UNLOCK; case signin_metrics::Reason::REASON_FETCH_LST_ONLY: return HandlerSigninReason::FETCH_LST_ONLY; default: @@ -115,19 +111,6 @@ } } -// Converts from HandlerSigninReason to signin_metrics::Reason. -signin_metrics::Reason GetSigninReasonFromHandlerSigninReason( - HandlerSigninReason r) { - switch (r) { - case HandlerSigninReason::FORCED_SIGNIN_PRIMARY_ACCOUNT: - return signin_metrics::Reason::REASON_FORCED_SIGNIN_PRIMARY_ACCOUNT; - case HandlerSigninReason::UNLOCK: - return signin_metrics::Reason::REASON_UNLOCK; - case HandlerSigninReason::FETCH_LST_ONLY: - return signin_metrics::Reason::REASON_FETCH_LST_ONLY; - } -} - // Specific implementation of DiceTurnSyncOnHelper::Delegate for forced // signin flows. Some confirmation prompts are skipped. class ForcedSigninDiceTurnSyncOnHelperDelegate @@ -282,9 +265,6 @@ /*is_primary_account_=*/true, password_manager::metrics_util::GaiaPasswordHashChange:: SAVED_ON_CHROME_SIGNIN); - - if (profiles::IsLockAvailable(profile)) - LocalAuth::SetLocalAuthCredentials(profile, password); } if (has_primary_account && is_force_sign_in_with_usermanager && @@ -412,11 +392,6 @@ std::string primary_email = identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSync) .email; - if (gaia::AreEmailsSame(email_, primary_email) && - reason == HandlerSigninReason::UNLOCK && !password_.empty() && - profiles::IsLockAvailable(profile_)) { - LocalAuth::SetLocalAuthCredentials(profile_, password_); - } if (!password_.empty()) { scoped_refptr<password_manager::PasswordStore> password_store = @@ -430,44 +405,19 @@ } } - if (reason == HandlerSigninReason::UNLOCK) { - DCHECK(!identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSync) - .IsEmpty()); - - identity_manager->GetAccountsMutator()->AddOrUpdateAccount( - gaia_id_, email_, result.refresh_token, - result.is_under_advanced_protection, - signin_metrics::SourceForRefreshTokenOperation:: - kInlineLoginHandler_Signin); - - if (signin::IsAutoCloseEnabledInEmbeddedURL(current_url_)) { - // Close the gaia sign in tab via a task to make sure we aren't in the - // middle of any webui handler code. - base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, - base::BindOnce(&InlineLoginHandlerImpl::CloseTab, handler_)); - } - - identity_manager->GetAccountsCookieMutator()->AddAccountToCookie( - identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kSync), - gaia::GaiaSource::kPrimaryAccountManager, {}); - - signin_metrics::LogSigninReason( - GetSigninReasonFromHandlerSigninReason(reason)); - } else { - if (confirm_untrusted_signin_) { - // Display a confirmation dialog to the user. - base::RecordAction( - base::UserMetricsAction("Signin_Show_UntrustedSigninPrompt")); - Browser* browser = chrome::FindLastActiveWithProfile(profile_); - browser->window()->ShowOneClickSigninConfirmation( - base::UTF8ToUTF16(email_), - base::BindOnce(&InlineSigninHelper::UntrustedSigninConfirmed, - base::Unretained(this), result.refresh_token)); - return; - } - CreateSyncStarter(result.refresh_token); + if (confirm_untrusted_signin_) { + // Display a confirmation dialog to the user. + base::RecordAction( + base::UserMetricsAction("Signin_Show_UntrustedSigninPrompt")); + Browser* browser = chrome::FindLastActiveWithProfile(profile_); + browser->window()->ShowOneClickSigninConfirmation( + base::UTF8ToUTF16(email_), + base::BindOnce(&InlineSigninHelper::UntrustedSigninConfirmed, + base::Unretained(this), result.refresh_token)); + return; } + CreateSyncStarter(result.refresh_token); + base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, this); } @@ -603,9 +553,6 @@ std::string flow; switch (reason) { - case HandlerSigninReason::UNLOCK: - flow = "reauth"; - break; case HandlerSigninReason::FORCED_SIGNIN_PRIMARY_ACCOUNT: flow = "enterprisefsi"; break; @@ -678,8 +625,7 @@ return; } - DCHECK(reason == HandlerSigninReason::FORCED_SIGNIN_PRIMARY_ACCOUNT || - reason == HandlerSigninReason::UNLOCK); + DCHECK(reason == HandlerSigninReason::FORCED_SIGNIN_PRIMARY_ACCOUNT); DCHECK(signin_util::IsForceSigninEnabled()); ProfileManager* manager = g_browser_process->profile_manager(); @@ -791,21 +737,10 @@ ? signin_metrics::HISTOGRAM_WITH_ADVANCED : signin_metrics::HISTOGRAM_WITH_DEFAULTS); - CanOfferSigninType can_offer_for = CAN_OFFER_SIGNIN_FOR_ALL_ACCOUNTS; - if (reason == HandlerSigninReason::UNLOCK) { - std::string primary_username = - IdentityManagerFactory::GetForProfile(profile) - ->GetPrimaryAccountInfo(signin::ConsentLevel::kSync) - .email; - if (!gaia::AreEmailsSame(default_email, primary_username)) - can_offer_for = CAN_OFFER_SIGNIN_FOR_SECONDARY_ACCOUNT; - } - SigninUIError can_offer_error = SigninUIError::Ok(); - if (reason != HandlerSigninReason::FETCH_LST_ONLY) { - can_offer_error = - CanOfferSignin(profile, can_offer_for, params.gaia_id, params.email); - } + if (reason != HandlerSigninReason::FETCH_LST_ONLY) + can_offer_error = CanOfferSignin(profile, params.gaia_id, params.email); + if (!can_offer_error.IsOk()) { params.handler->HandleLoginError(can_offer_error); return;
diff --git a/chrome/browser/ui/webui/signin/inline_login_ui.cc b/chrome/browser/ui/webui/signin/inline_login_ui.cc index 17f65f9..5c6e5ef50 100644 --- a/chrome/browser/ui/webui/signin/inline_login_ui.cc +++ b/chrome/browser/ui/webui/signin/inline_login_ui.cc
@@ -251,7 +251,6 @@ switch (reason) { case signin_metrics::Reason::REASON_FORCED_SIGNIN_PRIMARY_ACCOUNT: - case signin_metrics::Reason::REASON_UNLOCK: // Used by the user manager. return true; case signin_metrics::Reason::REASON_FETCH_LST_ONLY: @@ -266,9 +265,6 @@ case signin_metrics::Reason::REASON_REAUTHENTICATION: case signin_metrics::Reason::REASON_UNKNOWN_REASON: return false; - case signin_metrics::Reason::REASON_MAX: - NOTREACHED(); - return false; } NOTREACHED(); #endif // BUILDFLAG(IS_CHROMEOS_ASH)
diff --git a/chrome/browser/ui/webui/signin/signin_reauth_ui.cc b/chrome/browser/ui/webui/signin/signin_reauth_ui.cc index 8ef0059..e722b84 100644 --- a/chrome/browser/ui/webui/signin/signin_reauth_ui.cc +++ b/chrome/browser/ui/webui/signin/signin_reauth_ui.cc
@@ -43,7 +43,7 @@ // TODO(crbug.com/1083429): generalize for arbitrary accounts by passing an // account id as a method parameter. CoreAccountId account_id = - identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kNotRequired); + identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kSignin); // Sync shouldn't be enabled. Otherwise, the primary account and the first // cookie account may diverge. DCHECK(!identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSync));
diff --git a/chrome/browser/ui/webui/signin/signin_utils_desktop.cc b/chrome/browser/ui/webui/signin/signin_utils_desktop.cc index 8d1b3360..80fc440 100644 --- a/chrome/browser/ui/webui/signin/signin_utils_desktop.cc +++ b/chrome/browser/ui/webui/signin/signin_utils_desktop.cc
@@ -26,7 +26,6 @@ #include "ui/base/l10n/l10n_util.h" SigninUIError CanOfferSignin(Profile* profile, - CanOfferSigninType can_offer, const std::string& gaia_id, const std::string& email) { if (!profile) @@ -49,11 +48,8 @@ return SigninUIError::UsernameNotAllowedByPatternFromPrefs(email); } - if (can_offer == CAN_OFFER_SIGNIN_FOR_SECONDARY_ACCOUNT) - return SigninUIError::Ok(); - // If the identity manager already has a primary account, then this is a - // re-auth scenario. Make sure the email just signed in corresponds to + // re-auth scenario. Make sure the email just signed in corresponds to // the one sign in manager expects. std::string current_email = identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSync)
diff --git a/chrome/browser/ui/webui/signin/signin_utils_desktop.h b/chrome/browser/ui/webui/signin/signin_utils_desktop.h index 0eb1101..a9b8ae2 100644 --- a/chrome/browser/ui/webui/signin/signin_utils_desktop.h +++ b/chrome/browser/ui/webui/signin/signin_utils_desktop.h
@@ -10,17 +10,10 @@ class Profile; class SigninUIError; -// Argument for |CanOfferSignin|. -enum CanOfferSigninType { - CAN_OFFER_SIGNIN_FOR_ALL_ACCOUNTS, - CAN_OFFER_SIGNIN_FOR_SECONDARY_ACCOUNT -}; - // Returns a non-error if sign-in is allowed for account with |email| and // |gaia_id| to |profile|. If the sign-in is not allowed, then the error type // and the error message are passed in the returned value. SigninUIError CanOfferSignin(Profile* profile, - CanOfferSigninType can_offer_type, const std::string& gaia_id, const std::string& email);
diff --git a/chrome/browser/ui/webui/signin/sync_confirmation_handler.cc b/chrome/browser/ui/webui/signin/sync_confirmation_handler.cc index 2953d8d1..bc04421 100644 --- a/chrome/browser/ui/webui/signin/sync_confirmation_handler.cc +++ b/chrome/browser/ui/webui/signin/sync_confirmation_handler.cc
@@ -108,7 +108,7 @@ DCHECK(ProfileSyncServiceFactory::IsSyncAllowed(profile_)); base::Optional<AccountInfo> primary_account_info = identity_manager_->FindExtendedAccountInfoForAccountWithRefreshToken( - identity_manager_->GetPrimaryAccountInfo(ConsentLevel::kNotRequired)); + identity_manager_->GetPrimaryAccountInfo(ConsentLevel::kSignin)); // Fire the "account-image-changed" listener from |SetUserImageURL()|. // Note: If the account info is not available yet in the @@ -151,7 +151,7 @@ consent_auditor::ConsentAuditor* consent_auditor = ConsentAuditorFactory::GetForProfile(profile_); consent_auditor->RecordSyncConsent( - identity_manager_->GetPrimaryAccountId(ConsentLevel::kNotRequired), + identity_manager_->GetPrimaryAccountId(ConsentLevel::kSignin), sync_consent); } @@ -183,7 +183,7 @@ return; if (info.account_id != - identity_manager_->GetPrimaryAccountId(ConsentLevel::kNotRequired)) { + identity_manager_->GetPrimaryAccountId(ConsentLevel::kSignin)) { return; } @@ -221,7 +221,7 @@ base::Optional<AccountInfo> primary_account_info = identity_manager_->FindExtendedAccountInfoForAccountWithRefreshToken( - identity_manager_->GetPrimaryAccountInfo(ConsentLevel::kNotRequired)); + identity_manager_->GetPrimaryAccountInfo(ConsentLevel::kSignin)); if (!primary_account_info) { // No account is signed in, so there is nothing to be displayed in the sync // confirmation dialog.
diff --git a/chrome/browser/ui/webui/signin/sync_confirmation_handler.h b/chrome/browser/ui/webui/signin/sync_confirmation_handler.h index becbc76..db09ee78 100644 --- a/chrome/browser/ui/webui/signin/sync_confirmation_handler.h +++ b/chrome/browser/ui/webui/signin/sync_confirmation_handler.h
@@ -23,7 +23,7 @@ } // WebUI message handler for the sync confirmation dialog. IdentityManager calls -// in this class use signin::ConsentLevel::kNotRequired because the user hasn't +// in this class use signin::ConsentLevel::kSignin because the user hasn't // consented to sync yet. class SyncConfirmationHandler : public content::WebUIMessageHandler, public signin::IdentityManager::Observer,
diff --git a/chrome/browser/web_applications/system_web_apps/system_web_app_background_task.cc b/chrome/browser/web_applications/system_web_apps/system_web_app_background_task.cc index 5bf3870..471baac 100644 --- a/chrome/browser/web_applications/system_web_apps/system_web_app_background_task.cc +++ b/chrome/browser/web_applications/system_web_apps/system_web_app_background_task.cc
@@ -3,21 +3,30 @@ // found in the LICENSE file. #include "chrome/browser/web_applications/system_web_apps/system_web_app_background_task.h" +#include "base/bind.h" #include "base/memory/weak_ptr.h" +#include "base/time/time.h" +#include "base/timer/timer.h" #include "chrome/browser/profiles/profile.h" #include "content/public/browser/web_contents.h" #include "third_party/blink/public/common/web_preferences/web_preferences.h" namespace web_app { +// Wait for 2 minutes before starting background tasks. User login is busy, and +// this will give a little time to settle down. We could get even more +// sophisticated, and smear all the different start_immediately tasks across a +// couple minutes instead of setting their start timers to the same time. +const int kInitialWaitForBackgroundTasksSeconds = 120; + SystemAppBackgroundTask::SystemAppBackgroundTask( Profile* profile, const SystemAppBackgroundTaskInfo& info) - // TODO(https://crbug/1169745): Create the webcontents lazily. - : web_contents_(content::WebContents::Create( - content::WebContents::CreateParams(profile))), + : profile_(profile), + web_contents_(nullptr), web_app_url_loader_(std::make_unique<WebAppUrlLoader>()), timer_(std::make_unique<base::RepeatingTimer>()), + start_immediately_timer_(std::make_unique<base::OneShotTimer>()), url_(info.url), period_(info.period), opened_count_(0), @@ -28,7 +37,13 @@ void SystemAppBackgroundTask::StartTask() { if (open_immediately_) { - NavigateTimerBackgroundPage(); + DCHECK_GT(period_, base::TimeDelta::FromSeconds( + kInitialWaitForBackgroundTasksSeconds)); + start_immediately_timer_->Start( + FROM_HERE, + base::TimeDelta::FromSeconds(kInitialWaitForBackgroundTasksSeconds), + base::BindOnce(&SystemAppBackgroundTask::NavigateTimerBackgroundPage, + weak_ptr_factory_.GetWeakPtr())); } timer_->Start( FROM_HERE, period_, @@ -42,6 +57,11 @@ } void SystemAppBackgroundTask::NavigateTimerBackgroundPage() { + if (!web_contents_) { + web_contents_ = content::WebContents::Create( + content::WebContents::CreateParams(profile_)); + } + timer_activated_count_++; auto prefs = web_contents_->GetOrCreateWebPreferences();
diff --git a/chrome/browser/web_applications/system_web_apps/system_web_app_background_task.h b/chrome/browser/web_applications/system_web_apps/system_web_app_background_task.h index 7d5b2554..61f33b2 100644 --- a/chrome/browser/web_applications/system_web_apps/system_web_app_background_task.h +++ b/chrome/browser/web_applications/system_web_apps/system_web_app_background_task.h
@@ -11,6 +11,7 @@ #include "base/one_shot_event.h" #include "base/time/time.h" #include "base/timer/timer.h" +#include "chrome/browser/profiles/profile.h" #include "chrome/browser/web_applications/components/web_app_url_loader.h" #include "chrome/browser/web_applications/components/web_application_info.h" #include "chrome/browser/web_applications/system_web_apps/system_web_app_types.h" @@ -32,15 +33,18 @@ // The amount of time between each opening of the background url. // The url is opened using the same WebContents, so if the // previous task is still running, it will be closed. + // If using open_immediately, this should be greater than 120 seconds, + // which how long the immediate background tasks will wait. base::TimeDelta period; // The url of the background page to open. This should do one specific thing. // (Probably opening a shared worker, waiting for a response, and closing) GURL url; - // A flag to indicate that the task should be opened immediately upon user + // A flag to indicate that the task should be opened soon upon user // login, after the SWAs are done installing as opposed to waiting for the - // first period to be reached. + // first period to be reached. "Soon" means about 2 minutes, to give the + // login time processing a chance to settle down. bool open_immediately; }; @@ -79,15 +83,25 @@ web_app_url_loader_.reset(loader.release()); } + base::OneShotTimer* get_start_timer_for_testing() { + return start_immediately_timer_.get(); + } + + base::RepeatingTimer* get_repeating_timer_for_testing() { + return timer_.get(); + } + private: void NavigateTimerBackgroundPage(); void OnLoaderReady(WebAppUrlLoader::Result); void OnPageReady(WebAppUrlLoader::Result); + Profile* profile_; SystemAppType app_type_; std::unique_ptr<content::WebContents> web_contents_; std::unique_ptr<WebAppUrlLoader> web_app_url_loader_; std::unique_ptr<base::RepeatingTimer> timer_; + std::unique_ptr<base::OneShotTimer> start_immediately_timer_; GURL url_; base::TimeDelta period_; unsigned long opened_count_;
diff --git a/chrome/browser/web_applications/system_web_apps/system_web_app_manager.cc b/chrome/browser/web_applications/system_web_apps/system_web_app_manager.cc index 496eb74..47719c3f 100644 --- a/chrome/browser/web_applications/system_web_apps/system_web_app_manager.cc +++ b/chrome/browser/web_applications/system_web_apps/system_web_app_manager.cc
@@ -15,6 +15,7 @@ #include "base/command_line.h" #include "base/containers/contains.h" #include "base/metrics/histogram_functions.h" +#include "base/one_shot_event.h" #include "base/optional.h" #include "base/run_loop.h" #include "base/strings/string_number_conversions.h" @@ -411,6 +412,7 @@ SystemWebAppManager::SystemWebAppManager(Profile* profile) : profile_(profile), on_apps_synchronized_(new base::OneShotEvent()), + on_tasks_started_(new base::OneShotEvent()), install_result_per_profile_histogram_name_( std::string(kInstallResultHistogramName) + ".Profiles." + GetProfileCategoryForLogging(profile)), @@ -513,6 +515,7 @@ void SystemWebAppManager::InstallSystemAppsForTesting() { on_apps_synchronized_.reset(new base::OneShotEvent()); + on_tasks_started_.reset(new base::OneShotEvent()); system_app_infos_ = CreateSystemWebApps(profile_); Start(); @@ -911,6 +914,11 @@ for (const auto& task : tasks_) { task->StartTask(); } + // This happens as part of synchronize, and can also be called multiple times + // in testing. + if (!on_tasks_started_->is_signaled()) { + on_tasks_started_->Signal(); + } } bool SystemWebAppManager::ShouldForceInstallApps() const {
diff --git a/chrome/browser/web_applications/system_web_apps/system_web_app_manager.h b/chrome/browser/web_applications/system_web_apps/system_web_app_manager.h index 411b3954..edc3d13 100644 --- a/chrome/browser/web_applications/system_web_apps/system_web_app_manager.h +++ b/chrome/browser/web_applications/system_web_apps/system_web_app_manager.h
@@ -237,6 +237,12 @@ return *on_apps_synchronized_; } + // Return the OneShotEvent that is fired after all of the background tasks + // have started and their timers become active. + const base::OneShotEvent& on_tasks_started() const { + return *on_tasks_started_; + } + // This call will override default System Apps configuration. You should call // Start() after this call to install |system_apps|. void SetSystemAppsForTesting( @@ -292,6 +298,7 @@ Profile* profile_; std::unique_ptr<base::OneShotEvent> on_apps_synchronized_; + std::unique_ptr<base::OneShotEvent> on_tasks_started_; bool shutting_down_ = false;
diff --git a/chrome/browser/web_applications/system_web_apps/test/system_web_app_manager_browsertest.cc b/chrome/browser/web_applications/system_web_apps/test/system_web_app_manager_browsertest.cc index 880d6fa..c3734c7 100644 --- a/chrome/browser/web_applications/system_web_apps/test/system_web_app_manager_browsertest.cc +++ b/chrome/browser/web_applications/system_web_apps/test/system_web_app_manager_browsertest.cc
@@ -1402,11 +1402,11 @@ TestSystemWebAppInstallation::SetUpAppWithBackgroundTask(); } - void WaitForSystemAppsSynchronized() { + void WaitForSystemAppsBackgroundTasksStart() { base::RunLoop run_loop; WebAppProvider::Get(browser()->profile()) ->system_web_app_manager() - .on_apps_synchronized() + .on_tasks_started() .Post(FROM_HERE, run_loop.QuitClosure()); run_loop.Run(); @@ -1424,16 +1424,25 @@ // a hook in the background pages to detect the navigation as an event. That's // a little too much work for one test though, and since this is mostly tested // in unittests, this is probably enough. - content::TestNavigationObserver navigation_observer( GURL("chrome://test-system-app/page2.html")); + navigation_observer.StartWatchingNewWebContents(); - WaitForSystemAppsSynchronized(); - - navigation_observer.WatchExistingWebContents(); - navigation_observer.Wait(); + WaitForSystemAppsBackgroundTasksStart(); auto& tasks = GetManager().GetBackgroundTasksForTesting(); + auto* start_timer = tasks[0]->get_start_timer_for_testing(); + EXPECT_EQ(base::TimeDelta::FromSeconds(120), start_timer->GetCurrentDelay()); + EXPECT_EQ(base::TimeDelta::FromDays(1), + tasks[0]->get_repeating_timer_for_testing()->GetCurrentDelay()); + + // The "Immediate" timer waits for 2 minutes, and it's really hard to mock + // time properly in a browser test, so just fire the thing now. We're not + // testing that base::Timer works. + start_timer->FireNow(); + + navigation_observer.Wait(); + EXPECT_FALSE(start_timer->IsRunning()); EXPECT_EQ(1u, tasks.size()); EXPECT_TRUE(tasks[0]->open_immediately_for_testing()); EXPECT_EQ(base::TimeDelta::FromDays(1), tasks[0]->period_for_testing());
diff --git a/chrome/browser/web_applications/system_web_apps/test/system_web_app_manager_unittest.cc b/chrome/browser/web_applications/system_web_apps/test/system_web_app_manager_unittest.cc index c274ea26..b4ff5a6 100644 --- a/chrome/browser/web_applications/system_web_apps/test/system_web_app_manager_unittest.cc +++ b/chrome/browser/web_applications/system_web_apps/test/system_web_app_manager_unittest.cc
@@ -1077,7 +1077,7 @@ system_apps.at(SystemAppType::SETTINGS).timer_info = SystemAppBackgroundTaskInfo(); system_apps.at(SystemAppType::SETTINGS).timer_info->period = - base::TimeDelta::FromSeconds(30); + base::TimeDelta::FromSeconds(300); system_apps.at(SystemAppType::SETTINGS).timer_info->url = AppUrl1(); system_apps.at(SystemAppType::SETTINGS).timer_info->open_immediately = true; @@ -1105,17 +1105,17 @@ auto& timers = system_web_app_manager().GetBackgroundTasksForTesting(); - task_environment()->FastForwardBy(base::TimeDelta::FromSeconds(1)); + task_environment()->FastForwardBy(base::TimeDelta::FromSeconds(121)); EXPECT_EQ(1u, timers.size()); EXPECT_EQ(true, timers[0]->open_immediately_for_testing()); - EXPECT_EQ(base::TimeDelta::FromSeconds(30), timers[0]->period_for_testing()); + EXPECT_EQ(base::TimeDelta::FromSeconds(300), timers[0]->period_for_testing()); EXPECT_EQ(1u, timers[0]->timer_activated_count_for_testing()); EXPECT_EQ(1u, timers[0]->opened_count_for_testing()); loader->AddPrepareForLoadResults({WebAppUrlLoader::Result::kUrlLoaded}); loader->SetNextLoadUrlResult(AppUrl1(), WebAppUrlLoader::Result::kUrlLoaded); - task_environment()->FastForwardBy(base::TimeDelta::FromSeconds(30)); + task_environment()->FastForwardBy(base::TimeDelta::FromSeconds(300)); EXPECT_EQ(2u, timers[0]->timer_activated_count_for_testing()); EXPECT_EQ(2u, timers[0]->opened_count_for_testing());
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt index c7bfb2cd..066ca11 100644 --- a/chrome/build/linux.pgo.txt +++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@ -chrome-linux-master-1616909642-b8d668688aa21d581631333d1d259b3ee53161e5.profdata +chrome-linux-master-1616975470-6dcb0339d1d9313e273b2cd9884f272b0a4a3749.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt index fa9f689..2f5281727 100644 --- a/chrome/build/mac.pgo.txt +++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@ -chrome-mac-master-1616909642-cadebb3e3874de51e4b2e526d8a64c952ce04701.profdata +chrome-mac-master-1616975470-29caecd51260993a5b6699aaf0263e0acb94145c.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index f9043e4b..043a2ab 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-master-1616909642-b3eb7daf8a769d0b70e30ffb0035c5d97d57d140.profdata +chrome-win32-master-1616981549-9335f07eb4df8fc5de88e55a0287f3564aab4b4a.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index 6ad78ec..8c4ebe1 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@ -chrome-win64-master-1616909642-1e3268681d5ce4b0a1d37afc109b045126e42f09.profdata +chrome-win64-master-1617008321-f58b5a75a5aff9ba788e708712f2887f2b7f293f.profdata
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index 5fa36f22..6cd1239 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -3820,7 +3820,6 @@ "../browser/signin/chrome_signin_proxying_url_loader_factory_unittest.cc", "../browser/signin/chrome_signin_status_metrics_provider_delegate_unittest.cc", "../browser/signin/chrome_signin_url_loader_throttle_unittest.cc", - "../browser/signin/local_auth_unittest.cc", "../browser/signin/reauth_tab_helper_unittest.cc", "../browser/signin/reauth_util_unittest.cc", "../browser/signin/signin_profile_attributes_updater_unittest.cc",
diff --git a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/signin/SigninTestUtil.java b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/signin/SigninTestUtil.java index 5e6f21c..305ae90 100644 --- a/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/signin/SigninTestUtil.java +++ b/chrome/test/android/javatests/src/org/chromium/chrome/test/util/browser/signin/SigninTestUtil.java
@@ -68,7 +68,7 @@ Assert.assertEquals(coreAccountInfo, IdentityServicesProvider.get() .getIdentityManager(Profile.getLastUsedRegularProfile()) - .getPrimaryAccountInfo(ConsentLevel.NOT_REQUIRED)); + .getPrimaryAccountInfo(ConsentLevel.SIGNIN)); }); }
diff --git a/chromeos/components/drivefs/drivefs_auth.cc b/chromeos/components/drivefs/drivefs_auth.cc index 9c8f1f21..d3abbcb 100644 --- a/chromeos/components/drivefs/drivefs_auth.cc +++ b/chromeos/components/drivefs/drivefs_auth.cc
@@ -70,7 +70,7 @@ base::BindOnce(&DriveFsAuth::GotChromeAccessToken, base::Unretained(this)), signin::PrimaryAccountAccessTokenFetcher::Mode::kWaitUntilAvailable, - signin::ConsentLevel::kNotRequired); + signin::ConsentLevel::kSignin); } void DriveFsAuth::GotChromeAccessToken(
diff --git a/chromeos/components/media_app_ui/resources/js/launch.js b/chromeos/components/media_app_ui/resources/js/launch.js index 20896a25..de271c94 100644 --- a/chromeos/components/media_app_ui/resources/js/launch.js +++ b/chromeos/components/media_app_ui/resources/js/launch.js
@@ -749,22 +749,33 @@ } /** - * Returns whether `filename` has an extension indicating a possible RAW image. - * @param {string} filename + * Returns whether `fileName` has an extension indicating a possible RAW image. + * @param {string} fileName * @return {boolean} */ -function isRawImageFile(filename) { - return /\.(arw|cr2|dng|nef|nrw|orf|raf|rw2)$/.test(filename.toLowerCase()); +function isRawImageFile(fileName) { + return /\.(arw|cr2|dng|nef|nrw|orf|raf|rw2)$/.test(fileName.toLowerCase()); } /** - * Returns whether fileName is the filename for a video or image. + * Returns whether `fileName` is a file potentially containing subtitles. + * @param {string} fileName + * @return {boolean} + */ +function isSubtitleFile(fileName) { + return /\.vtt$/.test(fileName.toLowerCase()); +} + +/** + * Returns whether fileName is the filename for a video or image, or a related + * file type (e.g. video subtitles). * @param {string} fileName * @return {boolean} */ function isVideoOrImage(fileName) { const fileType = getMimeTypeFromFilename(fileName); - return /^(image)|(video)\//.test(fileType) || isRawImageFile(fileName); + return /^(image)|(video)\//.test(fileType) || isRawImageFile(fileName) || + isSubtitleFile(fileName); } /**
diff --git a/chromeos/components/media_app_ui/test/media_app_ui_browsertest.js b/chromeos/components/media_app_ui/test/media_app_ui_browsertest.js index 00457ab5..194a372 100644 --- a/chromeos/components/media_app_ui/test/media_app_ui_browsertest.js +++ b/chromeos/components/media_app_ui/test/media_app_ui_browsertest.js
@@ -1094,24 +1094,25 @@ {name: 'matryoshka.MKV'}, {name: 'noext', type: ''}, {name: 'other.txt', type: 'text/plain'}, + {name: 'subtitles.vtt'}, {name: 'text.txt', type: 'text/plain'}, {name: 'world.webm', type: 'video/webm'}, ]; const directory = await createMockTestDirectory(testFiles); - const [html, jpg, gif, emkv, mkv, MKV, ext, other, txt, webm] = + const [html, jpg, gif, emkv, mkv, MKV, ext, other, vtt, txt, webm] = directory.getFilesSync(); await loadFilesWithoutSendingToGuest(directory, mkv); - assertFilesToBe([mkv, MKV, webm, jpg, gif], 'mkv'); + assertFilesToBe([mkv, MKV, vtt, webm, jpg, gif], 'mkv'); await loadFilesWithoutSendingToGuest(directory, jpg); - assertFilesToBe([jpg, gif, mkv, MKV, webm], 'jpg'); + assertFilesToBe([jpg, gif, mkv, MKV, vtt, webm], 'jpg'); await loadFilesWithoutSendingToGuest(directory, gif); - assertFilesToBe([gif, mkv, MKV, webm, jpg], 'gif'); + assertFilesToBe([gif, mkv, MKV, vtt, webm, jpg], 'gif'); await loadFilesWithoutSendingToGuest(directory, webm); - assertFilesToBe([webm, jpg, gif, mkv, MKV], 'webm'); + assertFilesToBe([webm, jpg, gif, mkv, MKV, vtt], 'webm'); await loadFilesWithoutSendingToGuest(directory, txt); assertFilesToBe([txt, other], 'txt');
diff --git a/chromeos/dbus/session_manager/BUILD.gn b/chromeos/dbus/session_manager/BUILD.gn index 565cfa8..9de6d73 100644 --- a/chromeos/dbus/session_manager/BUILD.gn +++ b/chromeos/dbus/session_manager/BUILD.gn
@@ -17,6 +17,7 @@ "//chromeos/dbus/constants", "//chromeos/dbus/cryptohome", "//chromeos/dbus/cryptohome:cryptohome_proto", + "//chromeos/dbus/userdataauth", "//components/policy/proto", "//crypto", "//dbus",
diff --git a/chromeos/dbus/session_manager/fake_session_manager_client.cc b/chromeos/dbus/session_manager/fake_session_manager_client.cc index 711535c..e4afa327 100644 --- a/chromeos/dbus/session_manager/fake_session_manager_client.cc +++ b/chromeos/dbus/session_manager/fake_session_manager_client.cc
@@ -24,8 +24,8 @@ #include "base/threading/thread_task_runner_handle.h" #include "chromeos/dbus/constants/dbus_paths.h" #include "chromeos/dbus/cryptohome/account_identifier_operators.h" -#include "chromeos/dbus/cryptohome/cryptohome_client.h" #include "chromeos/dbus/login_manager/policy_descriptor.pb.h" +#include "chromeos/dbus/userdataauth/userdataauth_client.h" #include "components/policy/proto/device_management_backend.pb.h" #include "crypto/sha2.h" @@ -154,7 +154,7 @@ cryptohome::AccountIdentifier cryptohome_id; cryptohome_id.set_account_id(descriptor.account_id()); const std::string sanitized_id = - CryptohomeClient::GetStubSanitizedUsername(cryptohome_id); + UserDataAuthClient::GetStubSanitizedUsername(cryptohome_id); return base::FilePath(sanitized_id) .AppendASCII(kStubPerAccountPolicyFileNamePrefix + postfix); } @@ -334,7 +334,7 @@ const cryptohome::AccountIdentifier& cryptohome_id) { DCHECK_EQ(0UL, user_sessions_.count(cryptohome_id.account_id())); std::string user_id_hash = - CryptohomeClient::GetStubSanitizedUsername(cryptohome_id); + UserDataAuthClient::GetStubSanitizedUsername(cryptohome_id); user_sessions_[cryptohome_id.account_id()] = user_id_hash; }
diff --git a/chromeos/dbus/userdataauth/fake_cryptohome_misc_client.cc b/chromeos/dbus/userdataauth/fake_cryptohome_misc_client.cc index a0701a3e..69bfa33 100644 --- a/chromeos/dbus/userdataauth/fake_cryptohome_misc_client.cc +++ b/chromeos/dbus/userdataauth/fake_cryptohome_misc_client.cc
@@ -80,14 +80,16 @@ void FakeCryptohomeMiscClient::CheckHealth( const ::user_data_auth::CheckHealthRequest& request, CheckHealthCallback callback) { - ::user_data_auth::CheckHealthReply reply; + base::Optional<::user_data_auth::CheckHealthReply> reply; if (cryptohome_error_ == ::user_data_auth::CryptohomeErrorCode::CRYPTOHOME_ERROR_NOT_SET) { - reply.set_requires_powerwash(requires_powerwash_); + reply = ::user_data_auth::CheckHealthReply(); + reply->set_requires_powerwash(requires_powerwash_); } - // Note: In case cryptohome_error_ is set to anything else, we'll return that - // no powerwash is required and the call is successful. - ReturnProtobufMethodCallback(reply, std::move(callback)); + // Note: In case cryptohome_error_ is set to anything else, we'll return as if + // the dbus call failed. + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::BindOnce(std::move(callback), reply)); } base::Optional<::user_data_auth::GetSanitizedUsernameReply>
diff --git a/chromeos/dbus/userdataauth/install_attributes_client.cc b/chromeos/dbus/userdataauth/install_attributes_client.cc index cffe1ba..bc2c15c 100644 --- a/chromeos/dbus/userdataauth/install_attributes_client.cc +++ b/chromeos/dbus/userdataauth/install_attributes_client.cc
@@ -130,7 +130,7 @@ const ::user_data_auth::InstallAttributesGetRequest& request) override { return BlockingCallProtoMethod<::user_data_auth::InstallAttributesGetReply>( ::user_data_auth::kInstallAttributesGet, - ::user_data_auth::kCryptohomeMiscInterface, request); + ::user_data_auth::kInstallAttributesInterface, request); } base::Optional<::user_data_auth::InstallAttributesSetReply> @@ -138,7 +138,7 @@ const ::user_data_auth::InstallAttributesSetRequest& request) override { return BlockingCallProtoMethod<::user_data_auth::InstallAttributesSetReply>( ::user_data_auth::kInstallAttributesSet, - ::user_data_auth::kCryptohomeMiscInterface, request); + ::user_data_auth::kInstallAttributesInterface, request); } base::Optional<::user_data_auth::InstallAttributesFinalizeReply> @@ -148,7 +148,7 @@ return BlockingCallProtoMethod< ::user_data_auth::InstallAttributesFinalizeReply>( ::user_data_auth::kInstallAttributesFinalize, - ::user_data_auth::kCryptohomeMiscInterface, request); + ::user_data_auth::kInstallAttributesInterface, request); } base::Optional<::user_data_auth::InstallAttributesGetStatusReply> @@ -158,7 +158,7 @@ return BlockingCallProtoMethod< ::user_data_auth::InstallAttributesGetStatusReply>( ::user_data_auth::kInstallAttributesGetStatus, - ::user_data_auth::kCryptohomeMiscInterface, request); + ::user_data_auth::kInstallAttributesInterface, request); } private:
diff --git a/chromeos/login/session/BUILD.gn b/chromeos/login/session/BUILD.gn index b9db2b0..043ebe5 100644 --- a/chromeos/login/session/BUILD.gn +++ b/chromeos/login/session/BUILD.gn
@@ -14,6 +14,8 @@ "//chromeos/dbus/cryptohome:cryptohome_proto", "//chromeos/dbus/power:power", "//chromeos/dbus/session_manager:session_manager", + "//chromeos/dbus/userdataauth:userdataauth", + "//chromeos/dbus/userdataauth:userdataauth_proto", "//third_party/protobuf:protobuf_lite", ] sources = [ @@ -29,6 +31,7 @@ "//chromeos/dbus/cryptohome:cryptohome", "//chromeos/dbus/power:power", "//chromeos/dbus/session_manager:session_manager", + "//chromeos/dbus/userdataauth:userdataauth", "//chromeos/login/session:session", "//testing/gtest", ]
diff --git a/chromeos/login/session/session_termination_manager.cc b/chromeos/login/session/session_termination_manager.cc index a8fa6a5e..c48b31f 100644 --- a/chromeos/login/session/session_termination_manager.cc +++ b/chromeos/login/session/session_termination_manager.cc
@@ -6,9 +6,9 @@ #include "base/bind.h" #include "base/logging.h" -#include "chromeos/dbus/cryptohome/cryptohome_client.h" #include "chromeos/dbus/power/power_manager_client.h" #include "chromeos/dbus/session_manager/session_manager_client.h" +#include "chromeos/dbus/userdataauth/cryptohome_misc_client.h" #include "third_party/cros_system_api/dbus/service_constants.h" namespace chromeos { @@ -44,7 +44,7 @@ } void SessionTerminationManager::RebootIfNecessary() { - CryptohomeClient::Get()->WaitForServiceToBeAvailable( + CryptohomeMiscClient::Get()->WaitForServiceToBeAvailable( base::BindOnce(&SessionTerminationManager::DidWaitForServiceToBeAvailable, weak_factory_.GetWeakPtr())); } @@ -63,25 +63,22 @@ LOG(ERROR) << "WaitForServiceToBeAvailable failed."; return; } - CryptohomeClient::Get()->GetLoginStatus( - cryptohome::GetLoginStatusRequest(), + CryptohomeMiscClient::Get()->GetLoginStatus( + user_data_auth::GetLoginStatusRequest(), base::BindOnce(&SessionTerminationManager::RebootIfNecessaryProcessReply, weak_factory_.GetWeakPtr())); } void SessionTerminationManager::ProcessCryptohomeLoginStatusReply( - const base::Optional<cryptohome::BaseReply>& reply) { - if (!reply.has_value() || reply->has_error() || - !reply->HasExtension(cryptohome::GetLoginStatusReply::reply)) { + const base::Optional<user_data_auth::GetLoginStatusReply>& reply) { + if (!reply.has_value() || + reply->error() != + user_data_auth::CryptohomeErrorCode::CRYPTOHOME_ERROR_NOT_SET) { LOG(ERROR) << "Login status request failed, error: " - << (reply.has_value() && reply->has_error() ? reply->error() - : 0); + << (reply.has_value() ? reply->error() : 0); return; } - auto reply_proto = - reply->GetExtension(cryptohome::GetLoginStatusReply::reply); - if (reply_proto.has_is_locked_to_single_user() && - reply_proto.is_locked_to_single_user()) { + if (reply->is_locked_to_single_user()) { is_locked_to_single_user_ = true; } } @@ -92,7 +89,7 @@ } void SessionTerminationManager::RebootIfNecessaryProcessReply( - base::Optional<cryptohome::BaseReply> reply) { + base::Optional<user_data_auth::GetLoginStatusReply> reply) { ProcessCryptohomeLoginStatusReply(reply); if (is_locked_to_single_user_) Reboot();
diff --git a/chromeos/login/session/session_termination_manager.h b/chromeos/login/session/session_termination_manager.h index 056b5af..123a97c1 100644 --- a/chromeos/login/session/session_termination_manager.h +++ b/chromeos/login/session/session_termination_manager.h
@@ -9,7 +9,7 @@ #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "base/optional.h" -#include "chromeos/dbus/cryptohome/rpc.pb.h" +#include "chromeos/dbus/cryptohome/UserDataAuth.pb.h" #include "third_party/cros_system_api/dbus/login_manager/dbus-constants.h" namespace chromeos { @@ -37,10 +37,10 @@ private: void DidWaitForServiceToBeAvailable(bool service_is_available); void ProcessCryptohomeLoginStatusReply( - const base::Optional<cryptohome::BaseReply>& reply); + const base::Optional<user_data_auth::GetLoginStatusReply>& reply); void Reboot(); void RebootIfNecessaryProcessReply( - base::Optional<cryptohome::BaseReply> reply); + base::Optional<user_data_auth::GetLoginStatusReply> reply); bool is_locked_to_single_user_ = false; base::WeakPtrFactory<SessionTerminationManager> weak_factory_{this};
diff --git a/chromeos/login/session/session_termination_manager_unittest.cc b/chromeos/login/session/session_termination_manager_unittest.cc index 2f23887..cc02e00 100644 --- a/chromeos/login/session/session_termination_manager_unittest.cc +++ b/chromeos/login/session/session_termination_manager_unittest.cc
@@ -5,9 +5,9 @@ #include "chromeos/login/session/session_termination_manager.h" #include "base/macros.h" -#include "chromeos/dbus/cryptohome/cryptohome_client.h" #include "chromeos/dbus/power/fake_power_manager_client.h" #include "chromeos/dbus/session_manager/session_manager_client.h" +#include "chromeos/dbus/userdataauth/cryptohome_misc_client.h" #include "testing/gtest/include/gtest/gtest.h" namespace chromeos { @@ -17,11 +17,11 @@ SessionTerminationManagerTest() { PowerManagerClient::InitializeFake(); power_client_ = FakePowerManagerClient::Get(); - CryptohomeClient::InitializeFake(); + CryptohomeMiscClient::InitializeFake(); SessionManagerClient::InitializeFake(); } ~SessionTerminationManagerTest() override { - CryptohomeClient::Shutdown(); + CryptohomeMiscClient::Shutdown(); PowerManagerClient::Shutdown(); SessionManagerClient::Shutdown(); }
diff --git a/chromeos/network/network_device_handler_impl.cc b/chromeos/network/network_device_handler_impl.cc index a9e1c289..2022b76 100644 --- a/chromeos/network/network_device_handler_impl.cc +++ b/chromeos/network/network_device_handler_impl.cc
@@ -370,6 +370,7 @@ ApplyMACAddressRandomizationToShill(); ApplyUsbEthernetMacAddressSourceToShill(); ApplyUseAttachApnToShill(); + ApplyWakeOnWifiAllowedToShill(); } void NetworkDeviceHandlerImpl::DevicePropertiesUpdated( @@ -414,35 +415,83 @@ } } -void NetworkDeviceHandlerImpl::ApplyMACAddressRandomizationToShill() { +void NetworkDeviceHandlerImpl::ApplyWifiFeatureToShillIfSupported( + std::string enable_property_name, + bool enabled, + std::string support_property_name, + WifiFeatureSupport* supported) { const DeviceState* device_state = GetWifiDeviceState(); if (!device_state) { - // We'll need to ask if this is supported when we find a Wi-Fi - // device. - mac_addr_randomization_supported_ = - MACAddressRandomizationSupport::NOT_REQUESTED; + *supported = WifiFeatureSupport::NOT_REQUESTED; return; } - - switch (mac_addr_randomization_supported_) { - case MACAddressRandomizationSupport::NOT_REQUESTED: + switch (*supported) { + case WifiFeatureSupport::NOT_REQUESTED: GetDeviceProperties( device_state->path(), base::BindOnce( - &NetworkDeviceHandlerImpl::HandleMACAddressRandomization, - weak_ptr_factory_.GetWeakPtr())); + &NetworkDeviceHandlerImpl::HandleWifiFeatureSupportedProperty, + weak_ptr_factory_.GetWeakPtr(), std::move(enable_property_name), + enabled, std::move(support_property_name), supported)); return; - case MACAddressRandomizationSupport::SUPPORTED: - SetDevicePropertyInternal( - device_state->path(), shill::kMacAddressRandomizationEnabledProperty, - base::Value(mac_addr_randomization_enabled_), base::DoNothing(), - network_handler::ErrorCallback()); + case WifiFeatureSupport::SUPPORTED: + SetDevicePropertyInternal(device_state->path(), enable_property_name, + base::Value(enabled), base::DoNothing(), + network_handler::ErrorCallback()); return; - case MACAddressRandomizationSupport::UNSUPPORTED: + case WifiFeatureSupport::UNSUPPORTED: return; } } +void NetworkDeviceHandlerImpl::HandleWifiFeatureSupportedProperty( + std::string enable_property_name, + bool enabled, + std::string support_property_name, + WifiFeatureSupport* feature_support_to_set, + const std::string& device_path, + base::Optional<base::Value> properties) { + if (!properties) { + return; + } + base::Optional<bool> supported_val = + properties->FindBoolKey(support_property_name); + if (!supported_val.has_value()) { + if (base::SysInfo::IsRunningOnChromeOS()) { + NET_LOG(ERROR) << "Failed to get support property " + << support_property_name << " from device " << device_path; + } + return; + } + + // Try to set MAC address randomization if it's supported. + if (*supported_val) { + *feature_support_to_set = WifiFeatureSupport::SUPPORTED; + ApplyWifiFeatureToShillIfSupported(std::move(enable_property_name), enabled, + std::move(support_property_name), + feature_support_to_set); + } else { + *feature_support_to_set = WifiFeatureSupport::UNSUPPORTED; + } +} + +void NetworkDeviceHandlerImpl::ApplyMACAddressRandomizationToShill() { + ApplyWifiFeatureToShillIfSupported( + shill::kMacAddressRandomizationEnabledProperty, + mac_addr_randomization_enabled_, + shill::kMacAddressRandomizationSupportedProperty, + &mac_addr_randomization_supported_); +} + +void NetworkDeviceHandlerImpl::ApplyWakeOnWifiAllowedToShill() { + // Get the setting from feature flags. + wake_on_wifi_allowed_ = + base::FeatureList::IsEnabled(chromeos::features::kWakeOnWifiAllowed); + ApplyWifiFeatureToShillIfSupported( + shill::kWakeOnWiFiAllowedProperty, wake_on_wifi_allowed_, + shill::kWakeOnWiFiSupportedProperty, &wake_on_wifi_supported_); +} + void NetworkDeviceHandlerImpl::ApplyUsbEthernetMacAddressSourceToShill() { // Do nothing else if MAC address source is not specified yet. if (usb_ethernet_mac_address_source_.empty()) { @@ -596,32 +645,6 @@ } } -void NetworkDeviceHandlerImpl::HandleMACAddressRandomization( - const std::string& device_path, - base::Optional<base::Value> properties) { - if (!properties) - return; - base::Optional<bool> supported = - properties->FindBoolKey(shill::kMacAddressRandomizationSupportedProperty); - if (!supported.has_value()) { - if (base::SysInfo::IsRunningOnChromeOS()) { - NET_LOG(ERROR) << "Failed to determine if device " << device_path - << " supports MAC address randomization"; - } - return; - } - - // Try to set MAC address randomization if it's supported. - if (*supported) { - mac_addr_randomization_supported_ = - MACAddressRandomizationSupport::SUPPORTED; - ApplyMACAddressRandomizationToShill(); - } else { - mac_addr_randomization_supported_ = - MACAddressRandomizationSupport::UNSUPPORTED; - } -} - const DeviceState* NetworkDeviceHandlerImpl::GetWifiDeviceState() { return network_state_handler_->GetDeviceStateByType( NetworkTypePattern::WiFi());
diff --git a/chromeos/network/network_device_handler_impl.h b/chromeos/network/network_device_handler_impl.h index 386ddf2..950deaa71 100644 --- a/chromeos/network/network_device_handler_impl.h +++ b/chromeos/network/network_device_handler_impl.h
@@ -109,17 +109,15 @@ friend class NetworkDeviceHandler; friend class NetworkDeviceHandlerTest; + // Some WiFi feature enablement needs to check supported property before + // setting. e.g. MAC address randomization, wake on WiFi. // When there's no Wi-Fi device or there is one but we haven't asked if - // MAC address randomization is supported yet, the value of the member - // |mac_addr_randomizaton_supported_| will be |NOT_REQUESTED|. When we - // try to apply the |mac_addr_randomization_enabled_| value we will + // the feature is supported yet, the value of the member, e.g. + // |mac_addr_randomizaton_supported_|, will be |NOT_REQUESTED|. When we + // try to apply the value e.g. |mac_addr_randomization_enabled_|, we will // check whether it is supported and change to one of the other two // values. - enum class MACAddressRandomizationSupport { - NOT_REQUESTED, - SUPPORTED, - UNSUPPORTED - }; + enum class WifiFeatureSupport { NOT_REQUESTED, SUPPORTED, UNSUPPORTED }; NetworkDeviceHandlerImpl(); @@ -133,6 +131,9 @@ // devices. void ApplyMACAddressRandomizationToShill(); + // Applies the wake-on-wifi-allowed feature flag to WiFi devices. + void ApplyWakeOnWifiAllowedToShill(); + // Applies the current value of |usb_ethernet_mac_address_source_| to primary // enabled USB Ethernet device. Does nothing if MAC address source is not // specified yet. @@ -142,6 +143,30 @@ // existing cellular devices of Shill. void ApplyUseAttachApnToShill(); + // Utility function for applying enabled setting of WiFi features that needs + // to check if the feature is supported first. + // This function will update |supported| if it is still NOT_REQUESTED by + // getting |support_property_name| property of the WiFi device. Then, if it + // is supported, set |enable_property_name| property of the WiFi device to + // |enabled|. + void ApplyWifiFeatureToShillIfSupported(std::string enable_property_name, + bool enabled, + std::string support_property_name, + WifiFeatureSupport* supported); + + // Callback function used by ApplyWifiFeatureToShillIfSupported to get shill + // property when the supported property is NOT_REQUESTED. It will extract + // |support_property_name| of GetProperties response and update + // |feature_support_to_set|, then call ApplyWifiFeatureToShillIfSupported + // again if the feature is supported. + void HandleWifiFeatureSupportedProperty( + std::string enable_property_name, + bool enabled, + std::string support_property_name, + WifiFeatureSupport* feature_support_to_set, + const std::string& device_path, + base::Optional<base::Value> properties); + // Callback to be called on MAC address source change request failure. // The request was called on device with |device_path| path and // |device_mac_address| MAC address to change MAC address source to the new @@ -163,21 +188,17 @@ // Resets MAC address source property for secondary USB Ethernet devices. void ResetMacAddressSourceForSecondaryUsbEthernetDevices() const; - // Sets the value of |mac_addr_randomization_supported_| based on - // whether shill thinks it is supported on the wifi device. If it is - // supported, also apply |mac_addr_randomization_enabled_| to the - // shill device. - void HandleMACAddressRandomization(const std::string& device_path, - base::Optional<base::Value> properties); - // Get the DeviceState for the wifi device, if any. const DeviceState* GetWifiDeviceState(); NetworkStateHandler* network_state_handler_ = nullptr; bool cellular_allow_roaming_ = false; - MACAddressRandomizationSupport mac_addr_randomization_supported_ = - MACAddressRandomizationSupport::NOT_REQUESTED; + WifiFeatureSupport mac_addr_randomization_supported_ = + WifiFeatureSupport::NOT_REQUESTED; bool mac_addr_randomization_enabled_ = false; + WifiFeatureSupport wake_on_wifi_supported_ = + WifiFeatureSupport::NOT_REQUESTED; + bool wake_on_wifi_allowed_ = false; std::string usb_ethernet_mac_address_source_; std::string primary_enabled_usb_ethernet_device_path_;
diff --git a/chromeos/services/assistant/assistant_manager_service_impl.cc b/chromeos/services/assistant/assistant_manager_service_impl.cc index 7a93a8b..b023be0 100644 --- a/chromeos/services/assistant/assistant_manager_service_impl.cc +++ b/chromeos/services/assistant/assistant_manager_service_impl.cc
@@ -28,7 +28,6 @@ #include "base/task/post_task.h" #include "base/time/time.h" #include "base/unguessable_token.h" -#include "chromeos/assistant/internal/internal_util.h" #include "chromeos/dbus/util/version_loader.h" #include "chromeos/services/assistant/device_settings_host.h" #include "chromeos/services/assistant/libassistant_service_host_impl.h" @@ -40,34 +39,18 @@ #include "chromeos/services/assistant/public/cpp/assistant_enums.h" #include "chromeos/services/assistant/public/cpp/device_actions.h" #include "chromeos/services/assistant/public/cpp/features.h" -#include "chromeos/services/assistant/public/cpp/migration/libassistant_v1_api.h" #include "chromeos/services/assistant/public/shared/utils.h" #include "chromeos/services/assistant/service_context.h" #include "chromeos/services/assistant/timer_host.h" #include "chromeos/services/libassistant/public/mojom/android_app_info.mojom.h" #include "chromeos/services/libassistant/public/mojom/speech_recognition_observer.mojom.h" #include "chromeos/strings/grit/chromeos_strings.h" -#include "libassistant/shared/internal_api/assistant_manager_delegate.h" -#include "libassistant/shared/internal_api/assistant_manager_internal.h" -#include "libassistant/shared/public/assistant_manager.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "ui/accessibility/mojom/ax_assistant_structure.mojom.h" #include "ui/base/l10n/l10n_util.h" #include "url/gurl.h" -// A macro which ensures we are running on the main thread. -#define ENSURE_MAIN_THREAD(method, ...) \ - if (!main_task_runner()->RunsTasksInCurrentSequence()) { \ - main_task_runner()->PostTask( \ - FROM_HERE, \ - base::BindOnce(method, weak_factory_.GetWeakPtr(), ##__VA_ARGS__)); \ - return; \ - } - using media_session::mojom::MediaSessionAction; -using Resolution = assistant_client::ConversationStateListener::Resolution; - -namespace api = ::assistant::api; namespace chromeos { namespace assistant { @@ -349,7 +332,6 @@ } void AssistantManagerServiceImpl::StartVoiceInteraction() { - DCHECK(assistant_manager()); DVLOG(1) << __func__; audio_input_host_->SetMicState(true); @@ -372,27 +354,8 @@ void AssistantManagerServiceImpl::StartScreenContextInteraction( ax::mojom::AssistantStructurePtr assistant_structure, const std::vector<uint8_t>& assistant_screenshot) { - std::vector<std::string> context_protos; - - // Screen context can have the |assistant_structure|, or |assistant_extra| and - // |assistant_tree| set to nullptr. This happens in the case where the screen - // context is coming from the metalayer or there is no active window. For this - // scenario, we don't create a context proto for the AssistantBundle that - // consists of the |assistant_extra| and |assistant_tree|. - if (assistant_structure && assistant_structure->assistant_extra && - assistant_structure->assistant_tree) { - // Note: the value of |is_first_query| for screen context query is a no-op - // because it is not used for metalayer and "What's on my screen" queries. - context_protos.emplace_back(CreateContextProto( - AssistantBundle{assistant_structure->assistant_extra.get(), - assistant_structure->assistant_tree.get()}, - /*is_first_query=*/true)); - } - - // Note: the value of |is_first_query| for screen context query is a no-op. - context_protos.emplace_back(CreateContextProto(assistant_screenshot, - /*is_first_query=*/true)); - assistant_manager_internal()->SendScreenContextRequest(context_protos); + conversation_controller().StartScreenContextInteraction( + std::move(assistant_structure), assistant_screenshot); } void AssistantManagerServiceImpl::StartTextInteraction( @@ -535,10 +498,8 @@ } void AssistantManagerServiceImpl::OnServiceRunning() { - // It is possible the |assistant_manager()| was destructed before the - // rescheduled main thread task got a chance to run. We check this and also - // try to avoid double run by checking |GetState()|. - if (!assistant_manager() || (GetState() == State::RUNNING)) + // Try to avoid double run by checking |GetState()|. + if (GetState() == State::RUNNING) return; SetStateAndInformObservers(State::RUNNING); @@ -625,18 +586,6 @@ return assistant_proxy_->ExtractNotificationDelegate(); } -void AssistantManagerServiceImpl::SendVoicelessInteraction( - const std::string& interaction, - const std::string& description, - bool is_user_initiated) { - assistant_client::VoicelessOptions voiceless_options; - - voiceless_options.is_user_initiated = is_user_initiated; - - assistant_manager_internal()->SendVoicelessInteraction( - interaction, description, voiceless_options, [](auto) {}); -} - void AssistantManagerServiceImpl::RecordQueryResponseTypeUMA() { AssistantQueryResponseType response_type = GetQueryResponseType(); @@ -708,18 +657,6 @@ return assistant_proxy_->service_controller(); } -assistant_client::AssistantManager* -AssistantManagerServiceImpl::assistant_manager() { - auto* api = LibassistantV1Api::Get(); - return api ? api->assistant_manager() : nullptr; -} - -assistant_client::AssistantManagerInternal* -AssistantManagerServiceImpl::assistant_manager_internal() { - auto* api = LibassistantV1Api::Get(); - return api ? api->assistant_manager_internal() : nullptr; -} - void AssistantManagerServiceImpl::SetMicState(bool mic_open) { DCHECK(audio_input_host_); audio_input_host_->SetMicState(mic_open);
diff --git a/chromeos/services/assistant/assistant_manager_service_impl.h b/chromeos/services/assistant/assistant_manager_service_impl.h index f1ccfe73..b0e5b2c8 100644 --- a/chromeos/services/assistant/assistant_manager_service_impl.h +++ b/chromeos/services/assistant/assistant_manager_service_impl.h
@@ -29,8 +29,6 @@ #include "chromeos/services/libassistant/public/cpp/assistant_notification.h" #include "chromeos/services/libassistant/public/mojom/notification_delegate.mojom.h" #include "chromeos/services/libassistant/public/mojom/service_controller.mojom-forward.h" -#include "libassistant/shared/public/conversation_state_listener.h" -#include "libassistant/shared/public/device_state_listener.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/receiver.h" @@ -45,11 +43,6 @@ class AssistantStateBase; } // namespace ash -namespace assistant_client { -class AssistantManager; -class AssistantManagerInternal; -} // namespace assistant_client - namespace chromeos { namespace assistant { @@ -97,7 +90,6 @@ // enabled/disabled in settings or switches to a non-primary profile. class COMPONENT_EXPORT(ASSISTANT_SERVICE) AssistantManagerServiceImpl : public AssistantManagerService, - public assistant_client::ConversationStateListener, public AppListEventSubscriber, private chromeos::libassistant::mojom::StateObserver, public ConversationObserver { @@ -195,9 +187,6 @@ mojo::PendingRemote<network::mojom::URLLoaderFactory> BindURLLoaderFactory(); - assistant_client::AssistantManager* assistant_manager(); - assistant_client::AssistantManagerInternal* assistant_manager_internal(); - void OnModifySettingsAction(const std::string& modify_setting_args_proto); void OnDeviceAppsEnabled(bool enabled);
diff --git a/chromeos/services/assistant/assistant_manager_service_impl_unittest.cc b/chromeos/services/assistant/assistant_manager_service_impl_unittest.cc index c4cc97ce..8f9cee85 100644 --- a/chromeos/services/assistant/assistant_manager_service_impl_unittest.cc +++ b/chromeos/services/assistant/assistant_manager_service_impl_unittest.cc
@@ -16,15 +16,12 @@ #include "base/test/scoped_feature_list.h" #include "base/test/task_environment.h" #include "base/values.h" -#include "chromeos/assistant/internal/test_support/fake_assistant_manager.h" -#include "chromeos/assistant/internal/test_support/fake_assistant_manager_internal.h" #include "chromeos/assistant/test_support/expect_utils.h" #include "chromeos/dbus/power/fake_power_manager_client.h" #include "chromeos/services/assistant/assistant_manager_service.h" #include "chromeos/services/assistant/proxy/libassistant_service_host.h" #include "chromeos/services/assistant/public/cpp/assistant_service.h" #include "chromeos/services/assistant/public/cpp/features.h" -#include "chromeos/services/assistant/public/cpp/migration/libassistant_v1_api.h" #include "chromeos/services/assistant/service_context.h" #include "chromeos/services/assistant/test_support/fake_libassistant_service.h" #include "chromeos/services/assistant/test_support/fake_service_context.h" @@ -35,8 +32,6 @@ #include "chromeos/services/assistant/test_support/scoped_device_actions.h" #include "chromeos/services/libassistant/public/cpp/assistant_timer.h" #include "chromeos/services/libassistant/public/mojom/speaker_id_enrollment_controller.mojom.h" -#include "libassistant/shared/internal_api/assistant_manager_internal.h" -#include "libassistant/shared/public/assistant_manager.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/receiver.h" #include "services/media_session/public/mojom/media_session.mojom-shared.h" @@ -114,13 +109,6 @@ DISALLOW_COPY_AND_ASSIGN(StateObserverMock); }; -class FakeLibassistantV1Api : public LibassistantV1Api { - public: - explicit FakeLibassistantV1Api(FakeAssistantManager* assistant_manager) - : LibassistantV1Api(assistant_manager, - &assistant_manager->assistant_manager_internal()) {} -}; - class AssistantManagerServiceImplTest : public testing::Test { public: AssistantManagerServiceImplTest() = default; @@ -195,14 +183,6 @@ FullyInitializedAssistantState& assistant_state() { return assistant_state_; } - FakeAssistantManager* fake_assistant_manager() { - return assistant_manager_.get(); - } - - FakeAssistantManagerInternal* fake_assistant_manager_internal() { - return &fake_assistant_manager()->assistant_manager_internal(); - } - FakeServiceContext* fake_service_context() { return service_context_.get(); } base::test::TaskEnvironment& task_environment() { return task_environment_; } @@ -243,23 +223,6 @@ "AssistantManagerStateImpl"); } - void SetAssistantManagerInternal(std::unique_ptr<FakeAssistantManagerInternal> - assistant_manager_internal) { - assistant_manager_->set_assistant_manager_internal( - std::move(assistant_manager_internal)); - libassistant_v1_api_.reset(); - libassistant_v1_api_ = - std::make_unique<FakeLibassistantV1Api>(assistant_manager_.get()); - } - - void SetAssistantManager( - std::unique_ptr<FakeAssistantManager> assistant_manager) { - assistant_manager_ = std::move(assistant_manager); - libassistant_v1_api_.reset(); - libassistant_v1_api_ = - std::make_unique<FakeLibassistantV1Api>(assistant_manager_.get()); - } - private: base::Thread& background_thread() { return assistant_manager_service()->GetBackgroundThreadForTesting(); @@ -275,11 +238,6 @@ // Fake implementation of the Libassistant Mojom service. FakeLibassistantService libassistant_service_; - std::unique_ptr<FakeAssistantManager> assistant_manager_{ - std::make_unique<FakeAssistantManager>()}; - std::unique_ptr<FakeLibassistantV1Api> libassistant_v1_api_{ - std::make_unique<FakeLibassistantV1Api>(assistant_manager_.get())}; - std::unique_ptr<AssistantAlarmTimerControllerMock> alarm_timer_controller_; std::unique_ptr<FakeServiceContext> service_context_; @@ -576,14 +534,14 @@ StrictMock<StateObserverMock> observer; AddStateObserver(&observer); - fake_assistant_manager()->BlockStartCalls(); + mojom_service_controller().BlockStartCalls(); EXPECT_CALL(observer, OnStateChanged(AssistantManagerService::State::STARTING)); Start(); assistant_manager_service()->RemoveStateObserver(&observer); - fake_assistant_manager()->UnblockStartCalls(); + mojom_service_controller().UnblockStartCalls(); } TEST_F(AssistantManagerServiceImplTest, ShouldFireStateObserverWhenStarted) { @@ -641,22 +599,6 @@ Start(); } -class AssistantManagerMock : public FakeAssistantManager { - public: - AssistantManagerMock() = default; - ~AssistantManagerMock() override = default; - - MOCK_METHOD(void, StartAssistantInteraction, (), (override)); -}; - -class AssistantManagerInternalMock : public FakeAssistantManagerInternal { - public: - AssistantManagerInternalMock() = default; - ~AssistantManagerInternalMock() override = default; - - MOCK_METHOD(void, StopAssistantInteractionInternal, (bool), (override)); -}; - TEST_F(AssistantManagerServiceImplTest, ShouldStartSpeakerIdEnrollmentWhenRequested) { NiceMock<SpeakerIdEnrollmentClientMock> client_mock; @@ -761,6 +703,7 @@ StrictMock<SpeakerIdEnrollmentClientMock> client_mock; StrictMock<SpeakerIdEnrollmentControllerMock> mojom_mock; + mojom_mock.Bind(mojom_libassistant_service()); EXPECT_CALL(mojom_mock, GetSpeakerIdEnrollmentStatus)
diff --git a/chromeos/services/assistant/service.cc b/chromeos/services/assistant/service.cc index e5a5c6a1..2851954 100644 --- a/chromeos/services/assistant/service.cc +++ b/chromeos/services/assistant/service.cc
@@ -410,8 +410,8 @@ } CoreAccountInfo Service::RetrievePrimaryAccountInfo() const { - CoreAccountInfo account_info = identity_manager_->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + CoreAccountInfo account_info = + identity_manager_->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin); CHECK(!account_info.account_id.empty()); CHECK(!account_info.gaia.empty()); return account_info;
diff --git a/chromeos/services/device_sync/cryptauth_client_impl.cc b/chromeos/services/device_sync/cryptauth_client_impl.cc index 91d66fb6..37d3721 100644 --- a/chromeos/services/device_sync/cryptauth_client_impl.cc +++ b/chromeos/services/device_sync/cryptauth_client_impl.cc
@@ -674,7 +674,7 @@ weak_ptr_factory_.GetWeakPtr(), request_type, serialized_request, request_as_query_parameters, std::move(response_callback)), signin::PrimaryAccountAccessTokenFetcher::Mode::kWaitUntilAvailable, - signin::ConsentLevel::kNotRequired); + signin::ConsentLevel::kSignin); } template <class ResponseProto>
diff --git a/chromeos/services/device_sync/device_sync_impl.cc b/chromeos/services/device_sync/device_sync_impl.cc index 5f792e61..9a8903d 100644 --- a/chromeos/services/device_sync/device_sync_impl.cc +++ b/chromeos/services/device_sync/device_sync_impl.cc
@@ -786,7 +786,7 @@ void DeviceSyncImpl::OnPrimaryAccountChanged( const signin::PrimaryAccountChangeEvent& event) { PA_LOG(VERBOSE) << "DeviceSyncImpl: OnPrimaryAccountChanged"; - switch (event.GetEventTypeFor(signin::ConsentLevel::kNotRequired)) { + switch (event.GetEventTypeFor(signin::ConsentLevel::kSignin)) { case signin::PrimaryAccountChangeEvent::Type::kSet: identity_manager_->RemoveObserver(this); ProcessPrimaryAccountInfo(event.GetCurrentState().primary_account); @@ -831,8 +831,8 @@ status_ = InitializationStatus::kFetchingAccountInfo; // "Unconsented" because this feature is not tied to browser sync consent. - CoreAccountInfo primary_account = identity_manager_->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + CoreAccountInfo primary_account = + identity_manager_->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin); if (primary_account.account_id.empty()) { // Primary profile not loaded yet. This happens when adding a new account. PA_LOG(VERBOSE) << "DeviceSyncImpl: Waiting for primary account info";
diff --git a/chromeos/services/device_sync/device_sync_service_unittest.cc b/chromeos/services/device_sync/device_sync_service_unittest.cc index 563890f21..6b0b73e3 100644 --- a/chromeos/services/device_sync/device_sync_service_unittest.cc +++ b/chromeos/services/device_sync/device_sync_service_unittest.cc
@@ -596,10 +596,10 @@ device_manager); EXPECT_EQ(fake_cryptauth_v2_device_manager_factory_->instance(), v2_device_manager); - EXPECT_EQ(identity_manager_ - ->GetPrimaryAccountInfo(signin::ConsentLevel::kNotRequired) - .email, - user_email); + EXPECT_EQ( + identity_manager_->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin) + .email, + user_email); if (base::FeatureList::IsEnabled(features::kCryptAuthV2Enrollment)) { EXPECT_EQ(fake_cryptauth_v2_enrollment_manager_factory_->instance() ->GetUserPrivateKey(),
diff --git a/chromeos/services/libassistant/conversation_controller.cc b/chromeos/services/libassistant/conversation_controller.cc index 3947fa4..ed4c7d2 100644 --- a/chromeos/services/libassistant/conversation_controller.cc +++ b/chromeos/services/libassistant/conversation_controller.cc
@@ -325,6 +325,38 @@ /*is_user_initiated=*/true); } +void ConversationController::StartScreenContextInteraction( + ax::mojom::AssistantStructurePtr assistant_structure, + const std::vector<uint8_t>& screenshot) { + DCHECK(requests_are_allowed_) + << "Should not receive requests before Libassistant is running"; + if (!assistant_manager_internal_) + return; + + std::vector<std::string> context_protos; + // Screen context can have the |assistant_structure|, or |assistant_extra| and + // |assistant_tree| set to nullptr. This happens in the case where the screen + // context is coming from the metalayer or there is no active window. For this + // scenario, we don't create a context proto for the AssistantBundle that + // consists of the |assistant_extra| and |assistant_tree|. + if (assistant_structure && assistant_structure->assistant_extra && + assistant_structure->assistant_tree) { + // Note: the value of |is_first_query| for screen context query is a no-op + // because it is not used for metalayer and "What's on my screen" queries. + context_protos.emplace_back(chromeos::assistant::CreateContextProto( + chromeos::assistant::AssistantBundle{ + assistant_structure->assistant_extra.get(), + assistant_structure->assistant_tree.get()}, + /*is_first_query=*/true)); + } + + // Note: the value of |is_first_query| for screen context query is a no-op. + context_protos.emplace_back( + chromeos::assistant::CreateContextProto(screenshot, + /*is_first_query=*/true)); + assistant_manager_internal_->SendScreenContextRequest(context_protos); +} + void ConversationController::StopActiveInteraction(bool cancel_conversation) { if (!assistant_manager_internal_) { VLOG(1) << "Stopping interaction without assistant manager.";
diff --git a/chromeos/services/libassistant/conversation_controller.h b/chromeos/services/libassistant/conversation_controller.h index e414854..02cb204 100644 --- a/chromeos/services/libassistant/conversation_controller.h +++ b/chromeos/services/libassistant/conversation_controller.h
@@ -34,7 +34,7 @@ class COMPONENT_EXPORT(LIBASSISTANT_SERVICE) ConversationController : public mojom::ConversationController, public AssistantManagerObserver, - public ::chromeos::assistant::action::AssistantActionObserver, + public chromeos::assistant::action::AssistantActionObserver, public chromeos::assistant::ConversationObserver { public: using AssistantNotification = ::chromeos::assistant::AssistantNotification; @@ -76,6 +76,9 @@ bool allow_tts) override; void StartVoiceInteraction() override; void StartEditReminderInteraction(const std::string& client_id) override; + void StartScreenContextInteraction( + ax::mojom::AssistantStructurePtr assistant_structure, + const std::vector<uint8_t>& screenshot) override; void StopActiveInteraction(bool cancel_conversation) override; void RetrieveNotification(AssistantNotification notification, int32_t action_index) override; @@ -140,6 +143,8 @@ std::unique_ptr<assistant::action::CrosActionModule> action_module_; std::unique_ptr<base::CancelableOnceClosure> stop_interaction_closure_; + base::TimeDelta stop_interaction_delay_ = + base::TimeDelta::FromMilliseconds(500); scoped_refptr<base::SequencedTaskRunner> mojom_task_runner_; base::WeakPtrFactory<ConversationController> weak_factory_{this};
diff --git a/chromeos/services/libassistant/display_controller.cc b/chromeos/services/libassistant/display_controller.cc index e42dfc27..5d0f315b 100644 --- a/chromeos/services/libassistant/display_controller.cc +++ b/chromeos/services/libassistant/display_controller.cc
@@ -72,6 +72,7 @@ } void DisplayController::SetDeviceAppsEnabled(bool enabled) { + DCHECK(action_module_); display_connection_->SetDeviceAppsEnabled(enabled); DCHECK(action_module_);
diff --git a/chromeos/services/libassistant/libassistant_service.cc b/chromeos/services/libassistant/libassistant_service.cc index 64e2086..e83fc5b5 100644 --- a/chromeos/services/libassistant/libassistant_service.cc +++ b/chromeos/services/libassistant/libassistant_service.cc
@@ -62,7 +62,6 @@ libassistant_factory_( FactoryOrDefault(std::move(factory), &platform_api_)), service_controller_(libassistant_factory_.get()), - conversation_controller_(), conversation_state_listener_( &speech_recognition_observers_, conversation_controller_.conversation_observers(),
diff --git a/chromeos/services/libassistant/public/mojom/BUILD.gn b/chromeos/services/libassistant/public/mojom/BUILD.gn index 054b678..82944f7 100644 --- a/chromeos/services/libassistant/public/mojom/BUILD.gn +++ b/chromeos/services/libassistant/public/mojom/BUILD.gn
@@ -36,6 +36,7 @@ "//services/device/public/mojom", "//services/media_session/public/mojom", "//services/network/public/mojom", + "//ui/accessibility/mojom", ] cpp_typemaps = [
diff --git a/chromeos/services/libassistant/public/mojom/conversation_controller.mojom b/chromeos/services/libassistant/public/mojom/conversation_controller.mojom index 451e7c84..7e2b648 100644 --- a/chromeos/services/libassistant/public/mojom/conversation_controller.mojom +++ b/chromeos/services/libassistant/public/mojom/conversation_controller.mojom
@@ -7,6 +7,7 @@ import "chromeos/services/libassistant/public/mojom/conversation_observer.mojom"; import "chromeos/services/libassistant/public/mojom/notification_delegate.mojom"; import "chromeos/services/libassistant/public/mojom/assistant_notification.mojom"; +import "ui/accessibility/mojom/ax_assistant_structure.mojom"; // Interface for controller supporting conversation related functionalities. interface ConversationController { @@ -22,6 +23,12 @@ // to edit the specified reminder. StartEditReminderInteraction(string client_id); + // Starts a screen context interaction. + // |screenshot| contains JPEG data. + StartScreenContextInteraction( + ax.mojom.AssistantStructure assistant_structure, + array<uint8> screenshot); + // Stops the ongoing interaction with a delay to give buffer time to // Libassistant when being forcefully stopped. StopActiveInteraction(bool cancel_conversation);
diff --git a/chromeos/tast_control.gni b/chromeos/tast_control.gni index d365fd59..0679e7f9 100644 --- a/chromeos/tast_control.gni +++ b/chromeos/tast_control.gni
@@ -38,6 +38,9 @@ # crbug.com/1156006 "filemanager.DragDrop", + # crbug.com/1183238 + "filemanager.DrivefsUI", + # crbug.com/1171146 "session.LogoutCleanup",
diff --git a/components/arc/session/arc_vm_client_adapter_unittest.cc b/components/arc/session/arc_vm_client_adapter_unittest.cc index 5281dcf..058f7c2 100644 --- a/components/arc/session/arc_vm_client_adapter_unittest.cc +++ b/components/arc/session/arc_vm_client_adapter_unittest.cc
@@ -1574,49 +1574,6 @@ "androidboot.native_bridge=libhoudini.so")); } -// Tests that "readahead" mode is used by default. -TEST_F(ArcVmClientAdapterTest, TestGetArcVmUreadaheadModeDefault) { - StartParams start_params(GetPopulatedStartParams()); - SetValidUserInfo(); - StartMiniArcWithParams(true, std::move(start_params)); - EXPECT_TRUE( - base::Contains(GetTestConciergeClient()->start_arc_vm_request().params(), - "androidboot.arcvm_ureadahead_mode=readahead")); - EXPECT_FALSE( - base::Contains(GetTestConciergeClient()->start_arc_vm_request().params(), - "androidboot.arcvm_ureadahead_mode=generate")); -} - -// Tests that the "generate" command line switches the mode. -TEST_F(ArcVmClientAdapterTest, TestGetArcVmUreadaheadModeGenerate) { - base::CommandLine::ForCurrentProcess()->InitFromArgv( - {"", "--arcvm-ureadahead-mode=generate"}); - StartParams start_params(GetPopulatedStartParams()); - SetValidUserInfo(); - StartMiniArcWithParams(true, std::move(start_params)); - EXPECT_FALSE( - base::Contains(GetTestConciergeClient()->start_arc_vm_request().params(), - "androidboot.arcvm_ureadahead_mode=readahead")); - EXPECT_TRUE( - base::Contains(GetTestConciergeClient()->start_arc_vm_request().params(), - "androidboot.arcvm_ureadahead_mode=generate")); -} - -// Tests that the "disabled" command line disables both readahead and generate. -TEST_F(ArcVmClientAdapterTest, TestGetArcVmUreadaheadModeDisabled) { - base::CommandLine::ForCurrentProcess()->InitFromArgv( - {"", "--arcvm-ureadahead-mode=disabled"}); - StartParams start_params(GetPopulatedStartParams()); - SetValidUserInfo(); - StartMiniArcWithParams(true, std::move(start_params)); - EXPECT_FALSE( - base::Contains(GetTestConciergeClient()->start_arc_vm_request().params(), - "androidboot.arcvm_ureadahead_mode=readahead")); - EXPECT_FALSE( - base::Contains(GetTestConciergeClient()->start_arc_vm_request().params(), - "androidboot.arcvm_ureadahead_mode=generate")); -} - // Tests that ArcVmClientAdapter connects to the boot notification server // twice: once in StartMiniArc to check that it is listening, and the second // time in UpgradeArc to send props.
diff --git a/components/heavy_ad_intervention/heavy_ad_blocklist.cc b/components/heavy_ad_intervention/heavy_ad_blocklist.cc index 80be8e55..c72e95c8 100644 --- a/components/heavy_ad_intervention/heavy_ad_blocklist.cc +++ b/components/heavy_ad_intervention/heavy_ad_blocklist.cc
@@ -11,6 +11,8 @@ #include "components/blocklist/opt_out_blocklist/opt_out_store.h" #include "components/heavy_ad_intervention/heavy_ad_features.h" +namespace heavy_ad_intervention { + namespace { const char kHostDurationHours[] = "host-duration-hours"; @@ -74,3 +76,5 @@ return {{static_cast<int>(HeavyAdBlocklistType::kHeavyAdOnlyType), GetBlocklistParamValue(kTypeVersion, 0)}}; } + +} // namespace heavy_ad_intervention
diff --git a/components/heavy_ad_intervention/heavy_ad_blocklist.h b/components/heavy_ad_intervention/heavy_ad_blocklist.h index 19e6e63..68c1908 100644 --- a/components/heavy_ad_intervention/heavy_ad_blocklist.h +++ b/components/heavy_ad_intervention/heavy_ad_blocklist.h
@@ -20,6 +20,8 @@ class OptOutStore; } // namespace blocklist +namespace heavy_ad_intervention { + // The heavy ad intervention only supports one type for the blocklist. enum class HeavyAdBlocklistType { kHeavyAdOnlyType = 0, @@ -58,4 +60,6 @@ DISALLOW_COPY_AND_ASSIGN(HeavyAdBlocklist); }; +} // namespace heavy_ad_intervention + #endif // COMPONENTS_HEAVY_AD_INTERVENTION_HEAVY_AD_BLOCKLIST_H_
diff --git a/components/heavy_ad_intervention/heavy_ad_blocklist_unittest.cc b/components/heavy_ad_intervention/heavy_ad_blocklist_unittest.cc index e1d77879..2e8bdba 100644 --- a/components/heavy_ad_intervention/heavy_ad_blocklist_unittest.cc +++ b/components/heavy_ad_intervention/heavy_ad_blocklist_unittest.cc
@@ -18,6 +18,8 @@ #include "components/variations/variations_associated_data.h" #include "testing/gtest/include/gtest/gtest.h" +namespace heavy_ad_intervention { + namespace { // Empty mock class to test the HeavyAdBlocklist. @@ -138,3 +140,5 @@ } } // namespace + +} // namespace heavy_ad_intervention
diff --git a/components/heavy_ad_intervention/heavy_ad_features.cc b/components/heavy_ad_intervention/heavy_ad_features.cc index e87c48b..b748bf4 100644 --- a/components/heavy_ad_intervention/heavy_ad_features.cc +++ b/components/heavy_ad_intervention/heavy_ad_features.cc
@@ -4,6 +4,8 @@ #include "components/heavy_ad_intervention/heavy_ad_features.h" +namespace heavy_ad_intervention { + namespace features { const char kHeavyAdReportingOnlyParamName[] = "reporting-only"; @@ -29,3 +31,5 @@ "HeavyAdPrivacyMitigations", base::FEATURE_ENABLED_BY_DEFAULT}; } // namespace features + +} // namespace heavy_ad_intervention
diff --git a/components/heavy_ad_intervention/heavy_ad_features.h b/components/heavy_ad_intervention/heavy_ad_features.h index 2998b52..634b24b 100644 --- a/components/heavy_ad_intervention/heavy_ad_features.h +++ b/components/heavy_ad_intervention/heavy_ad_features.h
@@ -7,6 +7,8 @@ #include "base/feature_list.h" +namespace heavy_ad_intervention { + namespace features { // Param that enabled heavy ad intervention with reporting only, does not @@ -23,4 +25,6 @@ } // namespace features +} // namespace heavy_ad_intervention + #endif // COMPONENTS_HEAVY_AD_INTERVENTION_HEAVY_AD_FEATURES_H_
diff --git a/components/heavy_ad_intervention/heavy_ad_helper.cc b/components/heavy_ad_intervention/heavy_ad_helper.cc index e81f05c..5f5f7c7 100644 --- a/components/heavy_ad_intervention/heavy_ad_helper.cc +++ b/components/heavy_ad_intervention/heavy_ad_helper.cc
@@ -15,7 +15,7 @@ #include "ui/base/webui/jstemplate_builder.h" #include "ui/base/webui/web_ui_util.h" -namespace heavy_ads { +namespace heavy_ad_intervention { // NOTE: If adding usage of more strings/resources here, make sure that they // are allowlisted in //weblayer/grit_{resources, strings}_allowlist.txt; @@ -62,4 +62,4 @@ return heavy_ad_html; } -} // namespace heavy_ads +} // namespace heavy_ad_intervention
diff --git a/components/heavy_ad_intervention/heavy_ad_helper.h b/components/heavy_ad_intervention/heavy_ad_helper.h index 7522fbaf..1b80e44 100644 --- a/components/heavy_ad_intervention/heavy_ad_helper.h +++ b/components/heavy_ad_intervention/heavy_ad_helper.h
@@ -7,12 +7,12 @@ #include <string> -namespace heavy_ads { +namespace heavy_ad_intervention { // Returns a string containing HTML of an error page for the heavy ad // intervention. std::string PrepareHeavyAdPage(const std::string& application_locale); -} // namespace heavy_ads +} // namespace heavy_ad_intervention #endif // COMPONENTS_HEAVY_AD_INTERVENTION_HEAVY_AD_HELPER_H_
diff --git a/components/heavy_ad_intervention/heavy_ad_service.cc b/components/heavy_ad_intervention/heavy_ad_service.cc index cc7cddf..3aa6d16 100644 --- a/components/heavy_ad_intervention/heavy_ad_service.cc +++ b/components/heavy_ad_intervention/heavy_ad_service.cc
@@ -17,6 +17,8 @@ #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" +namespace heavy_ad_intervention { + namespace { const base::FilePath::CharType kHeavyAdInterventionOptOutDBFilename[] = @@ -98,3 +100,5 @@ if (!on_blocklist_cleared_callback_.is_null()) std::move(on_blocklist_cleared_callback_).Run(); } + +} // namespace heavy_ad_intervention
diff --git a/components/heavy_ad_intervention/heavy_ad_service.h b/components/heavy_ad_intervention/heavy_ad_service.h index 2a64431..1c1c9409 100644 --- a/components/heavy_ad_intervention/heavy_ad_service.h +++ b/components/heavy_ad_intervention/heavy_ad_service.h
@@ -17,6 +17,8 @@ class FilePath; } +namespace heavy_ad_intervention { + class HeavyAdBlocklist; // Keyed service that owns the heavy ad intervention blocklist. @@ -61,4 +63,6 @@ DISALLOW_COPY_AND_ASSIGN(HeavyAdService); }; +} // namespace heavy_ad_intervention + #endif // COMPONENTS_HEAVY_AD_INTERVENTION_HEAVY_AD_SERVICE_H_
diff --git a/components/invalidation/impl/profile_identity_provider.cc b/components/invalidation/impl/profile_identity_provider.cc index 1778857cd..30c0d2e 100644 --- a/components/invalidation/impl/profile_identity_provider.cc +++ b/components/invalidation/impl/profile_identity_provider.cc
@@ -63,8 +63,8 @@ : identity_manager_(identity_manager) { identity_manager_->AddObserver(this); - active_account_id_ = identity_manager_->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired); + active_account_id_ = + identity_manager_->GetPrimaryAccountId(signin::ConsentLevel::kSignin); } ProfileIdentityProvider::~ProfileIdentityProvider() {
diff --git a/components/omnibox/browser/local_history_zero_suggest_provider.cc b/components/omnibox/browser/local_history_zero_suggest_provider.cc index c4cccf2..b73524d 100644 --- a/components/omnibox/browser/local_history_zero_suggest_provider.cc +++ b/components/omnibox/browser/local_history_zero_suggest_provider.cc
@@ -202,7 +202,7 @@ bool LocalHistoryZeroSuggestProvider::IsSignedIn() { const auto* identity_manager = client_->GetIdentityManager(); return identity_manager ? identity_manager->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired) + signin::ConsentLevel::kSignin) : false; }
diff --git a/components/page_load_metrics/browser/metrics_web_contents_observer.cc b/components/page_load_metrics/browser/metrics_web_contents_observer.cc index 42d7723..6b2db038 100644 --- a/components/page_load_metrics/browser/metrics_web_contents_observer.cc +++ b/components/page_load_metrics/browser/metrics_web_contents_observer.cc
@@ -138,15 +138,16 @@ } void MetricsWebContentsObserver::FrameDeleted(content::RenderFrameHost* rfh) { - if (auto* memory_tracker = GetMemoryTracker()) - memory_tracker->OnFrameDeleted(rfh, this); - if (committed_load_) - committed_load_->FrameDeleted(rfh); + committed_load_->FrameDeleted(rfh->GetFrameTreeNodeId()); } void MetricsWebContentsObserver::RenderFrameDeleted( content::RenderFrameHost* rfh) { + if (auto* memory_tracker = GetMemoryTracker()) + memory_tracker->OnRenderFrameDeleted(rfh, this); + if (committed_load_) + committed_load_->RenderFrameDeleted(rfh); // PageLoadTracker can be associated only with a main frame. if (rfh->GetParent()) return;
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.cc b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.cc index df9d203..600ddd9 100644 --- a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.cc +++ b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.cc
@@ -168,7 +168,7 @@ std::unique_ptr<AdsPageLoadMetricsObserver> AdsPageLoadMetricsObserver::CreateIfNeeded( content::WebContents* web_contents, - HeavyAdService* heavy_ad_service, + heavy_ad_intervention::HeavyAdService* heavy_ad_service, const ApplicationLocaleGetter& application_locale_getter) { if (!base::FeatureList::IsEnabled(subresource_filter::kAdTagging) || !subresource_filter::ContentSubresourceFilterThrottleManager:: @@ -229,10 +229,10 @@ } AdsPageLoadMetricsObserver::AdsPageLoadMetricsObserver( - HeavyAdService* heavy_ad_service, + heavy_ad_intervention::HeavyAdService* heavy_ad_service, const ApplicationLocaleGetter& application_locale_getter, base::TickClock* clock, - HeavyAdBlocklist* blocklist) + heavy_ad_intervention::HeavyAdBlocklist* blocklist) : subresource_observer_(this), clock_(clock ? clock : base::DefaultTickClock::GetInstance()), restricted_navigation_ad_tagging_enabled_(base::FeatureList::IsEnabled( @@ -240,8 +240,8 @@ heavy_ad_service_(heavy_ad_service), application_locale_getter_(application_locale_getter), heavy_ad_blocklist_(blocklist), - heavy_ad_privacy_mitigations_enabled_( - base::FeatureList::IsEnabled(features::kHeavyAdPrivacyMitigations)), + heavy_ad_privacy_mitigations_enabled_(base::FeatureList::IsEnabled( + heavy_ad_intervention::features::kHeavyAdPrivacyMitigations)), heavy_ad_threshold_noise_provider_( std::make_unique<HeavyAdThresholdNoiseProvider>( heavy_ad_privacy_mitigations_enabled_ /* use_noise */)) { @@ -654,13 +654,8 @@ #endif } -void AdsPageLoadMetricsObserver::OnFrameDeleted( - content::RenderFrameHost* render_frame_host) { - if (!render_frame_host) - return; - - const auto& id_and_data = - ad_frames_data_.find(render_frame_host->GetFrameTreeNodeId()); +void AdsPageLoadMetricsObserver::OnFrameDeleted(int frame_tree_node_id) { + const auto& id_and_data = ad_frames_data_.find(frame_tree_node_id); if (id_and_data == ad_frames_data_.end()) return; @@ -1279,7 +1274,8 @@ blocklist->AddEntry( GetDelegate().GetWebContents()->GetLastCommittedURL().host(), true /* opt_out */, - static_cast<int>(HeavyAdBlocklistType::kHeavyAdOnlyType)); + static_cast<int>( + heavy_ad_intervention::HeavyAdBlocklistType::kHeavyAdOnlyType)); // Once we report, we need to check and see if we are now blocklisted. // If we are, then we might trigger stricter interventions. // TODO(ericrobinson): This does a couple fetches of the blocklist. It @@ -1316,7 +1312,8 @@ GetDelegate().GetWebContents()->GetController().LoadPostCommitErrorPage( render_frame_host, render_frame_host->GetLastCommittedURL(), - heavy_ads::PrepareHeavyAdPage(application_locale_getter_.Run()), + heavy_ad_intervention::PrepareHeavyAdPage( + application_locale_getter_.Run()), net::ERR_BLOCKED_BY_CLIENT); } @@ -1340,7 +1337,8 @@ std::vector<blocklist::BlocklistReason> passed_reasons; heavy_ads_blocklist_reason_ = blocklist->IsLoadedAndAllowed( GetDelegate().GetWebContents()->GetLastCommittedURL().host(), - static_cast<int>(HeavyAdBlocklistType::kHeavyAdOnlyType), + static_cast<int>( + heavy_ad_intervention::HeavyAdBlocklistType::kHeavyAdOnlyType), false /* opt_out */, &passed_reasons); } @@ -1353,7 +1351,8 @@ return heavy_ads_blocklist_reason_ != blocklist::BlocklistReason::kAllowed; } -HeavyAdBlocklist* AdsPageLoadMetricsObserver::GetHeavyAdBlocklist() { +heavy_ad_intervention::HeavyAdBlocklist* +AdsPageLoadMetricsObserver::GetHeavyAdBlocklist() { if (heavy_ad_blocklist_) return heavy_ad_blocklist_; if (!heavy_ad_service_)
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.h b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.h index 7946743..6722b0d 100644 --- a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.h +++ b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.h
@@ -34,8 +34,10 @@ extern const base::Feature kRestrictedNavigationAdTagging; } +namespace heavy_ad_intervention { class HeavyAdBlocklist; class HeavyAdService; +} // namespace heavy_ad_intervention // This observer labels each sub-frame as an ad or not, and keeps track of // relevant per-frame and whole-page byte statistics. @@ -76,7 +78,7 @@ // returns nullptr. static std::unique_ptr<AdsPageLoadMetricsObserver> CreateIfNeeded( content::WebContents* web_contents, - HeavyAdService* heavy_ad_service, + heavy_ad_intervention::HeavyAdService* heavy_ad_service, const ApplicationLocaleGetter& application_local_getter); // For a given subframe, returns whether or not the subframe's url would be @@ -87,10 +89,10 @@ // |clock| and |blocklist| should be set only by tests. In particular, // |blocklist| should be set only if |heavy_ad_service| is null. explicit AdsPageLoadMetricsObserver( - HeavyAdService* heavy_ad_service, + heavy_ad_intervention::HeavyAdService* heavy_ad_service, const ApplicationLocaleGetter& application_local_getter, base::TickClock* clock = nullptr, - HeavyAdBlocklist* blocklist = nullptr); + heavy_ad_intervention::HeavyAdBlocklist* blocklist = nullptr); ~AdsPageLoadMetricsObserver() override; // page_load_metrics::PageLoadMetricsObserver @@ -129,7 +131,7 @@ content::RenderFrameHost* render_frame_host, const page_load_metrics::mojom::FrameIntersectionUpdate& intersection_update) override; - void OnFrameDeleted(content::RenderFrameHost* render_frame_host) override; + void OnFrameDeleted(int frame_tree_node_id) override; void SetHeavyAdThresholdNoiseProviderForTesting( std::unique_ptr<HeavyAdThresholdNoiseProvider> noise_provider) { @@ -252,7 +254,7 @@ FrameTreeData* frame_data); bool IsBlocklisted(bool report); - HeavyAdBlocklist* GetHeavyAdBlocklist(); + heavy_ad_intervention::HeavyAdBlocklist* GetHeavyAdBlocklist(); // Maps a frame (by id) to the corresponding FrameInstance. Multiple frame ids // can point to the same underlying FrameTreeData. The responsible frame is @@ -305,13 +307,13 @@ // Pointer to the HeavyAdService from which the heavy ad blocklist is obtained // in production. - HeavyAdService* heavy_ad_service_; + heavy_ad_intervention::HeavyAdService* heavy_ad_service_; ApplicationLocaleGetter application_locale_getter_; // Pointer to the blocklist used to throttle the heavy ad intervention. Can // be replaced by tests. - HeavyAdBlocklist* heavy_ad_blocklist_; + heavy_ad_intervention::HeavyAdBlocklist* heavy_ad_blocklist_; // Whether the heavy ad privacy mitigations feature is enabled. const bool heavy_ad_privacy_mitigations_enabled_;
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc index 1f576d2d..007eb1d 100644 --- a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc +++ b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc
@@ -446,10 +446,11 @@ public blocklist::OptOutBlocklistDelegate { public: AdsPageLoadMetricsObserverTest() - : test_blocklist_(std::make_unique<HeavyAdBlocklist>( - nullptr, - base::DefaultClock::GetInstance(), - this)) {} + : test_blocklist_( + std::make_unique<heavy_ad_intervention::HeavyAdBlocklist>( + nullptr, + base::DefaultClock::GetInstance(), + this)) {} void SetUp() override { SubresourceFilterTestHarness::SetUp(); @@ -739,7 +740,9 @@ return test_ukm_recorder_; } - HeavyAdBlocklist* blocklist() { return test_blocklist_.get(); } + heavy_ad_intervention::HeavyAdBlocklist* blocklist() { + return test_blocklist_.get(); + } // Flushes all intervention report messages and returns a bool if there was // a message. @@ -833,7 +836,7 @@ } } - std::unique_ptr<HeavyAdBlocklist> test_blocklist_; + std::unique_ptr<heavy_ad_intervention::HeavyAdBlocklist> test_blocklist_; base::HistogramTester histogram_tester_; ukm::TestAutoSetUkmRecorder test_ukm_recorder_; std::unique_ptr<page_load_metrics::PageLoadMetricsObserverTester> tester_; @@ -1988,8 +1991,9 @@ // computed heavy ad types for ad frames TEST_F(AdsPageLoadMetricsObserverTest, HeavyAdFeatureOff_UMARecorded) { base::test::ScopedFeatureList feature_list; - feature_list.InitWithFeatures({}, {features::kHeavyAdIntervention, - features::kHeavyAdInterventionWarning}); + feature_list.InitWithFeatures( + {}, {heavy_ad_intervention::features::kHeavyAdIntervention, + heavy_ad_intervention::features::kHeavyAdInterventionWarning}); OverrideVisibilityTrackerWithMockClock(); RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); @@ -2069,7 +2073,8 @@ TEST_F(AdsPageLoadMetricsObserverTest, HeavyAdNetworkUsage_InterventionFired) { base::test::ScopedFeatureList feature_list; - feature_list.InitAndEnableFeature(features::kHeavyAdIntervention); + feature_list.InitAndEnableFeature( + heavy_ad_intervention::features::kHeavyAdIntervention); RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); RenderFrameHost* ad_frame = CreateAndNavigateSubFrame(kAdUrl, main_frame); @@ -2125,7 +2130,8 @@ // record histograms, but continue to monitor for CPU heavy ad interventions. TEST_F(AdsPageLoadMetricsObserverTest, HeavyAdCpuInterventionInBackground) { base::test::ScopedFeatureList feature_list; - feature_list.InitAndEnableFeature(features::kHeavyAdIntervention); + feature_list.InitAndEnableFeature( + heavy_ad_intervention::features::kHeavyAdIntervention); OverrideVisibilityTrackerWithMockClock(); RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); @@ -2175,7 +2181,8 @@ TEST_F(AdsPageLoadMetricsObserverTest, HeavyAdNetworkInterventionInBackgrounded) { base::test::ScopedFeatureList feature_list; - feature_list.InitAndEnableFeature(features::kHeavyAdIntervention); + feature_list.InitAndEnableFeature( + heavy_ad_intervention::features::kHeavyAdIntervention); RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); RenderFrameHost* ad_frame = CreateAndNavigateSubFrame(kAdUrl, main_frame); @@ -2220,7 +2227,8 @@ TEST_F(AdsPageLoadMetricsObserverTest, HeavyAdNetworkUsageWithNoise_InterventionFired) { base::test::ScopedFeatureList feature_list; - feature_list.InitAndEnableFeature(features::kHeavyAdIntervention); + feature_list.InitAndEnableFeature( + heavy_ad_intervention::features::kHeavyAdIntervention); RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); @@ -2273,7 +2281,8 @@ TEST_F(AdsPageLoadMetricsObserverTest, HeavyAdNetworkUsageLessThanNoisedThreshold_NotFired) { base::test::ScopedFeatureList feature_list; - feature_list.InitAndEnableFeature(features::kHeavyAdIntervention); + feature_list.InitAndEnableFeature( + heavy_ad_intervention::features::kHeavyAdIntervention); RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); @@ -2299,7 +2308,8 @@ TEST_F(AdsPageLoadMetricsObserverTest, HeavyAdNetworkUsageLessThanNoisedThreshold_CpuTriggers) { base::test::ScopedFeatureList feature_list; - feature_list.InitAndEnableFeature(features::kHeavyAdIntervention); + feature_list.InitAndEnableFeature( + heavy_ad_intervention::features::kHeavyAdIntervention); OverrideVisibilityTrackerWithMockClock(); RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); @@ -2353,7 +2363,8 @@ TEST_F(AdsPageLoadMetricsObserverTest, HeavyAdTotalCpuUsage_InterventionFired) { base::test::ScopedFeatureList feature_list; - feature_list.InitAndEnableFeature(features::kHeavyAdIntervention); + feature_list.InitAndEnableFeature( + heavy_ad_intervention::features::kHeavyAdIntervention); OverrideVisibilityTrackerWithMockClock(); RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); @@ -2394,7 +2405,8 @@ TEST_F(AdsPageLoadMetricsObserverTest, HeavyAdPeakCpuUsage_InterventionFired) { base::test::ScopedFeatureList feature_list; - feature_list.InitAndEnableFeature(features::kHeavyAdIntervention); + feature_list.InitAndEnableFeature( + heavy_ad_intervention::features::kHeavyAdIntervention); OverrideVisibilityTrackerWithMockClock(); RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); @@ -2439,8 +2451,9 @@ TEST_F(AdsPageLoadMetricsObserverTest, HeavyAdFeatureDisabled_NotFired) { base::test::ScopedFeatureList feature_list; - feature_list.InitWithFeatures({}, {features::kHeavyAdIntervention, - features::kHeavyAdInterventionWarning}); + feature_list.InitWithFeatures( + {}, {heavy_ad_intervention::features::kHeavyAdIntervention, + heavy_ad_intervention::features::kHeavyAdInterventionWarning}); RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); RenderFrameHost* ad_frame = CreateAndNavigateSubFrame(kAdUrl, main_frame); @@ -2459,7 +2472,8 @@ TEST_F(AdsPageLoadMetricsObserverTest, HeavyAdWithUserGesture_NotConsideredHeavy) { base::test::ScopedFeatureList feature_list; - feature_list.InitAndEnableFeature(features::kHeavyAdIntervention); + feature_list.InitAndEnableFeature( + heavy_ad_intervention::features::kHeavyAdIntervention); RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); RenderFrameHost* ad_frame = CreateAndNavigateSubFrame(kAdUrl, main_frame); @@ -2523,7 +2537,8 @@ test_case.exceed_cpu, test_case.intervention_expected)); base::test::ScopedFeatureList feature_list; feature_list.InitAndEnableFeatureWithParameters( - features::kHeavyAdIntervention, {{"kUnloadPolicy", test_case.policy}}); + heavy_ad_intervention::features::kHeavyAdIntervention, + {{"kUnloadPolicy", test_case.policy}}); RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); RenderFrameHost* ad_frame = CreateAndNavigateSubFrame(kAdUrl, main_frame); // Clear out any pending messages. @@ -2554,7 +2569,8 @@ TEST_F(AdsPageLoadMetricsObserverTest, HeavyAdPageNavigated_FrameMarkedAsNotRemoved) { base::test::ScopedFeatureList feature_list; - feature_list.InitAndEnableFeature(features::kHeavyAdIntervention); + feature_list.InitAndEnableFeature( + heavy_ad_intervention::features::kHeavyAdIntervention); RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); RenderFrameHost* ad_frame = CreateAndNavigateSubFrame(kAdUrl, main_frame); @@ -2572,8 +2588,9 @@ TEST_F(AdsPageLoadMetricsObserverTest, HeavyAdFrameRemoved_FrameMarkedAsRemoved) { base::test::ScopedFeatureList feature_list; - feature_list.InitWithFeatures({}, {features::kHeavyAdIntervention, - features::kHeavyAdInterventionWarning}); + feature_list.InitWithFeatures( + {}, {heavy_ad_intervention::features::kHeavyAdIntervention, + heavy_ad_intervention::features::kHeavyAdInterventionWarning}); RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); RenderFrameHost* ad_frame = CreateAndNavigateSubFrame(kAdUrl, main_frame); @@ -2594,7 +2611,8 @@ // Verifies when a user reloads a page with a heavy ad we log it to metrics. TEST_F(AdsPageLoadMetricsObserverTest, HeavyAdPageReload_MetricsRecorded) { base::test::ScopedFeatureList feature_list; - feature_list.InitAndEnableFeature(features::kHeavyAdIntervention); + feature_list.InitAndEnableFeature( + heavy_ad_intervention::features::kHeavyAdIntervention); RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); RenderFrameHost* ad_frame = CreateAndNavigateSubFrame(kAdUrl, main_frame); @@ -2617,7 +2635,8 @@ // intevention. TEST_F(AdsPageLoadMetricsObserverTest, HeavyAdPageReload_InterventionIgnored) { base::test::ScopedFeatureList feature_list; - feature_list.InitAndEnableFeature(features::kHeavyAdIntervention); + feature_list.InitAndEnableFeature( + heavy_ad_intervention::features::kHeavyAdIntervention); RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); @@ -2645,8 +2664,9 @@ TEST_F(AdsPageLoadMetricsObserverTest, HeavyAdPageReloadPrivacyMitigationsDisabled_InterventionAllowed) { base::test::ScopedFeatureList feature_list; - feature_list.InitWithFeatures({features::kHeavyAdIntervention}, - {features::kHeavyAdPrivacyMitigations}); + feature_list.InitWithFeatures( + {heavy_ad_intervention::features::kHeavyAdIntervention}, + {heavy_ad_intervention::features::kHeavyAdPrivacyMitigations}); RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); @@ -2673,7 +2693,8 @@ TEST_F(AdsPageLoadMetricsObserverTest, HeavyAdsNoHeavyAdFrame_AggregateHistogramsNotRecorded) { base::test::ScopedFeatureList feature_list; - feature_list.InitAndEnableFeature(features::kHeavyAdIntervention); + feature_list.InitAndEnableFeature( + heavy_ad_intervention::features::kHeavyAdIntervention); RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); RenderFrameHost* ad_frame = CreateAndNavigateSubFrame(kAdUrl, main_frame); @@ -2691,7 +2712,8 @@ TEST_F(AdsPageLoadMetricsObserverTest, HeavyAdBlocklistFull_NotFired) { base::test::ScopedFeatureList feature_list; - feature_list.InitAndEnableFeature(features::kHeavyAdIntervention); + feature_list.InitAndEnableFeature( + heavy_ad_intervention::features::kHeavyAdIntervention); // Five interventions are allowed to occur, per origin per day. Add five // entries to the blocklist. @@ -2712,8 +2734,9 @@ TEST_F(AdsPageLoadMetricsObserverTest, HeavyAdBlocklistDisabled_InterventionNotBlocked) { base::test::ScopedFeatureList feature_list; - feature_list.InitWithFeatures({features::kHeavyAdIntervention}, - {features::kHeavyAdPrivacyMitigations}); + feature_list.InitWithFeatures( + {heavy_ad_intervention::features::kHeavyAdIntervention}, + {heavy_ad_intervention::features::kHeavyAdPrivacyMitigations}); // Fill up the blocklist to verify the blocklist logic is correctly ignored // when disabled. @@ -2751,7 +2774,8 @@ TEST_F(AdsPageLoadMetricsObserverTest, HeavyAdBlocklist_InterventionReported) { base::test::ScopedFeatureList feature_list; - feature_list.InitAndEnableFeature(features::kHeavyAdIntervention); + feature_list.InitAndEnableFeature( + heavy_ad_intervention::features::kHeavyAdIntervention); // Five interventions are allowed to occur, per origin per day. Add four // entries to the blocklist. @@ -2791,8 +2815,9 @@ TEST_F(AdsPageLoadMetricsObserverTest, HeavyAdReportingOnly_ReportSentNoUnload) { base::test::ScopedFeatureList feature_list; - feature_list.InitWithFeatures({features::kHeavyAdInterventionWarning}, - {features::kHeavyAdIntervention}); + feature_list.InitWithFeatures( + {heavy_ad_intervention::features::kHeavyAdInterventionWarning}, + {heavy_ad_intervention::features::kHeavyAdIntervention}); RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); RenderFrameHost* ad_frame = CreateAndNavigateSubFrame(kAdUrl, main_frame);
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/frame_tree_data.cc b/components/page_load_metrics/browser/observers/ad_metrics/frame_tree_data.cc index ad89fdd..22c3d33 100644 --- a/components/page_load_metrics/browser/observers/ad_metrics/frame_tree_data.cc +++ b/components/page_load_metrics/browser/observers/ad_metrics/frame_tree_data.cc
@@ -29,7 +29,7 @@ // Controls what types of heavy ads will be unloaded by the intervention. const base::FeatureParam<int> kHeavyAdUnloadPolicyParam = { - &features::kHeavyAdIntervention, "kUnloadPolicy", + &heavy_ad_intervention::features::kHeavyAdIntervention, "kUnloadPolicy", static_cast<int>(ad_metrics::HeavyAdUnloadPolicy::kAll)}; } // namespace @@ -300,10 +300,12 @@ // Only check if the feature is enabled once we have a heavy ad. This is done // to ensure that any experiment for this feature will only be comparing // groups who have seen a heavy ad. - if (!base::FeatureList::IsEnabled(features::kHeavyAdIntervention)) { + if (!base::FeatureList::IsEnabled( + heavy_ad_intervention::features::kHeavyAdIntervention)) { // If the intervention is not enabled, we return whether reporting is // enabled. - return base::FeatureList::IsEnabled(features::kHeavyAdInterventionWarning) + return base::FeatureList::IsEnabled( + heavy_ad_intervention::features::kHeavyAdInterventionWarning) ? HeavyAdAction::kReport : HeavyAdAction::kNone; }
diff --git a/components/page_load_metrics/browser/observers/core/largest_contentful_paint_handler.cc b/components/page_load_metrics/browser/observers/core/largest_contentful_paint_handler.cc index 98b36bab..68a9eb654 100644 --- a/components/page_load_metrics/browser/observers/core/largest_contentful_paint_handler.cc +++ b/components/page_load_metrics/browser/observers/core/largest_contentful_paint_handler.cc
@@ -292,10 +292,8 @@ navigation_handle->GetFrameTreeNodeId(), navigation_delta)); } -void LargestContentfulPaintHandler::OnFrameDeleted( - content::RenderFrameHost* render_frame_host) { - subframe_navigation_start_offset_.erase( - render_frame_host->GetFrameTreeNodeId()); +void LargestContentfulPaintHandler::OnFrameDeleted(int frame_tree_node_id) { + subframe_navigation_start_offset_.erase(frame_tree_node_id); } void LargestContentfulPaintHandler::MergeForSubframes(
diff --git a/components/page_load_metrics/browser/observers/core/largest_contentful_paint_handler.h b/components/page_load_metrics/browser/observers/core/largest_contentful_paint_handler.h index 9346543b..4dac00b 100644 --- a/components/page_load_metrics/browser/observers/core/largest_contentful_paint_handler.h +++ b/components/page_load_metrics/browser/observers/core/largest_contentful_paint_handler.h
@@ -132,7 +132,7 @@ void OnDidFinishSubFrameNavigation( content::NavigationHandle* navigation_handle, base::TimeTicks navigation_start); - void OnFrameDeleted(content::RenderFrameHost* render_frame_host); + void OnFrameDeleted(int frame_tree_node_id); private: void RecordSubframeTiming(
diff --git a/components/page_load_metrics/browser/page_load_metrics_memory_tracker.cc b/components/page_load_metrics/browser/page_load_metrics_memory_tracker.cc index 4850195..09607a5 100644 --- a/components/page_load_metrics/browser/page_load_metrics_memory_tracker.cc +++ b/components/page_load_metrics/browser/page_load_metrics_memory_tracker.cc
@@ -129,7 +129,7 @@ } } -void PageLoadMetricsMemoryTracker::OnFrameDeleted( +void PageLoadMetricsMemoryTracker::OnRenderFrameDeleted( content::RenderFrameHost* render_frame_host, MetricsWebContentsObserver* observer) { DCHECK(render_frame_host);
diff --git a/components/page_load_metrics/browser/page_load_metrics_memory_tracker.h b/components/page_load_metrics/browser/page_load_metrics_memory_tracker.h index 6729018..7be82ec 100644 --- a/components/page_load_metrics/browser/page_load_metrics_memory_tracker.h +++ b/components/page_load_metrics/browser/page_load_metrics_memory_tracker.h
@@ -46,8 +46,8 @@ FrameDataMap& frame_data) override; // Removes the entry for a deleted frame from `per_frame_memory_usage_map_`. - void OnFrameDeleted(content::RenderFrameHost* render_frame_host, - MetricsWebContentsObserver* observer); + void OnRenderFrameDeleted(content::RenderFrameHost* render_frame_host, + MetricsWebContentsObserver* observer); private: int64_t UpdateMemoryUsageAndGetDelta(
diff --git a/components/page_load_metrics/browser/page_load_metrics_observer.h b/components/page_load_metrics/browser/page_load_metrics_observer.h index 26b921a..83bb21fd 100644 --- a/components/page_load_metrics/browser/page_load_metrics_observer.h +++ b/components/page_load_metrics/browser/page_load_metrics_observer.h
@@ -528,7 +528,9 @@ virtual void FrameSizeChanged(content::RenderFrameHost* render_frame_host, const gfx::Size& frame_size) {} - virtual void OnFrameDeleted(content::RenderFrameHost* render_frame_host) {} + virtual void OnRenderFrameDeleted( + content::RenderFrameHost* render_frame_host) {} + virtual void OnFrameDeleted(int frame_tree_node_id) {} // Called when a cookie is read for a resource request or by document.cookie. virtual void OnCookiesRead(const GURL& url,
diff --git a/components/page_load_metrics/browser/page_load_metrics_update_dispatcher.cc b/components/page_load_metrics/browser/page_load_metrics_update_dispatcher.cc index ac123f1..53b357b4 100644 --- a/components/page_load_metrics/browser/page_load_metrics_update_dispatcher.cc +++ b/components/page_load_metrics/browser/page_load_metrics_update_dispatcher.cc
@@ -566,10 +566,8 @@ navigation_handle->GetFrameTreeNodeId(), navigation_delta)); } -void PageLoadMetricsUpdateDispatcher::OnFrameDeleted( - content::RenderFrameHost* render_frame_host) { - subframe_navigation_start_offset_.erase( - render_frame_host->GetFrameTreeNodeId()); +void PageLoadMetricsUpdateDispatcher::OnFrameDeleted(int frame_tree_node_id) { + subframe_navigation_start_offset_.erase(frame_tree_node_id); } void PageLoadMetricsUpdateDispatcher::UpdateSubFrameTiming(
diff --git a/components/page_load_metrics/browser/page_load_metrics_update_dispatcher.h b/components/page_load_metrics/browser/page_load_metrics_update_dispatcher.h index eb74cf4..8f619d1 100644 --- a/components/page_load_metrics/browser/page_load_metrics_update_dispatcher.h +++ b/components/page_load_metrics/browser/page_load_metrics_update_dispatcher.h
@@ -173,7 +173,7 @@ void DidFinishSubFrameNavigation( content::NavigationHandle* navigation_handle); - void OnFrameDeleted(content::RenderFrameHost* render_frame_host); + void OnFrameDeleted(int frame_tree_node_id); void ShutDown();
diff --git a/components/page_load_metrics/browser/page_load_tracker.cc b/components/page_load_metrics/browser/page_load_tracker.cc index 846cfaa1..f89ce8b 100644 --- a/components/page_load_metrics/browser/page_load_tracker.cc +++ b/components/page_load_metrics/browser/page_load_tracker.cc
@@ -402,11 +402,17 @@ INVOKE_AND_PRUNE_OBSERVERS(observers_, OnShown); } -void PageLoadTracker::FrameDeleted(content::RenderFrameHost* rfh) { - metrics_update_dispatcher_.OnFrameDeleted(rfh); - largest_contentful_paint_handler_.OnFrameDeleted(rfh); +void PageLoadTracker::FrameDeleted(int frame_tree_node_id) { + metrics_update_dispatcher_.OnFrameDeleted(frame_tree_node_id); + largest_contentful_paint_handler_.OnFrameDeleted(frame_tree_node_id); for (const auto& observer : observers_) { - observer->OnFrameDeleted(rfh); + observer->OnFrameDeleted(frame_tree_node_id); + } +} + +void PageLoadTracker::RenderFrameDeleted(content::RenderFrameHost* rfh) { + for (const auto& observer : observers_) { + observer->OnRenderFrameDeleted(rfh); } }
diff --git a/components/page_load_metrics/browser/page_load_tracker.h b/components/page_load_metrics/browser/page_load_tracker.h index d814a9b..d1f7f84b 100644 --- a/components/page_load_metrics/browser/page_load_tracker.h +++ b/components/page_load_metrics/browser/page_load_tracker.h
@@ -257,7 +257,8 @@ base::TimeTicks failed_load_time); void PageHidden(); void PageShown(); - void FrameDeleted(content::RenderFrameHost* rfh); + void RenderFrameDeleted(content::RenderFrameHost* rfh); + void FrameDeleted(int frame_tree_node_id); void OnInputEvent(const blink::WebInputEvent& event);
diff --git a/components/password_manager/core/browser/leak_detection/authenticated_leak_check.cc b/components/password_manager/core/browser/leak_detection/authenticated_leak_check.cc index 433e797..9848f28b 100644 --- a/components/password_manager/core/browser/leak_detection/authenticated_leak_check.cc +++ b/components/password_manager/core/browser/leak_detection/authenticated_leak_check.cc
@@ -164,13 +164,12 @@ // static bool AuthenticatedLeakCheck::HasAccountForRequest( const signin::IdentityManager* identity_manager) { - // On desktop HasPrimaryAccount(signin::ConsentLevel::kNotRequired) will + // On desktop HasPrimaryAccount(signin::ConsentLevel::kSignin) will // always return something if the user is signed in. // On Android it will be empty if the user isn't syncing. Thus, // GetAccountsWithRefreshTokens() check is necessary. return identity_manager && - (identity_manager->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired) || + (identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSignin) || !identity_manager->GetAccountsWithRefreshTokens().empty()); }
diff --git a/components/password_manager/core/browser/leak_detection/leak_detection_request_utils.cc b/components/password_manager/core/browser/leak_detection/leak_detection_request_utils.cc index 9e529d3..5e98848 100644 --- a/components/password_manager/core/browser/leak_detection/leak_detection_request_utils.cc +++ b/components/password_manager/core/browser/leak_detection/leak_detection_request_utils.cc
@@ -31,8 +31,8 @@ // Returns a Google account that can be used for getting a token. CoreAccountId GetAccountForRequest( const signin::IdentityManager* identity_manager) { - CoreAccountInfo result = identity_manager->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + CoreAccountInfo result = + identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin); if (result.IsEmpty()) { std::vector<CoreAccountInfo> all_accounts = identity_manager->GetAccountsWithRefreshTokens();
diff --git a/components/password_manager/core/browser/password_form_manager.cc b/components/password_manager/core/browser/password_form_manager.cc index 6991acf..0bdf862 100644 --- a/components/password_manager/core/browser/password_form_manager.cc +++ b/components/password_manager/core/browser/password_form_manager.cc
@@ -275,8 +275,7 @@ signin::IdentityManager* identity_manager = client_->GetIdentityManager(); DCHECK(identity_manager); const std::string gaia_id = - identity_manager - ->GetPrimaryAccountInfo(signin::ConsentLevel::kNotRequired) + identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin) .gaia; DCHECK(!gaia_id.empty()) << "Cannot move without signed in user"; @@ -440,7 +439,7 @@ return; const std::string gaia_id = client_->GetIdentityManager() - ->GetPrimaryAccountInfo(signin::ConsentLevel::kNotRequired) + ->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin) .gaia; // The above call to IsMovableToAccountStore() guarantees there is a signed in // user.
diff --git a/components/password_manager/core/browser/password_manager_client_helper.cc b/components/password_manager/core/browser/password_manager_client_helper.cc index c53fd19f..744c220 100644 --- a/components/password_manager/core/browser/password_manager_client_helper.cc +++ b/components/password_manager/core/browser/password_manager_client_helper.cc
@@ -25,8 +25,8 @@ bool IsPrimaryAccountSignIn(const signin::IdentityManager& identity_manager, const std::u16string& username, const std::string& signon_realm) { - CoreAccountInfo primary_account = identity_manager.GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + CoreAccountInfo primary_account = + identity_manager.GetPrimaryAccountInfo(signin::ConsentLevel::kSignin); return sync_util::IsGaiaCredentialPage(signon_realm) && !primary_account.IsEmpty() && gaia::AreEmailsSame(base::UTF16ToUTF8(username),
diff --git a/components/password_manager/core/browser/sync_credentials_filter.cc b/components/password_manager/core/browser/sync_credentials_filter.cc index 8659063..faab646 100644 --- a/components/password_manager/core/browser/sync_credentials_filter.cc +++ b/components/password_manager/core/browser/sync_credentials_filter.cc
@@ -47,7 +47,7 @@ // not know about the account yet. if (sync_util::IsGaiaCredentialPage(form.signon_realm)) { CoreAccountInfo primary_account = identity_manager->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + signin::ConsentLevel::kSignin); if (primary_account.IsEmpty() || gaia::AreEmailsSame(base::UTF16ToUTF8(form.username_value), primary_account.email)) {
diff --git a/components/policy/resources/webui/policy.html b/components/policy/resources/webui/policy.html index d731892d..3889cc3 100644 --- a/components/policy/resources/webui/policy.html +++ b/components/policy/resources/webui/policy.html
@@ -8,6 +8,18 @@ <link rel="stylesheet" href="chrome://policy/policy.css"> <link rel="stylesheet" href="chrome://resources/css/text_defaults_md.css"> +<if expr="is_ios"> + <!-- TODO(crbug.com/487000): Remove this once injected by web. --> + <script src="chrome://resources/js/ios/web_ui.js"></script> +</if> + +<script src="chrome://resources/js/action_link.js"></script> +<script src="chrome://resources/js/cr.js"></script> +<script src="chrome://resources/js/cr/ui.js"></script> +<script src="chrome://resources/js/cr/ui/focus_outline_manager.js"></script> +<script src="chrome://resources/js/load_time_data.js"></script> +<script src="chrome://resources/js/assert.js"></script> +<script src="chrome://resources/js/util.js"></script> </head> <body> @@ -203,5 +215,7 @@ </div> </body> -<script type="module" src="policy.js"></script> +<script src="chrome://policy/strings.js"></script> +<script src="chrome://policy/policy_base.js"></script> +<script src="chrome://policy/policy.js"></script> </html>
diff --git a/components/policy/resources/webui/policy.js b/components/policy/resources/webui/policy.js index f400fe1..7f9a6344 100644 --- a/components/policy/resources/webui/policy.js +++ b/components/policy/resources/webui/policy.js
@@ -2,11 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import {Page} from './policy_base.js'; - // Have the main initialization function be called when the page finishes // loading. -const page = Page.getInstance(); -document.addEventListener('DOMContentLoaded', () => { - page.initialize(); -}); +document.addEventListener( + 'DOMContentLoaded', + policy.Page.getInstance().initialize.bind(policy.Page.getInstance()));
diff --git a/components/policy/resources/webui/policy_base.js b/components/policy/resources/webui/policy_base.js index b2446276..4aeafb3 100644 --- a/components/policy/resources/webui/policy_base.js +++ b/components/policy/resources/webui/policy_base.js
@@ -2,681 +2,686 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import './strings.m.js'; -import 'chrome://resources/js/action_link.js'; - -// <if expr="is_ios"> -import 'chrome://resources/js/ios/web_ui.js'; -// </if> - -import {addSingletonGetter, addWebUIListener} from 'chrome://resources/js/cr.m.js'; -import {define as crUiDefine} from 'chrome://resources/js/cr/ui.m.js'; -import {FocusOutlineManager} from 'chrome://resources/js/cr/ui/focus_outline_manager.m.js'; -import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; -import {$} from 'chrome://resources/js/util.m.js'; - -/** - * @typedef {{ - * [id: string]: { - * name: string, - * policyNames: !Array<string>, - * }} - */ -let PolicyNamesResponse; - -/** - * @typedef {!Array<{ - * name: string, - * id: ?String, - * policies: {[name: string]: policy.Policy} - * }>} - */ -let PolicyValuesResponse; - -/** - * @typedef {{ - * level: string, - * scope: string, - * source: string, - * value: any, - * }} - */ -let Conflict; - -/** - * @typedef {{ - * ignored?: boolean, - * name: string, - * level: string, - * link: ?string, - * scope: string, - * source: string, - * error: string, - * warning: string, - * info: string, - * value: any, - * deprecated: ?boolean, - * future: ?boolean, - * allSourcesMerged: ?boolean, - * conflicts: ?Array<!Conflict>, - * superseded: ?Array<!Conflict>, - * }} - */ -let Policy; - -/** - * @typedef {{ - * id: ?string, - * isExtension?: boolean, - * name: string, - * policies: !Array<!Policy> - * }} - */ -let PolicyTableModel; - -/** - * A box that shows the status of cloud policy for a device, machine or user. - * @constructor - * @extends {HTMLFieldSetElement} - */ -const StatusBox = crUiDefine(function() { - const node = $('status-box-template').cloneNode(true); - node.removeAttribute('id'); - return node; -}); - -StatusBox.prototype = { - // Set up the prototype chain. - __proto__: HTMLFieldSetElement.prototype, +cr.define('policy', function() { + /** + * @typedef {{ + * [id: string]: { + * name: string, + * policyNames: !Array<string>, + * }} + */ + let PolicyNamesResponse; /** - * Initialization function for the cr.ui framework. + * @typedef {!Array<{ + * name: string, + * id: ?String, + * policies: {[name: string]: policy.Policy} + * }>} */ - decorate() {}, + let PolicyValuesResponse; /** - * Sets the text of a particular named label element in the status box - * and updates the visibility if needed. - * @param {string} labelName The name of the label element that is being - * updated. - * @param {string} labelValue The new text content for the label. - * @param {boolean=} needsToBeShown True if we want to show the label - * False otherwise. + * @typedef {{ + * level: string, + * scope: string, + * source: string, + * value: any, + * }} */ - setLabelAndShow_(labelName, labelValue, needsToBeShown = true) { - const labelElement = this.querySelector(labelName); - labelElement.textContent = labelValue ? ' ' + labelValue : ''; - if (needsToBeShown) { - labelElement.parentElement.hidden = false; - } - }, + let Conflict; + /** - * Populate the box with the given cloud policy status. - * @param {string} scope The policy scope, either "device", "machine", - * "user", or "updater". - * @param {Object} status Dictionary with information about the status. + * @typedef {{ + * ignored?: boolean, + * name: string, + * level: string, + * link: ?string, + * scope: string, + * source: string, + * error: string, + * warning: string, + * info: string, + * value: any, + * deprecated: ?boolean, + * future: ?boolean, + * allSourcesMerged: ?boolean, + * conflicts: ?Array<!Conflict>, + * superseded: ?Array<!Conflict>, + * }} */ - initialize(scope, status) { - const notSpecifiedString = loadTimeData.getString('notSpecified'); - if (scope === 'device') { - // For device policy, set the appropriate title and populate the topmost - // status item with the domain the device is enrolled into. - this.querySelector('.legend').textContent = - loadTimeData.getString('statusDevice'); - this.setLabelAndShow_( - '.enterprise-enrollment-domain', status.enterpriseEnrollmentDomain); + let Policy; - // Populate the device naming information. - // Populate the asset identifier. - this.setLabelAndShow_('.asset-id', status.assetId || notSpecifiedString); + /** + * @typedef {{ + * id: ?string, + * isExtension?: boolean, + * name: string, + * policies: !Array<!Policy> + * }} + */ + let PolicyTableModel; - // Populate the device location. - this.setLabelAndShow_('.location', status.location || notSpecifiedString); + /** + * A box that shows the status of cloud policy for a device, machine or user. + * @constructor + * @extends {HTMLFieldSetElement} + */ + const StatusBox = cr.ui.define(function() { + const node = $('status-box-template').cloneNode(true); + node.removeAttribute('id'); + return node; + }); - // Populate the directory API ID. - this.setLabelAndShow_( - '.directory-api-id', status.directoryApiId || notSpecifiedString); - this.setLabelAndShow_('.client-id', status.clientId); - // For off-hours policy, indicate if it's active or not. - if (status.isOffHoursActive != null) { + StatusBox.prototype = { + // Set up the prototype chain. + __proto__: HTMLFieldSetElement.prototype, + + /** + * Initialization function for the cr.ui framework. + */ + decorate() {}, + + /** + * Sets the text of a particular named label element in the status box + * and updates the visibility if needed. + * @param {string} labelName The name of the label element that is being + * updated. + * @param {string} labelValue The new text content for the label. + * @param {boolean=} needsToBeShown True if we want to show the label + * False otherwise. + */ + setLabelAndShow_(labelName, labelValue, needsToBeShown = true) { + const labelElement = this.querySelector(labelName); + labelElement.textContent = labelValue ? ' ' + labelValue : ''; + if (needsToBeShown) { + labelElement.parentElement.hidden = false; + } + }, + /** + * Populate the box with the given cloud policy status. + * @param {string} scope The policy scope, either "device", "machine", + * "user", or "updater". + * @param {Object} status Dictionary with information about the status. + */ + initialize(scope, status) { + const notSpecifiedString = loadTimeData.getString('notSpecified'); + if (scope === 'device') { + // For device policy, set the appropriate title and populate the topmost + // status item with the domain the device is enrolled into. + this.querySelector('.legend').textContent = + loadTimeData.getString('statusDevice'); this.setLabelAndShow_( - '.is-offhours-active', - loadTimeData.getString( - status.isOffHoursActive ? 'offHoursActive' : - 'offHoursNotActive')); - } - } else if (scope === 'machine') { - // For machine policy, set the appropriate title and populate - // machine enrollment status with the information that applies - // to this machine. - this.querySelector('.legend').textContent = - loadTimeData.getString('statusMachine'); - this.setLabelAndShow_('.machine-enrollment-device-id', status.deviceId); - this.setLabelAndShow_( - '.machine-enrollment-token', status.enrollmentToken); - this.setLabelAndShow_('.machine-enrollment-name', status.machine); - this.setLabelAndShow_('.machine-enrollment-domain', status.domain); - } else if (scope === 'updater') { - this.querySelector('.legend').textContent = - loadTimeData.getString('statusUpdater'); - if (status.version) { - this.setLabelAndShow_('.version', status.version); - } - if (status.domain) { - this.setLabelAndShow_('.enterprise-enrollment-domain', status.domain); - } - } else { - // For user policy, set the appropriate title and populate the topmost - // status item with the username that policies apply to. - this.querySelector('.legend').textContent = - loadTimeData.getString('statusUser'); - // Populate the topmost item with the username. - this.setLabelAndShow_('.username', status.username); - // Populate the user gaia id. - this.setLabelAndShow_('.gaia-id', status.gaiaId || notSpecifiedString); - this.setLabelAndShow_('.client-id', status.clientId); - if (status.isAffiliated != null) { + '.enterprise-enrollment-domain', status.enterpriseEnrollmentDomain); + + // Populate the device naming information. + // Populate the asset identifier. this.setLabelAndShow_( - '.is-affiliated', + '.asset-id', status.assetId || notSpecifiedString); + + // Populate the device location. + this.setLabelAndShow_( + '.location', status.location || notSpecifiedString); + + // Populate the directory API ID. + this.setLabelAndShow_( + '.directory-api-id', status.directoryApiId || notSpecifiedString); + this.setLabelAndShow_('.client-id', status.clientId); + // For off-hours policy, indicate if it's active or not. + if (status.isOffHoursActive != null) { + this.setLabelAndShow_( + '.is-offhours-active', + loadTimeData.getString( + status.isOffHoursActive ? 'offHoursActive' : + 'offHoursNotActive')); + } + } else if (scope === 'machine') { + // For machine policy, set the appropriate title and populate + // machine enrollment status with the information that applies + // to this machine. + this.querySelector('.legend').textContent = + loadTimeData.getString('statusMachine'); + this.setLabelAndShow_('.machine-enrollment-device-id', status.deviceId); + this.setLabelAndShow_( + '.machine-enrollment-token', status.enrollmentToken); + this.setLabelAndShow_('.machine-enrollment-name', status.machine); + this.setLabelAndShow_('.machine-enrollment-domain', status.domain); + } else if (scope === 'updater') { + this.querySelector('.legend').textContent = + loadTimeData.getString('statusUpdater'); + if (status.version) { + this.setLabelAndShow_('.version', status.version); + } + if (status.domain) { + this.setLabelAndShow_('.enterprise-enrollment-domain', status.domain); + } + } else { + // For user policy, set the appropriate title and populate the topmost + // status item with the username that policies apply to. + this.querySelector('.legend').textContent = + loadTimeData.getString('statusUser'); + // Populate the topmost item with the username. + this.setLabelAndShow_('.username', status.username); + // Populate the user gaia id. + this.setLabelAndShow_('.gaia-id', status.gaiaId || notSpecifiedString); + this.setLabelAndShow_('.client-id', status.clientId); + if (status.isAffiliated != null) { + this.setLabelAndShow_( + '.is-affiliated', + loadTimeData.getString( + status.isAffiliated ? 'isAffiliatedYes' : 'isAffiliatedNo')); + } + } + + if (status.enterpriseDomainManager) { + this.setLabelAndShow_('.managed-by', status.enterpriseDomainManager); + } + + if (status.timeSinceLastRefresh) { + this.setLabelAndShow_( + '.time-since-last-refresh', status.timeSinceLastRefresh); + } + + if (scope !== 'updater') { + this.setLabelAndShow_('.refresh-interval', status.refreshInterval); + this.setLabelAndShow_('.status', status.status); + this.setLabelAndShow_( + '.policy-push', loadTimeData.getString( - status.isAffiliated ? 'isAffiliatedYes' : 'isAffiliatedNo')); + status.policiesPushAvailable ? 'policiesPushOn' : + 'policiesPushOff')); } - } - - if (status.enterpriseDomainManager) { - this.setLabelAndShow_('.managed-by', status.enterpriseDomainManager); - } - - if (status.timeSinceLastRefresh) { - this.setLabelAndShow_( - '.time-since-last-refresh', status.timeSinceLastRefresh); - } - - if (scope !== 'updater') { - this.setLabelAndShow_('.refresh-interval', status.refreshInterval); - this.setLabelAndShow_('.status', status.status); - this.setLabelAndShow_( - '.policy-push', - loadTimeData.getString( - status.policiesPushAvailable ? 'policiesPushOn' : - 'policiesPushOff')); - } - }, -}; - -/** - * A single policy conflict's entry in the policy table. - * @constructor - * @extends {HTMLDivElement} - */ -const PolicyConflict = crUiDefine(function() { - const node = $('policy-conflict-template').cloneNode(true); - node.removeAttribute('id'); - return node; -}); - -PolicyConflict.prototype = { - // Set up the prototype chain. - __proto__: HTMLDivElement.prototype, - - decorate() {}, + }, + }; /** - * @param {Conflict} conflict - * @param {string} row_label + * A single policy conflict's entry in the policy table. + * @constructor + * @extends {HTMLDivElement} */ - initialize(conflict, row_label) { - this.querySelector('.scope').textContent = loadTimeData.getString( - conflict.scope === 'user' ? 'scopeUser' : 'scopeDevice'); - this.querySelector('.level').textContent = loadTimeData.getString( - conflict.level === 'recommended' ? 'levelRecommended' : - 'levelMandatory'); - this.querySelector('.source').textContent = - loadTimeData.getString(conflict.source); - this.querySelector('.value.row .value').textContent = conflict.value; - this.querySelector('.name').textContent = loadTimeData.getString(row_label); - } -}; + const PolicyConflict = cr.ui.define(function() { + const node = $('policy-conflict-template').cloneNode(true); + node.removeAttribute('id'); + return node; + }); -/** - * A single policy's row entry in the policy table. - * @constructor - * @extends {HTMLDivElement} - */ -const PolicyRow = crUiDefine(function() { - const node = $('policy-template').cloneNode(true); - node.removeAttribute('id'); - return node; -}); + PolicyConflict.prototype = { + // Set up the prototype chain. + __proto__: HTMLDivElement.prototype, -PolicyRow.prototype = { - // Set up the prototype chain. - __proto__: HTMLDivElement.prototype, + decorate() {}, + + /** + * @param {Conflict} conflict + * @param {string} row_label + */ + initialize(conflict, row_label) { + this.querySelector('.scope').textContent = loadTimeData.getString( + conflict.scope === 'user' ? 'scopeUser' : 'scopeDevice'); + this.querySelector('.level').textContent = loadTimeData.getString( + conflict.level === 'recommended' ? 'levelRecommended' : + 'levelMandatory'); + this.querySelector('.source').textContent = + loadTimeData.getString(conflict.source); + this.querySelector('.value.row .value').textContent = conflict.value; + this.querySelector('.name').textContent = + loadTimeData.getString(row_label); + } + }; /** - * Initialization function for the cr.ui framework. + * A single policy's row entry in the policy table. + * @constructor + * @extends {HTMLDivElement} */ - decorate() { - const toggle = this.querySelector('.policy.row .toggle'); - toggle.addEventListener('click', this.toggleExpanded_.bind(this)); + const PolicyRow = cr.ui.define(function() { + const node = $('policy-template').cloneNode(true); + node.removeAttribute('id'); + return node; + }); - const copy = this.querySelector('.copy-value'); - copy.addEventListener('click', this.copyValue_.bind(this)); - }, + PolicyRow.prototype = { + // Set up the prototype chain. + __proto__: HTMLDivElement.prototype, - /** @param {Policy} policy */ - initialize(policy) { - /** @type {Policy} */ - this.policy = policy; + /** + * Initialization function for the cr.ui framework. + */ + decorate() { + const toggle = this.querySelector('.policy.row .toggle'); + toggle.addEventListener('click', this.toggleExpanded_.bind(this)); - /** @private {boolean} */ - this.unset_ = policy.value === undefined; + const copy = this.querySelector('.copy-value'); + copy.addEventListener('click', this.copyValue_.bind(this)); + }, - /** @private {boolean} */ - this.hasErrors_ = !!policy.error; + /** @param {Policy} policy */ + initialize(policy) { + /** @type {Policy} */ + this.policy = policy; - /** @private {boolean} */ - this.hasWarnings_ = !!policy.warning; + /** @private {boolean} */ + this.unset_ = policy.value === undefined; - /** @private {boolean} */ - this.hasInfos_ = !!policy.info; + /** @private {boolean} */ + this.hasErrors_ = !!policy.error; - /** @private {boolean} */ - this.hasConflicts_ = !!policy.conflicts; + /** @private {boolean} */ + this.hasWarnings_ = !!policy.warning; - /** @private {boolean} */ - this.hasSuperseded_ = !!policy.superseded; + /** @private {boolean} */ + this.hasInfos_ = !!policy.info; - /** @private {boolean} */ - this.isMergedValue_ = !!policy.allSourcesMerged; + /** @private {boolean} */ + this.hasConflicts_ = !!policy.conflicts; - /** @private {boolean} */ - this.deprecated_ = !!policy.deprecated; + /** @private {boolean} */ + this.hasSuperseded_ = !!policy.superseded; - /** @private {boolean} */ - this.future_ = !!policy.future; + /** @private {boolean} */ + this.isMergedValue_ = !!policy.allSourcesMerged; - // Populate the name column. - const nameDisplay = this.querySelector('.name .link span'); - nameDisplay.textContent = policy.name; - if (policy.link) { - const link = this.querySelector('.name .link'); - link.href = policy.link; - link.title = loadTimeData.getStringF('policyLearnMore', policy.name); - } else { - this.classList.add('no-help-link'); - } + /** @private {boolean} */ + this.deprecated_ = !!policy.deprecated; - // Populate the remaining columns with policy scope, level and value if a - // value has been set. Otherwise, leave them blank. - if (!this.unset_) { - const scopeDisplay = this.querySelector('.scope'); - scopeDisplay.textContent = loadTimeData.getString( - policy.scope === 'user' ? 'scopeUser' : 'scopeDevice'); + /** @private {boolean} */ + this.future_ = !!policy.future; - const levelDisplay = this.querySelector('.level'); - levelDisplay.textContent = loadTimeData.getString( - policy.level === 'recommended' ? 'levelRecommended' : - 'levelMandatory'); - - const sourceDisplay = this.querySelector('.source'); - sourceDisplay.textContent = loadTimeData.getString(policy.source); - // Reduces load on the DOM for long values; - const truncatedValue = - (policy.value && policy.value.toString().length > 256) ? - `${policy.value.toString().substr(0, 256)}\u2026` : - policy.value; - - const valueDisplay = this.querySelector('.value'); - valueDisplay.textContent = truncatedValue; - - const copyLink = this.querySelector('.copy .link'); - copyLink.title = loadTimeData.getStringF('policyCopyValue', policy.name); - - const valueRowContentDisplay = this.querySelector('.value.row .value'); - valueRowContentDisplay.textContent = policy.value; - - const errorRowContentDisplay = this.querySelector('.errors.row .value'); - errorRowContentDisplay.textContent = policy.error; - const warningRowContentDisplay = - this.querySelector('.warnings.row .value'); - warningRowContentDisplay.textContent = policy.warning; - const infoRowContentDisplay = this.querySelector('.infos.row .value'); - infoRowContentDisplay.textContent = policy.info; - - const messagesDisplay = this.querySelector('.messages'); - const errorsNotice = - this.hasErrors_ ? loadTimeData.getString('error') : ''; - const deprecationNotice = - this.deprecated_ ? loadTimeData.getString('deprecated') : ''; - const futureNotice = this.future_ ? loadTimeData.getString('future') : ''; - const warningsNotice = - this.hasWarnings_ ? loadTimeData.getString('warning') : ''; - const conflictsNotice = this.hasConflicts_ && !this.isMergedValue_ ? - loadTimeData.getString('conflict') : - ''; - const ignoredNotice = - this.policy.ignored ? loadTimeData.getString('ignored') : ''; - let notice = - [ - errorsNotice, deprecationNotice, futureNotice, warningsNotice, - ignoredNotice, conflictsNotice - ].filter(x => !!x) - .join(', ') || - loadTimeData.getString('ok'); - const supersededNotice = this.hasSuperseded_ && !this.isMergedValue_ ? - loadTimeData.getString('superseding') : - ''; - if (supersededNotice) { - // Include superseded notice regardless of other notices - notice += `, ${supersededNotice}`; + // Populate the name column. + const nameDisplay = this.querySelector('.name .link span'); + nameDisplay.textContent = policy.name; + if (policy.link) { + const link = this.querySelector('.name .link'); + link.href = policy.link; + link.title = loadTimeData.getStringF('policyLearnMore', policy.name); + } else { + this.classList.add('no-help-link'); } - messagesDisplay.textContent = notice; - if (policy.conflicts) { - policy.conflicts.forEach(conflict => { - const row = new PolicyConflict; - row.initialize(conflict, 'conflictValue'); - this.appendChild(row); - }); + // Populate the remaining columns with policy scope, level and value if a + // value has been set. Otherwise, leave them blank. + if (!this.unset_) { + const scopeDisplay = this.querySelector('.scope'); + scopeDisplay.textContent = loadTimeData.getString( + policy.scope === 'user' ? 'scopeUser' : 'scopeDevice'); + + const levelDisplay = this.querySelector('.level'); + levelDisplay.textContent = loadTimeData.getString( + policy.level === 'recommended' ? 'levelRecommended' : + 'levelMandatory'); + + const sourceDisplay = this.querySelector('.source'); + sourceDisplay.textContent = loadTimeData.getString(policy.source); + // Reduces load on the DOM for long values; + const truncatedValue = + (policy.value && policy.value.toString().length > 256) ? + `${policy.value.toString().substr(0, 256)}\u2026` : + policy.value; + + const valueDisplay = this.querySelector('.value'); + valueDisplay.textContent = truncatedValue; + + const copyLink = this.querySelector('.copy .link'); + copyLink.title = + loadTimeData.getStringF('policyCopyValue', policy.name); + + const valueRowContentDisplay = this.querySelector('.value.row .value'); + valueRowContentDisplay.textContent = policy.value; + + const errorRowContentDisplay = this.querySelector('.errors.row .value'); + errorRowContentDisplay.textContent = policy.error; + const warningRowContentDisplay = + this.querySelector('.warnings.row .value'); + warningRowContentDisplay.textContent = policy.warning; + const infoRowContentDisplay = this.querySelector('.infos.row .value'); + infoRowContentDisplay.textContent = policy.info; + + const messagesDisplay = this.querySelector('.messages'); + const errorsNotice = + this.hasErrors_ ? loadTimeData.getString('error') : ''; + const deprecationNotice = + this.deprecated_ ? loadTimeData.getString('deprecated') : ''; + const futureNotice = + this.future_ ? loadTimeData.getString('future') : ''; + const warningsNotice = + this.hasWarnings_ ? loadTimeData.getString('warning') : ''; + const conflictsNotice = this.hasConflicts_ && !this.isMergedValue_ ? + loadTimeData.getString('conflict') : + ''; + const ignoredNotice = + this.policy.ignored ? loadTimeData.getString('ignored') : ''; + let notice = + [ + errorsNotice, deprecationNotice, futureNotice, warningsNotice, + ignoredNotice, conflictsNotice + ].filter(x => !!x) + .join(', ') || + loadTimeData.getString('ok'); + const supersededNotice = this.hasSuperseded_ && !this.isMergedValue_ ? + loadTimeData.getString('superseding') : + ''; + if (supersededNotice) { + // Include superseded notice regardless of other notices + notice += `, ${supersededNotice}`; + } + messagesDisplay.textContent = notice; + + if (policy.conflicts) { + policy.conflicts.forEach(conflict => { + const row = new PolicyConflict; + row.initialize(conflict, 'conflictValue'); + this.appendChild(row); + }); + } + if (policy.superseded) { + policy.superseded.forEach(superseded => { + const row = new PolicyConflict; + row.initialize(superseded, 'supersededValue'); + this.appendChild(row); + }); + } + } else { + const messagesDisplay = this.querySelector('.messages'); + messagesDisplay.textContent = loadTimeData.getString('unset'); } - if (policy.superseded) { - policy.superseded.forEach(superseded => { - const row = new PolicyConflict; - row.initialize(superseded, 'supersededValue'); - this.appendChild(row); - }); + }, + + /** + * Copies the policy's value to the clipboard. + * @private + */ + copyValue_() { + const policyValueDisplay = this.querySelector('.value.row .value'); + + // Select the text that will be copied. + const selection = window.getSelection(); + const range = window.document.createRange(); + range.selectNodeContents(policyValueDisplay); + selection.removeAllRanges(); + selection.addRange(range); + + // Copy the policy value to the clipboard. + navigator.clipboard.writeText(policyValueDisplay.innerText) + .catch(error => { + console.error('Unable to copy policy value to clipboard:', error); + }); + }, + + /** + * Toggle the visibility of an additional row containing the complete text. + * @private + */ + toggleExpanded_() { + const warningRowDisplay = this.querySelector('.warnings.row'); + const errorRowDisplay = this.querySelector('.errors.row'); + const infoRowDisplay = this.querySelector('.infos.row'); + const valueRowDisplay = this.querySelector('.value.row'); + valueRowDisplay.hidden = !valueRowDisplay.hidden; + if (valueRowDisplay.hidden) { + this.classList.remove('expanded'); + } else { + this.classList.add('expanded'); } - } else { - const messagesDisplay = this.querySelector('.messages'); - messagesDisplay.textContent = loadTimeData.getString('unset'); - } - }, + + this.querySelector('.show-more').hidden = !valueRowDisplay.hidden; + this.querySelector('.show-less').hidden = valueRowDisplay.hidden; + if (this.hasWarnings_) { + warningRowDisplay.hidden = !warningRowDisplay.hidden; + } + if (this.hasErrors_) { + errorRowDisplay.hidden = !errorRowDisplay.hidden; + } + if (this.hasInfos_) { + infoRowDisplay.hidden = !infoRowDisplay.hidden; + } + this.querySelectorAll('.policy-conflict-data') + .forEach(row => row.hidden = !row.hidden); + this.querySelectorAll('.policy-superseded-data') + .forEach(row => row.hidden = !row.hidden); + }, + }; /** - * Copies the policy's value to the clipboard. - * @private + * A table of policies and their values. + * @constructor + * @extends {HTMLDivElement} */ - copyValue_() { - const policyValueDisplay = this.querySelector('.value.row .value'); - - // Select the text that will be copied. - const selection = window.getSelection(); - const range = window.document.createRange(); - range.selectNodeContents(policyValueDisplay); - selection.removeAllRanges(); - selection.addRange(range); - - // Copy the policy value to the clipboard. - navigator.clipboard.writeText(policyValueDisplay.innerText).catch(error => { - console.error('Unable to copy policy value to clipboard:', error); - }); - }, - - /** - * Toggle the visibility of an additional row containing the complete text. - * @private - */ - toggleExpanded_() { - const warningRowDisplay = this.querySelector('.warnings.row'); - const errorRowDisplay = this.querySelector('.errors.row'); - const infoRowDisplay = this.querySelector('.infos.row'); - const valueRowDisplay = this.querySelector('.value.row'); - valueRowDisplay.hidden = !valueRowDisplay.hidden; - if (valueRowDisplay.hidden) { - this.classList.remove('expanded'); - } else { - this.classList.add('expanded'); - } - - this.querySelector('.show-more').hidden = !valueRowDisplay.hidden; - this.querySelector('.show-less').hidden = valueRowDisplay.hidden; - if (this.hasWarnings_) { - warningRowDisplay.hidden = !warningRowDisplay.hidden; - } - if (this.hasErrors_) { - errorRowDisplay.hidden = !errorRowDisplay.hidden; - } - if (this.hasInfos_) { - infoRowDisplay.hidden = !infoRowDisplay.hidden; - } - this.querySelectorAll('.policy-conflict-data') - .forEach(row => row.hidden = !row.hidden); - this.querySelectorAll('.policy-superseded-data') - .forEach(row => row.hidden = !row.hidden); - }, -}; - -/** - * A table of policies and their values. - * @constructor - * @extends {HTMLDivElement} - */ -const PolicyTable = crUiDefine(function() { - const node = $('policy-table-template').cloneNode(true); - node.removeAttribute('id'); - return node; -}); + const PolicyTable = cr.ui.define(function() { + const node = $('policy-table-template').cloneNode(true); + node.removeAttribute('id'); + return node; + }); -PolicyTable.prototype = { - // Set up the prototype chain. - __proto__: HTMLDivElement.prototype, + PolicyTable.prototype = { + // Set up the prototype chain. + __proto__: HTMLDivElement.prototype, - /** - * Initialization function for the cr.ui framework. - */ - decorate() { - this.policies_ = {}; - this.filterPattern_ = ''; - }, + /** + * Initialization function for the cr.ui framework. + */ + decorate() { + this.policies_ = {}; + this.filterPattern_ = ''; + }, - /** @param {PolicyTableModel} dataModel */ - update(dataModel) { - // Clear policies - const mainContent = this.querySelector('.main'); - const policies = this.querySelectorAll('.policy-data'); - this.querySelector('.header').textContent = dataModel.name; - this.querySelector('.id').textContent = dataModel.id; - this.querySelector('.id').hidden = !dataModel.id; - policies.forEach(row => mainContent.removeChild(row)); + /** @param {PolicyTableModel} dataModel */ + update(dataModel) { + // Clear policies + const mainContent = this.querySelector('.main'); + const policies = this.querySelectorAll('.policy-data'); + this.querySelector('.header').textContent = dataModel.name; + this.querySelector('.id').textContent = dataModel.id; + this.querySelector('.id').hidden = !dataModel.id; + policies.forEach(row => mainContent.removeChild(row)); - dataModel.policies - .sort((a, b) => { - if ((a.value !== undefined && b.value !== undefined) || - a.value === b.value) { - if (a.link !== undefined && b.link !== undefined) { - // Sorting the policies in ascending alpha order. - return a.name > b.name ? 1 : -1; + dataModel.policies + .sort((a, b) => { + if ((a.value !== undefined && b.value !== undefined) || + a.value === b.value) { + if (a.link !== undefined && b.link !== undefined) { + // Sorting the policies in ascending alpha order. + return a.name > b.name ? 1 : -1; + } + + // Sorting so unknown policies are last. + return a.link !== undefined ? -1 : 1; } - // Sorting so unknown policies are last. - return a.link !== undefined ? -1 : 1; - } + // Sorting so unset values are last. + return a.value !== undefined ? -1 : 1; + }) + .forEach(policy => { + const policyRow = new PolicyRow; + policyRow.initialize(policy); + mainContent.appendChild(policyRow); + }); + this.filter(); + }, - // Sorting so unset values are last. - return a.value !== undefined ? -1 : 1; - }) - .forEach(policy => { - const policyRow = new PolicyRow; - policyRow.initialize(policy); - mainContent.appendChild(policyRow); - }); - this.filter(); - }, + /** + * Set the filter pattern. Only policies whose name contains |pattern| are + * shown in the policy table. The filter is case insensitive. It can be + * disabled by setting |pattern| to an empty string. + * @param {string} pattern The filter pattern. + */ + setFilterPattern(pattern) { + this.filterPattern_ = pattern.toLowerCase(); + this.filter(); + }, - /** - * Set the filter pattern. Only policies whose name contains |pattern| are - * shown in the policy table. The filter is case insensitive. It can be - * disabled by setting |pattern| to an empty string. - * @param {string} pattern The filter pattern. - */ - setFilterPattern(pattern) { - this.filterPattern_ = pattern.toLowerCase(); - this.filter(); - }, - - /** - * Filter policies. Only policies whose name contains the filter pattern are - * shown in the table. Furthermore, policies whose value is not currently - * set are only shown if the corresponding checkbox is checked. - */ - filter() { - const showUnset = $('show-unset').checked; - const policies = this.querySelectorAll('.policy-data'); - for (let i = 0; i < policies.length; i++) { - const policyDisplay = policies[i]; - policyDisplay.hidden = - policyDisplay.policy.value === undefined && !showUnset || - policyDisplay.policy.name.toLowerCase().indexOf( - this.filterPattern_) === -1; - } - this.querySelector('.no-policy').hidden = - !!this.querySelector('.policy-data:not([hidden])'); - }, -}; - -/** - * A singleton object that handles communication between browser and WebUI. - */ -export class Page { - constructor() { - /** @type {?Element} */ - this.mainSection = null; - - /** @type {{[id: string]: PolicyTable}} */ - this.policyTables = {}; - } - - /** - * Main initialization function. Called by the browser on page load. - */ - initialize() { - FocusOutlineManager.forDocument(document); - - this.mainSection = $('main-section'); - - // Place the initial focus on the filter input field. - $('filter').focus(); - - $('filter').onsearch = () => { - for (const policyTable in this.policyTables) { - this.policyTables[policyTable].setFilterPattern($('filter').value); + /** + * Filter policies. Only policies whose name contains the filter pattern are + * shown in the table. Furthermore, policies whose value is not currently + * set are only shown if the corresponding checkbox is checked. + */ + filter() { + const showUnset = $('show-unset').checked; + const policies = this.querySelectorAll('.policy-data'); + for (let i = 0; i < policies.length; i++) { + const policyDisplay = policies[i]; + policyDisplay.hidden = + policyDisplay.policy.value === undefined && !showUnset || + policyDisplay.policy.name.toLowerCase().indexOf( + this.filterPattern_) === -1; } - }; - $('reload-policies').onclick = () => { - $('reload-policies').disabled = true; - $('screen-reader-message').textContent = - loadTimeData.getString('loadingPolicies'); - chrome.send('reloadPolicies'); - }; - - $('export-policies').onclick = () => { - chrome.send('exportPoliciesJSON'); - }; - - $('copy-policies').onclick = () => { - chrome.send('copyPoliciesJSON'); - }; - - $('show-unset').onchange = () => { - for (const policyTable in this.policyTables) { - this.policyTables[policyTable].filter(); - } - }; - - chrome.send('listenPoliciesUpdates'); - addWebUIListener('status-updated', status => this.setStatus(status)); - addWebUIListener( - 'policies-updated', - (names, values) => this.onPoliciesReceived_(names, values)); - } + this.querySelector('.no-policy').hidden = + !!this.querySelector('.policy-data:not([hidden])'); + }, + }; /** - * @param {PolicyNamesResponse} policyNames - * @param {PolicyValuesResponse} policyValues - * @private + * A singleton object that handles communication between browser and WebUI. + * @constructor */ - onPoliciesReceived_(policyNames, policyValues) { - /** @type {Array<!PolicyTableModel>} */ - const policyGroups = policyValues.map(value => { - const knownPolicyNames = - policyNames[value.id] ? policyNames[value.id].policyNames : []; - const knownPolicyNamesSet = new Set(knownPolicyNames); - const receivedPolicyNames = Object.keys(value.policies); - const allPolicyNames = - Array.from(new Set([...knownPolicyNames, ...receivedPolicyNames])); - const policies = allPolicyNames.map( - name => Object.assign( - { - name, - link: knownPolicyNames === policyNames.chrome.policyNames && - knownPolicyNamesSet.has(name) ? - `https://cloud.google.com/docs/chrome-enterprise/policies/?policy=${ - name}` : - undefined, - }, - value.policies[name])); + function Page() {} - return { - name: value.forSigninScreen ? - `${value.name} [${loadTimeData.getString('signinProfile')}]` : - value.name, - id: value.isExtension ? value.id : null, - policies + // Make Page a singleton. + cr.addSingletonGetter(Page); + + Page.prototype = { + /** + * Main initialization function. Called by the browser on page load. + */ + initialize() { + cr.ui.FocusOutlineManager.forDocument(document); + + this.mainSection = $('main-section'); + + /** @type {{[id: string]: PolicyTable}} */ + this.policyTables = {}; + + // Place the initial focus on the filter input field. + $('filter').focus(); + + const self = this; + $('filter').onsearch = function(event) { + for (policyTable in self.policyTables) { + self.policyTables[policyTable].setFilterPattern(this.value); + } }; - }); + $('reload-policies').onclick = function(event) { + this.disabled = true; + $('screen-reader-message').textContent = + loadTimeData.getString('loadingPolicies'); + chrome.send('reloadPolicies'); + }; - policyGroups.forEach(group => this.createOrUpdatePolicyTable(group)); + $('export-policies').onclick = function(event) { + chrome.send('exportPoliciesJSON'); + }; - this.reloadPoliciesDone(); - } + $('copy-policies').onclick = function(event) { + chrome.send('copyPoliciesJSON'); + }; - /** @param {PolicyTableModel} dataModel */ - createOrUpdatePolicyTable(dataModel) { - const id = `${dataModel.name}-${dataModel.id}`; - if (!this.policyTables[id]) { - this.policyTables[id] = new PolicyTable; - this.mainSection.appendChild(this.policyTables[id]); - } - this.policyTables[id].update(dataModel); - } + $('show-unset').onchange = function() { + for (policyTable in self.policyTables) { + self.policyTables[policyTable].filter(); + } + }; - /** - * Update the status section of the page to show the current cloud policy - * status. - * @param {Object} status Dictionary containing the current policy status. - */ - setStatus(status) { - // Remove any existing status boxes. - const container = $('status-box-container'); - while (container.firstChild) { - container.removeChild(container.firstChild); - } - // Hide the status section. - const section = $('status-section'); - section.hidden = true; + chrome.send('listenPoliciesUpdates'); + cr.addWebUIListener('status-updated', status => this.setStatus(status)); + cr.addWebUIListener( + 'policies-updated', + (names, values) => this.onPoliciesReceived_(names, values)); + }, - // Add a status box for each scope that has a cloud policy status. - for (const scope in status) { - const box = new StatusBox; - box.initialize(scope, status[scope]); - container.appendChild(box); - // Show the status section. - section.hidden = false; - } - } + /** + * @param {PolicyNamesResponse} policyNames + * @param {PolicyValuesResponse} policyValues + * @private + */ + onPoliciesReceived_(policyNames, policyValues) { + /** @type {Array<!PolicyTableModel>} */ + const policyGroups = policyValues.map(value => { + const knownPolicyNames = + policyNames[value.id] ? policyNames[value.id].policyNames : []; + const knownPolicyNamesSet = new Set(knownPolicyNames); + const receivedPolicyNames = Object.keys(value.policies); + const allPolicyNames = + Array.from(new Set([...knownPolicyNames, ...receivedPolicyNames])); + const policies = allPolicyNames.map( + name => Object.assign( + { + name, + link: knownPolicyNames === policyNames.chrome.policyNames && + knownPolicyNamesSet.has(name) ? + `https://cloud.google.com/docs/chrome-enterprise/policies/?policy=${ + name}` : + undefined, + }, + value.policies[name])); - /** - * Re-enable the reload policies button when the previous request to reload - * policies values has completed. - */ - reloadPoliciesDone() { - $('reload-policies').disabled = false; - $('screen-reader-message').textContent = - loadTimeData.getString('loadPoliciesDone'); - } -} + return { + name: value.forSigninScreen ? + `${value.name} [${loadTimeData.getString('signinProfile')}]` : + value.name, + id: value.isExtension ? value.id : null, + policies + }; + }); -// Make Page a singleton. -addSingletonGetter(Page); + policyGroups.forEach(group => this.createOrUpdatePolicyTable(group)); + + this.reloadPoliciesDone(); + }, + + /** @param {PolicyTableModel} dataModel */ + createOrUpdatePolicyTable(dataModel) { + const id = `${dataModel.name}-${dataModel.id}`; + if (!this.policyTables[id]) { + this.policyTables[id] = new PolicyTable; + this.mainSection.appendChild(this.policyTables[id]); + } + this.policyTables[id].update(dataModel); + }, + + /** + * Update the status section of the page to show the current cloud policy + * status. + * @param {Object} status Dictionary containing the current policy status. + */ + setStatus(status) { + // Remove any existing status boxes. + const container = $('status-box-container'); + while (container.firstChild) { + container.removeChild(container.firstChild); + } + // Hide the status section. + const section = $('status-section'); + section.hidden = true; + + // Add a status box for each scope that has a cloud policy status. + for (const scope in status) { + const box = new StatusBox; + box.initialize(scope, status[scope]); + container.appendChild(box); + // Show the status section. + section.hidden = false; + } + }, + + /** + * Re-enable the reload policies button when the previous request to reload + * policies values has completed. + */ + reloadPoliciesDone() { + $('reload-policies').disabled = false; + $('screen-reader-message').textContent = + loadTimeData.getString('loadPoliciesDone'); + }, + }; + + return { + Page, + PolicyTable, + Policy, + PolicyNamesResponse, + PolicyValuesResponse, + Conflict, + PolicyRow, + PolicyTableModel + }; +});
diff --git a/components/reporting/storage/storage_queue_unittest.cc b/components/reporting/storage/storage_queue_unittest.cc index 8fc556e..cf8ecd2 100644 --- a/components/reporting/storage/storage_queue_unittest.cc +++ b/components/reporting/storage/storage_queue_unittest.cc
@@ -904,7 +904,9 @@ WriteStringOrDie(kData[2]); } -TEST_P(StorageQueueTest, WriteAndRepeatedlyImmediateUploadWithConfirmations) { +// Disabled because of flakiness. See crbug.com/1193080. +TEST_P(StorageQueueTest, + DISABLED_WriteAndRepeatedlyImmediateUploadWithConfirmations) { CreateTestStorageQueueOrDie(BuildStorageQueueOptionsImmediate()); // Upload is initiated asynchronously, so it may happen after the next
diff --git a/components/reporting/storage/storage_unittest.cc b/components/reporting/storage/storage_unittest.cc index 07c9115..3b818003 100644 --- a/components/reporting/storage/storage_unittest.cc +++ b/components/reporting/storage/storage_unittest.cc
@@ -733,7 +733,8 @@ task_environment_.FastForwardBy(base::TimeDelta::FromSeconds(1)); } -TEST_P(StorageTest, WriteIntoNewStorageAndUploadWithKeyUpdate) { +// TODO(crbug.com/1193084): crashes on all platforms. +TEST_P(StorageTest, DISABLED_WriteIntoNewStorageAndUploadWithKeyUpdate) { // Run the test only when encryption is enabled. if (!is_encryption_enabled()) { return; @@ -1006,7 +1007,9 @@ kData[2]); // Immediately uploads and verifies. } -TEST_P(StorageTest, WriteAndRepeatedlyImmediateUploadWithConfirmations) { +// Disabled because of flakiness. See crbug.com/1193079. +TEST_P(StorageTest, + DISABLED_WriteAndRepeatedlyImmediateUploadWithConfirmations) { CreateTestStorageOrDie(BuildTestStorageOptions()); // Upload is initiated asynchronously, so it may happen after the next
diff --git a/components/resources/policy_resources.grdp b/components/resources/policy_resources.grdp index 427d31ee..ec7fc0f 100644 --- a/components/resources/policy_resources.grdp +++ b/components/resources/policy_resources.grdp
@@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <grit-part> <include name="IDR_POLICY_CSS" file="../policy/resources/webui/policy.css" preprocess="true" type="BINDATA" /> - <include name="IDR_POLICY_HTML" file="../policy/resources/webui/policy.html" type="BINDATA" /> - <include name="IDR_POLICY_BASE_JS" file="../policy/resources/webui/policy_base.js" preprocess="true" type="BINDATA" /> + <include name="IDR_POLICY_HTML" file="../policy/resources/webui/policy.html" flattenhtml="true" allowexternalscript="true" type="BINDATA" /> + <include name="IDR_POLICY_BASE_JS" file="../policy/resources/webui/policy_base.js" type="BINDATA" preprocess="true" /> <include name="IDR_POLICY_JS" file="../policy/resources/webui/policy.js" type="BINDATA" /> </grit-part>
diff --git a/components/safe_browsing/core/browser/sync/safe_browsing_primary_account_token_fetcher.cc b/components/safe_browsing/core/browser/sync/safe_browsing_primary_account_token_fetcher.cc index bff9a07..8bc7c0a4 100644 --- a/components/safe_browsing/core/browser/sync/safe_browsing_primary_account_token_fetcher.cc +++ b/components/safe_browsing/core/browser/sync/safe_browsing_primary_account_token_fetcher.cc
@@ -38,8 +38,8 @@ std::move(callback), base::BindOnce(&SafeBrowsingPrimaryAccountTokenFetcher::OnTokenTimeout, base::Unretained(this))); - CoreAccountId account_id = identity_manager_->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired); + CoreAccountId account_id = + identity_manager_->GetPrimaryAccountId(signin::ConsentLevel::kSignin); token_fetchers_[request_id] = identity_manager_->CreateAccessTokenFetcherForAccount( account_id, "safe_browsing_service", {kAPIScope},
diff --git a/components/safe_browsing/core/browser/sync/sync_utils.cc b/components/safe_browsing/core/browser/sync/sync_utils.cc index fcceb46..0e47cf5 100644 --- a/components/safe_browsing/core/browser/sync/sync_utils.cc +++ b/components/safe_browsing/core/browser/sync/sync_utils.cc
@@ -18,8 +18,7 @@ bool SyncUtils::IsPrimaryAccountSignedIn( signin::IdentityManager* identity_manager) { CoreAccountInfo primary_account_info = - identity_manager->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin); return !primary_account_info.account_id.empty(); }
diff --git a/components/signin/core/browser/account_investigator.cc b/components/signin/core/browser/account_investigator.cc index 7b409dd..4924dd4 100644 --- a/components/signin/core/browser/account_investigator.cc +++ b/components/signin/core/browser/account_investigator.cc
@@ -40,7 +40,7 @@ base::Optional<AccountInfo> GetExtendedAccountInfo( signin::IdentityManager* identity_manager) { CoreAccountId account_id = - identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kNotRequired); + identity_manager->GetPrimaryAccountId(signin::ConsentLevel::kSignin); if (account_id.empty()) return base::nullopt; return identity_manager @@ -51,7 +51,7 @@ // Returns true if there is primary account (no consent required) but no // extended info, yet. bool WaitingForExtendedInfo(signin::IdentityManager* identity_manager) { - if (!identity_manager->HasPrimaryAccount(signin::ConsentLevel::kNotRequired)) + if (!identity_manager->HasPrimaryAccount(signin::ConsentLevel::kSignin)) return false; return !GetExtendedAccountInfo(identity_manager).has_value(); } @@ -241,8 +241,7 @@ // Report extra metrics only for signed-in accounts that are split by the // primary account type. - if (identity_manager_->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired)) { + if (identity_manager_->HasPrimaryAccount(signin::ConsentLevel::kSignin)) { const bool is_syncing = identity_manager_->HasPrimaryAccount(signin::ConsentLevel::kSync); base::Optional<AccountInfo> info =
diff --git a/components/signin/core/browser/mirror_account_reconcilor_delegate.cc b/components/signin/core/browser/mirror_account_reconcilor_delegate.cc index 2c4872e2..2accff2 100644 --- a/components/signin/core/browser/mirror_account_reconcilor_delegate.cc +++ b/components/signin/core/browser/mirror_account_reconcilor_delegate.cc
@@ -41,7 +41,7 @@ const { #if defined(OS_ANDROID) if (base::FeatureList::IsEnabled(kMobileIdentityConsistency)) { - return ConsentLevel::kNotRequired; + return ConsentLevel::kSignin; } #endif return ConsentLevel::kSync;
diff --git a/components/signin/core/browser/signin_error_controller.cc b/components/signin/core/browser/signin_error_controller.cc index 9abb3c4..93f190c5 100644 --- a/components/signin/core/browser/signin_error_controller.cc +++ b/components/signin/core/browser/signin_error_controller.cc
@@ -31,8 +31,7 @@ bool error_changed = false; const CoreAccountId& primary_account_id = - identity_manager_->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired); + identity_manager_->GetPrimaryAccountId(signin::ConsentLevel::kSignin); if (identity_manager_->HasAccountWithRefreshTokenInPersistentErrorState( primary_account_id)) {
diff --git a/components/signin/internal/identity_manager/accounts_cookie_mutator_impl.cc b/components/signin/internal/identity_manager/accounts_cookie_mutator_impl.cc index 28a8a1f..d03c005f 100644 --- a/components/signin/internal/identity_manager/accounts_cookie_mutator_impl.cc +++ b/components/signin/internal/identity_manager/accounts_cookie_mutator_impl.cc
@@ -76,6 +76,7 @@ AccountsCookieMutatorImpl::SetAccountsInCookieForPartition( PartitionDelegate* partition_delegate, const MultiloginParameters& parameters, + gaia::GaiaSource source, base::OnceCallback<void(SetAccountsInCookieResult)> set_accounts_in_cookies_completed_callback) { // The default partition must go through the GaiaCookieManagerService. @@ -94,7 +95,7 @@ return std::make_unique<MultiloginHelperWrapper>( std::make_unique<OAuthMultiloginHelper>( signin_client_, partition_delegate, token_service_, parameters.mode, - accounts, /*external_cc_result=*/std::string(), + accounts, /*external_cc_result=*/std::string(), source, std::move(set_accounts_in_cookies_completed_callback))); }
diff --git a/components/signin/internal/identity_manager/accounts_cookie_mutator_impl.h b/components/signin/internal/identity_manager/accounts_cookie_mutator_impl.h index 1f4d5f5..cf8dc8e 100644 --- a/components/signin/internal/identity_manager/accounts_cookie_mutator_impl.h +++ b/components/signin/internal/identity_manager/accounts_cookie_mutator_impl.h
@@ -55,6 +55,7 @@ std::unique_ptr<SetAccountsInCookieTask> SetAccountsInCookieForPartition( PartitionDelegate* partition_delegate, const MultiloginParameters& parameters, + gaia::GaiaSource source, base::OnceCallback<void(SetAccountsInCookieResult)> set_accounts_in_cookies_completed_callback) override;
diff --git a/components/signin/internal/identity_manager/gaia_cookie_manager_service.cc b/components/signin/internal/identity_manager/gaia_cookie_manager_service.cc index 9ff47fc..773aa606 100644 --- a/components/signin/internal/identity_manager/gaia_cookie_manager_service.cc +++ b/components/signin/internal/identity_manager/gaia_cookie_manager_service.cc
@@ -959,9 +959,9 @@ std::unique_ptr<GaiaAuthFetcher> GaiaCookieManagerService::CreateGaiaAuthFetcherForPartition( - GaiaAuthConsumer* consumer) { - return signin_client_->CreateGaiaAuthFetcher(consumer, - gaia::GaiaSource::kChrome); + GaiaAuthConsumer* consumer, + const gaia::GaiaSource& source) { + return signin_client_->CreateGaiaAuthFetcher(consumer, source); } network::mojom::CookieManager* @@ -1021,9 +1021,9 @@ void GaiaCookieManagerService::StartSetAccounts() { DCHECK(!requests_.empty()); - DCHECK_EQ(GaiaCookieRequestType::SET_ACCOUNTS, - requests_.front().request_type()); - DCHECK(!requests_.front().GetAccounts().empty()); + const GaiaCookieRequest& request = requests_.front(); + DCHECK_EQ(GaiaCookieRequestType::SET_ACCOUNTS, request.request_type()); + DCHECK(!request.GetAccounts().empty()); if (!external_cc_result_fetched_ && !external_cc_result_fetcher_.IsRunning()) { @@ -1034,9 +1034,9 @@ } oauth_multilogin_helper_ = std::make_unique<signin::OAuthMultiloginHelper>( - signin_client_, this, token_service_, - requests_.front().GetMultiloginMode(), requests_.front().GetAccounts(), - external_cc_result_fetcher_.GetExternalCcResult(), + signin_client_, this, token_service_, request.GetMultiloginMode(), + request.GetAccounts(), external_cc_result_fetcher_.GetExternalCcResult(), + request.source(), base::BindOnce(&GaiaCookieManagerService::OnSetAccountsFinished, weak_ptr_factory_.GetWeakPtr())); }
diff --git a/components/signin/internal/identity_manager/gaia_cookie_manager_service.h b/components/signin/internal/identity_manager/gaia_cookie_manager_service.h index ae36c7e..b1c73919 100644 --- a/components/signin/internal/identity_manager/gaia_cookie_manager_service.h +++ b/components/signin/internal/identity_manager/gaia_cookie_manager_service.h
@@ -349,7 +349,8 @@ // Overridden from signin::AccountsCookieMutator::PartitionDelegate. std::unique_ptr<GaiaAuthFetcher> CreateGaiaAuthFetcherForPartition( - GaiaAuthConsumer* consumer) override; + GaiaAuthConsumer* consumer, + const gaia::GaiaSource& source) override; network::mojom::CookieManager* GetCookieManagerForPartition() override; // Helper method to initialize listed accounts ids.
diff --git a/components/signin/internal/identity_manager/oauth_multilogin_helper.cc b/components/signin/internal/identity_manager/oauth_multilogin_helper.cc index 299b12cd..815ee25 100644 --- a/components/signin/internal/identity_manager/oauth_multilogin_helper.cc +++ b/components/signin/internal/identity_manager/oauth_multilogin_helper.cc
@@ -58,6 +58,7 @@ gaia::MultiloginMode mode, const std::vector<AccountIdGaiaIdPair>& accounts, const std::string& external_cc_result, + const gaia::GaiaSource& gaia_source, base::OnceCallback<void(SetAccountsInCookieResult)> callback) : signin_client_(signin_client), partition_delegate_(partition_delegate), @@ -65,6 +66,7 @@ mode_(mode), accounts_(accounts), external_cc_result_(external_cc_result), + gaia_source_(gaia_source), callback_(std::move(callback)) { DCHECK(signin_client_); DCHECK(partition_delegate_); @@ -129,8 +131,8 @@ void OAuthMultiloginHelper::StartFetchingMultiLogin() { DCHECK_EQ(gaia_id_token_pairs_.size(), accounts_.size()); - gaia_auth_fetcher_ = - partition_delegate_->CreateGaiaAuthFetcherForPartition(this); + gaia_auth_fetcher_ = partition_delegate_->CreateGaiaAuthFetcherForPartition( + this, gaia_source_); gaia_auth_fetcher_->StartOAuthMultilogin(mode_, gaia_id_token_pairs_, external_cc_result_); }
diff --git a/components/signin/internal/identity_manager/oauth_multilogin_helper.h b/components/signin/internal/identity_manager/oauth_multilogin_helper.h index e2a2048..d60787c 100644 --- a/components/signin/internal/identity_manager/oauth_multilogin_helper.h +++ b/components/signin/internal/identity_manager/oauth_multilogin_helper.h
@@ -46,6 +46,7 @@ gaia::MultiloginMode mode, const std::vector<AccountIdGaiaIdPair>& accounts, const std::string& external_cc_result, + const gaia::GaiaSource& gaia_source, base::OnceCallback<void(SetAccountsInCookieResult)> callback); ~OAuthMultiloginHelper() override; @@ -85,6 +86,9 @@ const std::vector<AccountIdGaiaIdPair> accounts_; // See GaiaCookieManagerService::ExternalCcResultFetcher for details. const std::string external_cc_result_; + // The Gaia source to be passed when creating GaiaAuthFetchers for the + // OAuthmultilogin request. + const gaia::GaiaSource gaia_source_; // Access tokens, in the same order as the account ids. std::vector<GaiaAuthFetcher::MultiloginTokenIDPair> gaia_id_token_pairs_;
diff --git a/components/signin/internal/identity_manager/oauth_multilogin_helper_unittest.cc b/components/signin/internal/identity_manager/oauth_multilogin_helper_unittest.cc index bffb497..6f939c9b 100644 --- a/components/signin/internal/identity_manager/oauth_multilogin_helper_unittest.cc +++ b/components/signin/internal/identity_manager/oauth_multilogin_helper_unittest.cc
@@ -184,7 +184,7 @@ return std::make_unique<OAuthMultiloginHelper>( &test_signin_client_, this, token_service(), gaia::MultiloginMode::MULTILOGIN_UPDATE_COOKIE_ACCOUNTS_ORDER, accounts, - std::string(), + std::string(), gaia::GaiaSource::kChrome, base::BindOnce(&OAuthMultiloginHelperTest::OnOAuthMultiloginFinished, base::Unretained(this))); } @@ -194,7 +194,7 @@ return std::make_unique<OAuthMultiloginHelper>( &test_signin_client_, this, token_service(), gaia::MultiloginMode::MULTILOGIN_UPDATE_COOKIE_ACCOUNTS_ORDER, accounts, - kExternalCcResult, + kExternalCcResult, gaia::GaiaSource::kChrome, base::BindOnce(&OAuthMultiloginHelperTest::OnOAuthMultiloginFinished, base::Unretained(this))); } @@ -226,9 +226,9 @@ // AccountsCookieMuator::PartitionDelegate: std::unique_ptr<GaiaAuthFetcher> CreateGaiaAuthFetcherForPartition( - GaiaAuthConsumer* consumer) override { - return test_signin_client_.CreateGaiaAuthFetcher(consumer, - gaia::GaiaSource::kChrome); + GaiaAuthConsumer* consumer, + const gaia::GaiaSource& source) override { + return test_signin_client_.CreateGaiaAuthFetcher(consumer, source); } network::mojom::CookieManager* GetCookieManagerForPartition() override {
diff --git a/components/signin/internal/identity_manager/primary_account_manager.cc b/components/signin/internal/identity_manager/primary_account_manager.cc index 581552c..d949029 100644 --- a/components/signin/internal/identity_manager/primary_account_manager.cc +++ b/components/signin/internal/identity_manager/primary_account_manager.cc
@@ -219,7 +219,7 @@ return false; } switch (consent_level) { - case signin::ConsentLevel::kNotRequired: + case signin::ConsentLevel::kSignin: return true; case signin::ConsentLevel::kSync: return consented_pref; @@ -347,7 +347,7 @@ kPrimaryAccountManager_ClearAccount); break; case RemoveAccountsOption::kKeepAllAccounts: - if (previous_state.consent_level == signin::ConsentLevel::kNotRequired) { + if (previous_state.consent_level == signin::ConsentLevel::kSignin) { // Nothing to update as the primary account is already at kNotRequired // consent level. Prefer returning to avoid firing useless // OnPrimaryAccountChanged() notifications. @@ -365,7 +365,7 @@ PrimaryAccountChangeEvent::State PrimaryAccountManager::GetPrimaryAccountState() const { PrimaryAccountChangeEvent::State state(primary_account_info(), - signin::ConsentLevel::kNotRequired); + signin::ConsentLevel::kSignin); if (HasPrimaryAccount(signin::ConsentLevel::kSync)) state.consent_level = signin::ConsentLevel::kSync; return state; @@ -378,7 +378,7 @@ DCHECK(event_details.GetEventTypeFor(signin::ConsentLevel::kSync) != PrimaryAccountChangeEvent::Type::kNone || - event_details.GetEventTypeFor(signin::ConsentLevel::kNotRequired) != + event_details.GetEventTypeFor(signin::ConsentLevel::kSignin) != PrimaryAccountChangeEvent::Type::kNone) << "PrimaryAccountChangeEvent with no change: " << event_details;
diff --git a/components/signin/internal/identity_manager/primary_account_manager_unittest.cc b/components/signin/internal/identity_manager/primary_account_manager_unittest.cc index 6c15cfd..6c8a587 100644 --- a/components/signin/internal/identity_manager/primary_account_manager_unittest.cc +++ b/components/signin/internal/identity_manager/primary_account_manager_unittest.cc
@@ -120,7 +120,7 @@ const signin::PrimaryAccountChangeEvent& event_details) override { DCHECK(event_details.GetEventTypeFor(signin::ConsentLevel::kSync) != signin::PrimaryAccountChangeEvent::Type::kNone || - event_details.GetEventTypeFor(signin::ConsentLevel::kNotRequired) != + event_details.GetEventTypeFor(signin::ConsentLevel::kSignin) != signin::PrimaryAccountChangeEvent::Type::kNone) << "PrimaryAccountChangeEvent with no change: " << event_details; @@ -134,7 +134,7 @@ case signin::PrimaryAccountChangeEvent::Type::kNone: break; } - switch (event_details.GetEventTypeFor(ConsentLevel::kNotRequired)) { + switch (event_details.GetEventTypeFor(ConsentLevel::kSignin)) { case signin::PrimaryAccountChangeEvent::Type::kSet: case signin::PrimaryAccountChangeEvent::Type::kCleared: num_unconsented_account_changed_++; @@ -176,8 +176,7 @@ EXPECT_TRUE( manager_->GetPrimaryAccountInfo(ConsentLevel::kSync).email.empty()); EXPECT_TRUE(manager_->GetPrimaryAccountId(ConsentLevel::kSync).empty()); - EXPECT_TRUE( - manager_->GetPrimaryAccountInfo(ConsentLevel::kNotRequired).IsEmpty()); + EXPECT_TRUE(manager_->GetPrimaryAccountInfo(ConsentLevel::kSignin).IsEmpty()); // Should not be persisted anymore ShutDownManager(); CreatePrimaryAccountManager(); @@ -185,8 +184,7 @@ EXPECT_TRUE( manager_->GetPrimaryAccountInfo(ConsentLevel::kSync).email.empty()); EXPECT_TRUE(manager_->GetPrimaryAccountId(ConsentLevel::kSync).empty()); - EXPECT_TRUE( - manager_->GetPrimaryAccountInfo(ConsentLevel::kNotRequired).IsEmpty()); + EXPECT_TRUE(manager_->GetPrimaryAccountInfo(ConsentLevel::kSignin).IsEmpty()); } TEST_F(PrimaryAccountManagerTest, SignOutRevoke) { @@ -245,12 +243,12 @@ CoreAccountId account_id = AddToAccountTracker("gaia_id", "user@gmail.com"); CoreAccountInfo account_info = account_tracker()->GetAccountInfo(account_id); manager_->SetUnconsentedPrimaryAccountInfo(account_info); - EXPECT_TRUE(manager_->HasPrimaryAccount(ConsentLevel::kNotRequired)); + EXPECT_TRUE(manager_->HasPrimaryAccount(ConsentLevel::kSignin)); EXPECT_FALSE(manager_->HasPrimaryAccount(ConsentLevel::kSync)); signin_client()->set_is_signout_allowed(false); manager_->ClearPrimaryAccount(signin_metrics::SIGNOUT_TEST, signin_metrics::SignoutDelete::IGNORE_METRIC); - EXPECT_FALSE(manager_->HasPrimaryAccount(ConsentLevel::kNotRequired)); + EXPECT_FALSE(manager_->HasPrimaryAccount(ConsentLevel::kSignin)); } TEST_F(PrimaryAccountManagerTest, ProhibitedAtStartup) { @@ -290,7 +288,7 @@ CoreAccountInfo account_info = account_tracker()->GetAccountInfo(account_id); manager_->SetUnconsentedPrimaryAccountInfo(account_info); EXPECT_EQ(1, num_unconsented_account_changed_); - EXPECT_TRUE(manager_->HasPrimaryAccount(ConsentLevel::kNotRequired)); + EXPECT_TRUE(manager_->HasPrimaryAccount(ConsentLevel::kSignin)); EXPECT_FALSE(manager_->HasPrimaryAccount(ConsentLevel::kSync)); manager_->RevokeSyncConsent(signin_metrics::SIGNOUT_TEST, @@ -317,7 +315,7 @@ EXPECT_EQ("user@gmail.com", manager_->GetPrimaryAccountInfo(ConsentLevel::kSync).email); EXPECT_EQ(account_id, manager_->GetPrimaryAccountId(ConsentLevel::kSync)); - EXPECT_EQ(manager_->GetPrimaryAccountInfo(ConsentLevel::kNotRequired), + EXPECT_EQ(manager_->GetPrimaryAccountInfo(ConsentLevel::kSignin), manager_->GetPrimaryAccountInfo(ConsentLevel::kSync)); } @@ -457,7 +455,7 @@ CreatePrimaryAccountManager(); base::RunLoop().RunUntilIdle(); - EXPECT_FALSE(manager_->HasPrimaryAccount(ConsentLevel::kNotRequired)); + EXPECT_FALSE(manager_->HasPrimaryAccount(ConsentLevel::kSignin)); EXPECT_EQ("", user_prefs_.GetString(prefs::kGoogleServicesAccountId)); EXPECT_TRUE(account_tracker()->GetAccounts().empty()); EXPECT_EQ(AccountTrackerService::MIGRATION_DONE, @@ -473,7 +471,7 @@ EXPECT_EQ("user@gmail.com", manager_->GetPrimaryAccountInfo(ConsentLevel::kSync).email); EXPECT_EQ(account_id, manager_->GetPrimaryAccountId(ConsentLevel::kSync)); - EXPECT_EQ(manager_->GetPrimaryAccountInfo(ConsentLevel::kNotRequired), + EXPECT_EQ(manager_->GetPrimaryAccountInfo(ConsentLevel::kSignin), manager_->GetPrimaryAccountInfo(ConsentLevel::kSync)); } @@ -483,10 +481,9 @@ user_prefs_.SetBoolean(prefs::kGoogleServicesConsentedToSync, false); CreatePrimaryAccountManager(); EXPECT_EQ("user@gmail.com", - manager_->GetPrimaryAccountInfo(ConsentLevel::kNotRequired).email); - EXPECT_EQ( - account_id, - manager_->GetPrimaryAccountInfo(ConsentLevel::kNotRequired).account_id); + manager_->GetPrimaryAccountInfo(ConsentLevel::kSignin).email); + EXPECT_EQ(account_id, + manager_->GetPrimaryAccountInfo(ConsentLevel::kSignin).account_id); EXPECT_TRUE(manager_->GetPrimaryAccountInfo(ConsentLevel::kSync).IsEmpty()); } @@ -506,14 +503,14 @@ EXPECT_EQ("user@gmail.com", manager_->GetPrimaryAccountInfo(ConsentLevel::kSync).email); EXPECT_EQ(account_id, manager_->GetPrimaryAccountId(ConsentLevel::kSync)); - EXPECT_EQ(manager_->GetPrimaryAccountInfo(ConsentLevel::kNotRequired), + EXPECT_EQ(manager_->GetPrimaryAccountInfo(ConsentLevel::kSignin), manager_->GetPrimaryAccountInfo(ConsentLevel::kSync)); } TEST_F(PrimaryAccountManagerTest, SetUnconsentedPrimaryAccountInfo) { CreatePrimaryAccountManager(); EXPECT_EQ(CoreAccountInfo(), - manager_->GetPrimaryAccountInfo(ConsentLevel::kNotRequired)); + manager_->GetPrimaryAccountInfo(ConsentLevel::kSignin)); EXPECT_EQ(0, num_unconsented_account_changed_); EXPECT_EQ(0, num_successful_signins_); @@ -527,7 +524,7 @@ EXPECT_EQ(0, num_successful_signouts_); EXPECT_EQ(1, num_unconsented_account_changed_); EXPECT_EQ(account_info, - manager_->GetPrimaryAccountInfo(ConsentLevel::kNotRequired)); + manager_->GetPrimaryAccountInfo(ConsentLevel::kSignin)); EXPECT_EQ(CoreAccountInfo(), manager_->GetPrimaryAccountInfo(ConsentLevel::kSync)); @@ -537,7 +534,7 @@ EXPECT_EQ(0, num_successful_signouts_); EXPECT_EQ(1, num_unconsented_account_changed_); EXPECT_EQ(account_info, - manager_->GetPrimaryAccountInfo(ConsentLevel::kNotRequired)); + manager_->GetPrimaryAccountInfo(ConsentLevel::kSignin)); EXPECT_EQ(CoreAccountInfo(), manager_->GetPrimaryAccountInfo(ConsentLevel::kSync)); @@ -549,7 +546,7 @@ EXPECT_EQ(0, num_successful_signouts_); EXPECT_EQ(1, num_unconsented_account_changed_); EXPECT_EQ(account_info, - manager_->GetPrimaryAccountInfo(ConsentLevel::kNotRequired)); + manager_->GetPrimaryAccountInfo(ConsentLevel::kSignin)); EXPECT_EQ(CoreAccountInfo(), manager_->GetPrimaryAccountInfo(ConsentLevel::kSync)); @@ -559,7 +556,7 @@ EXPECT_EQ(0, num_successful_signouts_); EXPECT_EQ(2, num_unconsented_account_changed_); EXPECT_EQ(CoreAccountInfo(), - manager_->GetPrimaryAccountInfo(ConsentLevel::kNotRequired)); + manager_->GetPrimaryAccountInfo(ConsentLevel::kSignin)); EXPECT_EQ(CoreAccountInfo(), manager_->GetPrimaryAccountInfo(ConsentLevel::kSync)); } @@ -575,10 +572,9 @@ signin_metrics::SignoutDelete::IGNORE_METRIC); EXPECT_EQ(1, num_successful_signouts_); EXPECT_FALSE(manager_->HasPrimaryAccount(ConsentLevel::kSync)); - EXPECT_TRUE(manager_->HasPrimaryAccount(ConsentLevel::kNotRequired)); - EXPECT_EQ( - account_id, - manager_->GetPrimaryAccountInfo(ConsentLevel::kNotRequired).account_id); + EXPECT_TRUE(manager_->HasPrimaryAccount(ConsentLevel::kSignin)); + EXPECT_EQ(account_id, + manager_->GetPrimaryAccountInfo(ConsentLevel::kSignin).account_id); } #if !BUILDFLAG(IS_CHROMEOS_ASH) @@ -593,6 +589,6 @@ signin_metrics::SignoutDelete::IGNORE_METRIC); EXPECT_EQ(1, num_successful_signouts_); EXPECT_FALSE(manager_->HasPrimaryAccount(ConsentLevel::kSync)); - EXPECT_FALSE(manager_->HasPrimaryAccount(ConsentLevel::kNotRequired)); + EXPECT_FALSE(manager_->HasPrimaryAccount(ConsentLevel::kSignin)); } #endif // !BUILDFLAG(IS_CHROMEOS_ASH)
diff --git a/components/signin/internal/identity_manager/primary_account_mutator_impl.cc b/components/signin/internal/identity_manager/primary_account_mutator_impl.cc index fb06b6a..83900c8 100644 --- a/components/signin/internal/identity_manager/primary_account_mutator_impl.cc +++ b/components/signin/internal/identity_manager/primary_account_mutator_impl.cc
@@ -71,8 +71,7 @@ #if BUILDFLAG(IS_CHROMEOS_ASH) // On Chrome OS the UPA can only be set once and never removed or changed. DCHECK(!account_id.empty()); - DCHECK( - !primary_account_manager_->HasPrimaryAccount(ConsentLevel::kNotRequired)); + DCHECK(!primary_account_manager_->HasPrimaryAccount(ConsentLevel::kSignin)); #endif AccountInfo account_info; if (!account_id.empty()) { @@ -126,7 +125,7 @@ bool PrimaryAccountMutatorImpl::ClearPrimaryAccount( signin_metrics::ProfileSignout source_metric, signin_metrics::SignoutDelete delete_metric) { - if (!primary_account_manager_->HasPrimaryAccount(ConsentLevel::kNotRequired)) + if (!primary_account_manager_->HasPrimaryAccount(ConsentLevel::kSignin)) return false; primary_account_manager_->ClearPrimaryAccount(source_metric, delete_metric);
diff --git a/components/signin/ios/browser/account_consistency_service.mm b/components/signin/ios/browser/account_consistency_service.mm index 3f9f0d9..0b52e088 100644 --- a/components/signin/ios/browser/account_consistency_service.mm +++ b/components/signin/ios/browser/account_consistency_service.mm
@@ -175,8 +175,7 @@ GURL url = net::GURLWithNSURL(request.URL); if (base::FeatureList::IsEnabled(signin::kRestoreGaiaCookiesOnUserAction) && signin::IsUrlEligibleForMirrorCookie(url) && - identity_manager_->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired)) { + identity_manager_->HasPrimaryAccount(signin::ConsentLevel::kSignin)) { // CHROME_CONNECTED cookies are added asynchronously on google.com and // youtube.com domains when Chrome detects that the user is signed-in. By // continuing to fulfill the navigation once the cookie request is sent, @@ -261,8 +260,7 @@ case signin::GAIA_SERVICE_TYPE_ADDSESSION: // This situation is only possible if the all cookies have been deleted by // ITP restrictions and Chrome has not triggered a cookie refresh. - if (identity_manager_->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired)) { + if (identity_manager_->HasPrimaryAccount(signin::ConsentLevel::kSignin)) { LogIOSGaiaCookiesState(GaiaCookieStateOnSignedInNavigation:: kGaiaCookieAbsentOnAddSessionNavigation); if (base::FeatureList::IsEnabled( @@ -377,8 +375,7 @@ identity_manager_(identity_manager), active_cookie_manager_requests_for_testing_(0) { identity_manager_->AddObserver(this); - if (identity_manager_->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired)) { + if (identity_manager_->HasPrimaryAccount(signin::ConsentLevel::kSignin)) { AddChromeConnectedCookies(); } else { RemoveAllChromeConnectedCookies(base::OnceClosure()); @@ -433,8 +430,7 @@ // |GetAllCookies| in the cookie manager. if (base::Time::Now() - last_gaia_cookie_verification_time_ < GetDelayThresholdToUpdateGaiaCookie() || - !identity_manager_->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired)) { + !identity_manager_->HasPrimaryAccount(signin::ConsentLevel::kSignin)) { return; } network::mojom::CookieManager* cookie_manager = @@ -588,7 +584,7 @@ void AccountConsistencyService::OnPrimaryAccountChanged( const signin::PrimaryAccountChangeEvent& event) { - switch (event.GetEventTypeFor(signin::ConsentLevel::kNotRequired)) { + switch (event.GetEventTypeFor(signin::ConsentLevel::kSignin)) { case signin::PrimaryAccountChangeEvent::Type::kSet: case signin::PrimaryAccountChangeEvent::Type::kNone: AddChromeConnectedCookies();
diff --git a/components/signin/public/android/java/src/org/chromium/components/signin/AccountTrackerService.java b/components/signin/public/android/java/src/org/chromium/components/signin/AccountTrackerService.java index 5e657f2..4b7d807 100644 --- a/components/signin/public/android/java/src/org/chromium/components/signin/AccountTrackerService.java +++ b/components/signin/public/android/java/src/org/chromium/components/signin/AccountTrackerService.java
@@ -124,7 +124,7 @@ mSystemAccountsSeedingObservers.addObserver(observer); } - private void seedAccounts() { + public void seedAccounts() { ThreadUtils.assertOnUiThread(); final AccountManagerFacade accountManagerFacade = AccountManagerFacadeProvider.getInstance(); @@ -135,8 +135,7 @@ mAccountsSeedingStatus = AccountsSeedingStatus.IN_PROGRESS; if (mAccountsChangeObserver == null) { - mAccountsChangeObserver = - () -> invalidateAccountSeedStatus(false /* don't reseed right now */); + mAccountsChangeObserver = this::seedAccounts; accountManagerFacade.addObserver(mAccountsChangeObserver); } @@ -195,7 +194,11 @@ /** * Notifies the AccountTrackerService about changed system accounts. without actually triggering * @param reSeedAccounts Whether to also start seeding the new account information immediately. + * + * TODO(crbug/1185712): Replace the only caller of this method SigninManagerImpl to call + * seedAccounts() directly. */ + @Deprecated public void invalidateAccountSeedStatus(boolean reSeedAccounts) { ThreadUtils.assertOnUiThread(); mAccountsSeedingStatus = AccountsSeedingStatus.NOT_STARTED;
diff --git a/components/signin/public/android/junit/src/org/chromium/components/signin/AccountTrackerServiceTest.java b/components/signin/public/android/junit/src/org/chromium/components/signin/AccountTrackerServiceTest.java index 6712217a..95d99fb 100644 --- a/components/signin/public/android/junit/src/org/chromium/components/signin/AccountTrackerServiceTest.java +++ b/components/signin/public/android/junit/src/org/chromium/components/signin/AccountTrackerServiceTest.java
@@ -137,6 +137,18 @@ } @Test + public void testAddingNewAccountTriggersSeedingAccounts() { + mService.seedAccountsIfNeeded(() -> {}); + final Account newAccount = AccountUtils.createAccountFromName("test2@gmail.com"); + verify(mNativeMock).seedAccountsInfo(eq(ACCOUNT_TRACKER_SERVICE_NATIVE), any(), any()); + + mFakeAccountManagerFacade.addAccount(newAccount); + + verify(mNativeMock, times(2)) + .seedAccountsInfo(eq(ACCOUNT_TRACKER_SERVICE_NATIVE), any(), any()); + } + + @Test public void testInvalidateAccountsAndReSeed() { mService.seedAccountsIfNeeded(() -> {});
diff --git a/components/signin/public/base/signin_metrics.cc b/components/signin/public/base/signin_metrics.cc index 7f19138..fc1da41 100644 --- a/components/signin/public/base/signin_metrics.cc +++ b/components/signin/public/base/signin_metrics.cc
@@ -603,8 +603,7 @@ } void LogSigninReason(Reason reason) { - UMA_HISTOGRAM_ENUMERATION("Signin.SigninReason", static_cast<int>(reason), - static_cast<int>(Reason::REASON_MAX)); + UMA_HISTOGRAM_ENUMERATION("Signin.SigninReason", reason); } void LogSigninAccountReconciliation(int total_number_accounts,
diff --git a/components/signin/public/base/signin_metrics.h b/components/signin/public/base/signin_metrics.h index 7a712ff..fe42851 100644 --- a/components/signin/public/base/signin_metrics.h +++ b/components/signin/public/base/signin_metrics.h
@@ -288,21 +288,26 @@ #endif // defined(OS_ANDROID) // Enum values which enumerates all reasons to start sign in process. +// These values are persisted to logs. Entries should not be renumbered and +// numeric values should never be reused. +// Please keep in Sync with "SigninReason" in +// src/tools/metrics/histograms/enums.xml. // A Java counterpart will be generated for this enum. // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.components.signin.metrics // GENERATED_JAVA_CLASS_NAME_OVERRIDE: SigninReason enum class Reason : int { REASON_SIGNIN_PRIMARY_ACCOUNT = 0, - REASON_ADD_SECONDARY_ACCOUNT, - REASON_REAUTHENTICATION, - REASON_UNLOCK, - REASON_UNKNOWN_REASON, // This should never have been used to get signin URL. - REASON_FORCED_SIGNIN_PRIMARY_ACCOUNT, - REASON_FETCH_LST_ONLY, // Used to simply login and acquire a login scope - // token without actually signing into any profiles on - // Chrome. This allows the chrome signin page to work - // in incognito mode. - REASON_MAX, // This must be last. + REASON_ADD_SECONDARY_ACCOUNT = 1, + REASON_REAUTHENTICATION = 2, + // REASON_UNLOCK = 3, // DEPRECATED, profile unlocking was removed. + // This should never have been used to get signin URL. + REASON_UNKNOWN_REASON = 4, + REASON_FORCED_SIGNIN_PRIMARY_ACCOUNT = 5, + // Used to simply login and acquire a login scope token without actually + // signing into any profiles on Chrome. This allows the chrome signin page to + // work in incognito mode. + REASON_FETCH_LST_ONLY = 6, + kMaxValue = REASON_FETCH_LST_ONLY, }; // Enum values used for use with the "Signin.Reauth" histogram.
diff --git a/components/signin/public/identity_manager/access_token_constants.h b/components/signin/public/identity_manager/access_token_constants.h index aed842d..4105f53 100644 --- a/components/signin/public/identity_manager/access_token_constants.h +++ b/components/signin/public/identity_manager/access_token_constants.h
@@ -13,7 +13,7 @@ namespace signin { // Set of Google OAuth2 API scopes that do not require user consent for their -// usage - these scopes are accessible at ConsentLevel::kNotRequired. +// usage - these scopes are accessible at ConsentLevel::kSignin. const std::set<std::string> GetUnconsentedOAuth2Scopes(); // Set of Google OAuth2 API scopes that require privileged access - these scopes
diff --git a/components/signin/public/identity_manager/accounts_cookie_mutator.h b/components/signin/public/identity_manager/accounts_cookie_mutator.h index 2cab371..200fd2a 100644 --- a/components/signin/public/identity_manager/accounts_cookie_mutator.h +++ b/components/signin/public/identity_manager/accounts_cookie_mutator.h
@@ -36,7 +36,8 @@ public: // Creates a new GaiaAuthFetcher for the partition. virtual std::unique_ptr<GaiaAuthFetcher> CreateGaiaAuthFetcherForPartition( - GaiaAuthConsumer* consumer) = 0; + GaiaAuthConsumer* consumer, + const gaia::GaiaSource& source) = 0; // Returns the CookieManager for the partition. virtual network::mojom::CookieManager* GetCookieManagerForPartition() = 0; @@ -105,6 +106,7 @@ SetAccountsInCookieForPartition( PartitionDelegate* partition_delegate, const MultiloginParameters& parameters, + gaia::GaiaSource source, base::OnceCallback<void(SetAccountsInCookieResult)> set_accounts_in_cookies_completed_callback) = 0;
diff --git a/components/signin/public/identity_manager/accounts_cookie_mutator_unittest.cc b/components/signin/public/identity_manager/accounts_cookie_mutator_unittest.cc index 216f9e5..77a4839d 100644 --- a/components/signin/public/identity_manager/accounts_cookie_mutator_unittest.cc +++ b/components/signin/public/identity_manager/accounts_cookie_mutator_unittest.cc
@@ -159,9 +159,9 @@ private: // AccountsCookieMutator::PartitionDelegate std::unique_ptr<GaiaAuthFetcher> CreateGaiaAuthFetcherForPartition( - GaiaAuthConsumer* consumer) override { - return test_signin_client_.CreateGaiaAuthFetcher(consumer, - gaia::GaiaSource::kChrome); + GaiaAuthConsumer* consumer, + const gaia::GaiaSource& source) override { + return test_signin_client_.CreateGaiaAuthFetcher(consumer, source); } network::mojom::CookieManager* GetCookieManagerForPartition() override { @@ -402,7 +402,7 @@ {account_id, other_account_id}}; std::unique_ptr<AccountsCookieMutator::SetAccountsInCookieTask> task = accounts_cookie_mutator()->SetAccountsInCookieForPartition( - this, parameters, + this, parameters, gaia::GaiaSource::kChrome, base::BindOnce( [](base::OnceClosure quit_closure, SetAccountsInCookieResult result) { @@ -436,7 +436,7 @@ {account_id, other_account_id}}; std::unique_ptr<AccountsCookieMutator::SetAccountsInCookieTask> task = accounts_cookie_mutator()->SetAccountsInCookieForPartition( - this, parameters, + this, parameters, gaia::GaiaSource::kChrome, base::BindOnce([](SetAccountsInCookieResult) { NOTREACHED(); })); task.reset(); }
diff --git a/components/signin/public/identity_manager/consent_level.h b/components/signin/public/identity_manager/consent_level.h index 9494ffe..23632cb 100644 --- a/components/signin/public/identity_manager/consent_level.h +++ b/components/signin/public/identity_manager/consent_level.h
@@ -12,9 +12,11 @@ // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.components.signin.identitymanager enum class ConsentLevel { // No specific consent required. In particular, browser sync consent is not - // required. Operations are allowed if the user is signed in to Chrome. See - // "unconsented primary account" in ./README.md. - kNotRequired, + // required. Operations are allowed if the user is signed in to Chrome. It is + // the responsibility of the client to ask for explicit user consent for any + // operation that requires information from the primary account. + // See "unconsented primary account" in ./README.md. + kSignin, // Chrome browser sync consent is required. Historically (before DICE and // Project Butter) most operations implicitly required this consent. See
diff --git a/components/signin/public/identity_manager/identity_manager.cc b/components/signin/public/identity_manager/identity_manager.cc index 2fea383..ff1a8f5c 100644 --- a/components/signin/public/identity_manager/identity_manager.cc +++ b/components/signin/public/identity_manager/identity_manager.cc
@@ -630,9 +630,9 @@ } void IdentityManager::OnAccountUpdated(const AccountInfo& info) { - if (HasPrimaryAccount(signin::ConsentLevel::kNotRequired)) { + if (HasPrimaryAccount(signin::ConsentLevel::kSignin)) { const CoreAccountId primary_account_id = - GetPrimaryAccountId(ConsentLevel::kNotRequired); + GetPrimaryAccountId(ConsentLevel::kSignin); if (primary_account_id == info.account_id) { primary_account_manager_->UpdatePrimaryAccountInfo(); }
diff --git a/components/signin/public/identity_manager/identity_manager_unittest.cc b/components/signin/public/identity_manager/identity_manager_unittest.cc index 8d938f69..051122ac 100644 --- a/components/signin/public/identity_manager/identity_manager_unittest.cc +++ b/components/signin/public/identity_manager/identity_manager_unittest.cc
@@ -532,8 +532,8 @@ EXPECT_EQ(kTestEmail, primary_account_info.email); // Primary account is by definition also unconsented primary account. - EXPECT_EQ(primary_account_info, identity_manager()->GetPrimaryAccountInfo( - ConsentLevel::kNotRequired)); + EXPECT_EQ(primary_account_info, + identity_manager()->GetPrimaryAccountInfo(ConsentLevel::kSignin)); // There is no guarantee that this will be notified via callback on startup. } @@ -550,7 +550,7 @@ EXPECT_EQ(PrimaryAccountChangeEvent::Type::kSet, event.GetEventTypeFor(ConsentLevel::kSync)); EXPECT_EQ(PrimaryAccountChangeEvent::Type::kSet, - event.GetEventTypeFor(ConsentLevel::kNotRequired)); + event.GetEventTypeFor(ConsentLevel::kSignin)); CoreAccountInfo primary_account_from_set_callback = event.GetCurrentState().primary_account; @@ -563,8 +563,8 @@ EXPECT_EQ(kTestEmail, primary_account_info.email); // Primary account is by definition also unconsented primary account. - EXPECT_EQ(primary_account_info, identity_manager()->GetPrimaryAccountInfo( - ConsentLevel::kNotRequired)); + EXPECT_EQ(primary_account_info, + identity_manager()->GetPrimaryAccountInfo(ConsentLevel::kSignin)); CoreAccountId primary_account_id = identity_manager()->GetPrimaryAccountId(signin::ConsentLevel::kSync); @@ -572,7 +572,7 @@ EXPECT_EQ(primary_account_id, primary_account_info.account_id); EXPECT_EQ(primary_account_id, identity_manager()->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired)); + signin::ConsentLevel::kSignin)); } // Test that the user signing out results in firing of the IdentityManager @@ -590,7 +590,7 @@ EXPECT_EQ(PrimaryAccountChangeEvent::Type::kCleared, event.GetEventTypeFor(ConsentLevel::kSync)); EXPECT_EQ(PrimaryAccountChangeEvent::Type::kCleared, - event.GetEventTypeFor(ConsentLevel::kNotRequired)); + event.GetEventTypeFor(ConsentLevel::kSignin)); CoreAccountInfo primary_account_from_cleared_callback = event.GetPreviousState().primary_account; @@ -599,22 +599,22 @@ // After the sign-out, there is no unconsented primary account. EXPECT_TRUE(identity_manager() - ->GetPrimaryAccountInfo(ConsentLevel::kNotRequired) + ->GetPrimaryAccountInfo(ConsentLevel::kSignin) .IsEmpty()); CoreAccountInfo primary_account_info = identity_manager()->GetPrimaryAccountInfo(signin::ConsentLevel::kSync); EXPECT_EQ("", primary_account_info.gaia); EXPECT_EQ("", primary_account_info.email); - EXPECT_EQ(primary_account_info, identity_manager()->GetPrimaryAccountInfo( - ConsentLevel::kNotRequired)); + EXPECT_EQ(primary_account_info, + identity_manager()->GetPrimaryAccountInfo(ConsentLevel::kSignin)); CoreAccountId primary_account_id = identity_manager()->GetPrimaryAccountId(signin::ConsentLevel::kSync); EXPECT_TRUE(primary_account_id.empty()); EXPECT_EQ(primary_account_id, primary_account_info.account_id); EXPECT_EQ(primary_account_id, identity_manager()->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired)); + signin::ConsentLevel::kSignin)); } // Test that the primary account's core info remains tracked by the @@ -639,22 +639,21 @@ EXPECT_EQ(kTestGaiaId, primary_account_info.gaia); EXPECT_EQ(kTestEmail, primary_account_info.email); EXPECT_EQ(CoreAccountId(kTestGaiaId), primary_account_info.account_id); - EXPECT_EQ(primary_account_info, identity_manager()->GetPrimaryAccountInfo( - ConsentLevel::kNotRequired)); + EXPECT_EQ(primary_account_info, + identity_manager()->GetPrimaryAccountInfo(ConsentLevel::kSignin)); CoreAccountId primary_account_id = identity_manager()->GetPrimaryAccountId(signin::ConsentLevel::kSync); EXPECT_EQ(primary_account_id, CoreAccountId(kTestGaiaId)); - EXPECT_EQ(primary_account_id, identity_manager()->GetPrimaryAccountId( - ConsentLevel::kNotRequired)); + EXPECT_EQ(primary_account_id, + identity_manager()->GetPrimaryAccountId(ConsentLevel::kSignin)); } #endif // !BUILDFLAG(IS_CHROMEOS_ASH) TEST_F(IdentityManagerTest, HasPrimaryAccount) { EXPECT_TRUE( identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSync)); - EXPECT_TRUE( - identity_manager()->HasPrimaryAccount(ConsentLevel::kNotRequired)); + EXPECT_TRUE(identity_manager()->HasPrimaryAccount(ConsentLevel::kSignin)); // Removing the account from the AccountTrackerService should not cause // IdentityManager to think that there is no longer a primary account. @@ -662,8 +661,7 @@ identity_manager()->GetPrimaryAccountId(signin::ConsentLevel::kSync)); EXPECT_TRUE( identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSync)); - EXPECT_TRUE( - identity_manager()->HasPrimaryAccount(ConsentLevel::kNotRequired)); + EXPECT_TRUE(identity_manager()->HasPrimaryAccount(ConsentLevel::kSignin)); #if !BUILDFLAG(IS_CHROMEOS_ASH) // Signing out should cause IdentityManager to recognize that there is no @@ -671,8 +669,7 @@ ClearPrimaryAccount(identity_manager()); EXPECT_FALSE( identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSync)); - EXPECT_FALSE( - identity_manager()->HasPrimaryAccount(ConsentLevel::kNotRequired)); + EXPECT_FALSE(identity_manager()->HasPrimaryAccount(ConsentLevel::kSignin)); EXPECT_FALSE(identity_manager_observer() ->GetPrimaryAccountChangedEvent() .GetPreviousState() @@ -928,10 +925,9 @@ ->GetPrimaryAccountInfo(signin::ConsentLevel::kSync) .email, kTestEmail); - EXPECT_EQ(identity_manager() - ->GetPrimaryAccountInfo(ConsentLevel::kNotRequired) - .email, - kTestEmail); + EXPECT_EQ( + identity_manager()->GetPrimaryAccountInfo(ConsentLevel::kSignin).email, + kTestEmail); // Add a refresh token for the primary account and check that it // also shows up in GetAccountsWithRefreshTokens(). @@ -957,10 +953,9 @@ ->GetPrimaryAccountInfo(signin::ConsentLevel::kSync) .email, kTestEmail); - EXPECT_EQ(identity_manager() - ->GetPrimaryAccountInfo(ConsentLevel::kNotRequired) - .email, - kTestEmail); + EXPECT_EQ( + identity_manager()->GetPrimaryAccountInfo(ConsentLevel::kSignin).email, + kTestEmail); // Remove the token for the primary account and check that account2 is still // present. @@ -981,10 +976,9 @@ ->GetPrimaryAccountInfo(signin::ConsentLevel::kSync) .email, kTestEmail); - EXPECT_EQ(identity_manager() - ->GetPrimaryAccountInfo(ConsentLevel::kNotRequired) - .email, - kTestEmail); + EXPECT_EQ( + identity_manager()->GetPrimaryAccountInfo(ConsentLevel::kSignin).email, + kTestEmail); } TEST_F( @@ -992,8 +986,7 @@ HasPrimaryAccountWithRefreshTokenInteractionBetweenPrimaryAndSecondaryAccounts) { EXPECT_FALSE(identity_manager()->HasPrimaryAccountWithRefreshToken( signin::ConsentLevel::kSync)); - EXPECT_TRUE( - identity_manager()->HasPrimaryAccount(ConsentLevel::kNotRequired)); + EXPECT_TRUE(identity_manager()->HasPrimaryAccount(ConsentLevel::kSignin)); // Add a refresh token for a secondary account and check that it doesn't // impact the above state. @@ -1004,8 +997,7 @@ EXPECT_FALSE(identity_manager()->HasPrimaryAccountWithRefreshToken( signin::ConsentLevel::kSync)); - EXPECT_TRUE( - identity_manager()->HasPrimaryAccount(ConsentLevel::kNotRequired)); + EXPECT_TRUE(identity_manager()->HasPrimaryAccount(ConsentLevel::kSignin)); // Add a refresh token for the primary account and check that it // *does* impact the stsate of @@ -1014,8 +1006,7 @@ EXPECT_TRUE(identity_manager()->HasPrimaryAccountWithRefreshToken( signin::ConsentLevel::kSync)); - EXPECT_TRUE( - identity_manager()->HasPrimaryAccount(ConsentLevel::kNotRequired)); + EXPECT_TRUE(identity_manager()->HasPrimaryAccount(ConsentLevel::kSignin)); // Remove the token for the secondary account and check that this doesn't flip // the state. @@ -1023,8 +1014,7 @@ EXPECT_TRUE(identity_manager()->HasPrimaryAccountWithRefreshToken( signin::ConsentLevel::kSync)); - EXPECT_TRUE( - identity_manager()->HasPrimaryAccount(ConsentLevel::kNotRequired)); + EXPECT_TRUE(identity_manager()->HasPrimaryAccount(ConsentLevel::kSignin)); // Remove the token for the primary account and check that this flips the // state. @@ -1032,8 +1022,7 @@ EXPECT_FALSE(identity_manager()->HasPrimaryAccountWithRefreshToken( signin::ConsentLevel::kSync)); - EXPECT_TRUE( - identity_manager()->HasPrimaryAccount(ConsentLevel::kNotRequired)); + EXPECT_TRUE(identity_manager()->HasPrimaryAccount(ConsentLevel::kSignin)); } TEST_F( @@ -1542,9 +1531,8 @@ identity_manager()->GetPrimaryAccountInfo(signin::ConsentLevel::kSync); EXPECT_EQ(kTestGaiaId, primary_account_info.gaia); EXPECT_EQ(kTestEmailWithPeriod, primary_account_info.email); - EXPECT_EQ( - identity_manager()->GetPrimaryAccountInfo(ConsentLevel::kNotRequired), - primary_account_info); + EXPECT_EQ(identity_manager()->GetPrimaryAccountInfo(ConsentLevel::kSignin), + primary_account_info); } #endif
diff --git a/components/signin/public/identity_manager/identity_mutator.cc b/components/signin/public/identity_manager/identity_mutator.cc index 544fd38..fe5b5bac 100644 --- a/components/signin/public/identity_manager/identity_mutator.cc +++ b/components/signin/public/identity_manager/identity_mutator.cc
@@ -35,7 +35,7 @@ case ConsentLevel::kSync: return primary_account_mutator->SetPrimaryAccount( ConvertFromJavaCoreAccountId(env, primary_account_id)); - case ConsentLevel::kNotRequired: + case ConsentLevel::kSignin: primary_account_mutator->SetUnconsentedPrimaryAccount( ConvertFromJavaCoreAccountId(env, primary_account_id)); return true;
diff --git a/components/signin/public/identity_manager/identity_test_environment.cc b/components/signin/public/identity_manager/identity_test_environment.cc index c186f5f..80e3f17 100644 --- a/components/signin/public/identity_manager/identity_test_environment.cc +++ b/components/signin/public/identity_manager/identity_test_environment.cc
@@ -396,7 +396,7 @@ AccountInfo IdentityTestEnvironment::MakeUnconsentedPrimaryAccountAvailable( const std::string& email) { - DCHECK(!identity_manager()->HasPrimaryAccount(ConsentLevel::kNotRequired)); + DCHECK(!identity_manager()->HasPrimaryAccount(ConsentLevel::kSignin)); #if BUILDFLAG(IS_CHROMEOS_ASH) // Chrome OS sets the unconsented primary account during login and does not // allow signout. @@ -413,16 +413,16 @@ base::RunLoop().RunUntilIdle(); // Tests that don't use the |SigninManager| needs the unconsented primary // account to be set manually. - if (!identity_manager()->HasPrimaryAccount(ConsentLevel::kNotRequired)) { + if (!identity_manager()->HasPrimaryAccount(ConsentLevel::kSignin)) { identity_manager() ->GetPrimaryAccountMutator() ->SetUnconsentedPrimaryAccount(account_info.account_id); } #endif - DCHECK(identity_manager()->HasPrimaryAccount(ConsentLevel::kNotRequired)); - DCHECK_EQ(email, identity_manager() - ->GetPrimaryAccountInfo(ConsentLevel::kNotRequired) - .email); + DCHECK(identity_manager()->HasPrimaryAccount(ConsentLevel::kSignin)); + DCHECK_EQ( + email, + identity_manager()->GetPrimaryAccountInfo(ConsentLevel::kSignin).email); return account_info; }
diff --git a/components/signin/public/identity_manager/identity_test_environment.h b/components/signin/public/identity_manager/identity_test_environment.h index 5c2b86a..b1e5512 100644 --- a/components/signin/public/identity_manager/identity_test_environment.h +++ b/components/signin/public/identity_manager/identity_test_environment.h
@@ -159,7 +159,7 @@ const std::string& gaia_id); // Revokes sync consent from the primary account: the primary account is left - // at ConsentLevel::kNotRequired. + // at ConsentLevel::kSignin. void RevokeSyncConsent(); // Clears the primary account, removes all accounts and revokes the sync
diff --git a/components/signin/public/identity_manager/identity_test_utils.cc b/components/signin/public/identity_manager/identity_test_utils.cc index 6997489..f710b17d 100644 --- a/components/signin/public/identity_manager/identity_test_utils.cc +++ b/components/signin/public/identity_manager/identity_test_utils.cc
@@ -135,7 +135,7 @@ CoreAccountInfo SetUnconsentedPrimaryAccount(IdentityManager* identity_manager, const std::string& email) { - DCHECK(!identity_manager->HasPrimaryAccount(ConsentLevel::kNotRequired)); + DCHECK(!identity_manager->HasPrimaryAccount(ConsentLevel::kSignin)); AccountInfo account_info = EnsureAccountExists(identity_manager->GetAccountTrackerService(), email); @@ -145,13 +145,12 @@ identity_manager->GetPrimaryAccountManager(); primary_account_manager->SetUnconsentedPrimaryAccountInfo(account_info); - DCHECK(identity_manager->HasPrimaryAccount(ConsentLevel::kNotRequired)); - DCHECK_EQ(account_info.gaia, - identity_manager - ->GetPrimaryAccountInfo(signin::ConsentLevel::kNotRequired) - .gaia); - return identity_manager->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + DCHECK(identity_manager->HasPrimaryAccount(ConsentLevel::kSignin)); + DCHECK_EQ( + account_info.gaia, + identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin) + .gaia); + return identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin); } void SetRefreshTokenForPrimaryAccount(IdentityManager* identity_manager, @@ -223,7 +222,7 @@ // synchronously with IdentityManager. NOTREACHED(); #else - if (!identity_manager->HasPrimaryAccount(ConsentLevel::kNotRequired)) + if (!identity_manager->HasPrimaryAccount(ConsentLevel::kSignin)) return; DCHECK(identity_manager->GetPrimaryAccountMutator()); @@ -233,7 +232,7 @@ TestIdentityManagerObserver signout_observer(identity_manager); signout_observer.SetOnPrimaryAccountChangedCallback(base::BindOnce( [](base::RunLoop* run_loop, PrimaryAccountChangeEvent event) { - if (event.GetEventTypeFor(ConsentLevel::kNotRequired) == + if (event.GetEventTypeFor(ConsentLevel::kSignin) == PrimaryAccountChangeEvent::Type::kCleared) { run_loop->Quit(); }
diff --git a/components/signin/public/identity_manager/identity_test_utils.h b/components/signin/public/identity_manager/identity_test_utils.h index 6cb4044..815a4a4 100644 --- a/components/signin/public/identity_manager/identity_test_utils.h +++ b/components/signin/public/identity_manager/identity_test_utils.h
@@ -76,7 +76,7 @@ const std::string& email); // Revokes sync consent from the primary account: the primary account is left -// at ConsentLevel::kNotRequired. +// at ConsentLevel::kSignin. // NOTE: See disclaimer at top of file re: direct usage. void RevokeSyncConsent(IdentityManager* identity_manager);
diff --git a/components/signin/public/identity_manager/primary_account_access_token_fetcher_unittest.cc b/components/signin/public/identity_manager/primary_account_access_token_fetcher_unittest.cc index 7d96d79..d3aaae7 100644 --- a/components/signin/public/identity_manager/primary_account_access_token_fetcher_unittest.cc +++ b/components/signin/public/identity_manager/primary_account_access_token_fetcher_unittest.cc
@@ -449,7 +449,7 @@ // whether or not sync consent is required. INSTANTIATE_TEST_SUITE_P(All, PrimaryAccountAccessTokenFetcherTest, - testing::Values(ConsentLevel::kNotRequired, + testing::Values(ConsentLevel::kSignin, ConsentLevel::kSync)); #if BUILDFLAG(IS_CHROMEOS_ASH) @@ -465,7 +465,7 @@ // Perform an immediate fetch with consent not required. auto fetcher = CreateFetcher( callback.Get(), PrimaryAccountAccessTokenFetcher::Mode::kImmediate, - ConsentLevel::kNotRequired); + ConsentLevel::kSignin); // We should get called back with the token. EXPECT_CALL(callback, Run(GoogleServiceAuthError::AuthErrorNone(), @@ -499,7 +499,7 @@ auto fetcher = CreateFetcher(callback.Get(), PrimaryAccountAccessTokenFetcher::Mode::kWaitUntilAvailable, - ConsentLevel::kNotRequired); + ConsentLevel::kSignin); EXPECT_FALSE(identity_test_env()->IsAccessTokenRequestPending()); // Simulate login.
diff --git a/components/signin/public/identity_manager/primary_account_change_event.cc b/components/signin/public/identity_manager/primary_account_change_event.cc index 1380a620..3c7c7d2 100644 --- a/components/signin/public/identity_manager/primary_account_change_event.cc +++ b/components/signin/public/identity_manager/primary_account_change_event.cc
@@ -52,7 +52,7 @@ !previous_state_.primary_account.IsEmpty()); switch (consent_level) { - case ConsentLevel::kNotRequired: + case ConsentLevel::kSignin: if (previous_state_.primary_account != current_state_.primary_account) { return current_state_.primary_account.IsEmpty() ? Type::kCleared : Type::kSet; @@ -66,7 +66,7 @@ } // Cannot change the Sync account without clearing the primary account // first. - DCHECK_EQ(current_state_.consent_level, ConsentLevel::kNotRequired); + DCHECK_EQ(current_state_.consent_level, ConsentLevel::kSignin); return Type::kNone; } } @@ -91,8 +91,7 @@ const PrimaryAccountChangeEvent::State& state) { os << "{ primary_account: " << state.primary_account.account_id << ", " << "consent_level:" - << (state.consent_level == ConsentLevel::kNotRequired ? "NotRequired" - : "Sync") + << (state.consent_level == ConsentLevel::kSignin ? "NotRequired" : "Sync") << " }"; return os; } @@ -110,7 +109,7 @@ JNIEnv* env, const PrimaryAccountChangeEvent& event_details) { PrimaryAccountChangeEvent::Type event_type_not_required = - event_details.GetEventTypeFor(ConsentLevel::kNotRequired); + event_details.GetEventTypeFor(ConsentLevel::kSignin); PrimaryAccountChangeEvent::Type event_type_sync = event_details.GetEventTypeFor(ConsentLevel::kSync); // Should not fire events if there is no change in primary accounts for any
diff --git a/components/signin/public/identity_manager/primary_account_change_event.h b/components/signin/public/identity_manager/primary_account_change_event.h index 0be4251..edc4639b 100644 --- a/components/signin/public/identity_manager/primary_account_change_event.h +++ b/components/signin/public/identity_manager/primary_account_change_event.h
@@ -36,7 +36,7 @@ State& operator=(const State& other); CoreAccountInfo primary_account; - ConsentLevel consent_level = ConsentLevel::kNotRequired; + ConsentLevel consent_level = ConsentLevel::kSignin; }; PrimaryAccountChangeEvent();
diff --git a/components/signin/public/identity_manager/primary_account_change_event_unittest.cc b/components/signin/public/identity_manager/primary_account_change_event_unittest.cc index 33866c8..01cbe36 100644 --- a/components/signin/public/identity_manager/primary_account_change_event_unittest.cc +++ b/components/signin/public/identity_manager/primary_account_change_event_unittest.cc
@@ -18,9 +18,9 @@ CoreAccountInfo account_info1 = GetCoreAccountInfoFrom("account1@test.com"); CoreAccountInfo account_info2 = GetCoreAccountInfoFrom("account2@test.com"); - empty_not_required_ = State(CoreAccountInfo(), ConsentLevel::kNotRequired); - account1_not_required_ = State(account_info1, ConsentLevel::kNotRequired); - account2_not_required_ = State(account_info2, ConsentLevel::kNotRequired); + empty_not_required_ = State(CoreAccountInfo(), ConsentLevel::kSignin); + account1_not_required_ = State(account_info1, ConsentLevel::kSignin); + account2_not_required_ = State(account_info2, ConsentLevel::kSignin); account1_sync_ = State(account_info1, ConsentLevel::kSync); account2_sync_ = State(account_info2, ConsentLevel::kSync); } @@ -43,56 +43,56 @@ TEST_F(PrimaryAccountChangeEventTest, NoStateChange) { PrimaryAccountChangeEvent event(empty_not_required_, empty_not_required_); - EXPECT_EQ(Type::kNone, event.GetEventTypeFor(ConsentLevel::kNotRequired)); + EXPECT_EQ(Type::kNone, event.GetEventTypeFor(ConsentLevel::kSignin)); EXPECT_EQ(Type::kNone, event.GetEventTypeFor(ConsentLevel::kSync)); event = PrimaryAccountChangeEvent(account1_not_required_, account1_not_required_); - EXPECT_EQ(Type::kNone, event.GetEventTypeFor(ConsentLevel::kNotRequired)); + EXPECT_EQ(Type::kNone, event.GetEventTypeFor(ConsentLevel::kSignin)); EXPECT_EQ(Type::kNone, event.GetEventTypeFor(ConsentLevel::kSync)); event = PrimaryAccountChangeEvent(account1_sync_, account1_sync_); - EXPECT_EQ(Type::kNone, event.GetEventTypeFor(ConsentLevel::kNotRequired)); + EXPECT_EQ(Type::kNone, event.GetEventTypeFor(ConsentLevel::kSignin)); EXPECT_EQ(Type::kNone, event.GetEventTypeFor(ConsentLevel::kSync)); } TEST_F(PrimaryAccountChangeEventTest, ConsentLevelChangeFromNotRequiredToNotRequired) { PrimaryAccountChangeEvent event(empty_not_required_, account1_not_required_); - EXPECT_EQ(Type::kSet, event.GetEventTypeFor(ConsentLevel::kNotRequired)); + EXPECT_EQ(Type::kSet, event.GetEventTypeFor(ConsentLevel::kSignin)); EXPECT_EQ(Type::kNone, event.GetEventTypeFor(ConsentLevel::kSync)); event = PrimaryAccountChangeEvent(account1_not_required_, account2_not_required_); - EXPECT_EQ(Type::kSet, event.GetEventTypeFor(ConsentLevel::kNotRequired)); + EXPECT_EQ(Type::kSet, event.GetEventTypeFor(ConsentLevel::kSignin)); EXPECT_EQ(Type::kNone, event.GetEventTypeFor(ConsentLevel::kSync)); event = PrimaryAccountChangeEvent(account1_not_required_, empty_not_required_); - EXPECT_EQ(Type::kCleared, event.GetEventTypeFor(ConsentLevel::kNotRequired)); + EXPECT_EQ(Type::kCleared, event.GetEventTypeFor(ConsentLevel::kSignin)); EXPECT_EQ(Type::kNone, event.GetEventTypeFor(ConsentLevel::kSync)); } TEST_F(PrimaryAccountChangeEventTest, ConsentLevelChangeFromNotRequiredToSync) { PrimaryAccountChangeEvent event(empty_not_required_, account1_sync_); - EXPECT_EQ(Type::kSet, event.GetEventTypeFor(ConsentLevel::kNotRequired)); + EXPECT_EQ(Type::kSet, event.GetEventTypeFor(ConsentLevel::kSignin)); EXPECT_EQ(Type::kSet, event.GetEventTypeFor(ConsentLevel::kSync)); event = PrimaryAccountChangeEvent(account1_not_required_, account1_sync_); - EXPECT_EQ(Type::kNone, event.GetEventTypeFor(ConsentLevel::kNotRequired)); + EXPECT_EQ(Type::kNone, event.GetEventTypeFor(ConsentLevel::kSignin)); EXPECT_EQ(Type::kSet, event.GetEventTypeFor(ConsentLevel::kSync)); event = PrimaryAccountChangeEvent(account1_not_required_, account2_sync_); - EXPECT_EQ(Type::kSet, event.GetEventTypeFor(ConsentLevel::kNotRequired)); + EXPECT_EQ(Type::kSet, event.GetEventTypeFor(ConsentLevel::kSignin)); EXPECT_EQ(Type::kSet, event.GetEventTypeFor(ConsentLevel::kSync)); } TEST_F(PrimaryAccountChangeEventTest, ConsentLevelChangeFromSyncToNotRequired) { PrimaryAccountChangeEvent event(account1_sync_, account1_not_required_); - EXPECT_EQ(Type::kNone, event.GetEventTypeFor(ConsentLevel::kNotRequired)); + EXPECT_EQ(Type::kNone, event.GetEventTypeFor(ConsentLevel::kSignin)); EXPECT_EQ(Type::kCleared, event.GetEventTypeFor(ConsentLevel::kSync)); event = PrimaryAccountChangeEvent(account1_sync_, empty_not_required_); - EXPECT_EQ(Type::kCleared, event.GetEventTypeFor(ConsentLevel::kNotRequired)); + EXPECT_EQ(Type::kCleared, event.GetEventTypeFor(ConsentLevel::kSignin)); EXPECT_EQ(Type::kCleared, event.GetEventTypeFor(ConsentLevel::kSync)); }
diff --git a/components/signin/public/identity_manager/primary_account_mutator.h b/components/signin/public/identity_manager/primary_account_mutator.h index 05ee706..9695b599 100644 --- a/components/signin/public/identity_manager/primary_account_mutator.h +++ b/components/signin/public/identity_manager/primary_account_mutator.h
@@ -60,9 +60,9 @@ // Revokes sync consent from the primary account. We distinguish the following // cases: - // a. If transitioning from ConsentLevel::kSync to ConsentLevel::kNotRequired + // a. If transitioning from ConsentLevel::kSync to ConsentLevel::kSignin // is supported (e.g. for DICE), then this method only revokes the sync - // consent and the primary account is left at ConsentLevel::kNotRequired + // consent and the primary account is left at ConsentLevel::kSignin // level. // b. Otherwise this method revokes the sync consent and it also clears the // primary account and removes all other accounts via a call to
diff --git a/components/sync/driver/profile_sync_service.cc b/components/sync/driver/profile_sync_service.cc index 74c915f..18306eb 100644 --- a/components/sync/driver/profile_sync_service.cc +++ b/components/sync/driver/profile_sync_service.cc
@@ -896,8 +896,8 @@ DCHECK(account_mutator); // Note: On some platforms, revoking the sync consent will also clear - // the primary account as transitioning from ConsentLevel::kSync - // ConsentLevel::kNotRequired is not supported. + // the primary account as transitioning from ConsentLevel::kSync to + // ConsentLevel::kSignin is not supported. account_mutator->RevokeSyncConsent( signin_metrics::SERVER_FORCED_DISABLE, signin_metrics::SignoutDelete::IGNORE_METRIC);
diff --git a/components/sync/driver/sync_auth_util.cc b/components/sync/driver/sync_auth_util.cc index 4812e69..2ce97ded88 100644 --- a/components/sync/driver/sync_auth_util.cc +++ b/components/sync/driver/sync_auth_util.cc
@@ -22,10 +22,10 @@ SyncAccountInfo DetermineAccountToUse( signin::IdentityManager* identity_manager) { - return SyncAccountInfo(identity_manager->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired), - /*is_primary=*/identity_manager->HasPrimaryAccount( - signin::ConsentLevel::kSync)); + return SyncAccountInfo( + identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin), + /*is_primary=*/identity_manager->HasPrimaryAccount( + signin::ConsentLevel::kSync)); } bool IsWebSignout(const GoogleServiceAuthError& auth_error) {
diff --git a/components/sync/trusted_vault/standalone_trusted_vault_client.cc b/components/sync/trusted_vault/standalone_trusted_vault_client.cc index a6ecde4..9040c2d 100644 --- a/components/sync/trusted_vault/standalone_trusted_vault_client.cc +++ b/components/sync/trusted_vault/standalone_trusted_vault_client.cc
@@ -91,8 +91,8 @@ } void PrimaryAccountObserver::UpdatePrimaryAccountIfNeeded() { - CoreAccountInfo primary_account = identity_manager_->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + CoreAccountInfo primary_account = + identity_manager_->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin); if (primary_account == primary_account_) { return; }
diff --git a/components/sync/trusted_vault/trusted_vault_access_token_fetcher_frontend.cc b/components/sync/trusted_vault/trusted_vault_access_token_fetcher_frontend.cc index 3a329d8ed..0c09c3af 100644 --- a/components/sync/trusted_vault/trusted_vault_access_token_fetcher_frontend.cc +++ b/components/sync/trusted_vault/trusted_vault_access_token_fetcher_frontend.cc
@@ -57,8 +57,7 @@ void TrustedVaultAccessTokenFetcherFrontend::UpdatePrimaryAccountIfNeeded() { CoreAccountInfo primary_account_info = - identity_manager_->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired); + identity_manager_->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin); if (primary_account_info.account_id == primary_account_) { return; } @@ -80,7 +79,7 @@ &TrustedVaultAccessTokenFetcherFrontend::OnAccessTokenFetchCompleted, base::Unretained(this)), signin::PrimaryAccountAccessTokenFetcher::Mode::kWaitUntilAvailable, - signin::ConsentLevel::kNotRequired); + signin::ConsentLevel::kSignin); } void TrustedVaultAccessTokenFetcherFrontend::OnAccessTokenFetchCompleted(
diff --git a/content/browser/android/dialog_overlay_impl.cc b/content/browser/android/dialog_overlay_impl.cc index bebfde3..c5a9547e 100644 --- a/content/browser/android/dialog_overlay_impl.cc +++ b/content/browser/android/dialog_overlay_impl.cc
@@ -82,6 +82,9 @@ JNIEnv* env = AttachCurrentThread(); obj_ = JavaObjectWeakGlobalRef(env, obj); + // Make sure RenderFrameDeleted will be called on RFH and thus we will clean + // up. + DCHECK(rfhi_->IsRenderFrameCreated()); web_contents->GetNativeView()->AddObserver(this); // Note that we're not allowed to call back into |obj| before it calls @@ -186,12 +189,6 @@ Stop(); } -void DialogOverlayImpl::FrameDeleted(RenderFrameHost* render_frame_host) { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - if (render_frame_host == rfhi_) - Stop(); -} - void DialogOverlayImpl::OnVisibilityChanged(content::Visibility visibility) { DCHECK_CURRENTLY_ON(BrowserThread::UI); if (visibility == content::Visibility::HIDDEN)
diff --git a/content/browser/android/dialog_overlay_impl.h b/content/browser/android/dialog_overlay_impl.h index 353b5b96..1912e5e 100644 --- a/content/browser/android/dialog_overlay_impl.h +++ b/content/browser/android/dialog_overlay_impl.h
@@ -57,7 +57,6 @@ void WebContentsDestroyed() override; void DidToggleFullscreenModeForTab(bool entered_fullscreen, bool will_cause_resize) override; - void FrameDeleted(RenderFrameHost* render_frame_host) override; void RenderFrameDeleted(RenderFrameHost* render_frame_host) override; void RenderFrameHostChanged(RenderFrameHost* old_host, RenderFrameHost* new_host) override;
diff --git a/content/browser/browser_interface_binders.cc b/content/browser/browser_interface_binders.cc index 2744432..6b72b46 100644 --- a/content/browser/browser_interface_binders.cc +++ b/content/browser/browser_interface_binders.cc
@@ -84,6 +84,7 @@ #include "services/metrics/public/mojom/ukm_interface.mojom.h" #include "services/metrics/ukm_recorder_interface.h" #include "services/network/public/cpp/cross_origin_embedder_policy.h" +#include "services/network/public/mojom/p2p.mojom.h" #include "services/network/public/mojom/restricted_cookie_manager.mojom.h" #include "services/shape_detection/public/mojom/barcodedetection_provider.mojom.h" #include "services/shape_detection/public/mojom/facedetection_provider.mojom.h" @@ -552,6 +553,14 @@ GetDeviceService().BindVibrationManager(std::move(receiver)); } +void BindSocketManager( + RenderFrameHostImpl* frame, + mojo::PendingReceiver<network::mojom::P2PSocketManager> receiver) { + static_cast<RenderProcessHostImpl*>(frame->GetProcess()) + ->BindP2PSocketManager(frame->GetNetworkIsolationKey(), + std::move(receiver)); +} + } // namespace // Documents/frames @@ -621,6 +630,9 @@ map->Add<blink::mojom::NotificationService>(base::BindRepeating( &RenderFrameHostImpl::CreateNotificationService, base::Unretained(host))); + map->Add<network::mojom::P2PSocketManager>( + base::BindRepeating(&BindSocketManager, base::Unretained(host))); + map->Add<blink::mojom::PeerConnectionTrackerHost>( base::BindRepeating(&RenderFrameHostImpl::BindPeerConnectionTrackerHost, base::Unretained(host)));
diff --git a/content/browser/prerender/prerender_browsertest.cc b/content/browser/prerender/prerender_browsertest.cc index 92c8d3c..9a5dfcc2 100644 --- a/content/browser/prerender/prerender_browsertest.cc +++ b/content/browser/prerender/prerender_browsertest.cc
@@ -1401,7 +1401,6 @@ } // Tests that prerendering is gated behind CSP:prefetch-src -// TODO(https://crbug.com/1185679) This is currently not the case. Fix this. IN_PROC_BROWSER_TEST_P(PrerenderBrowserTest, CSPPrefetchSrc) { GURL initial_url = GetUrl("/prerender/add_prerender.html"); ASSERT_TRUE(NavigateToURL(shell(), initial_url)); @@ -1410,38 +1409,41 @@ EXPECT_TRUE(ExecJs(current_frame_host(), R"( const meta = document.createElement('meta'); meta.httpEquiv = "Content-Security-Policy"; - meta.content = "prefetch-src */empty.html"; + meta.content = "prefetch-src https://a.test:*/empty.html"; document.getElementsByTagName('head')[0].appendChild(meta); )")); const char* kConsolePattern = "Refused to prefetch content from " - "'https://a.test:*/prerender/add_prerender.html' because it violates the " + "'https://a.test:*/*.html' because it violates the " "following Content Security Policy directive: \"prefetch-src " - "*/empty.html\"*"; + "https://a.test:*/empty.html\"*"; // Check what happens when a prerendering is blocked: { GURL disallowed_url = GetUrl("/title1.html"); WebContentsConsoleObserver console_observer(web_contents()); console_observer.SetPattern(kConsolePattern); - PrerenderHostRegistryObserver observer(GetPrerenderHostRegistry()); - EXPECT_TRUE(ExecJs(shell()->web_contents(), - JsReplace("add_prerender($1)", disallowed_url))); - observer.WaitForTrigger(disallowed_url); - // TODO(https://crbug.com/1185679): This should be false: + // Prerender will fail, but PrerenderHost is not abandoned for navigation + // failures. PrerenderHost can be found in the registry, but the request + // should not reach the server. + AddPrerender(disallowed_url); + // TODO(https://crbug.com/1189602): Call AbandonHost even for CSP failure + // cases. Then FindHostByUrlForTesting() should return null. EXPECT_TRUE( GetPrerenderHostRegistry().FindHostByUrlForTesting(disallowed_url)); - // TODO(https://crbug.com/1185679): This should be 1. - EXPECT_EQ(0u, console_observer.messages().size()); + EXPECT_EQ(1u, console_observer.messages().size()); + EXPECT_EQ(GetRequestCount(disallowed_url), 0); } // Check what happens when prerendering isn't blocked. { WebContentsConsoleObserver console_observer(web_contents()); console_observer.SetPattern(kConsolePattern); - AddPrerender(GetUrl("/empty.html")); + GURL kAllowedUrl = GetUrl("/empty.html"); + AddPrerender(kAllowedUrl); EXPECT_EQ(0u, console_observer.messages().size()); + EXPECT_EQ(GetRequestCount(kAllowedUrl), 1); } }
diff --git a/content/browser/prerender/prerender_host.cc b/content/browser/prerender/prerender_host.cc index a9887cd94..76562a4 100644 --- a/content/browser/prerender/prerender_host.cc +++ b/content/browser/prerender/prerender_host.cc
@@ -335,10 +335,16 @@ PrerenderHost::PrerenderHost(blink::mojom::PrerenderAttributesPtr attributes, const url::Origin& initiator_origin, - WebContentsImpl& web_contents) - : attributes_(std::move(attributes)), initiator_origin_(initiator_origin) { + RenderFrameHostImpl& initiator_render_frame_host) + : attributes_(std::move(attributes)), + initiator_origin_(initiator_origin), + initiator_process_id_(initiator_render_frame_host.GetProcess()->GetID()), + initiator_frame_token_(initiator_render_frame_host.GetFrameToken()) { DCHECK(blink::features::IsPrerender2Enabled()); - CreatePageHolder(web_contents); + auto* web_contents = + WebContents::FromRenderFrameHost(&initiator_render_frame_host); + DCHECK(web_contents); + CreatePageHolder(*static_cast<WebContentsImpl*>(web_contents)); } // TODO(https://crbug.com/1132746): Abort ongoing prerendering and notify the @@ -363,6 +369,8 @@ // Start prerendering navigation. NavigationController::LoadURLParams load_url_params(attributes_->url); load_url_params.initiator_origin = initiator_origin_; + load_url_params.initiator_process_id = initiator_process_id_; + load_url_params.initiator_frame_token = initiator_frame_token_; // Just use the referrer from attributes, as NoStatePrefetch does. // TODO(crbug.com/1176054): For cross-origin prerender, follow the spec steps
diff --git a/content/browser/prerender/prerender_host.h b/content/browser/prerender/prerender_host.h index 1373e613..8fd347f 100644 --- a/content/browser/prerender/prerender_host.h +++ b/content/browser/prerender/prerender_host.h
@@ -15,6 +15,7 @@ #include "content/public/browser/global_routing_id.h" #include "content/public/browser/render_frame_host.h" #include "content/public/browser/web_contents_observer.h" +#include "third_party/blink/public/common/tokens/tokens.h" #include "third_party/blink/public/mojom/prerender/prerender.mojom.h" #include "url/gurl.h" @@ -67,7 +68,7 @@ PrerenderHost(blink::mojom::PrerenderAttributesPtr attributes, const url::Origin& initiator_origin, - WebContentsImpl& web_contents); + RenderFrameHostImpl& initiator_render_frame_host); ~PrerenderHost() override; PrerenderHost(const PrerenderHost&) = delete; @@ -142,8 +143,9 @@ NavigationController& GetNavigationController(); const blink::mojom::PrerenderAttributesPtr attributes_; - const GlobalFrameRoutingId initiator_render_frame_host_id_; const url::Origin initiator_origin_; + const int initiator_process_id_; + const blink::LocalFrameToken initiator_frame_token_; // Indicates if `page_holder_` is ready for activation. bool is_ready_for_activation_ = false;
diff --git a/content/browser/prerender/prerender_host_registry.cc b/content/browser/prerender/prerender_host_registry.cc index dd2e557..6f239e3 100644 --- a/content/browser/prerender/prerender_host_registry.cc +++ b/content/browser/prerender/prerender_host_registry.cc
@@ -37,8 +37,8 @@ int PrerenderHostRegistry::CreateAndStartHost( blink::mojom::PrerenderAttributesPtr attributes, - WebContentsImpl& web_contents, - const url::Origin& initiator_origin) { + const url::Origin& initiator_origin, + RenderFrameHostImpl& initiator_render_frame_host) { DCHECK(attributes); // Ensure observers are notified that a trigger occurred. @@ -67,7 +67,7 @@ return found->second; auto prerender_host = std::make_unique<PrerenderHost>( - std::move(attributes), initiator_origin, web_contents); + std::move(attributes), initiator_origin, initiator_render_frame_host); const int frame_tree_node_id = prerender_host->frame_tree_node_id(); CHECK(!base::Contains(prerender_host_by_frame_tree_node_id_,
diff --git a/content/browser/prerender/prerender_host_registry.h b/content/browser/prerender/prerender_host_registry.h index f0407d5..e0d4d95 100644 --- a/content/browser/prerender/prerender_host_registry.h +++ b/content/browser/prerender/prerender_host_registry.h
@@ -13,6 +13,7 @@ #include "content/browser/prerender/prerender_host.h" #include "content/browser/renderer_host/back_forward_cache_impl.h" #include "content/common/content_export.h" +#include "third_party/blink/public/common/tokens/tokens.h" #include "third_party/blink/public/mojom/prerender/prerender.mojom.h" #include "url/gurl.h" #include "url/origin.h" @@ -69,8 +70,8 @@ // Creates and starts a host. Returns the root frame tree node id of the // prerendered page, which can be used as the id of the host. int CreateAndStartHost(blink::mojom::PrerenderAttributesPtr attributes, - WebContentsImpl& web_contents, - const url::Origin& initiator_origin); + const url::Origin& initiator_origin, + RenderFrameHostImpl& initiator_render_frame_host); // For triggers. // Destroys the host registered for `frame_tree_node_id`.
diff --git a/content/browser/prerender/prerender_host_registry_unittest.cc b/content/browser/prerender/prerender_host_registry_unittest.cc index f1772db9..b6b6df7 100644 --- a/content/browser/prerender/prerender_host_registry_unittest.cc +++ b/content/browser/prerender/prerender_host_registry_unittest.cc
@@ -71,9 +71,9 @@ attributes->url = kPrerenderingUrl; PrerenderHostRegistry* registry = GetPrerenderHostRegistry(); - const int prerender_frame_tree_node_id = - registry->CreateAndStartHost(std::move(attributes), *web_contents, - render_frame_host->GetLastCommittedOrigin()); + const int prerender_frame_tree_node_id = registry->CreateAndStartHost( + std::move(attributes), render_frame_host->GetLastCommittedOrigin(), + *render_frame_host); ASSERT_NE(prerender_frame_tree_node_id, kNoFrameTreeNodeId); PrerenderHost* prerender_host = registry->FindHostByUrlForTesting(kPrerenderingUrl); @@ -104,17 +104,17 @@ attributes2->url = kPrerenderingUrl; PrerenderHostRegistry* registry = GetPrerenderHostRegistry(); - const int frame_tree_node_id1 = - registry->CreateAndStartHost(std::move(attributes1), *web_contents, - render_frame_host->GetLastCommittedOrigin()); + const int frame_tree_node_id1 = registry->CreateAndStartHost( + std::move(attributes1), render_frame_host->GetLastCommittedOrigin(), + *render_frame_host); PrerenderHost* prerender_host1 = registry->FindHostByUrlForTesting(kPrerenderingUrl); // Start the prerender host for the same URL. This second host should be // ignored, and the first host should still be findable. - const int frame_tree_node_id2 = - registry->CreateAndStartHost(std::move(attributes2), *web_contents, - render_frame_host->GetLastCommittedOrigin()); + const int frame_tree_node_id2 = registry->CreateAndStartHost( + std::move(attributes2), render_frame_host->GetLastCommittedOrigin(), + *render_frame_host); EXPECT_EQ(frame_tree_node_id1, frame_tree_node_id2); EXPECT_EQ(registry->FindHostByUrlForTesting(kPrerenderingUrl), prerender_host1); @@ -145,12 +145,12 @@ attributes2->url = kPrerenderingUrl2; PrerenderHostRegistry* registry = GetPrerenderHostRegistry(); - const int frame_tree_node_id1 = - registry->CreateAndStartHost(std::move(attributes1), *web_contents, - render_frame_host->GetLastCommittedOrigin()); - const int frame_tree_node_id2 = - registry->CreateAndStartHost(std::move(attributes2), *web_contents, - render_frame_host->GetLastCommittedOrigin()); + const int frame_tree_node_id1 = registry->CreateAndStartHost( + std::move(attributes1), render_frame_host->GetLastCommittedOrigin(), + *render_frame_host); + const int frame_tree_node_id2 = registry->CreateAndStartHost( + std::move(attributes2), render_frame_host->GetLastCommittedOrigin(), + *render_frame_host); EXPECT_NE(frame_tree_node_id1, frame_tree_node_id2); PrerenderHost* prerender_host1 = registry->FindHostByUrlForTesting(kPrerenderingUrl1); @@ -193,9 +193,9 @@ attributes->url = kPrerenderingUrl; PrerenderHostRegistry* registry = GetPrerenderHostRegistry(); - const int prerender_frame_tree_node_id = - registry->CreateAndStartHost(std::move(attributes), *web_contents, - render_frame_host->GetLastCommittedOrigin()); + const int prerender_frame_tree_node_id = registry->CreateAndStartHost( + std::move(attributes), render_frame_host->GetLastCommittedOrigin(), + *render_frame_host); ASSERT_NE(prerender_frame_tree_node_id, kNoFrameTreeNodeId); PrerenderHost* prerender_host = registry->FindHostByUrlForTesting(kPrerenderingUrl); @@ -220,9 +220,9 @@ attributes->url = kPrerenderingUrl; PrerenderHostRegistry* registry = GetPrerenderHostRegistry(); - const int prerender_frame_tree_node_id = - registry->CreateAndStartHost(std::move(attributes), *web_contents, - render_frame_host->GetLastCommittedOrigin()); + const int prerender_frame_tree_node_id = registry->CreateAndStartHost( + std::move(attributes), render_frame_host->GetLastCommittedOrigin(), + *render_frame_host); EXPECT_NE(registry->FindHostByUrlForTesting(kPrerenderingUrl), nullptr); registry->AbandonHost(prerender_frame_tree_node_id);
diff --git a/content/browser/prerender/prerender_host_unittest.cc b/content/browser/prerender/prerender_host_unittest.cc index 207217a..8eb9914 100644 --- a/content/browser/prerender/prerender_host_unittest.cc +++ b/content/browser/prerender/prerender_host_unittest.cc
@@ -118,9 +118,9 @@ const GURL kPrerenderingUrl("https://example.com/next"); auto attributes = blink::mojom::PrerenderAttributes::New(); attributes->url = kPrerenderingUrl; - const int prerender_frame_tree_node_id = - registry->CreateAndStartHost(std::move(attributes), *web_contents, - initiator_rfh->GetLastCommittedOrigin()); + const int prerender_frame_tree_node_id = registry->CreateAndStartHost( + std::move(attributes), initiator_rfh->GetLastCommittedOrigin(), + *initiator_rfh); PrerenderHost* prerender_host = registry->FindHostById(prerender_frame_tree_node_id); @@ -164,9 +164,9 @@ attributes->url = kPrerenderingUrl; // Start the prerendering navigation, but don't activate it. - const int prerender_frame_tree_node_id = - registry->CreateAndStartHost(std::move(attributes), *web_contents, - initiator_rfh->GetLastCommittedOrigin()); + const int prerender_frame_tree_node_id = registry->CreateAndStartHost( + std::move(attributes), initiator_rfh->GetLastCommittedOrigin(), + *initiator_rfh); registry->AbandonHost(prerender_frame_tree_node_id); ExpectFinalStatus(PrerenderHost::FinalStatus::kDestroyed); }
diff --git a/content/browser/prerender/prerender_processor.cc b/content/browser/prerender/prerender_processor.cc index 1d3f30e..3cd2396 100644 --- a/content/browser/prerender/prerender_processor.cc +++ b/content/browser/prerender/prerender_processor.cc
@@ -72,7 +72,7 @@ return; prerender_frame_tree_node_id_ = GetPrerenderHostRegistry().CreateAndStartHost( - std::move(attributes), *web_contents, initiator_origin_); + std::move(attributes), initiator_origin_, initiator_render_frame_host_); } void PrerenderProcessor::Cancel() {
diff --git a/content/browser/renderer_host/navigation_request.cc b/content/browser/renderer_host/navigation_request.cc index 22f6781..bcdf227 100644 --- a/content/browser/renderer_host/navigation_request.cc +++ b/content/browser/renderer_host/navigation_request.cc
@@ -4175,38 +4175,52 @@ bool url_upgraded_after_redirect, bool is_response_check, network::CSPContext::CheckCSPDisposition disposition) { - bool navigate_to_allowed = true; + // Following directive checks' order is important as the `error` code takes + // only the result last set. + net::Error error = net::OK; + if (base::FeatureList::IsEnabled( features::kExperimentalContentSecurityPolicyFeatures) && initiator_policies) { RenderFrameHostCSPContext initiator_csp_context( RenderFrameHostImpl::FromFrameToken(GetInitiatorProcessID(), GetInitiatorFrameToken().value())); + // [navigate-to] + if (!IsAllowedByCSPDirective( + initiator_policies->content_security_policies, &initiator_context, + network::mojom::CSPDirectiveName::NavigateTo, has_followed_redirect, + url_upgraded_after_redirect, is_response_check, disposition)) { + // net::ERR_ABORTED is used instead of net::ERR_BLOCKED_BY_CSP. This is a + // better user experience as the user is not presented with an error page. + // However if other CSP directives life frame-src are violated, it may be + // appropriate for them to use ERR_BLOCKED_BY_CSP so this can be overriden + // by the checks below. + error = net::ERR_ABORTED; + } - navigate_to_allowed = IsAllowedByCSPDirective( - initiator_policies->content_security_policies, &initiator_context, - network::mojom::CSPDirectiveName::NavigateTo, has_followed_redirect, - url_upgraded_after_redirect, is_response_check, disposition); + // [prefetch-src] + if (blink::features::IsPrerender2Enabled() && + frame_tree_node_->frame_tree()->is_prerendering()) { + if (!IsAllowedByCSPDirective( + initiator_policies->content_security_policies, &initiator_context, + network::mojom::CSPDirectiveName::PrefetchSrc, + has_followed_redirect, url_upgraded_after_redirect, + is_response_check, disposition)) { + error = net::ERR_BLOCKED_BY_CSP; + } + } } - bool frame_src_allowed = true; - if (parent_policies) { - frame_src_allowed = IsAllowedByCSPDirective( - parent_policies->content_security_policies, &parent_context, - network::mojom::CSPDirectiveName::FrameSrc, has_followed_redirect, - url_upgraded_after_redirect, is_response_check, disposition); + // [frame-src] + if (parent_policies && + !IsAllowedByCSPDirective( + parent_policies->content_security_policies, &parent_context, + network::mojom::CSPDirectiveName::FrameSrc, has_followed_redirect, + url_upgraded_after_redirect, is_response_check, disposition)) { + error = net::ERR_BLOCKED_BY_CSP; } - if (navigate_to_allowed && frame_src_allowed) - return net::OK; - - if (!frame_src_allowed) - return net::ERR_BLOCKED_BY_CSP; - - // net::ERR_ABORTED is used to ensure that the navigation is cancelled - // when the 'navigate-to' directive check is failed. This is a better user - // experience as the user is not presented with an error page. - return net::ERR_ABORTED; + return error; } net::Error NavigationRequest::CheckContentSecurityPolicy( @@ -4264,8 +4278,8 @@ // now. Then this RenderFrameHostCSPContext will do nothing and we won't // report violations for this check. // - // TODO(antoniosartori): Check that the initiator RenderFrameHost has not - // committed a new document in between, see failing WPT + // TODO(https://crbug.com/1189966): Check that the initiator RenderFrameHost + // has not committed a new document in between, see failing WPT // content-security-policy/navigate-to/spv-only-sent-to-initiator.sub.html RenderFrameHostCSPContext initiator_context( GetInitiatorFrameToken().has_value()
diff --git a/content/browser/renderer_host/p2p/socket_dispatcher_host.cc b/content/browser/renderer_host/p2p/socket_dispatcher_host.cc index 67a67f7..66ae66ac 100644 --- a/content/browser/renderer_host/p2p/socket_dispatcher_host.cc +++ b/content/browser/renderer_host/p2p/socket_dispatcher_host.cc
@@ -12,7 +12,10 @@ #include "content/browser/bad_message.h" #include "content/browser/renderer_host/render_process_host_impl.h" #include "content/browser/storage_partition_impl.h" +#include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_remote.h" +#include "mojo/public/cpp/bindings/receiver_set.h" +#include "mojo/public/cpp/bindings/remote_set.h" #include "net/base/net_errors.h" #include "services/network/public/cpp/p2p_param_traits.h" @@ -24,7 +27,7 @@ P2PSocketDispatcherHost::P2PSocketDispatcherHost(int render_process_id) : render_process_id_(render_process_id) {} -P2PSocketDispatcherHost::~P2PSocketDispatcherHost() {} +P2PSocketDispatcherHost::~P2PSocketDispatcherHost() = default; void P2PSocketDispatcherHost::StartRtpDump( bool incoming, @@ -40,8 +43,9 @@ dump_outgoing_rtp_packet_ = true; packet_callback_ = std::move(packet_callback); - if (trusted_socket_manager_) - trusted_socket_manager_->StartRtpDump(incoming, outgoing); + for (auto& trusted_socket_manager : trusted_socket_managers_) { + trusted_socket_manager->StartRtpDump(incoming, outgoing); + } } } @@ -58,35 +62,36 @@ if (!dump_incoming_rtp_packet_ && !dump_outgoing_rtp_packet_) packet_callback_.Reset(); - if (trusted_socket_manager_) - trusted_socket_manager_->StopRtpDump(incoming, outgoing); + for (auto& trusted_socket_manager : trusted_socket_managers_) { + trusted_socket_manager->StopRtpDump(incoming, outgoing); + } } } void P2PSocketDispatcherHost::BindReceiver( - mojo::PendingReceiver<network::mojom::P2PSocketManager> receiver) { - auto* rph = RenderProcessHostImpl::FromID(render_process_id_); - if (!rph) - return; + RenderProcessHostImpl& process, + mojo::PendingReceiver<network::mojom::P2PSocketManager> receiver, + net::NetworkIsolationKey isolation_key) { + DCHECK_EQ(process.GetID(), render_process_id_); - // In case the renderer was connected previously but the network process - // crashed. - receiver_.reset(); - auto trusted_socket_manager_client = receiver_.BindNewPipeAndPassRemote(); + mojo::PendingRemote<network::mojom::P2PTrustedSocketManagerClient> + trusted_socket_manager_client; + receivers_.Add( + this, trusted_socket_manager_client.InitWithNewPipeAndPassReceiver()); - trusted_socket_manager_.reset(); - // TODO(https://crbug.com/1085022): Make this interface per-frame instead of - // per-process, and grab the correct NetworkIsolationKey from the associated - // RenderFrameHost. - rph->GetStoragePartition()->GetNetworkContext()->CreateP2PSocketManager( - net::NetworkIsolationKey::Todo(), - std::move(trusted_socket_manager_client), - trusted_socket_manager_.BindNewPipeAndPassReceiver(), + mojo::PendingRemote<network::mojom::P2PTrustedSocketManager> + pending_trusted_socket_manager; + process.GetStoragePartition()->GetNetworkContext()->CreateP2PSocketManager( + isolation_key, std::move(trusted_socket_manager_client), + pending_trusted_socket_manager.InitWithNewPipeAndPassReceiver(), std::move(receiver)); + mojo::Remote<network::mojom::P2PTrustedSocketManager> trusted_socket_manager( + std::move(pending_trusted_socket_manager)); if (dump_incoming_rtp_packet_ || dump_outgoing_rtp_packet_) { - trusted_socket_manager_->StartRtpDump(dump_incoming_rtp_packet_, - dump_outgoing_rtp_packet_); + trusted_socket_manager->StartRtpDump(dump_incoming_rtp_packet_, + dump_outgoing_rtp_packet_); } + trusted_socket_managers_.Add(std::move(trusted_socket_manager)); } base::WeakPtr<P2PSocketDispatcherHost> P2PSocketDispatcherHost::GetWeakPtr() {
diff --git a/content/browser/renderer_host/p2p/socket_dispatcher_host.h b/content/browser/renderer_host/p2p/socket_dispatcher_host.h index a130f1a0..2cebb4a8 100644 --- a/content/browser/renderer_host/p2p/socket_dispatcher_host.h +++ b/content/browser/renderer_host/p2p/socket_dispatcher_host.h
@@ -17,8 +17,9 @@ #include "base/sequenced_task_runner.h" #include "content/public/browser/render_process_host.h" #include "mojo/public/cpp/bindings/pending_receiver.h" -#include "mojo/public/cpp/bindings/receiver.h" -#include "mojo/public/cpp/bindings/remote.h" +#include "mojo/public/cpp/bindings/receiver_set.h" +#include "mojo/public/cpp/bindings/remote_set.h" +#include "net/base/network_isolation_key.h" #include "services/network/public/mojom/p2p.mojom.h" #include "services/network/public/mojom/p2p_trusted.mojom.h" @@ -40,7 +41,9 @@ void StopRtpDump(bool incoming, bool outgoing); void BindReceiver( - mojo::PendingReceiver<network::mojom::P2PSocketManager> receiver); + RenderProcessHostImpl& process, + mojo::PendingReceiver<network::mojom::P2PSocketManager> receiver, + net::NetworkIsolationKey isolation_key); base::WeakPtr<P2PSocketDispatcherHost> GetWeakPtr(); @@ -57,8 +60,16 @@ bool dump_outgoing_rtp_packet_ = false; RenderProcessHost::WebRtcRtpPacketCallback packet_callback_; - mojo::Receiver<network::mojom::P2PTrustedSocketManagerClient> receiver_{this}; - mojo::Remote<network::mojom::P2PTrustedSocketManager> trusted_socket_manager_; + // TODO(crbug.com/1178670): We use sets of interfaces for now (instead of + // creating a host-per-frame) since RTP dumps are started/stopped at the + // process level (for now). + // There are, however, plans to: + // 1. Make WebRtcLoggingAgent per-frame (and RTP dumps along with it) + // 2. (Maybe) deprecate RTP dumps. + // Once either of these happens, this can be cleaned up. + mojo::ReceiverSet<network::mojom::P2PTrustedSocketManagerClient> receivers_; + mojo::RemoteSet<network::mojom::P2PTrustedSocketManager> + trusted_socket_managers_; network::mojom::P2PNetworkNotificationClientPtr network_notification_client_;
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc index 80d3788..bec2688 100644 --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -2361,11 +2361,6 @@ AddUIThreadInterface( registry.get(), - base::BindRepeating(&RenderProcessHostImpl::BindP2PSocketManager, - weak_factory_.GetWeakPtr())); - - AddUIThreadInterface( - registry.get(), base::BindRepeating(&RenderProcessHostImpl::CreateMediaLogRecordHost, weak_factory_.GetWeakPtr())); @@ -2544,8 +2539,10 @@ } void RenderProcessHostImpl::BindP2PSocketManager( + net::NetworkIsolationKey isolation_key, mojo::PendingReceiver<network::mojom::P2PSocketManager> receiver) { - p2p_socket_dispatcher_host_->BindReceiver(std::move(receiver)); + p2p_socket_dispatcher_host_->BindReceiver(*this, std::move(receiver), + isolation_key); } void RenderProcessHostImpl::CreateMediaLogRecordHost(
diff --git a/content/browser/renderer_host/render_process_host_impl.h b/content/browser/renderer_host/render_process_host_impl.h index 6bc63978..a0f10a7 100644 --- a/content/browser/renderer_host/render_process_host_impl.h +++ b/content/browser/renderer_host/render_process_host_impl.h
@@ -639,6 +639,10 @@ mojo::PendingReceiver<blink::mojom::WebSocketConnector> receiver) override; + void BindP2PSocketManager( + net::NetworkIsolationKey isolation_key, + mojo::PendingReceiver<network::mojom::P2PSocketManager> receiver); + // Allows |process_id| to use an additional |allowed_request_initiator| // (bypassing |request_initiator_origin_lock| enforcement). // @@ -748,8 +752,6 @@ mojo::PendingReceiver<blink::mojom::WebDatabaseHost> receiver); void BindAecDumpManager( mojo::PendingReceiver<blink::mojom::AecDumpManager> receiver); - void BindP2PSocketManager( - mojo::PendingReceiver<network::mojom::P2PSocketManager> receiver); void CreateMediaLogRecordHost( mojo::PendingReceiver<content::mojom::MediaInternalLogRecords> receiver); #if BUILDFLAG(ENABLE_PLUGINS)
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc index 4301f99..9b474bb 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura.cc +++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -1160,7 +1160,7 @@ DCHECK_NE(GetTextInputType(), ui::TEXT_INPUT_TYPE_NONE); if (text_input_manager_ && text_input_manager_->GetActiveWidget()) { - if (text.length()) { + if (text.length() > 0 || !has_composition_text_) { const int relative_cursor_position = cursor_behavior == InsertTextCursorBehavior::kMoveCursorBeforeText ? -text.length() @@ -1168,7 +1168,8 @@ text_input_manager_->GetActiveWidget()->ImeCommitText( text, std::vector<ui::ImeTextSpan>(), gfx::Range::InvalidRange(), relative_cursor_position); - } else if (has_composition_text_) { + } else { + DCHECK(has_composition_text_); text_input_manager_->GetActiveWidget()->ImeFinishComposingText(false); } }
diff --git a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc index de218cf..86344e9 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc +++ b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
@@ -6080,6 +6080,21 @@ } } +TEST_F(InputMethodResultAuraTest, CommitTextWithEmptyText) { + base::RepeatingClosure ime_call = base::BindRepeating( + &ui::TextInputClient::InsertText, base::Unretained(text_input_client()), + u"", ui::TextInputClient::InsertTextCursorBehavior::kMoveCursorAfterText); + for (auto index : active_view_sequence_) { + ActivateViewForTextInputManager(views_[index], ui::TEXT_INPUT_TYPE_TEXT); + ime_call.Run(); + base::RunLoop().RunUntilIdle(); + EXPECT_EQ("CommitText", + GetMessageNames(widget_hosts_[index] + ->input_handler() + ->GetAndResetDispatchedMessages())); + } +} + TEST_F(InputMethodResultAuraTest, CommitTextBeforeCursor) { base::RepeatingClosure ime_call = base::BindRepeating( &ui::TextInputClient::InsertText, base::Unretained(text_input_client()),
diff --git a/content/browser/service_worker/service_worker_container_host.cc b/content/browser/service_worker/service_worker_container_host.cc index dc89354c..470cc96 100644 --- a/content/browser/service_worker/service_worker_container_host.cc +++ b/content/browser/service_worker/service_worker_container_host.cc
@@ -86,7 +86,6 @@ ServiceWorkerContainerHost::ServiceWorkerContainerHost( base::WeakPtr<ServiceWorkerContextCore> context) : context_(std::move(context)), create_time_(base::TimeTicks::Now()) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); DCHECK(IsContainerForServiceWorker()); DCHECK(context_); } @@ -103,7 +102,6 @@ is_parent_frame_secure_(is_parent_frame_secure), container_(std::move(container_remote)), client_info_(frame_tree_node_id) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); DCHECK(IsContainerForWindowClient()); DCHECK(context_); DCHECK(container_.is_bound()); @@ -121,7 +119,8 @@ process_id_(process_id), container_(std::move(container_remote)), client_info_(client_info) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CURRENTLY_ON(BrowserThread::UI); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(IsContainerForWorkerClient()); DCHECK(context_); DCHECK_NE(process_id_, ChildProcessHost::kInvalidUniqueID); @@ -129,7 +128,7 @@ } ServiceWorkerContainerHost::~ServiceWorkerContainerHost() { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (IsContainerForClient()) { auto* rfh = RenderFrameHostImpl::FromID(process_id(), frame_id()); @@ -158,7 +157,7 @@ blink::mojom::FetchClientSettingsObjectPtr outside_fetch_client_settings_object, RegisterCallback callback) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (!CanServeContainerHostMethods( &callback, options->scope, script_url, @@ -216,7 +215,7 @@ void ServiceWorkerContainerHost::GetRegistration( const GURL& client_url, GetRegistrationCallback callback) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (!CanServeContainerHostMethods( &callback, url_, GURL(), @@ -248,7 +247,7 @@ void ServiceWorkerContainerHost::GetRegistrations( GetRegistrationsCallback callback) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (!CanServeContainerHostMethods( &callback, url_, GURL(), @@ -281,7 +280,7 @@ void ServiceWorkerContainerHost::GetRegistrationForReady( GetRegistrationForReadyCallback callback) { std::string error_message; - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (!IsValidGetRegistrationForReadyMessage(&error_message)) { mojo::ReportBadMessage(error_message); @@ -303,7 +302,7 @@ void ServiceWorkerContainerHost::EnsureControllerServiceWorker( mojo::PendingReceiver<blink::mojom::ControllerServiceWorker> receiver, blink::mojom::ControllerServiceWorkerPurpose purpose) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); // TODO(kinuko): Log the reasons we drop the request. if (!context_ || !controller_) @@ -317,12 +316,12 @@ void ServiceWorkerContainerHost::CloneContainerHost( mojo::PendingReceiver<blink::mojom::ServiceWorkerContainerHost> receiver) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); additional_receivers_.Add(this, std::move(receiver)); } void ServiceWorkerContainerHost::HintToUpdateServiceWorker() { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (!IsContainerForClient()) { mojo::ReportBadMessage("SWPH_HTUSW_NOT_CLIENT"); @@ -336,7 +335,7 @@ void ServiceWorkerContainerHost::EnsureFileAccess( const std::vector<base::FilePath>& file_paths, EnsureFileAccessCallback callback) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); ServiceWorkerVersion* version = controller_registration_ ? controller_registration_->active_version() : nullptr; @@ -363,7 +362,7 @@ } void ServiceWorkerContainerHost::OnExecutionReady() { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (!IsContainerForClient()) { mojo::ReportBadMessage("SWPH_OER_NOT_CLIENT"); @@ -390,7 +389,7 @@ void ServiceWorkerContainerHost::OnVersionAttributesChanged( ServiceWorkerRegistration* registration, blink::mojom::ChangedServiceWorkerObjectsMaskPtr changed_mask) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (!get_ready_callback_ || get_ready_callback_->is_null()) return; if (changed_mask->active && registration->active_version()) { @@ -404,19 +403,19 @@ void ServiceWorkerContainerHost::OnRegistrationFailed( ServiceWorkerRegistration* registration) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); RemoveMatchingRegistration(registration); } void ServiceWorkerContainerHost::OnRegistrationFinishedUninstalling( ServiceWorkerRegistration* registration) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); RemoveMatchingRegistration(registration); } void ServiceWorkerContainerHost::OnSkippedWaiting( ServiceWorkerRegistration* registration) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (controller_registration_ != registration) return; @@ -444,7 +443,7 @@ void ServiceWorkerContainerHost::AddMatchingRegistration( ServiceWorkerRegistration* registration) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(blink::ServiceWorkerScopeMatches(registration->scope(), GetUrlForScopeMatch())); if (!IsEligibleForServiceWorkerController()) @@ -459,7 +458,7 @@ void ServiceWorkerContainerHost::RemoveMatchingRegistration( ServiceWorkerRegistration* registration) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_NE(controller_registration_, registration); #if DCHECK_IS_ON() DCHECK(IsMatchingRegistration(registration)); @@ -472,7 +471,7 @@ ServiceWorkerRegistration* ServiceWorkerContainerHost::MatchRegistration() const { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); auto it = matching_registrations_.rbegin(); for (; it != matching_registrations_.rend(); ++it) { if (it->second->is_uninstalled()) @@ -486,7 +485,7 @@ void ServiceWorkerContainerHost::AddServiceWorkerToUpdate( scoped_refptr<ServiceWorkerVersion> version) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); // This is only called for windows now, but it should be called for all // clients someday. @@ -498,7 +497,7 @@ void ServiceWorkerContainerHost::PostMessageToClient( ServiceWorkerVersion* version, blink::TransferableMessage message) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(IsContainerForClient()); blink::mojom::ServiceWorkerObjectInfoPtr info; @@ -511,7 +510,7 @@ void ServiceWorkerContainerHost::CountFeature( blink::mojom::WebFeature feature) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); // CountFeature is a message about the client's controller. It should be sent // only for clients. @@ -532,7 +531,7 @@ void ServiceWorkerContainerHost::SendSetControllerServiceWorker( bool notify_controllerchange) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(IsContainerForClient()); auto controller_info = blink::mojom::ControllerServiceWorkerInfo::New(); @@ -582,13 +581,13 @@ } void ServiceWorkerContainerHost::NotifyControllerLost() { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); SetControllerRegistration(nullptr, true /* notify_controllerchange */); } void ServiceWorkerContainerHost::ClaimedByRegistration( scoped_refptr<ServiceWorkerRegistration> registration) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(IsContainerForClient()); DCHECK(registration->active_version()); DCHECK(is_execution_ready()); @@ -606,7 +605,7 @@ blink::mojom::ServiceWorkerRegistrationObjectInfoPtr ServiceWorkerContainerHost::CreateServiceWorkerRegistrationObjectInfo( scoped_refptr<ServiceWorkerRegistration> registration) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); int64_t registration_id = registration->id(); auto existing_host = registration_object_hosts_.find(registration_id); if (existing_host != registration_object_hosts_.end()) { @@ -620,7 +619,7 @@ void ServiceWorkerContainerHost::RemoveServiceWorkerRegistrationObjectHost( int64_t registration_id) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(base::Contains(registration_object_hosts_, registration_id)); // This is a workaround for a really unfavorable ownership structure of // service worker content code. This boils down to the following ownership @@ -652,7 +651,7 @@ blink::mojom::ServiceWorkerObjectInfoPtr ServiceWorkerContainerHost::CreateServiceWorkerObjectInfoToSend( scoped_refptr<ServiceWorkerVersion> version) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); int64_t version_id = version->version_id(); auto existing_object_host = service_worker_object_hosts_.find(version_id); if (existing_object_host != service_worker_object_hosts_.end()) { @@ -668,7 +667,7 @@ base::WeakPtr<ServiceWorkerObjectHost> ServiceWorkerContainerHost::GetOrCreateServiceWorkerObjectHost( scoped_refptr<ServiceWorkerVersion> version) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (!context_ || !version) return nullptr; @@ -685,7 +684,7 @@ void ServiceWorkerContainerHost::RemoveServiceWorkerObjectHost( int64_t version_id) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(base::Contains(service_worker_object_hosts_, version_id)); // ServiceWorkerObjectHost to be deleted may have the last reference to @@ -701,30 +700,30 @@ } bool ServiceWorkerContainerHost::IsContainerForServiceWorker() const { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); return client_info_ == base::nullopt; } bool ServiceWorkerContainerHost::IsContainerForClient() const { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); return client_info_ != base::nullopt; } blink::mojom::ServiceWorkerClientType ServiceWorkerContainerHost::GetClientType() const { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(client_info_); return client_info_->type(); } bool ServiceWorkerContainerHost::IsContainerForWindowClient() const { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); return client_info_ && client_info_->type() == blink::mojom::ServiceWorkerClientType::kWindow; } bool ServiceWorkerContainerHost::IsContainerForWorkerClient() const { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); using blink::mojom::ServiceWorkerClientType; if (!client_info_) return false; @@ -735,7 +734,7 @@ ServiceWorkerClientInfo ServiceWorkerContainerHost::GetServiceWorkerClientInfo() const { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(IsContainerForClient()); return *client_info_; @@ -748,7 +747,7 @@ mojo::PendingRemote<network::mojom::CrossOriginEmbedderPolicyReporter> coep_reporter, ukm::SourceId document_ukm_source_id) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(IsContainerForWindowClient()); DCHECK_EQ(ChildProcessHost::kInvalidUniqueID, process_id_); @@ -790,7 +789,7 @@ } void ServiceWorkerContainerHost::OnEndNavigationCommit() { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(IsContainerForWindowClient()); DCHECK(!navigation_commit_ended_); @@ -805,7 +804,7 @@ void ServiceWorkerContainerHost::CompleteWebWorkerPreparation( const network::CrossOriginEmbedderPolicy& cross_origin_embedder_policy, ukm::SourceId worker_ukm_source_id) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(IsContainerForWorkerClient()); DCHECK(!cross_origin_embedder_policy_.has_value()); @@ -830,7 +829,7 @@ const GURL& url, const net::SiteForCookies& site_for_cookies, const base::Optional<url::Origin>& top_frame_origin) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); GURL previous_url = url_; DCHECK(!url.has_ref()); @@ -882,7 +881,7 @@ void ServiceWorkerContainerHost::SetControllerRegistration( scoped_refptr<ServiceWorkerRegistration> controller_registration, bool notify_controllerchange) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(IsContainerForClient()); if (controller_registration) { @@ -899,7 +898,7 @@ mojo::Remote<blink::mojom::ControllerServiceWorker> ServiceWorkerContainerHost::GetRemoteControllerServiceWorker() { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(IsContainerForClient()); DCHECK(controller_); @@ -956,7 +955,7 @@ bool ServiceWorkerContainerHost::AllowServiceWorker(const GURL& scope, const GURL& script_url) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(context_); AllowServiceWorkerResult allowed = GetContentClient()->browser()->AllowServiceWorker( @@ -967,7 +966,7 @@ } bool ServiceWorkerContainerHost::IsEligibleForServiceWorkerController() const { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(IsContainerForClient()); if (!url_.is_valid()) @@ -991,7 +990,7 @@ } bool ServiceWorkerContainerHost::is_response_committed() const { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(IsContainerForClient()); switch (client_phase_) { case ClientPhase::kInitial: @@ -1006,7 +1005,7 @@ void ServiceWorkerContainerHost::AddExecutionReadyCallback( ExecutionReadyCallback callback) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(IsContainerForClient()); DCHECK(!is_execution_ready()); @@ -1014,21 +1013,21 @@ } bool ServiceWorkerContainerHost::is_execution_ready() const { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(IsContainerForClient()); return client_phase_ == ClientPhase::kExecutionReady; } const std::string& ServiceWorkerContainerHost::client_uuid() const { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(IsContainerForClient()); return client_uuid_; } blink::mojom::ControllerServiceWorkerMode ServiceWorkerContainerHost::GetControllerMode() const { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(IsContainerForClient()); if (!controller_) return blink::mojom::ControllerServiceWorkerMode::kNoController; @@ -1048,7 +1047,7 @@ ServiceWorkerVersion* ServiceWorkerContainerHost::controller() const { #if DCHECK_IS_ON() - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); CheckControllerConsistency(false); #endif // DCHECK_IS_ON() return controller_.get(); @@ -1057,7 +1056,7 @@ ServiceWorkerRegistration* ServiceWorkerContainerHost::controller_registration() const { #if DCHECK_IS_ON() - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); CheckControllerConsistency(false); #endif // DCHECK_IS_ON() return controller_registration_.get(); @@ -1072,19 +1071,19 @@ } ServiceWorkerHost* ServiceWorkerContainerHost::service_worker_host() { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(IsContainerForServiceWorker()); return service_worker_host_; } bool ServiceWorkerContainerHost::IsInBackForwardCache() const { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); return is_in_back_forward_cache_; } void ServiceWorkerContainerHost::EvictFromBackForwardCache( BackForwardCacheMetrics::NotRestoredReason reason) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(IsBackForwardCacheEnabled()); DCHECK(IsContainerForWindowClient()); is_in_back_forward_cache_ = false; @@ -1096,7 +1095,7 @@ } void ServiceWorkerContainerHost::OnEnterBackForwardCache() { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(IsBackForwardCacheEnabled()); DCHECK(IsContainerForWindowClient()); if (controller_) @@ -1105,7 +1104,7 @@ } void ServiceWorkerContainerHost::OnRestoreFromBackForwardCache() { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(IsBackForwardCacheEnabled()); DCHECK(IsContainerForWindowClient()); if (controller_) @@ -1115,12 +1114,12 @@ base::WeakPtr<ServiceWorkerContainerHost> ServiceWorkerContainerHost::GetWeakPtr() { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); return weak_factory_.GetWeakPtr(); } void ServiceWorkerContainerHost::SyncMatchingRegistrations() { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(!controller_registration_); RemoveAllMatchingRegistrations(); @@ -1140,7 +1139,7 @@ #if DCHECK_IS_ON() bool ServiceWorkerContainerHost::IsMatchingRegistration( ServiceWorkerRegistration* registration) const { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); std::string spec = registration->scope().spec(); size_t key = spec.size(); @@ -1154,7 +1153,7 @@ #endif // DCHECK_IS_ON() void ServiceWorkerContainerHost::RemoveAllMatchingRegistrations() { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(!controller_registration_); for (const auto& it : matching_registrations_) { ServiceWorkerRegistration* registration = it.second.get(); @@ -1164,7 +1163,7 @@ } void ServiceWorkerContainerHost::ReturnRegistrationForReadyIfNeeded() { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (!get_ready_callback_ || get_ready_callback_->is_null()) return; ServiceWorkerRegistration* registration = MatchRegistration(); @@ -1185,7 +1184,7 @@ } void ServiceWorkerContainerHost::SetExecutionReady() { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(!is_execution_ready()); TransitionToClientPhase(ClientPhase::kExecutionReady); RunExecutionReadyCallbacks(); @@ -1195,7 +1194,7 @@ } void ServiceWorkerContainerHost::RunExecutionReadyCallbacks() { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(IsContainerForClient()); std::vector<ExecutionReadyCallback> callbacks; @@ -1206,7 +1205,7 @@ void ServiceWorkerContainerHost::TransitionToClientPhase( ClientPhase new_phase) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (client_phase_ == new_phase) return; switch (client_phase_) { @@ -1225,7 +1224,7 @@ void ServiceWorkerContainerHost::UpdateController( bool notify_controllerchange) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); ServiceWorkerVersion* version = controller_registration_ ? controller_registration_->active_version() : nullptr; @@ -1258,7 +1257,7 @@ #if DCHECK_IS_ON() void ServiceWorkerContainerHost::CheckControllerConsistency( bool should_crash) const { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (!controller_) { DCHECK(!controller_registration_); return; @@ -1296,7 +1295,7 @@ void ServiceWorkerContainerHost::StartControllerComplete( mojo::PendingReceiver<blink::mojom::ControllerServiceWorker> receiver, blink::ServiceWorkerStatusCode status) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(IsContainerForClient()); if (status == blink::ServiceWorkerStatusCode::kOk) { @@ -1329,7 +1328,7 @@ blink::ServiceWorkerStatusCode status, const std::string& status_message, int64_t registration_id) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); TRACE_EVENT_ASYNC_END2("ServiceWorker", "ServiceWorkerContainerHost::Register", trace_id, @@ -1390,7 +1389,7 @@ int64_t trace_id, blink::ServiceWorkerStatusCode status, scoped_refptr<ServiceWorkerRegistration> registration) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); TRACE_EVENT_ASYNC_END2( "ServiceWorker", "ServiceWorkerContainerHost::GetRegistration", trace_id, @@ -1439,7 +1438,7 @@ blink::ServiceWorkerStatusCode status, const std::vector<scoped_refptr<ServiceWorkerRegistration>>& registrations) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); TRACE_EVENT_ASYNC_END1( "ServiceWorker", "ServiceWorkerContainerHost::GetRegistrations", trace_id, @@ -1495,7 +1494,7 @@ bool ServiceWorkerContainerHost::IsValidGetRegistrationMessage( const GURL& client_url, std::string* out_error) const { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (!IsContainerForWindowClient()) { *out_error = ServiceWorkerConsts::kBadMessageFromNonWindow; return false; @@ -1515,7 +1514,7 @@ bool ServiceWorkerContainerHost::IsValidGetRegistrationsMessage( std::string* out_error) const { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (!IsContainerForWindowClient()) { *out_error = ServiceWorkerConsts::kBadMessageFromNonWindow; return false; @@ -1530,7 +1529,7 @@ bool ServiceWorkerContainerHost::IsValidGetRegistrationForReadyMessage( std::string* out_error) const { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (!IsContainerForWindowClient()) { *out_error = ServiceWorkerConsts::kBadMessageFromNonWindow; return false; @@ -1552,7 +1551,7 @@ const GURL& script_url, const char* error_prefix, Args... args) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); if (!context_) { std::move(*callback).Run( blink::mojom::ServiceWorkerErrorType::kAbort, @@ -1602,7 +1601,7 @@ void ServiceWorkerContainerHost::InheritControllerFrom( ServiceWorkerContainerHost& creator_host, const GURL& blob_url) { - DCHECK_CURRENTLY_ON(ServiceWorkerContext::GetCoreThreadId()); + DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(IsContainerForClient()); DCHECK_EQ(blink::mojom::ServiceWorkerClientType::kDedicatedWorker, GetClientType());
diff --git a/content/browser/service_worker/service_worker_container_host.h b/content/browser/service_worker/service_worker_container_host.h index a6ec841..1faae9a9 100644 --- a/content/browser/service_worker/service_worker_container_host.h +++ b/content/browser/service_worker/service_worker_container_host.h
@@ -719,6 +719,10 @@ // The ServiceWorkerHost that owns |this|. ServiceWorkerHost* service_worker_host_ = nullptr; + // For all instances -------------------------------------------------------- + + SEQUENCE_CHECKER(sequence_checker_); + base::WeakPtrFactory<ServiceWorkerContainerHost> weak_factory_{this}; };
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc index 950b869..952fda1 100644 --- a/content/renderer/render_thread_impl.cc +++ b/content/renderer/render_thread_impl.cc
@@ -1107,9 +1107,11 @@ media::DecoderFactory* RenderThreadImpl::GetMediaDecoderFactory() { DCHECK(IsMainThread()); - // Note that we don't reset this, ever. We hand it out to WebRTC once, and it - // never asks for another one, even if the gpu process restarts. - DCHECK(!media_decoder_factory_); + + // Note that we don't reset this, ever. We instantiate it once and never reset + // it, even if the gpu process restarts. + if (media_decoder_factory_) + return media_decoder_factory_.get(); // MediaInterfaceFactory guarantees that the media::InterfaceFactory is // accessed from the current (main) thread.
diff --git a/docs/updating_clang_format_binaries.md b/docs/updating_clang_format_binaries.md index a214706..0a52be3 100644 --- a/docs/updating_clang_format_binaries.md +++ b/docs/updating_clang_format_binaries.md
@@ -64,6 +64,7 @@ -DCMAKE_BUILD_TYPE=Release \ -DLLVM_ENABLE_PROJECTS=clang \ -DLLVM_ENABLE_ASSERTIONS=NO \ + -DLLVM_ENABLE_TERMINFO=OFF \ -DLLVM_ENABLE_THREADS=NO \ '-DCMAKE_OSX_ARCHITECTURES=arm64;x86_64' \ ../llvm/ @@ -74,11 +75,11 @@ -DCMAKE_BUILD_TYPE=Release \ -DLLVM_ENABLE_PROJECTS=clang \ -DLLVM_ENABLE_ASSERTIONS=NO \ + -DLLVM_ENABLE_TERMINFO=OFF \ -DLLVM_ENABLE_THREADS=NO \ -DCMAKE_C_COMPILER=$PWD/../../chromium/src/third_party/llvm-build/Release+Asserts/bin/clang \ -DCMAKE_CXX_COMPILER=$PWD/../../chromium/src/third_party/llvm-build/Release+Asserts/bin/clang++ \ -DCMAKE_ASM_COMPILER=$PWD/../../chromium/src/third_party/llvm-build/Release+Asserts/bin/clang \ - -DLLVM_ENABLE_TERMINFO=OFF \ -DCMAKE_CXX_STANDARD_LIBRARIES="-static-libgcc -static-libstdc++" \ ../llvm/
diff --git a/ios/chrome/browser/credential_provider/credential_provider_service_unittest.mm b/ios/chrome/browser/credential_provider/credential_provider_service_unittest.mm index 175c6e7..3198580 100644 --- a/ios/chrome/browser/credential_provider/credential_provider_service_unittest.mm +++ b/ios/chrome/browser/credential_provider/credential_provider_service_unittest.mm
@@ -179,7 +179,7 @@ credential_provider_service_->OnPrimaryAccountChanged( signin::PrimaryAccountChangeEvent( signin::PrimaryAccountChangeEvent::State( - CoreAccountInfo(), signin::ConsentLevel::kNotRequired), + CoreAccountInfo(), signin::ConsentLevel::kSignin), signin::PrimaryAccountChangeEvent::State( account, signin::ConsentLevel::kSync))); @@ -198,7 +198,7 @@ signin::PrimaryAccountChangeEvent::State(account, signin::ConsentLevel::kSync), signin::PrimaryAccountChangeEvent::State( - CoreAccountInfo(), signin::ConsentLevel::kNotRequired))); + CoreAccountInfo(), signin::ConsentLevel::kSignin))); ASSERT_TRUE(WaitUntilConditionOrTimeout(kWaitForFileOperationTimeout, ^{ base::RunLoop().RunUntilIdle();
diff --git a/ios/chrome/browser/signin/authentication_service.mm b/ios/chrome/browser/signin/authentication_service.mm index 289aa4e..d224435 100644 --- a/ios/chrome/browser/signin/authentication_service.mm +++ b/ios/chrome/browser/signin/authentication_service.mm
@@ -286,14 +286,12 @@ ChromeIdentity* AuthenticationService::GetAuthenticatedIdentity() const { // There is no authenticated identity if there is no signed in user or if the // user signed in via the client login flow. - if (!identity_manager_->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired)) { + if (!identity_manager_->HasPrimaryAccount(signin::ConsentLevel::kSignin)) { return nil; } std::string authenticated_gaia_id = - identity_manager_ - ->GetPrimaryAccountInfo(signin::ConsentLevel::kNotRequired) + identity_manager_->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin) .gaia; if (authenticated_gaia_id.empty()) return nil; @@ -336,8 +334,7 @@ // if there is already a signed in user. Check that there is no signed in // account or that the new signed in account matches the old one to avoid a // mismatch between the old and the new authenticated accounts. - if (!identity_manager_->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired)) { + if (!identity_manager_->HasPrimaryAccount(signin::ConsentLevel::kSignin)) { DCHECK(identity_manager_->GetPrimaryAccountMutator()); // Initial sign-in to Chrome does not automatically turn on Sync features. // The Sync service will be enabled in a separate request to @@ -348,7 +345,7 @@ // The primary account should now be set to the expected account_id. CHECK_EQ(account_id, identity_manager_->GetPrimaryAccountId( - signin::ConsentLevel::kNotRequired)); + signin::ConsentLevel::kSignin)); crash_keys::SetCurrentlySignedIn(true); } @@ -356,8 +353,7 @@ DCHECK(ios::GetChromeBrowserProvider() ->GetChromeIdentityService() ->IsValidIdentity(identity)); - DCHECK( - identity_manager_->HasPrimaryAccount(signin::ConsentLevel::kNotRequired)); + DCHECK(identity_manager_->HasPrimaryAccount(signin::ConsentLevel::kSignin)); const CoreAccountId account_id = identity_manager_->PickAccountIdForAccount( base::SysNSStringToUTF8(identity.gaiaID), @@ -381,8 +377,7 @@ signin_metrics::ProfileSignout signout_source, bool force_clear_browsing_data, ProceduralBlock completion) { - if (!identity_manager_->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired)) { + if (!identity_manager_->HasPrimaryAccount(signin::ConsentLevel::kSignin)) { if (completion) completion(); return; @@ -560,8 +555,7 @@ void AuthenticationService::HandleForgottenIdentity( ChromeIdentity* invalid_identity, bool should_prompt) { - if (!identity_manager_->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired)) { + if (!identity_manager_->HasPrimaryAccount(signin::ConsentLevel::kSignin)) { // User is not signed in. Nothing to do here. return; } @@ -605,7 +599,7 @@ base::Optional<AccountInfo> primary_account_info = identity_manager_->FindExtendedAccountInfoForAccountWithRefreshToken( identity_manager_->GetPrimaryAccountInfo( - signin::ConsentLevel::kNotRequired)); + signin::ConsentLevel::kSignin)); if (!primary_account_info) return false;
diff --git a/ios/chrome/browser/signin/authentication_service_unittest.mm b/ios/chrome/browser/signin/authentication_service_unittest.mm index 42e0e89..210455d 100644 --- a/ios/chrome/browser/signin/authentication_service_unittest.mm +++ b/ios/chrome/browser/signin/authentication_service_unittest.mm
@@ -662,8 +662,8 @@ EXPECT_NSEQ(identity(0), authentication_service()->GetAuthenticatedIdentity()); - EXPECT_TRUE(identity_manager()->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired)); + EXPECT_TRUE( + identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSignin)); EXPECT_FALSE( identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSync)); EXPECT_TRUE(authentication_service()->IsAuthenticated()); @@ -675,8 +675,8 @@ EXPECT_NSEQ(identity(0), authentication_service()->GetAuthenticatedIdentity()); - EXPECT_TRUE(identity_manager()->HasPrimaryAccount( - signin::ConsentLevel::kNotRequired)); + EXPECT_TRUE( + identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSignin)); EXPECT_TRUE( identity_manager()->HasPrimaryAccount(signin::ConsentLevel::kSync)); EXPECT_TRUE(authentication_service()->IsAuthenticated());
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm index ad04120..5503bfb 100644 --- a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm +++ b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
@@ -1488,6 +1488,8 @@ if (self.isThumbStripEnabled) { [self ensureBrowserViewHiderCoordinatorStarted]; + } else { + self.view.backgroundColor = [UIColor colorNamed:kBackgroundColor]; } }
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view.mm index f9b4529..786d343e 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view.mm +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view.mm
@@ -17,6 +17,7 @@ #import "ios/chrome/browser/ui/omnibox/omnibox_constants.h" #import "ios/chrome/browser/ui/omnibox/omnibox_container_view.h" #import "ios/chrome/browser/ui/omnibox/omnibox_text_field_ios.h" +#import "ios/chrome/browser/ui/start_surface/start_surface_features.h" #import "ios/chrome/browser/ui/toolbar/buttons/toolbar_button_factory.h" #import "ios/chrome/browser/ui/toolbar/buttons/toolbar_configuration.h" #import "ios/chrome/browser/ui/toolbar/public/toolbar_constants.h" @@ -86,6 +87,10 @@ // Layout constraint for the invisible button that is where the omnibox should // be and that focuses the omnibox when tapped. @property(nonatomic, strong) NSLayoutConstraint* invisibleOmniboxConstraint; +// Height layout constraint for the identity disc button. +@property(nonatomic, strong) NSLayoutConstraint* identityDiscHeightConstraint; +// Width layout constraint for the identity disc button. +@property(nonatomic, strong) NSLayoutConstraint* identityDiscWidthConstraint; // View used to add on-touch highlight to the fake omnibox. @property(nonatomic, strong) UIView* fakeLocationBarHighlightView; @@ -126,14 +131,19 @@ self.identityDiscView.translatesAutoresizingMaskIntoConstraints = NO; CGFloat dimension = ntp_home::kIdentityAvatarDimension + 2 * ntp_home::kIdentityAvatarMargin; + self.identityDiscHeightConstraint = + [self.identityDiscView.heightAnchor constraintEqualToConstant:dimension]; + self.identityDiscWidthConstraint = + [self.identityDiscView.widthAnchor constraintEqualToConstant:dimension]; [NSLayoutConstraint activateConstraints:@[ - [self.identityDiscView.heightAnchor constraintEqualToConstant:dimension], - [self.identityDiscView.widthAnchor constraintEqualToConstant:dimension], + self.identityDiscHeightConstraint, + self.identityDiscWidthConstraint, [self.identityDiscView.trailingAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.trailingAnchor], [self.identityDiscView.topAnchor constraintEqualToAnchor:self.toolBarView.topAnchor], ]]; + [self updateIdentityDiscContraints]; } - (void)addViewsToSearchField:(UIView*)searchField { @@ -427,6 +437,7 @@ self.traitCollection.preferredContentSizeCategory) { self.searchHintLabel.font = [self hintLabelFont]; } + [self updateIdentityDiscContraints]; } - (void)updateForTopSafeAreaInset:(CGFloat)topSafeAreaInset { @@ -457,6 +468,24 @@ #pragma mark - Private +- (void)updateIdentityDiscContraints { + if (ShouldShrinkLogoForStartSurface() && + self.traitCollection.verticalSizeClass == + UIUserInterfaceSizeClassCompact) { + self.identityDiscWidthConstraint.constant = + ntp_home::kIdentityAvatarDimension; + self.identityDiscHeightConstraint.constant = + ntp_home::kIdentityAvatarDimension; + } else { + self.identityDiscWidthConstraint.constant = + ntp_home::kIdentityAvatarDimension + + 2 * ntp_home::kIdentityAvatarMargin; + self.identityDiscHeightConstraint.constant = + ntp_home::kIdentityAvatarDimension + + 2 * ntp_home::kIdentityAvatarMargin; + } +} + // Returns the font size for the hint label. - (UIFont*)hintLabelFont { return LocationBarSteadyViewFont(
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.mm index 9d6c1ba..dcf9c09 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.mm +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_header_view_controller.mm
@@ -86,8 +86,6 @@ @property(nonatomic, strong) NSLayoutConstraint* fakeOmniboxWidthConstraint; @property(nonatomic, strong) NSLayoutConstraint* fakeOmniboxHeightConstraint; @property(nonatomic, strong) NSLayoutConstraint* fakeOmniboxTopMarginConstraint; -@property(nonatomic, strong) NSArray* identityDiscLogoLandscapeConstraints; -@property(nonatomic, strong) NSArray* identityDiscLogoPortraitConstraints; @property(nonatomic, assign) BOOL logoFetched; @end @@ -125,9 +123,7 @@ if (self.traitCollection.horizontalSizeClass != previousTraitCollection.horizontalSizeClass) { [self updateFakeboxDisplay]; - } - if ([self shouldUseShrunkLogoLayout]) { - [self updateIdentityDiscLogoConstraints]; + [self updateIdentityDiscInsets]; } } @@ -369,21 +365,13 @@ AddSameConstraints(self.fakeTapButton, toolbar); } -- (BOOL)shouldUseShrunkLogoLayout { - return ShouldShrinkLogoForStartSurface() && !IsIPadIdiom(); -} - - (void)addIdentityDisc { // Set up a button. Details for the button will be set through delegate // implementation of UserAccountImageUpdateDelegate. self.identityDiscButton = [UIButton buttonWithType:UIButtonTypeCustom]; self.identityDiscButton.accessibilityLabel = l10n_util::GetNSString(IDS_ACCNAME_PARTICLE_DISC); - if (![self shouldUseShrunkLogoLayout]) { - self.identityDiscButton.imageEdgeInsets = UIEdgeInsetsMake( - ntp_home::kIdentityAvatarMargin, ntp_home::kIdentityAvatarMargin, - ntp_home::kIdentityAvatarMargin, ntp_home::kIdentityAvatarMargin); - } + [self updateIdentityDiscInsets]; [self.identityDiscButton addTarget:self action:@selector(identityDiscTapped) forControlEvents:UIControlEventTouchUpInside]; @@ -406,53 +394,22 @@ }; } - if (![self shouldUseShrunkLogoLayout]) { // TODO(crbug.com/965958): Set action on button to launch into Settings. [self.headerView setIdentityDiscView:self.identityDiscButton]; - } else { - // Add identity disc as a subview of the logo container view. - [self.logoVendor.view addSubview:self.identityDiscButton]; - self.identityDiscButton.translatesAutoresizingMaskIntoConstraints = NO; - CGFloat dimension = ntp_home::kIdentityAvatarDimension; - self.identityDiscLogoLandscapeConstraints = @[ - [self.identityDiscButton.heightAnchor - constraintEqualToConstant:dimension], - [self.identityDiscButton.widthAnchor constraintEqualToConstant:dimension], - [self.identityDiscButton.trailingAnchor - constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor - constant:-ntp_home::kIdentityAvatarMargin], - [self.identityDiscButton.topAnchor - constraintEqualToAnchor:self.logoVendor.view.topAnchor], - ]; - self.identityDiscLogoPortraitConstraints = @[ - [self.identityDiscButton.heightAnchor - constraintEqualToConstant:dimension], - [self.identityDiscButton.widthAnchor constraintEqualToConstant:dimension], - [self.identityDiscButton.trailingAnchor - constraintEqualToAnchor:self.fakeOmnibox.trailingAnchor], - [self.identityDiscButton.topAnchor - constraintEqualToAnchor:self.logoVendor.view.topAnchor], - ]; - [self updateIdentityDiscLogoConstraints]; - } // Register to receive the avatar of the currently signed in user. [self.delegate registerImageUpdater:self]; } -- (void)updateIdentityDiscLogoConstraints { - if (IsCompactWidth(self.traitCollection)) { - [NSLayoutConstraint - activateConstraints:self.identityDiscLogoPortraitConstraints]; - [NSLayoutConstraint - deactivateConstraints:self.identityDiscLogoLandscapeConstraints]; - ; +- (void)updateIdentityDiscInsets { + if (ShouldShrinkLogoForStartSurface() && + self.traitCollection.verticalSizeClass == + UIUserInterfaceSizeClassCompact) { + self.identityDiscButton.imageEdgeInsets = UIEdgeInsetsZero; } else { - [NSLayoutConstraint - activateConstraints:self.identityDiscLogoLandscapeConstraints]; - [NSLayoutConstraint - deactivateConstraints:self.identityDiscLogoPortraitConstraints]; - ; + self.identityDiscButton.imageEdgeInsets = UIEdgeInsetsMake( + ntp_home::kIdentityAvatarMargin, ntp_home::kIdentityAvatarMargin, + ntp_home::kIdentityAvatarMargin, ntp_home::kIdentityAvatarMargin); } }
diff --git a/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator.mm b/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator.mm index 452d347..27581e52 100644 --- a/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator.mm +++ b/ios/chrome/browser/ui/content_suggestions/ntp_home_mediator.mm
@@ -577,7 +577,7 @@ - (void)onPrimaryAccountChanged: (const signin::PrimaryAccountChangeEvent&)event { - switch (event.GetEventTypeFor(signin::ConsentLevel::kNotRequired)) { + switch (event.GetEventTypeFor(signin::ConsentLevel::kSignin)) { case signin::PrimaryAccountChangeEvent::Type::kSet: case signin::PrimaryAccountChangeEvent::Type::kCleared: [self updateAccountImage];
diff --git a/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager.mm b/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager.mm index 8d7deae..3a6bf04 100644 --- a/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager.mm +++ b/ios/chrome/browser/ui/settings/clear_browsing_data/clear_browsing_data_manager.mm
@@ -334,7 +334,7 @@ // Google Account footer. signin::IdentityManager* identityManager = IdentityManagerFactory::GetForBrowserState(self.browserState); - if (identityManager->HasPrimaryAccount(signin::ConsentLevel::kNotRequired)) { + if (identityManager->HasPrimaryAccount(signin::ConsentLevel::kSignin)) { [model addSectionWithIdentifier:SectionIdentifierGoogleAccount]; [model setFooter:[self footerForGoogleAccountSectionItem] forSectionWithIdentifier:SectionIdentifierGoogleAccount];
diff --git a/ios/chrome/browser/ui/webui/policy/policy_ui_handler.mm b/ios/chrome/browser/ui/webui/policy/policy_ui_handler.mm index 7009891..08a7849 100644 --- a/ios/chrome/browser/ui/webui/policy/policy_ui_handler.mm +++ b/ios/chrome/browser/ui/webui/policy/policy_ui_handler.mm
@@ -66,9 +66,6 @@ {"unknown", IDS_POLICY_UNKNOWN}, {"unset", IDS_POLICY_UNSET}, {"value", IDS_POLICY_LABEL_VALUE}, - {"sourceDefault", IDS_POLICY_SOURCE_DEFAULT}, - {"loadPoliciesDone", IDS_POLICY_LOAD_POLICIES_DONE}, - {"loadingPolicies", IDS_POLICY_LOADING_POLICIES}, }; source->AddLocalizedStrings(kStrings); source->AddLocalizedStrings(policy::kPolicySources);
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1 index c0c5ca9..ac088e65 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@ -b8493e8af7e304f4041da41db7cf46a92553dc30 \ No newline at end of file +1e9f20a478802809be9392e0df9d2fc3c4399915 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1 index c03f1bda..8d03a3b 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@ -2a14fd68c36337d96eb6af847b59336bc76fa611 \ No newline at end of file +5c899ff4ab20a2939960b6fb4eb0ebe44e8447be \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1 index 3cf43cb2..2542f24 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@ -0efcc619eadd56f8704deed4f7fbe4fa9c8a6f79 \ No newline at end of file +c09c04166d85cabda0eb9e3caac0990318198438 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1 index a7c1c8a..23e9c12 100644 --- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@ -4dca2eef4c17e56e5bef6faac90ef4e07dc23795 \ No newline at end of file +b418b65556a46fa84f9e7eafda5ccc95a42b0f6e \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1 index 2eaf655e..02a75d681 100644 --- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@ -0e0d9d59b4a72f36750f8f8024be264e9974b4c7 \ No newline at end of file +e2dc870a8ad9352306b14dbc14eedd1e9769b6dd \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1 index 63537a2..c6682f8 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@ -4bb22c31447f6234cdab1e76c7a15ba09b8043b2 \ No newline at end of file +fdc44d51a5d82ed327396cbf2a41d65574114b1c \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1 index 0dd299b6..03c62da 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@ -2fca7009b725aa7f6682e9c141d89304be675b52 \ No newline at end of file +9c28d64882f69a056da591d528a7d97b043af6d2 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1 index 335269b9..933a040 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@ -f9a3602b252fd607d41119a37d9cc0f286a89f88 \ No newline at end of file +ef4da518f254acd1dd117d16c5d2e16f0f5da119 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1 index c1f0fdb..dbbc3ee 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@ -584bec3f219834b63d887c3c443456b7fa630733 \ No newline at end of file +4e7b7ea28b5726f86730ee38163add6288e38dbf \ No newline at end of file
diff --git a/media/capture/video/chromeos/camera_app_device_bridge_impl.cc b/media/capture/video/chromeos/camera_app_device_bridge_impl.cc index 73c3509..322a0601 100644 --- a/media/capture/video/chromeos/camera_app_device_bridge_impl.cc +++ b/media/capture/video/chromeos/camera_app_device_bridge_impl.cc
@@ -147,8 +147,8 @@ void CameraAppDeviceBridgeImpl::RemoveIpcTaskRunner( const std::string& device_id) { - base::AutoLock lock(device_map_lock_); - camera_app_devices_.erase(device_id); + base::AutoLock lock(task_runner_map_lock_); + ipc_task_runners_.erase(device_id); } void CameraAppDeviceBridgeImpl::GetCameraAppDevice(
diff --git a/remoting/android/BUILD.gn b/remoting/android/BUILD.gn index dfc46de0..80977f36 100644 --- a/remoting/android/BUILD.gn +++ b/remoting/android/BUILD.gn
@@ -34,7 +34,7 @@ remoting_localize("remoting_apk_manifest") { sources = [ "java/AndroidManifest.xml.jinja2" ] - locales = [ "en" ] + locale_list = [ "en" ] variables = [ rebase_path(branding_path) ] output = "$root_gen_dir/remoting/android/{{source_name_part}}" } @@ -160,7 +160,7 @@ remoting_localize("remoting_test_apk_manifest") { sources = [ "javatests/AndroidManifest.xml.jinja2" ] - locales = [ "en" ] + locale_list = [ "en" ] variables = [ rebase_path(branding_path) ] output = "$root_gen_dir/remoting/android_test/{{source_name_part}}" }
diff --git a/remoting/host/win/BUILD.gn b/remoting/host/win/BUILD.gn index 9738c4c..6431260 100644 --- a/remoting/host/win/BUILD.gn +++ b/remoting/host/win/BUILD.gn
@@ -246,7 +246,7 @@ # Makes the .mc file from the .mc.jinja file. remoting_localize("messages_localizing") { sources = [ "host_messages.mc.jinja2" ] - locales = remoting_locales + locale_list = remoting_locales_without_pseudolocales locale_dir = resources_locale_dir encoding = "utf-16" @@ -524,5 +524,5 @@ encoding = "utf-16" - locales = remoting_locales + locale_list = remoting_locales_without_pseudolocales }
diff --git a/remoting/remoting_locales.gni b/remoting/remoting_locales.gni index a9f4d898..3dc3ed8 100644 --- a/remoting/remoting_locales.gni +++ b/remoting/remoting_locales.gni
@@ -3,11 +3,12 @@ # found in the LICENSE file. import("//build/config/chromeos/ui_mode.gni") +import("//build/config/locales.gni") resources_locale_dir = "$root_gen_dir/remoting/resources/_locales" # See also remoting_locales_with_underscores below. -remoting_locales = [ +remoting_locales_without_pseudolocales = [ "am", "ar", "bg", @@ -67,59 +68,57 @@ "zh-TW", ] -# Some locales have hyphens in the names but for some uses underscores are -# needed. -remoting_locales_with_underscores = remoting_locales -remoting_locales_with_underscores -= [ - "en-GB", - - "pt-PT", - "zh-CN", - "zh-TW", -] -remoting_locales_with_underscores += [ - "en_GB", - - "pt_PT", - "zh_CN", - "zh_TW", -] - # An additional locale "en-US" is generated for ChromeOS and Chrome on iOS. # TODO(yuweih): Our build script doesn't seem to work with en-US and Chrome # on iOS doesn't seem to have en-US.lproj. Add is_ios back if we do need to # work with en-US. if (is_chromeos_ash || is_chromeos_lacros) { - remoting_locales += [ "en-US" ] - remoting_locales_with_underscores += [ "en_US" ] - # Support Icelandic in ChromeOS - remoting_locales += [ "is" ] - remoting_locales_with_underscores += [ "is" ] + remoting_locales_without_pseudolocales += [ + "en-US", + "is", + ] } # Locales "pt-BR" and "es-419" are named "pt" and "es-MX" respectively on iOS. if (!is_ios) { - remoting_locales += [ + remoting_locales_without_pseudolocales += [ "pt-BR", "es-419", ] - remoting_locales_with_underscores += [ - "pt_BR", - "es_419", - ] } else { - remoting_locales += [ + remoting_locales_without_pseudolocales += [ "pt", "es-MX", ] - remoting_locales_with_underscores += [ - "pt", - "es_MX", - ] } -messages_locales = remoting_locales_with_underscores +remoting_locales_with_underscores_without_pseudolocales = [] +foreach(locale, remoting_locales_without_pseudolocales) { + remoting_locales_with_underscores_without_pseudolocales += + [ string_replace(locale, "-", "_") ] +} + +pseudolocales_with_underscores = [] +foreach(locale, pseudolocales) { + pseudolocales_with_underscores += [ string_replace(locale, "-", "_") ] +} + +remoting_locales_with_pseudolocales = + remoting_locales_without_pseudolocales + pseudolocales +remoting_locales_with_underscores_with_pseudolocales = + remoting_locales_with_underscores_without_pseudolocales + + pseudolocales_with_underscores + +if (enable_pseudolocales) { + remoting_locales = remoting_locales_with_pseudolocales + remoting_locales_with_underscores = + remoting_locales_with_underscores_with_pseudolocales +} else { + remoting_locales = remoting_locales_without_pseudolocales + remoting_locales_with_underscores = + remoting_locales_with_underscores_without_pseudolocales +} remoting_android_locales = [ "am", @@ -170,5 +169,5 @@ # The list of .json files generated by remoting_strings.grd. remoting_resources_locale_files = process_file_template( - messages_locales, + remoting_locales_with_underscores_with_pseudolocales, [ "remoting/resources/_locales/{{source_name_part}}/messages.json" ])
diff --git a/remoting/resources/BUILD.gn b/remoting/resources/BUILD.gn index 868d237..2425066 100644 --- a/remoting/resources/BUILD.gn +++ b/remoting/resources/BUILD.gn
@@ -61,7 +61,7 @@ # The grd produces a *.pak file and a messages.json file (this one uses # underscores instead of hyphens) for each locale. outputs += - process_file_template(remoting_locales, + process_file_template(remoting_locales_with_pseudolocales, [ "remoting/resources/{{source_name_part}}.pak" ]) outputs += remoting_resources_locale_files
diff --git a/remoting/resources/remoting_strings.grd b/remoting/resources/remoting_strings.grd index 408942ace..bda679b 100644 --- a/remoting/resources/remoting_strings.grd +++ b/remoting/resources/remoting_strings.grd
@@ -80,6 +80,10 @@ <output filename="remoting/resources/zh-CN.pak" lang="zh-CN" type="data_package"/> <output filename="remoting/resources/zh-TW.pak" lang="zh-TW" type="data_package"/> + <!-- Pseudolocales --> + <output filename="remoting/resources/ar-XB.pak" lang="ar-XB" type="data_package"/> + <output filename="remoting/resources/en-XA.pak" lang="en-XA" type="data_package"/> + <output filename="remoting/resources/_locales/am/messages.json" lang="am" type="chrome_messages_json"/> <output filename="remoting/resources/_locales/ar/messages.json" lang="ar" type="chrome_messages_json"/> <output filename="remoting/resources/_locales/bg/messages.json" lang="bg" type="chrome_messages_json"/> @@ -154,6 +158,10 @@ <output filename="remoting/resources/_locales/zh_CN/messages.json" lang="zh-CN" type="chrome_messages_json"/> <output filename="remoting/resources/_locales/zh_TW/messages.json" lang="zh-TW" type="chrome_messages_json"/> + <!-- Pseudolocales --> + <output filename="remoting/resources/_locales/ar_XB/messages.json" lang="ar-XB" type="chrome_messages_json"/> + <output filename="remoting/resources/_locales/en_XA/messages.json" lang="en-XA" type="chrome_messages_json"/> + <if expr="is_android"> <output filename="remoting/android/res/values-am/remoting_strings.xml" lang="am" type="android" context="android_java"/> <output filename="remoting/android/res/values-ar/remoting_strings.xml" lang="ar" type="android" context="android_java"/>
diff --git a/remoting/tools/build/remoting_localize.gni b/remoting/tools/build/remoting_localize.gni index a0bdb4c..1b4faf3 100644 --- a/remoting/tools/build/remoting_localize.gni +++ b/remoting/tools/build/remoting_localize.gni
@@ -11,7 +11,7 @@ # sources (required) # List of jinja2 files to load. This is the template. # -# locales (required) +# locale_list (required) # List of locales. # # locale_dir (optional) @@ -23,7 +23,7 @@ # variables (optional) # List of variables to pass to script. # -# output (optiona) +# output (optional) # Substitution pattern for the output. Defaults to a file in the target # gen dir with the extension stripped (normally the extension is ".jinja2" # which then leaves the non-tempaltized file name). @@ -98,7 +98,7 @@ ] } - args += invoker.locales + args += invoker.locale_list if (defined(invoker.deps)) { deps = invoker.deps
diff --git a/services/network/public/cpp/content_security_policy/content_security_policy.cc b/services/network/public/cpp/content_security_policy/content_security_policy.cc index ebeb9860..05fd38f 100644 --- a/services/network/public/cpp/content_security_policy/content_security_policy.cc +++ b/services/network/public/cpp/content_security_policy/content_security_policy.cc
@@ -145,6 +145,9 @@ case CSPDirectiveName::NavigateTo: return "Refused to navigate to '$1' because it violates the " "following Content Security Policy directive: \"$2\"."; + case CSPDirectiveName::PrefetchSrc: + return "Refused to prefetch content from '$1' because it violates the " + "following Content Security Policy directive: \"$2\"."; case CSPDirectiveName::BaseURI: case CSPDirectiveName::BlockAllMixedContent: @@ -156,7 +159,6 @@ case CSPDirectiveName::ManifestSrc: case CSPDirectiveName::MediaSrc: case CSPDirectiveName::ObjectSrc: - case CSPDirectiveName::PrefetchSrc: case CSPDirectiveName::ReportTo: case CSPDirectiveName::ReportURI: case CSPDirectiveName::RequireTrustedTypesFor:
diff --git a/testing/buildbot/chromium.android.fyi.json b/testing/buildbot/chromium.android.fyi.json index 8c822762..76846a1 100644 --- a/testing/buildbot/chromium.android.fyi.json +++ b/testing/buildbot/chromium.android.fyi.json
@@ -4534,11 +4534,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 89.0.4389.112" + "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 89.0.4389.113" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 89.0.4389.112", + "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 89.0.4389.113", "resultdb": { "enable": true }, @@ -4548,7 +4548,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M89", - "revision": "version:89.0.4389.112" + "revision": "version:89.0.4389.113" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -4613,11 +4613,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.45" + "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.46" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.45", + "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.46", "resultdb": { "enable": true }, @@ -4627,7 +4627,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M90", - "revision": "version:90.0.4430.45" + "revision": "version:90.0.4430.46" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -4771,11 +4771,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 89.0.4389.112" + "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 89.0.4389.113" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 89.0.4389.112", + "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 89.0.4389.113", "resultdb": { "enable": true }, @@ -4785,7 +4785,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M89", - "revision": "version:89.0.4389.112" + "revision": "version:89.0.4389.113" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -4850,11 +4850,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.45" + "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.46" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.45", + "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.46", "resultdb": { "enable": true }, @@ -4864,7 +4864,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M90", - "revision": "version:90.0.4430.45" + "revision": "version:90.0.4430.46" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -5076,11 +5076,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 89.0.4389.112" + "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 89.0.4389.113" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 89.0.4389.112", + "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 89.0.4389.113", "resultdb": { "enable": true }, @@ -5090,7 +5090,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M89", - "revision": "version:89.0.4389.112" + "revision": "version:89.0.4389.113" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -5155,11 +5155,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.45" + "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.46" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.45", + "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.46", "resultdb": { "enable": true }, @@ -5169,7 +5169,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M90", - "revision": "version:90.0.4430.45" + "revision": "version:90.0.4430.46" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -5313,11 +5313,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 89.0.4389.112" + "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 89.0.4389.113" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 89.0.4389.112", + "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 89.0.4389.113", "resultdb": { "enable": true }, @@ -5327,7 +5327,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M89", - "revision": "version:89.0.4389.112" + "revision": "version:89.0.4389.113" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -5392,11 +5392,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.45" + "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.46" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.45", + "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.46", "resultdb": { "enable": true }, @@ -5406,7 +5406,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M90", - "revision": "version:90.0.4430.45" + "revision": "version:90.0.4430.46" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json index 104d0532..f99d06f 100644 --- a/testing/buildbot/chromium.android.json +++ b/testing/buildbot/chromium.android.json
@@ -46456,11 +46456,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 89.0.4389.112" + "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 89.0.4389.113" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 89.0.4389.112", + "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 89.0.4389.113", "resultdb": { "enable": true }, @@ -46470,7 +46470,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M89", - "revision": "version:89.0.4389.112" + "revision": "version:89.0.4389.113" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -46535,11 +46535,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.45" + "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.46" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.45", + "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.46", "resultdb": { "enable": true }, @@ -46549,7 +46549,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M90", - "revision": "version:90.0.4430.45" + "revision": "version:90.0.4430.46" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -46693,11 +46693,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 89.0.4389.112" + "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 89.0.4389.113" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 89.0.4389.112", + "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 89.0.4389.113", "resultdb": { "enable": true }, @@ -46707,7 +46707,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M89", - "revision": "version:89.0.4389.112" + "revision": "version:89.0.4389.113" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -46772,11 +46772,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.45" + "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.46" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.45", + "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.46", "resultdb": { "enable": true }, @@ -46786,7 +46786,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M90", - "revision": "version:90.0.4430.45" + "revision": "version:90.0.4430.46" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -46997,11 +46997,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 89.0.4389.112" + "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 89.0.4389.113" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 89.0.4389.112", + "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 89.0.4389.113", "resultdb": { "enable": true }, @@ -47011,7 +47011,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M89", - "revision": "version:89.0.4389.112" + "revision": "version:89.0.4389.113" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -47076,11 +47076,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.45" + "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.46" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.45", + "name": "weblayer_instrumentation_test_versions_apk_Client Library Skew Tests For 90.0.4430.46", "resultdb": { "enable": true }, @@ -47090,7 +47090,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M90", - "revision": "version:90.0.4430.45" + "revision": "version:90.0.4430.46" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -47234,11 +47234,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 89.0.4389.112" + "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 89.0.4389.113" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 89.0.4389.112", + "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 89.0.4389.113", "resultdb": { "enable": true }, @@ -47248,7 +47248,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M89", - "revision": "version:89.0.4389.112" + "revision": "version:89.0.4389.113" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}", @@ -47313,11 +47313,11 @@ "--bucket", "chromium-result-details", "--test-name", - "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.45" + "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.46" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, - "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.45", + "name": "weblayer_instrumentation_test_versions_apk_Implementation Library Skew Tests For 90.0.4430.46", "resultdb": { "enable": true }, @@ -47327,7 +47327,7 @@ { "cipd_package": "chromium/testing/weblayer-x86", "location": "weblayer_instrumentation_test_M90", - "revision": "version:90.0.4430.45" + "revision": "version:90.0.4430.46" }, { "cipd_package": "infra/tools/luci/logdog/butler/${platform}",
diff --git a/testing/buildbot/filters/android.emulator_m.chrome_public_test_apk.filter b/testing/buildbot/filters/android.emulator_m.chrome_public_test_apk.filter index d1e33b3..c02128ab 100644 --- a/testing/buildbot/filters/android.emulator_m.chrome_public_test_apk.filter +++ b/testing/buildbot/filters/android.emulator_m.chrome_public_test_apk.filter
@@ -101,3 +101,6 @@ # crbug.com/1179792 -org.chromium.chrome.browser.customtabs.content.TabObserverRegistrarTest.testObserveActiveTab + +# crbug.com/1180466 +-org.chromium.chrome.browser.autofill_assistant.AutofillAssistantOverlayIntegrationTest.testShowCastOnIFrameElement
diff --git a/testing/buildbot/filters/ozone-linux.interactive_ui_tests_wayland.filter b/testing/buildbot/filters/ozone-linux.interactive_ui_tests_wayland.filter index 6d2dc1f3..fda6acb 100644 --- a/testing/buildbot/filters/ozone-linux.interactive_ui_tests_wayland.filter +++ b/testing/buildbot/filters/ozone-linux.interactive_ui_tests_wayland.filter
@@ -60,3 +60,8 @@ -WidgetInputMethodInteractiveTest.Activation -WidgetInputMethodInteractiveTest.OneWindow -WidgetInputMethodInteractiveTest.TwoWindows + +# Extremely flaky. +-MenuItemViewTestInsert20.InsertItem20 +-MenuItemViewTestInsert00.InsertItem00 +-BookmarkBarViewTest18.BookmarkBarViewTest18_SiblingMenu
diff --git a/testing/buildbot/variants.pyl b/testing/buildbot/variants.pyl index f4abfb2..ef31572 100644 --- a/testing/buildbot/variants.pyl +++ b/testing/buildbot/variants.pyl
@@ -311,13 +311,13 @@ '../../weblayer/browser/android/javatests/skew/expectations.txt', '--impl-version=90', ], - 'identifier': 'Implementation Library Skew Tests For 90.0.4430.45', + 'identifier': 'Implementation Library Skew Tests For 90.0.4430.46', 'swarming': { 'cipd_packages': [ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M90', - 'revision': 'version:90.0.4430.45', + 'revision': 'version:90.0.4430.46', } ], }, @@ -335,13 +335,13 @@ '../../weblayer/browser/android/javatests/skew/expectations.txt', '--impl-version=89', ], - 'identifier': 'Implementation Library Skew Tests For 89.0.4389.112', + 'identifier': 'Implementation Library Skew Tests For 89.0.4389.113', 'swarming': { 'cipd_packages': [ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M89', - 'revision': 'version:89.0.4389.112', + 'revision': 'version:89.0.4389.113', } ], }, @@ -383,13 +383,13 @@ '../../weblayer/browser/android/javatests/skew/expectations.txt', '--impl-version=90', ], - 'identifier': 'Implementation Library Skew Tests For 90.0.4430.45', + 'identifier': 'Implementation Library Skew Tests For 90.0.4430.46', 'swarming': { 'cipd_packages': [ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M90', - 'revision': 'version:90.0.4430.45', + 'revision': 'version:90.0.4430.46', } ], }, @@ -407,13 +407,13 @@ '../../weblayer/browser/android/javatests/skew/expectations.txt', '--impl-version=89', ], - 'identifier': 'Implementation Library Skew Tests For 89.0.4389.112', + 'identifier': 'Implementation Library Skew Tests For 89.0.4389.113', 'swarming': { 'cipd_packages': [ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M89', - 'revision': 'version:89.0.4389.112', + 'revision': 'version:89.0.4389.113', } ], }, @@ -455,13 +455,13 @@ '../../weblayer/browser/android/javatests/skew/expectations.txt', '--client-version=90', ], - 'identifier': 'Client Library Skew Tests For 90.0.4430.45', + 'identifier': 'Client Library Skew Tests For 90.0.4430.46', 'swarming': { 'cipd_packages': [ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M90', - 'revision': 'version:90.0.4430.45', + 'revision': 'version:90.0.4430.46', } ], }, @@ -479,13 +479,13 @@ '../../weblayer/browser/android/javatests/skew/expectations.txt', '--client-version=89', ], - 'identifier': 'Client Library Skew Tests For 89.0.4389.112', + 'identifier': 'Client Library Skew Tests For 89.0.4389.113', 'swarming': { 'cipd_packages': [ { 'cipd_package': 'chromium/testing/weblayer-x86', 'location': 'weblayer_instrumentation_test_M89', - 'revision': 'version:89.0.4389.112', + 'revision': 'version:89.0.4389.113', } ], },
diff --git a/third_party/blink/public/common/navigation/navigation_policy.h b/third_party/blink/public/common/navigation/navigation_policy.h index 7fd9b4b..923f035 100644 --- a/third_party/blink/public/common/navigation/navigation_policy.h +++ b/third_party/blink/public/common/navigation/navigation_policy.h
@@ -96,7 +96,7 @@ // a download, the download should be dropped. NavigationDownloadTypes disallowed_types; - bool blocking_downloads_in_sandbox_enabled; + bool blocking_downloads_in_sandbox_enabled = false; }; } // namespace blink
diff --git a/third_party/blink/renderer/bindings/scripts/bind_gen/typedef.py b/third_party/blink/renderer/bindings/scripts/bind_gen/typedef.py index e182c9b85..73180ad8 100644 --- a/third_party/blink/renderer/bindings/scripts/bind_gen/typedef.py +++ b/third_party/blink/renderer/bindings/scripts/bind_gen/typedef.py
@@ -22,16 +22,20 @@ from .task_queue import TaskQueue -def _make_typedefs_to_unions(typedefs): +def _make_typedefs_to_unions(typedefs, component_selector): assert isinstance(typedefs, (list, tuple)) assert all(isinstance(typedef, web_idl.Typedef) for typedef in typedefs) + assert callable(component_selector) new_and_old_names = list( map( lambda typedef: (blink_class_name(typedef), blink_class_name(typedef.idl_type. new_union_definition_object)), - filter(lambda typedef: typedef.idl_type.is_union, typedefs))) + filter( + lambda typedef: component_selector( + [typedef, typedef.idl_type.union_definition_object]), + filter(lambda typedef: typedef.idl_type.is_union, typedefs)))) node = ListNode([ TextNode("using {} = {};".format(new_name, old_name)) for new_name, old_name in new_and_old_names @@ -42,21 +46,23 @@ return node -def make_typedefs(typedefs): +def make_typedefs(typedefs, component_selector): assert isinstance(typedefs, (list, tuple)) assert all(isinstance(typedef, web_idl.Typedef) for typedef in typedefs) + assert callable(component_selector) return ListNode([ TextNode("// Typedefs to IDL unions"), - _make_typedefs_to_unions(typedefs), + _make_typedefs_to_unions(typedefs, component_selector), ]) -def _make_unions_of_typedefed_member_types(unions): +def _make_unions_of_typedefed_member_types(unions, component_selector): assert isinstance(unions, (list, tuple)) assert all(isinstance(union, web_idl.NewUnion) for union in unions) + assert callable(component_selector) - def union_name_of_typedefed_members(idl_type): + def union_name_of_typedefed_members(idl_type, union): for member_type in idl_type.member_types: if member_type.unwrap(nullable=True).is_typedef: break @@ -64,13 +70,17 @@ return None pieces = [] + def_objs = [union] for member_type in idl_type.member_types: body_type = member_type.unwrap(nullable=True) if body_type.is_typedef: pieces.append(body_type.typedef_object.identifier) + def_objs.append(body_type.typedef_object) else: pieces.append( body_type.type_name_with_extended_attribute_key_values) + if not component_selector(def_objs): + return None pieces = sorted(pieces) if idl_type.does_include_nullable_type: pieces.append("Null") @@ -84,24 +94,29 @@ continue new_names = sorted( set( - filter(None, - map(union_name_of_typedefed_members, union.idl_types)))) + filter( + None, + map( + lambda idl_type: union_name_of_typedefed_members( + idl_type, union), union.idl_types)))) old_name = blink_class_name(union) for new_name in new_names: node.append(TextNode("using {} = {};".format(new_name, old_name))) - fwd_decl_names.append(old_name) + if new_names: + fwd_decl_names.append(old_name) node.accumulate(CodeGenAccumulator.require_class_decls(fwd_decl_names)) return node -def make_unions(unions): +def make_unions(unions, component_selector): assert isinstance(unions, (list, tuple)) assert all(isinstance(union, web_idl.NewUnion) for union in unions) + assert callable(component_selector) return ListNode([ TextNode("// Unions including typedef'ed member types"), - _make_unions_of_typedefed_member_types(unions), + _make_unions_of_typedefed_member_types(unions, component_selector), ]) @@ -153,29 +168,25 @@ EmptyNode(), ]) - # Typedefs + # Implementation parts + component_selectors = { + c1: lambda xs: all(c2 not in x.components for x in xs), + c2: lambda xs: any(c2 in x.components for x in xs), + } + all_typedefs = sorted(web_idl_database.typedefs, key=lambda x: x.identifier) - typedefs = { - c1: list(filter(lambda x: c2 not in x.components, all_typedefs)), - c2: list(filter(lambda x: c2 in x.components, all_typedefs)), - } for component in components: header_blink_ns[component].body.extend([ - make_typedefs(typedefs[component]), + make_typedefs(all_typedefs, component_selectors[component]), EmptyNode(), ]) - # Unions all_unions = sorted(web_idl_database.new_union_types, key=lambda x: x.identifier) - unions = { - c1: list(filter(lambda x: c2 not in x.components, all_unions)), - c2: list(filter(lambda x: c2 in x.components, all_unions)), - } for component in components: header_blink_ns[component].body.extend([ - make_unions(unions[component]), + make_unions(all_unions, component_selectors[component]), EmptyNode(), ])
diff --git a/third_party/blink/renderer/core/dom/context_features.h b/third_party/blink/renderer/core/dom/context_features.h index a27c27c7..62205e3 100644 --- a/third_party/blink/renderer/core/dom/context_features.h +++ b/third_party/blink/renderer/core/dom/context_features.h
@@ -55,7 +55,7 @@ static bool MutationEventsEnabled(Document*); explicit ContextFeatures(std::unique_ptr<ContextFeaturesClient> client) - : client_(std::move(client)) {} + : Supplement(nullptr), client_(std::move(client)) {} bool IsEnabled(Document*, FeatureType, bool) const; void UrlDidChange(Document*);
diff --git a/third_party/blink/renderer/core/execution_context/execution_context.cc b/third_party/blink/renderer/core/execution_context/execution_context.cc index bdbb0b3..8df4eb6 100644 --- a/third_party/blink/renderer/core/execution_context/execution_context.cc +++ b/third_party/blink/renderer/core/execution_context/execution_context.cc
@@ -506,7 +506,7 @@ visitor->Trace(timers_); visitor->Trace(origin_trial_context_); visitor->Trace(content_security_policy_); - ContextLifecycleNotifier::Trace(visitor); + MojoBindingContext::Trace(visitor); ConsoleLogger::Trace(visitor); Supplementable<ExecutionContext>::Trace(visitor); }
diff --git a/third_party/blink/renderer/core/fetch/global_fetch.cc b/third_party/blink/renderer/core/fetch/global_fetch.cc index a615953..27cf9c4d 100644 --- a/third_party/blink/renderer/core/fetch/global_fetch.cc +++ b/third_party/blink/renderer/core/fetch/global_fetch.cc
@@ -52,7 +52,8 @@ } explicit GlobalFetchImpl(ExecutionContext* execution_context) - : fetch_manager_(MakeGarbageCollected<FetchManager>(execution_context)) {} + : Supplement<T>(nullptr), + fetch_manager_(MakeGarbageCollected<FetchManager>(execution_context)) {} ScriptPromise Fetch(ScriptState* script_state, const RequestInfo& input,
diff --git a/third_party/blink/renderer/core/frame/navigator_user_activation.cc b/third_party/blink/renderer/core/frame/navigator_user_activation.cc index 16ca16fe..b2e07a8 100644 --- a/third_party/blink/renderer/core/frame/navigator_user_activation.cc +++ b/third_party/blink/renderer/core/frame/navigator_user_activation.cc
@@ -35,7 +35,8 @@ Supplement<Navigator>::Trace(visitor); } -NavigatorUserActivation::NavigatorUserActivation(Navigator& navigator) { +NavigatorUserActivation::NavigatorUserActivation(Navigator& navigator) + : Supplement(navigator) { user_activation_ = MakeGarbageCollected<UserActivation>(navigator.DomWindow()); }
diff --git a/third_party/blink/renderer/core/layout/build.gni b/third_party/blink/renderer/core/layout/build.gni index 3f21a28..c053174 100644 --- a/third_party/blink/renderer/core/layout/build.gni +++ b/third_party/blink/renderer/core/layout/build.gni
@@ -534,6 +534,8 @@ "ng/ng_unpositioned_float.h", "ng/svg/layout_ng_svg_text.cc", "ng/svg/layout_ng_svg_text.h", + "ng/svg/ng_svg_text_layout_algorithm.cc", + "ng/svg/ng_svg_text_layout_algorithm.h", "ng/table/interface_casting.h", "ng/table/layout_ng_table.cc", "ng/table/layout_ng_table.h",
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_items_builder.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_items_builder.cc index 38d9dea..7817117c 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_items_builder.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_fragment_items_builder.cc
@@ -9,6 +9,7 @@ #include "third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor.h" #include "third_party/blink/renderer/core/layout/ng/ng_box_fragment_builder.h" #include "third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.h" +#include "third_party/blink/renderer/core/layout/ng/svg/ng_svg_text_layout_algorithm.h" namespace blink { @@ -383,6 +384,8 @@ void* data) { DCHECK(text_content_); ConvertToPhysical(outer_size); + if (node_.IsSVGText()) + NGSVGTextLayoutAlgorithm(node_, GetWritingMode()).Layout(items_); new (data) NGFragmentItems(this); }
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc index c570daa..dd8e2ec 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc
@@ -140,6 +140,22 @@ return inline_end_size; } +// See NGLineBreaker::SplitTextByGlyphs(). +void CollectCharIndex(void* context, + unsigned char_index, + Glyph, + FloatSize, + float, + bool, + CanvasRotationInVertical, + const SimpleFontData*) { + auto* index_list = static_cast<Vector<unsigned>*>(context); + wtf_size_t size = index_list->size(); + if (size > 0 && index_list->at(size - 1) == char_index) + return; + index_list->push_back(char_index); +} + } // namespace inline void NGLineBreaker::ClearNeedsLayout(const NGInlineItem& item) { @@ -173,6 +189,7 @@ : line_opportunity_(line_opportunity), node_(node), mode_(mode), + is_svg_text_(node.IsSVGText()), is_first_formatted_line_((!break_token || (!break_token->ItemIndex() && !break_token->TextOffset())) && node.CanContainFirstFormattedLine()), @@ -410,7 +427,7 @@ const NGInlineItemResults& item_results = line_info->Results(); DCHECK(item_results.IsEmpty()); - if (node_.IsSVGText()) + if (is_svg_text_) line_info->MutableResults()->ReserveCapacity(text_content_.length()); if (item_index_) { @@ -640,7 +657,7 @@ (item.Type() == NGInlineItem::kControl && Text()[item.StartOffset()] == kTabulationCharacter)); DCHECK(&shape_result); - DCHECK_EQ(auto_wrap_, item.Style()->AutoWrap()); + DCHECK_EQ(auto_wrap_, !is_svg_text_ && item.Style()->AutoWrap()); // If we're trailing, only trailing spaces can be included in this line. if (UNLIKELY(state_ == LineBreakState::kTrailing)) { @@ -690,7 +707,7 @@ position_ -= RemoveHyphen(line_info->MutableResults()); NGInlineItemResult* item_result = nullptr; - if (!node_.IsSVGText()) { + if (!is_svg_text_) { item_result = AddItem(item, line_info); item_result->should_create_line_box = true; } @@ -771,7 +788,7 @@ return; } - if (node_.IsSVGText()) { + if (is_svg_text_) { SplitTextByGlyphs(item, line_info); return; } @@ -811,15 +828,19 @@ void NGLineBreaker::SplitTextByGlyphs(const NGInlineItem& item, NGLineInfo* line_info) { DCHECK(RuntimeEnabledFeatures::SVGTextNGEnabled()); - DCHECK(node_.IsSVGText()); + DCHECK(is_svg_text_); DCHECK_EQ(offset_, item.StartOffset()); const ShapeResult& shape = *item.TextShapeResult(); - shape.EnsurePositionData(); - do { - unsigned glyph_end = (offset_ + 1 == shape.EndIndex()) - ? shape.EndIndex() - : shape.CachedNextSafeToBreakOffset(offset_ + 1); + Vector<unsigned> index_list; + index_list.ReserveCapacity(shape.NumGlyphs()); + shape.ForEachGlyph(0, CollectCharIndex, &index_list); + if (shape.IsRtl()) + index_list.Reverse(); + wtf_size_t size = index_list.size(); + for (wtf_size_t i = 0; i < size; ++i) { + DCHECK_EQ(offset_, index_list[i]); + unsigned glyph_end = i + 1 < size ? index_list[i + 1] : shape.EndIndex(); NGInlineItemResult* result = AddItem(item, glyph_end, line_info); result->should_create_line_box = true; auto shape_result_view = @@ -829,7 +850,7 @@ result->shape_result = std::move(shape_result_view); offset_ = glyph_end; position_ += result->inline_size; - } while (offset_ < shape.EndIndex()); + } trailing_whitespace_ = WhitespaceState::kUnknown; MoveToNextOf(item); } @@ -2344,7 +2365,7 @@ if (&style == current_style_.get()) { #if DCHECK_IS_ON() // Check that cache fields are already setup correctly. - DCHECK_EQ(auto_wrap_, style.AutoWrap()); + DCHECK_EQ(auto_wrap_, !is_svg_text_ && style.AutoWrap()); if (auto_wrap_) { DCHECK_EQ(enable_soft_hyphen_, style.GetHyphens() != Hyphens::kNone); DCHECK_EQ(break_iterator_.Locale(), style.LocaleForLineBreakIterator()); @@ -2359,7 +2380,7 @@ current_style_ = &style; // TODO(crbug.com/366553): SVG <text> should not be auto_wrap_ for now. - auto_wrap_ = !node_.IsSVGText() && style.AutoWrap(); + auto_wrap_ = !is_svg_text_ && style.AutoWrap(); if (auto_wrap_) { LineBreakType line_break_type;
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.h b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.h index fcf1e1f..cf59c79 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.h +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.h
@@ -235,6 +235,9 @@ NGLineBreakerMode mode_; + // True if node_ is an SVG <text>. + const bool is_svg_text_; + // True if this line is the "first formatted line". // https://www.w3.org/TR/CSS22/selector.html#first-formatted-line bool is_first_formatted_line_ = false;
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker_test.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker_test.cc index 4017ed2..fd944fd6 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker_test.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker_test.cc
@@ -15,6 +15,7 @@ #include "third_party/blink/renderer/core/layout/ng/ng_positioned_float.h" #include "third_party/blink/renderer/core/layout/ng/ng_unpositioned_float.h" #include "third_party/blink/renderer/platform/fonts/shaping/shape_result_view.h" +#include "third_party/blink/renderer/platform/testing/runtime_enabled_features_test_helpers.h" #include "third_party/blink/renderer/platform/wtf/text/string_builder.h" namespace blink { @@ -704,6 +705,32 @@ // This test passes if no CHECK failures. } -#undef MAYBE_OverflowAtomicInline +TEST_F(NGLineBreakerTest, SplitTextByGlyphs) { + RuntimeEnabledFeaturesTestHelpers::ScopedSVGTextNG svg_text_ng(true); + NGInlineNode node = CreateInlineNode( + uR"HTML( + <!DOCTYPE html> + <svg viewBox="0 0 800 600"> + <text id="container" style="font-family:Times">AV)HTML" + u"\U0001F197\u05E2\u05B4\u05D1\u05E8\u05B4\u05D9\u05EA</text></svg>)"); + BreakLines( + node, LayoutUnit::Max(), + [](const NGLineBreaker& line_breaker, const NGLineInfo& line_info) { + EXPECT_EQ(8u, line_info.Results().size()); + // "A" and "V" with Times font are typically overlapped. They should + // be split. + EXPECT_EQ(1u, line_info.Results()[0].Length()); // A + EXPECT_EQ(1u, line_info.Results()[1].Length()); // V + // Non-BMP characters should not be split. + EXPECT_EQ(2u, line_info.Results()[2].Length()); // U+1F197 + // Connected characters should not be split. + EXPECT_EQ(2u, line_info.Results()[3].Length()); // U+05E2 U+05B4 + EXPECT_EQ(1u, line_info.Results()[4].Length()); // U+05D1 + EXPECT_EQ(2u, line_info.Results()[5].Length()); // U+05E8 U+05B4 + EXPECT_EQ(1u, line_info.Results()[6].Length()); // U+05D9 + EXPECT_EQ(1u, line_info.Results()[7].Length()); // U+05EA + }); +} + } // namespace } // namespace blink
diff --git a/third_party/blink/renderer/core/layout/ng/ng_column_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/ng_column_layout_algorithm.cc index b310b6a..105e501 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_column_layout_algorithm.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_column_layout_algorithm.cc
@@ -841,6 +841,7 @@ container_builder_.SetBaseline(block_offset + *baseline); } +// Distribute as many implicit breaks into the content runs as we need. LayoutUnit NGColumnLayoutAlgorithm::CalculateBalancedColumnBlockSize( const LogicalSize& column_size, const NGBlockBreakToken* child_break_token) { @@ -886,28 +887,47 @@ int implicit_breaks_assumed_count = 0; }; - class ContentRuns : public Vector<ContentRun, 1> { + class ContentRuns final { public: - wtf_size_t IndexWithTallestColumns() const { - DCHECK_GT(size(), 0u); - wtf_size_t index = 0; - LayoutUnit largest_block_size = LayoutUnit::Min(); - for (size_t i = 0; i < size(); i++) { - const ContentRun& run = at(i); - LayoutUnit block_size = run.ColumnBlockSize(); - if (largest_block_size < block_size) { - largest_block_size = block_size; - index = i; - } - } - return index; - } - // When we have "inserted" (assumed) enough implicit column breaks, this // method returns the block-size of the tallest column. LayoutUnit TallestColumnBlockSize() const { - return at(IndexWithTallestColumns()).ColumnBlockSize(); + return TallestRun()->ColumnBlockSize(); } + + LayoutUnit TallestContentBlockSize() const { + return tallest_content_block_size_; + } + + void AddRun(LayoutUnit content_block_size) { + runs_.emplace_back(content_block_size); + tallest_content_block_size_ = + std::max(tallest_content_block_size_, content_block_size); + } + + void DistributeImplicitBreaks(int used_column_count) { + for (int columns_found = runs_.size(); columns_found < used_column_count; + ++columns_found) { + // The tallest content run (with all assumed implicit breaks added so + // far taken into account) is where we assume the next implicit break. + ++TallestRun()->implicit_breaks_assumed_count; + } + } + + private: + ContentRun* TallestRun() const { + DCHECK(!runs_.IsEmpty()); + auto* const it = std::max_element( + runs_.begin(), runs_.end(), + [](const ContentRun& run1, const ContentRun& run2) { + return run1.ColumnBlockSize() < run2.ColumnBlockSize(); + }); + DCHECK(it != runs_.end()); + return const_cast<ContentRun*>(it); + } + + Vector<ContentRun, 1> runs_; + LayoutUnit tallest_content_block_size_; }; // First split into content runs at explicit (forced) breaks. @@ -947,7 +967,7 @@ fragment); column_block_size = std::max(column_block_size, logical_fragment.BlockSize()); - content_runs.emplace_back(column_block_size); + content_runs.AddRun(column_block_size); tallest_unbreakable_block_size_ = std::max( tallest_unbreakable_block_size_, result->TallestUnbreakableBlockSize()); @@ -959,17 +979,6 @@ break_token = To<NGBlockBreakToken>(fragment.BreakToken()); } while (break_token); - // Then distribute as many implicit breaks into the content runs as we need. - int used_column_count = - ResolveUsedColumnCount(ChildAvailableSize().inline_size, Style()); - for (int columns_found = content_runs.size(); - columns_found < used_column_count; columns_found++) { - // The tallest content run (with all assumed implicit breaks added so far - // taken into account) is where we assume the next implicit break. - wtf_size_t index = content_runs.IndexWithTallestColumns(); - content_runs[index].implicit_breaks_assumed_count++; - } - if (ConstraintSpace().IsInitialColumnBalancingPass()) { // Nested column balancing. Our outer fragmentation context is in its // initial balancing pass, so it also wants to know the largest unbreakable @@ -987,6 +996,11 @@ // stretch and retry if not). Also honor {,min-,max-}block-size properties // before returning, and also try to not become shorter than the tallest piece // of unbreakable content. + if (tallest_unbreakable_block_size_ >= content_runs.TallestContentBlockSize()) + return ConstrainColumnBlockSize(tallest_unbreakable_block_size_); + + content_runs.DistributeImplicitBreaks( + ResolveUsedColumnCount(ChildAvailableSize().inline_size, Style())); return ConstrainColumnBlockSize(content_runs.TallestColumnBlockSize()); }
diff --git a/third_party/blink/renderer/core/layout/ng/svg/ng_svg_text_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/svg/ng_svg_text_layout_algorithm.cc new file mode 100644 index 0000000..e63adeae --- /dev/null +++ b/third_party/blink/renderer/core/layout/ng/svg/ng_svg_text_layout_algorithm.cc
@@ -0,0 +1,49 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "third_party/blink/renderer/core/layout/ng/svg/ng_svg_text_layout_algorithm.h" + +namespace blink { + +// See https://svgwg.org/svg2-draft/text.html#TextLayoutAlgorithm + +NGSVGTextLayoutAlgorithm::NGSVGTextLayoutAlgorithm(NGInlineNode node, + WritingMode writing_mode) + : inline_node_(node), + // 1.5. Let "horizontal" be a flag, true if the writing mode of ‘text’ + // is horizontal, false otherwise. + horizontal_(IsHorizontalWritingMode(writing_mode)) { + DCHECK(node.IsSVGText()); +} + +void NGSVGTextLayoutAlgorithm::Layout( + NGFragmentItemsBuilder::ItemWithOffsetList& items) { + // https://svgwg.org/svg2-draft/text.html#TextLayoutAlgorithm + // 1. Setup + if (!Setup()) + return; + + // TODO(crbug.com/1179585): Implement the following steps. +} + +bool NGSVGTextLayoutAlgorithm::Setup() { + // 1.2. Let count be the number of DOM characters within the ‘text’ element's + // subtree. + count_ = inline_node_.GetDOMNode()->textContent().length(); + + // 1.3. Let result be an array of length count whose entries contain the + // per-character information described above. + // ... If result is empty, then return result. + if (count_ == 0) + return false; + result_.resize(count_); + + // 1.4. Let CSS_positions be an array of length count whose entries will be + // filled with the x and y positions of the corresponding typographic + // character in root. The array entries are initialized to (0, 0). + css_positions_.resize(count_); + return true; +} + +} // namespace blink
diff --git a/third_party/blink/renderer/core/layout/ng/svg/ng_svg_text_layout_algorithm.h b/third_party/blink/renderer/core/layout/ng/svg/ng_svg_text_layout_algorithm.h new file mode 100644 index 0000000..37c7ab0 --- /dev/null +++ b/third_party/blink/renderer/core/layout/ng/svg/ng_svg_text_layout_algorithm.h
@@ -0,0 +1,53 @@ +// Copyright 2021 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_SVG_NG_SVG_TEXT_LAYOUT_ALGORITHM_H_ +#define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_SVG_NG_SVG_TEXT_LAYOUT_ALGORITHM_H_ + +#include "third_party/blink/renderer/core/layout/ng/inline/ng_fragment_items_builder.h" + +namespace blink { + +class NGSVGTextLayoutAlgorithm { + STACK_ALLOCATED(); + + public: + NGSVGTextLayoutAlgorithm(NGInlineNode node, WritingMode writing_mode); + + // Apply SVG specific text layout algorithm to |items|. + // Text items in |items| will be converted to kSVGText type. + void Layout(NGFragmentItemsBuilder::ItemWithOffsetList& items); + + private: + // Returns false if we should skip the following steps. + bool Setup(); + + NGInlineNode inline_node_; + + // "count" defined in the specification. + wtf_size_t count_; + + // "horizontal" flag defined in the specification. + bool horizontal_; + + // "result" defined in the specification + struct NGSVGPerCharacterInfo { + base::Optional<float> x; + base::Optional<float> y; + base::Optional<float> rotate; + bool hidden = false; + bool addressable = true; + bool middle = false; + bool anchor_chunk = false; + wtf_size_t item_index = WTF::kNotFound; + }; + Vector<NGSVGPerCharacterInfo> result_; + + // "CSS_positions" defined in the specification. + Vector<FloatPoint> css_positions_; +}; + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_SVG_NG_SVG_TEXT_LAYOUT_ALGORITHM_H_
diff --git a/third_party/blink/renderer/core/page/page_popup_controller.cc b/third_party/blink/renderer/core/page/page_popup_controller.cc index e6bba2c..c336495 100644 --- a/third_party/blink/renderer/core/page/page_popup_controller.cc +++ b/third_party/blink/renderer/core/page/page_popup_controller.cc
@@ -49,7 +49,7 @@ PagePopupController::PagePopupController(Page& page, PagePopup& popup, PagePopupClient* client) - : popup_(popup), popup_client_(client) { + : Supplement(page), popup_(popup), popup_client_(client) { DCHECK(client); ProvideTo(page, this); }
diff --git a/third_party/blink/renderer/core/resize_observer/resize_observer_controller.cc b/third_party/blink/renderer/core/resize_observer/resize_observer_controller.cc index 16683c8..f0b3b3ac 100644 --- a/third_party/blink/renderer/core/resize_observer/resize_observer_controller.cc +++ b/third_party/blink/renderer/core/resize_observer/resize_observer_controller.cc
@@ -27,7 +27,7 @@ return Supplement<LocalDOMWindow>::From<ResizeObserverController>(window); } -ResizeObserverController::ResizeObserverController() = default; +ResizeObserverController::ResizeObserverController() : Supplement(nullptr) {} void ResizeObserverController::AddObserver(ResizeObserver& observer) { observers_.insert(&observer);
diff --git a/third_party/blink/renderer/core/workers/shared_worker_client_holder.cc b/third_party/blink/renderer/core/workers/shared_worker_client_holder.cc index 11103cb..cc48fa5 100644 --- a/third_party/blink/renderer/core/workers/shared_worker_client_holder.cc +++ b/third_party/blink/renderer/core/workers/shared_worker_client_holder.cc
@@ -73,7 +73,8 @@ } SharedWorkerClientHolder::SharedWorkerClientHolder(LocalDOMWindow& window) - : connector_(&window), + : Supplement(window), + connector_(&window), client_receivers_(&window), task_runner_(window.GetTaskRunner(blink::TaskType::kDOMManipulation)) { DCHECK(IsMainThread());
diff --git a/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client.cc b/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client.cc index e7b4ff74..2968ab0 100644 --- a/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client.cc +++ b/third_party/blink/renderer/modules/animationworklet/animation_worklet_proxy_client.cc
@@ -41,7 +41,8 @@ base::WeakPtr<AnimationWorkletMutatorDispatcherImpl> main_thread_mutator_dispatcher, scoped_refptr<base::SingleThreadTaskRunner> main_thread_mutator_runner) - : worklet_id_(worklet_id), + : Supplement(nullptr), + worklet_id_(worklet_id), state_(RunState::kUninitialized), next_global_scope_switch_countdown_(0), current_global_scope_index_(0) {
diff --git a/third_party/blink/renderer/modules/animationworklet/css_animation_worklet.cc b/third_party/blink/renderer/modules/animationworklet/css_animation_worklet.cc index e0a7b0c8..067f8d6 100644 --- a/third_party/blink/renderer/modules/animationworklet/css_animation_worklet.cc +++ b/third_party/blink/renderer/modules/animationworklet/css_animation_worklet.cc
@@ -51,7 +51,8 @@ } CSSAnimationWorklet::CSSAnimationWorklet(LocalDOMWindow& window) - : ExecutionContextLifecycleObserver(&window), + : Supplement(window), + ExecutionContextLifecycleObserver(&window), animation_worklet_(MakeGarbageCollected<AnimationWorklet>(window)) { DCHECK(GetExecutionContext()); }
diff --git a/third_party/blink/renderer/modules/background_fetch/service_worker_registration_background_fetch.cc b/third_party/blink/renderer/modules/background_fetch/service_worker_registration_background_fetch.cc index 66c4f62..41b3734 100644 --- a/third_party/blink/renderer/modules/background_fetch/service_worker_registration_background_fetch.cc +++ b/third_party/blink/renderer/modules/background_fetch/service_worker_registration_background_fetch.cc
@@ -12,7 +12,7 @@ ServiceWorkerRegistrationBackgroundFetch:: ServiceWorkerRegistrationBackgroundFetch( ServiceWorkerRegistration* registration) - : registration_(registration) {} + : Supplement(*registration) {} ServiceWorkerRegistrationBackgroundFetch:: ~ServiceWorkerRegistrationBackgroundFetch() = default; @@ -47,14 +47,13 @@ ServiceWorkerRegistrationBackgroundFetch::backgroundFetch() { if (!background_fetch_manager_) { background_fetch_manager_ = - MakeGarbageCollected<BackgroundFetchManager>(registration_); + MakeGarbageCollected<BackgroundFetchManager>(GetSupplementable()); } return background_fetch_manager_.Get(); } void ServiceWorkerRegistrationBackgroundFetch::Trace(Visitor* visitor) const { - visitor->Trace(registration_); visitor->Trace(background_fetch_manager_); Supplement<ServiceWorkerRegistration>::Trace(visitor); }
diff --git a/third_party/blink/renderer/modules/background_fetch/service_worker_registration_background_fetch.h b/third_party/blink/renderer/modules/background_fetch/service_worker_registration_background_fetch.h index 66ee7fd..371f0cd 100644 --- a/third_party/blink/renderer/modules/background_fetch/service_worker_registration_background_fetch.h +++ b/third_party/blink/renderer/modules/background_fetch/service_worker_registration_background_fetch.h
@@ -35,7 +35,6 @@ void Trace(Visitor* visitor) const override; private: - Member<ServiceWorkerRegistration> registration_; Member<BackgroundFetchManager> background_fetch_manager_; DISALLOW_COPY_AND_ASSIGN(ServiceWorkerRegistrationBackgroundFetch);
diff --git a/third_party/blink/renderer/modules/background_sync/service_worker_registration_sync.cc b/third_party/blink/renderer/modules/background_sync/service_worker_registration_sync.cc index 0e3ead92..dbcd1c8 100644 --- a/third_party/blink/renderer/modules/background_sync/service_worker_registration_sync.cc +++ b/third_party/blink/renderer/modules/background_sync/service_worker_registration_sync.cc
@@ -13,7 +13,7 @@ ServiceWorkerRegistrationSync::ServiceWorkerRegistrationSync( ServiceWorkerRegistration* registration) - : registration_(registration) {} + : Supplement(*registration) {} ServiceWorkerRegistrationSync::~ServiceWorkerRegistrationSync() = default; @@ -40,10 +40,11 @@ SyncManager* ServiceWorkerRegistrationSync::sync() { if (!sync_manager_) { - ExecutionContext* execution_context = registration_->GetExecutionContext(); + ExecutionContext* execution_context = + GetSupplementable()->GetExecutionContext(); // TODO(falken): Consider defining a task source in the spec for this event. sync_manager_ = MakeGarbageCollected<SyncManager>( - registration_, + GetSupplementable(), execution_context->GetTaskRunner(TaskType::kMiscPlatformAPI)); } return sync_manager_.Get(); @@ -56,17 +57,17 @@ PeriodicSyncManager* ServiceWorkerRegistrationSync::periodicSync() { if (!periodic_sync_manager_) { - ExecutionContext* execution_context = registration_->GetExecutionContext(); + ExecutionContext* execution_context = + GetSupplementable()->GetExecutionContext(); // TODO(falken): Consider defining a task source in the spec for this event. periodic_sync_manager_ = MakeGarbageCollected<PeriodicSyncManager>( - registration_, + GetSupplementable(), execution_context->GetTaskRunner(TaskType::kMiscPlatformAPI)); } return periodic_sync_manager_.Get(); } void ServiceWorkerRegistrationSync::Trace(Visitor* visitor) const { - visitor->Trace(registration_); visitor->Trace(sync_manager_); visitor->Trace(periodic_sync_manager_); Supplement<ServiceWorkerRegistration>::Trace(visitor);
diff --git a/third_party/blink/renderer/modules/background_sync/service_worker_registration_sync.h b/third_party/blink/renderer/modules/background_sync/service_worker_registration_sync.h index d360b72..56b652f 100644 --- a/third_party/blink/renderer/modules/background_sync/service_worker_registration_sync.h +++ b/third_party/blink/renderer/modules/background_sync/service_worker_registration_sync.h
@@ -39,7 +39,6 @@ void Trace(Visitor*) const override; private: - Member<ServiceWorkerRegistration> registration_; Member<SyncManager> sync_manager_; Member<PeriodicSyncManager> periodic_sync_manager_;
diff --git a/third_party/blink/renderer/modules/badging/navigator_badge.cc b/third_party/blink/renderer/modules/badging/navigator_badge.cc index 78fdac27..3c2031f 100644 --- a/third_party/blink/renderer/modules/badging/navigator_badge.cc +++ b/third_party/blink/renderer/modules/badging/navigator_badge.cc
@@ -28,7 +28,8 @@ return *supplement; } -NavigatorBadge::NavigatorBadge(ExecutionContext* context) : context_(context) {} +NavigatorBadge::NavigatorBadge(ExecutionContext* context) + : Supplement(*context) {} // static ScriptPromise NavigatorBadge::setAppBadge(ScriptState* script_state, @@ -72,8 +73,6 @@ void NavigatorBadge::Trace(Visitor* visitor) const { Supplement<ExecutionContext>::Trace(visitor); - - visitor->Trace(context_); } // static @@ -99,7 +98,7 @@ mojo::Remote<mojom::blink::BadgeService> NavigatorBadge::badge_service() { mojo::Remote<mojom::blink::BadgeService> badge_service; - context_->GetBrowserInterfaceBroker().GetInterface( + GetSupplementable()->GetBrowserInterfaceBroker().GetInterface( badge_service.BindNewPipeAndPassReceiver()); DCHECK(badge_service);
diff --git a/third_party/blink/renderer/modules/badging/navigator_badge.h b/third_party/blink/renderer/modules/badging/navigator_badge.h index c64a339..b35fe018 100644 --- a/third_party/blink/renderer/modules/badging/navigator_badge.h +++ b/third_party/blink/renderer/modules/badging/navigator_badge.h
@@ -45,8 +45,6 @@ static ScriptPromise ClearAppBadgeHelper(ScriptState* script_state); mojo::Remote<mojom::blink::BadgeService> badge_service(); - - Member<ExecutionContext> context_; }; } // namespace blink
diff --git a/third_party/blink/renderer/modules/cache_storage/global_cache_storage.cc b/third_party/blink/renderer/modules/cache_storage/global_cache_storage.cc index 1be24482..8d60f27 100644 --- a/third_party/blink/renderer/modules/cache_storage/global_cache_storage.cc +++ b/third_party/blink/renderer/modules/cache_storage/global_cache_storage.cc
@@ -35,8 +35,8 @@ return *supplement; } - GlobalCacheStorageImpl() = default; - ~GlobalCacheStorageImpl() {} + GlobalCacheStorageImpl() : Supplement<T>(nullptr) {} + ~GlobalCacheStorageImpl() = default; CacheStorage* Caches(T& fetching_scope, ExceptionState& exception_state) { ExecutionContext* context = fetching_scope.GetExecutionContext();
diff --git a/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.cc b/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.cc index d111834..289c1d3 100644 --- a/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.cc +++ b/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.cc
@@ -224,6 +224,8 @@ return *supplement; } +ImageBitmapFactories::ImageBitmapFactories() : Supplement(nullptr) {} + void ImageBitmapFactories::AddLoader(ImageBitmapLoader* loader) { pending_loaders_.insert(loader); }
diff --git a/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.h b/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.h index 69f0ded..1bb5bdb 100644 --- a/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.h +++ b/third_party/blink/renderer/modules/canvas/imagebitmap/image_bitmap_factories.h
@@ -67,6 +67,8 @@ public: static const char kSupplementName[]; + ImageBitmapFactories(); + static ScriptPromise CreateImageBitmap(ScriptState*, const ImageBitmapSourceUnion&, const ImageBitmapOptions*,
diff --git a/third_party/blink/renderer/modules/content_index/service_worker_registration_content_index.cc b/third_party/blink/renderer/modules/content_index/service_worker_registration_content_index.cc index e50bcfe..863d401a 100644 --- a/third_party/blink/renderer/modules/content_index/service_worker_registration_content_index.cc +++ b/third_party/blink/renderer/modules/content_index/service_worker_registration_content_index.cc
@@ -10,7 +10,7 @@ ServiceWorkerRegistrationContentIndex::ServiceWorkerRegistrationContentIndex( ServiceWorkerRegistration* registration) - : registration_(registration) {} + : Supplement(*registration) {} const char ServiceWorkerRegistrationContentIndex::kSupplementName[] = "ServiceWorkerRegistrationContentIndex"; @@ -38,10 +38,11 @@ ContentIndex* ServiceWorkerRegistrationContentIndex::index() { if (!content_index_) { - ExecutionContext* execution_context = registration_->GetExecutionContext(); + ExecutionContext* execution_context = + GetSupplementable()->GetExecutionContext(); // TODO(falken): Consider defining a task source in the spec for this event. content_index_ = MakeGarbageCollected<ContentIndex>( - registration_, + GetSupplementable(), execution_context->GetTaskRunner(TaskType::kMiscPlatformAPI)); } @@ -49,7 +50,6 @@ } void ServiceWorkerRegistrationContentIndex::Trace(Visitor* visitor) const { - visitor->Trace(registration_); visitor->Trace(content_index_); Supplement<ServiceWorkerRegistration>::Trace(visitor); }
diff --git a/third_party/blink/renderer/modules/content_index/service_worker_registration_content_index.h b/third_party/blink/renderer/modules/content_index/service_worker_registration_content_index.h index 5e52953..8d56deb 100644 --- a/third_party/blink/renderer/modules/content_index/service_worker_registration_content_index.h +++ b/third_party/blink/renderer/modules/content_index/service_worker_registration_content_index.h
@@ -33,7 +33,6 @@ void Trace(Visitor* visitor) const override; private: - Member<ServiceWorkerRegistration> registration_; Member<ContentIndex> content_index_; DISALLOW_COPY_AND_ASSIGN(ServiceWorkerRegistrationContentIndex);
diff --git a/third_party/blink/renderer/modules/crypto/worker_global_scope_crypto.cc b/third_party/blink/renderer/modules/crypto/worker_global_scope_crypto.cc index ed09931..8fda2ad 100644 --- a/third_party/blink/renderer/modules/crypto/worker_global_scope_crypto.cc +++ b/third_party/blink/renderer/modules/crypto/worker_global_scope_crypto.cc
@@ -35,7 +35,7 @@ namespace blink { -WorkerGlobalScopeCrypto::WorkerGlobalScopeCrypto() = default; +WorkerGlobalScopeCrypto::WorkerGlobalScopeCrypto() : Supplement(nullptr) {} const char WorkerGlobalScopeCrypto::kSupplementName[] = "WorkerGlobalScopeCrypto";
diff --git a/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client.cc b/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client.cc index 0fba440..b742b961 100644 --- a/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client.cc +++ b/third_party/blink/renderer/modules/csspaint/paint_worklet_proxy_client.cc
@@ -53,7 +53,8 @@ PaintWorklet* paint_worklet, base::WeakPtr<PaintWorkletPaintDispatcher> paint_dispatcher, scoped_refptr<base::SingleThreadTaskRunner> compositor_host_queue) - : paint_dispatcher_(std::move(paint_dispatcher)), + : Supplement(nullptr), + paint_dispatcher_(std::move(paint_dispatcher)), compositor_host_queue_(std::move(compositor_host_queue)), worklet_id_(worklet_id), state_(RunState::kUninitialized),
diff --git a/third_party/blink/renderer/modules/direct_sockets/navigator_socket.cc b/third_party/blink/renderer/modules/direct_sockets/navigator_socket.cc index 81fbb37..f11d602 100644 --- a/third_party/blink/renderer/modules/direct_sockets/navigator_socket.cc +++ b/third_party/blink/renderer/modules/direct_sockets/navigator_socket.cc
@@ -45,7 +45,7 @@ const char NavigatorSocket::kSupplementName[] = "NavigatorSocket"; NavigatorSocket::NavigatorSocket(ExecutionContext* context) - : ExecutionContextLifecycleStateObserver(context) {} + : Supplement(*context), ExecutionContextLifecycleStateObserver(context) {} // static NavigatorSocket& NavigatorSocket::From(ScriptState* script_state) {
diff --git a/third_party/blink/renderer/modules/encryptedmedia/html_media_element_encrypted_media.cc b/third_party/blink/renderer/modules/encryptedmedia/html_media_element_encrypted_media.cc index a85678f..b6eb80e5 100644 --- a/third_party/blink/renderer/modules/encryptedmedia/html_media_element_encrypted_media.cc +++ b/third_party/blink/renderer/modules/encryptedmedia/html_media_element_encrypted_media.cc
@@ -333,7 +333,7 @@ HTMLMediaElementEncryptedMedia::HTMLMediaElementEncryptedMedia( HTMLMediaElement& element) - : media_element_(&element), + : Supplement(element), is_waiting_for_key_(false), is_attaching_media_keys_(false) {} @@ -415,13 +415,13 @@ DVLOG(EME_LOG_LEVEL) << __func__; Event* event; - if (media_element_->IsMediaDataCorsSameOrigin()) { + if (GetSupplementable()->IsMediaDataCorsSameOrigin()) { event = CreateEncryptedEvent(init_data_type, init_data, init_data_length); } else { // Current page is not allowed to see content from the media file, // so don't return the initData. However, they still get an event. event = CreateEncryptedEvent(media::EmeInitDataType::UNKNOWN, nullptr, 0); - media_element_->GetExecutionContext()->AddConsoleMessage( + GetSupplementable()->GetExecutionContext()->AddConsoleMessage( MakeGarbageCollected<ConsoleMessage>( mojom::ConsoleMessageSource::kJavaScript, mojom::ConsoleMessageLevel::kWarning, @@ -432,8 +432,8 @@ "response are CORS-same-origin.")); } - event->SetTarget(media_element_); - media_element_->ScheduleEvent(event); + event->SetTarget(GetSupplementable()); + GetSupplementable()->ScheduleEvent(event); } void HTMLMediaElementEncryptedMedia::DidBlockPlaybackWaitingForKey() { @@ -449,8 +449,8 @@ // to fire a simple event named waitingforkey at the media element. if (!is_waiting_for_key_) { Event* event = Event::Create(event_type_names::kWaitingforkey); - event->SetTarget(media_element_); - media_element_->ScheduleEvent(event); + event->SetTarget(GetSupplementable()); + GetSupplementable()->ScheduleEvent(event); } // 3. Set the media element's waiting for key value to true. @@ -475,7 +475,6 @@ } void HTMLMediaElementEncryptedMedia::Trace(Visitor* visitor) const { - visitor->Trace(media_element_); visitor->Trace(media_keys_); Supplement<HTMLMediaElement>::Trace(visitor); }
diff --git a/third_party/blink/renderer/modules/encryptedmedia/html_media_element_encrypted_media.h b/third_party/blink/renderer/modules/encryptedmedia/html_media_element_encrypted_media.h index 3a2bb91..91b6a488 100644 --- a/third_party/blink/renderer/modules/encryptedmedia/html_media_element_encrypted_media.h +++ b/third_party/blink/renderer/modules/encryptedmedia/html_media_element_encrypted_media.h
@@ -65,8 +65,6 @@ EventListener*); EventListener* GetAttributeEventListener(const AtomicString& event_type); - Member<HTMLMediaElement> media_element_; - // Internal values specified by the EME spec: // http://w3c.github.io/encrypted-media/#idl-def-HTMLMediaElement // The following internal values are added to the HTMLMediaElement:
diff --git a/third_party/blink/renderer/modules/encryptedmedia/media_keys_controller.cc b/third_party/blink/renderer/modules/encryptedmedia/media_keys_controller.cc index ab0a695..64fdf391 100644 --- a/third_party/blink/renderer/modules/encryptedmedia/media_keys_controller.cc +++ b/third_party/blink/renderer/modules/encryptedmedia/media_keys_controller.cc
@@ -14,7 +14,7 @@ // static const char MediaKeysController::kSupplementName[] = "MediaKeysController"; -MediaKeysController::MediaKeysController() = default; +MediaKeysController::MediaKeysController() : Supplement(nullptr) {} WebEncryptedMediaClient* MediaKeysController::EncryptedMediaClient( ExecutionContext* context) {
diff --git a/third_party/blink/renderer/modules/filesystem/dragged_isolated_file_system_impl.h b/third_party/blink/renderer/modules/filesystem/dragged_isolated_file_system_impl.h index f81b067..f56254d 100644 --- a/third_party/blink/renderer/modules/filesystem/dragged_isolated_file_system_impl.h +++ b/third_party/blink/renderer/modules/filesystem/dragged_isolated_file_system_impl.h
@@ -55,7 +55,7 @@ static DraggedIsolatedFileSystemImpl* From(DataObject*); - DraggedIsolatedFileSystemImpl() = default; + DraggedIsolatedFileSystemImpl() : Supplement(nullptr) {} void Trace(Visitor*) const override;
diff --git a/third_party/blink/renderer/modules/indexeddb/global_indexed_db.cc b/third_party/blink/renderer/modules/indexeddb/global_indexed_db.cc index 7939cd0..8adb942 100644 --- a/third_party/blink/renderer/modules/indexeddb/global_indexed_db.cc +++ b/third_party/blink/renderer/modules/indexeddb/global_indexed_db.cc
@@ -25,13 +25,14 @@ GlobalIndexedDBImpl* supplement = Supplement<T>::template From<GlobalIndexedDBImpl>(supplementable); if (!supplement) { - supplement = MakeGarbageCollected<GlobalIndexedDBImpl>(); + supplement = MakeGarbageCollected<GlobalIndexedDBImpl>(supplementable); Supplement<T>::ProvideTo(supplementable, supplement); } return *supplement; } - GlobalIndexedDBImpl() = default; + explicit GlobalIndexedDBImpl(T& supplementable) + : Supplement<T>(supplementable) {} IDBFactory* IdbFactory(T& fetching_scope) { if (!idb_factory_)
diff --git a/third_party/blink/renderer/modules/launch/dom_window_launch_queue.cc b/third_party/blink/renderer/modules/launch/dom_window_launch_queue.cc index fa6fa4a..1bde440 100644 --- a/third_party/blink/renderer/modules/launch/dom_window_launch_queue.cc +++ b/third_party/blink/renderer/modules/launch/dom_window_launch_queue.cc
@@ -15,7 +15,7 @@ const char DOMWindowLaunchQueue::kSupplementName[] = "DOMWindowLaunchQueue"; DOMWindowLaunchQueue::DOMWindowLaunchQueue() - : launch_queue_(MakeGarbageCollected<LaunchQueue>()) {} + : Supplement(nullptr), launch_queue_(MakeGarbageCollected<LaunchQueue>()) {} Member<LaunchQueue> DOMWindowLaunchQueue::launchQueue(LocalDOMWindow& window) { return FromState(&window)->launch_queue_;
diff --git a/third_party/blink/renderer/modules/mediasource/source_buffer_track_base_supplement.cc b/third_party/blink/renderer/modules/mediasource/source_buffer_track_base_supplement.cc index 8416de39..1fc8305 100644 --- a/third_party/blink/renderer/modules/mediasource/source_buffer_track_base_supplement.cc +++ b/third_party/blink/renderer/modules/mediasource/source_buffer_track_base_supplement.cc
@@ -38,6 +38,9 @@ return nullptr; } +SourceBufferTrackBaseSupplement::SourceBufferTrackBaseSupplement() + : Supplement(nullptr) {} + void SourceBufferTrackBaseSupplement::SetSourceBuffer( TrackBase& track, SourceBuffer* source_buffer) {
diff --git a/third_party/blink/renderer/modules/mediasource/source_buffer_track_base_supplement.h b/third_party/blink/renderer/modules/mediasource/source_buffer_track_base_supplement.h index 9e0ded3..09e0822 100644 --- a/third_party/blink/renderer/modules/mediasource/source_buffer_track_base_supplement.h +++ b/third_party/blink/renderer/modules/mediasource/source_buffer_track_base_supplement.h
@@ -22,6 +22,7 @@ static SourceBuffer* sourceBuffer(TrackBase&); static void SetSourceBuffer(TrackBase&, SourceBuffer*); + SourceBufferTrackBaseSupplement(); void Trace(Visitor*) const override; private:
diff --git a/third_party/blink/renderer/modules/mediastream/frame_queue_transferring_optimizer.h b/third_party/blink/renderer/modules/mediastream/frame_queue_transferring_optimizer.h index 682cdedb..beb32dcc 100644 --- a/third_party/blink/renderer/modules/mediastream/frame_queue_transferring_optimizer.h +++ b/third_party/blink/renderer/modules/mediastream/frame_queue_transferring_optimizer.h
@@ -11,7 +11,7 @@ #include "third_party/blink/renderer/modules/mediastream/frame_queue_underlying_source.h" #include "third_party/blink/renderer/modules/mediastream/transferred_frame_queue_underlying_source.h" #include "third_party/blink/renderer/modules/modules_export.h" -#include "third_party/blink/renderer/platform/heap/impl/persistent.h" +#include "third_party/blink/renderer/platform/heap/persistent.h" #include "third_party/blink/renderer/platform/wtf/functional.h" #include "third_party/blink/renderer/platform/wtf/wtf_size_t.h"
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor.cc b/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor.cc index 67ee40f7..6de4c7b 100644 --- a/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor.cc +++ b/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor.cc
@@ -237,10 +237,10 @@ MediaStreamAudioProcessor::MediaStreamAudioProcessor( const blink::AudioProcessingProperties& properties, - blink::WebRtcPlayoutDataSource* playout_data_source) + scoped_refptr<WebRtcAudioDeviceImpl> playout_data_source) : render_delay_ms_(0), audio_delay_stats_reporter_(kBuffersPerSecond), - playout_data_source_(playout_data_source), + playout_data_source_(std::move(playout_data_source)), main_thread_runner_(base::ThreadTaskRunnerHandle::Get()), audio_mirroring_(false), typing_detected_(false),
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor.h b/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor.h index 5411b4f..379eca9 100644 --- a/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor.h +++ b/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor.h
@@ -37,6 +37,7 @@ class AecDumpAgentImpl; class MediaStreamAudioBus; class MediaStreamAudioFifo; +class WebRtcAudioDeviceImpl; using webrtc::AudioProcessorInterface; @@ -55,8 +56,9 @@ // // Threading note: The constructor assumes it is being run on the main render // thread. - MediaStreamAudioProcessor(const AudioProcessingProperties& properties, - WebRtcPlayoutDataSource* playout_data_source); + MediaStreamAudioProcessor( + const AudioProcessingProperties& properties, + scoped_refptr<WebRtcAudioDeviceImpl> playout_data_source); // Called when the format of the capture data has changed. // Called on the main render thread. The caller is responsible for stopping @@ -208,11 +210,8 @@ media::AudioParameters input_format_; media::AudioParameters output_format_; - // Raw pointer to the WebRtcPlayoutDataSource, which is valid for the - // lifetime of RenderThread. - // // TODO(crbug.com/704136): Replace with Member at some point. - WebRtcPlayoutDataSource* playout_data_source_; + scoped_refptr<WebRtcAudioDeviceImpl> playout_data_source_; // Task runner for the main render thread. const scoped_refptr<base::SingleThreadTaskRunner> main_thread_runner_;
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor_test.cc b/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor_test.cc index ff82502..79c166f 100644 --- a/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor_test.cc +++ b/third_party/blink/renderer/modules/mediastream/media_stream_audio_processor_test.cc
@@ -200,7 +200,7 @@ blink::AudioProcessingProperties properties; scoped_refptr<MediaStreamAudioProcessor> audio_processor( new rtc::RefCountedObject<MediaStreamAudioProcessor>( - properties, webrtc_audio_device.get())); + properties, webrtc_audio_device)); EXPECT_TRUE(audio_processor->has_audio_processing()); audio_processor->OnCaptureFormatChanged(params_); VerifyDefaultComponents(audio_processor.get()); @@ -224,7 +224,7 @@ new rtc::RefCountedObject<WebRtcAudioDeviceImpl>()); scoped_refptr<MediaStreamAudioProcessor> audio_processor( new rtc::RefCountedObject<MediaStreamAudioProcessor>( - properties, webrtc_audio_device.get())); + properties, webrtc_audio_device)); EXPECT_FALSE(audio_processor->has_audio_processing()); audio_processor->OnCaptureFormatChanged(params_); @@ -252,7 +252,7 @@ blink::AudioProcessingProperties properties; scoped_refptr<MediaStreamAudioProcessor> audio_processor( new rtc::RefCountedObject<MediaStreamAudioProcessor>( - properties, webrtc_audio_device.get())); + properties, webrtc_audio_device)); EXPECT_TRUE(audio_processor->has_audio_processing()); static const int kSupportedSampleRates[] = { @@ -306,7 +306,7 @@ { scoped_refptr<MediaStreamAudioProcessor> audio_processor( new rtc::RefCountedObject<MediaStreamAudioProcessor>( - properties, webrtc_audio_device.get())); + properties, webrtc_audio_device)); // Start and stop recording. audio_processor->OnStartDump(base::File( @@ -334,7 +334,6 @@ use_multichannel_processing); scoped_refptr<WebRtcAudioDeviceImpl> webrtc_audio_device( new rtc::RefCountedObject<WebRtcAudioDeviceImpl>()); - const media::AudioParameters source_params( media::AudioParameters::AUDIO_PCM_LOW_LATENCY, media::CHANNEL_LAYOUT_STEREO, 48000, 480); @@ -371,7 +370,7 @@ properties.goog_audio_mirroring = true; scoped_refptr<MediaStreamAudioProcessor> audio_processor( new rtc::RefCountedObject<MediaStreamAudioProcessor>( - properties, webrtc_audio_device.get())); + properties, webrtc_audio_device)); EXPECT_EQ(audio_processor->has_audio_processing(), use_apm); audio_processor->OnCaptureFormatChanged(source_params); // There's no sense in continuing if this fails. @@ -431,7 +430,7 @@ blink::AudioProcessingProperties properties; scoped_refptr<MediaStreamAudioProcessor> audio_processor( new rtc::RefCountedObject<MediaStreamAudioProcessor>( - properties, webrtc_audio_device.get())); + properties, webrtc_audio_device)); EXPECT_TRUE(audio_processor->has_audio_processing()); media::AudioParameters params(media::AudioParameters::AUDIO_PCM_LOW_LATENCY, @@ -463,7 +462,7 @@ new rtc::RefCountedObject<WebRtcAudioDeviceImpl>()); scoped_refptr<MediaStreamAudioProcessor> audio_processor( new rtc::RefCountedObject<MediaStreamAudioProcessor>( - properties, webrtc_audio_device.get())); + properties, webrtc_audio_device)); base::Optional<webrtc::AudioProcessing::Config> apm_config = audio_processor->GetAudioProcessingModuleConfig(); @@ -503,7 +502,7 @@ new rtc::RefCountedObject<WebRtcAudioDeviceImpl>()); scoped_refptr<MediaStreamAudioProcessor> audio_processor( new rtc::RefCountedObject<MediaStreamAudioProcessor>( - properties, webrtc_audio_device.get())); + properties, webrtc_audio_device)); base::Optional<webrtc::AudioProcessing::Config> apm_config = audio_processor->GetAudioProcessingModuleConfig(); @@ -554,7 +553,7 @@ new rtc::RefCountedObject<WebRtcAudioDeviceImpl>()); scoped_refptr<MediaStreamAudioProcessor> audio_processor( new rtc::RefCountedObject<MediaStreamAudioProcessor>( - properties, webrtc_audio_device.get())); + properties, webrtc_audio_device)); base::Optional<webrtc::AudioProcessing::Config> apm_config = audio_processor->GetAudioProcessingModuleConfig(); @@ -573,7 +572,7 @@ new rtc::RefCountedObject<WebRtcAudioDeviceImpl>()); scoped_refptr<MediaStreamAudioProcessor> audio_processor( new rtc::RefCountedObject<MediaStreamAudioProcessor>( - properties, webrtc_audio_device.get())); + properties, webrtc_audio_device)); EXPECT_TRUE(audio_processor->has_audio_processing()); media::AudioParameters params(media::AudioParameters::AUDIO_PCM_LOW_LATENCY,
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_constraints_util_audio_test.cc b/third_party/blink/renderer/modules/mediastream/media_stream_constraints_util_audio_test.cc index 00550c48..218223c 100644 --- a/third_party/blink/renderer/modules/mediastream/media_stream_constraints_util_audio_test.cc +++ b/third_party/blink/renderer/modules/mediastream/media_stream_constraints_util_audio_test.cc
@@ -19,6 +19,7 @@ #include "third_party/blink/public/platform/modules/mediastream/web_platform_media_stream_source.h" #include "third_party/blink/public/platform/scheduler/test/renderer_scheduler_test_support.h" #include "third_party/blink/public/platform/web_string.h" +#include "third_party/blink/renderer/core/testing/sim/sim_test.h" #include "third_party/blink/renderer/modules/mediastream/local_media_stream_audio_source.h" #include "third_party/blink/renderer/modules/mediastream/mock_constraint_factory.h" #include "third_party/blink/renderer/modules/mediastream/processed_local_audio_source.h" @@ -77,7 +78,7 @@ } // namespace -class MediaStreamConstraintsUtilAudioTestBase { +class MediaStreamConstraintsUtilAudioTestBase : public SimTest { protected: void MakeSystemEchoCancellerDeviceExperimental() { media::AudioParameters experimental_system_echo_canceller_parameters( @@ -125,7 +126,7 @@ device.input.set_effects(effects); return std::make_unique<ProcessedLocalAudioSource>( - nullptr /*web_frame*/, device, disable_local_echo, properties, + *MainFrame().GetFrame(), device, disable_local_echo, properties, base::NullCallback(), blink::scheduler::GetSingleThreadTaskRunnerForTesting()); } @@ -492,9 +493,10 @@ class MediaStreamConstraintsUtilAudioTest : public MediaStreamConstraintsUtilAudioTestBase, - public testing::TestWithParam<std::string> { + public testing::WithParamInterface<std::string> { public: void SetUp() override { + MediaStreamConstraintsUtilAudioTestBase::SetUp(); ResetFactory(); if (IsDeviceCapture()) { capabilities_.emplace_back(
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_renderer_factory.cc b/third_party/blink/renderer/modules/mediastream/media_stream_renderer_factory.cc index 3c622fd..8d320bd 100644 --- a/third_party/blink/renderer/modules/mediastream/media_stream_renderer_factory.cc +++ b/third_party/blink/renderer/modules/mediastream/media_stream_renderer_factory.cc
@@ -10,6 +10,8 @@ #include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h" #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/public/web/web_local_frame.h" +#include "third_party/blink/renderer/core/execution_context/execution_context.h" +#include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/modules/mediastream/media_stream_video_renderer_sink.h" #include "third_party/blink/renderer/modules/mediastream/media_stream_video_track.h" @@ -33,9 +35,10 @@ // be rendered to a matching output device, should one exist. // Note that if there are more than one open capture devices the function // will not be able to pick an appropriate device and return 0. -base::UnguessableToken GetSessionIdForWebRtcAudioRenderer() { +base::UnguessableToken GetSessionIdForWebRtcAudioRenderer( + ExecutionContext& context) { WebRtcAudioDeviceImpl* audio_device = - PeerConnectionDependencyFactory::GetInstance()->GetWebRtcAudioDevice(); + PeerConnectionDependencyFactory::From(context).GetWebRtcAudioDevice(); return audio_device ? audio_device->GetAuthorizedDeviceSessionIdForAudioRenderer() : base::UnguessableToken(); @@ -118,6 +121,9 @@ return nullptr; } + auto* frame = To<LocalFrame>(WebLocalFrame::ToCoreFrame(*web_frame)); + DCHECK(frame); + // If the track has a local source, or is a remote track that does not use the // WebRTC audio pipeline, return a new TrackAudioRenderer instance. if (!PeerConnectionRemoteAudioTrack::From(audio_track)) { @@ -127,11 +133,7 @@ "%s => (creating TrackAudioRenderer for %s audio track)", __func__, audio_track->is_local_track() ? "local" : "remote")); - auto* frame = - web_frame - ? static_cast<LocalFrame*>(WebLocalFrame::ToCoreFrame(*web_frame)) - : nullptr; - return new TrackAudioRenderer(audio_components[0].Get(), frame, + return new TrackAudioRenderer(audio_components[0].Get(), *frame, /*session_id=*/base::UnguessableToken(), String(device_id), std::move(on_render_error_callback)); @@ -139,7 +141,8 @@ // This is a remote WebRTC media stream. WebRtcAudioDeviceImpl* audio_device = - PeerConnectionDependencyFactory::GetInstance()->GetWebRtcAudioDevice(); + PeerConnectionDependencyFactory::From(*frame->DomWindow()) + .GetWebRtcAudioDevice(); DCHECK(audio_device); SendLogMessage(String::Format( "%s => (media stream is a remote WebRTC stream)", __func__)); @@ -156,9 +159,11 @@ __func__)); renderer = new WebRtcAudioRenderer( - PeerConnectionDependencyFactory::GetInstance() - ->GetWebRtcSignalingTaskRunner(), - web_stream, web_frame, GetSessionIdForWebRtcAudioRenderer(), + PeerConnectionDependencyFactory::From(*frame->DomWindow()) + .GetWebRtcSignalingTaskRunner(), + web_stream, web_frame, + + GetSessionIdForWebRtcAudioRenderer(*frame->DomWindow()), String(device_id), std::move(on_render_error_callback)); if (!audio_device->SetAudioRenderer(renderer.get())) {
diff --git a/third_party/blink/renderer/modules/mediastream/media_stream_video_track_test.cc b/third_party/blink/renderer/modules/mediastream/media_stream_video_track_test.cc index a7ea3f5..c6d7115 100644 --- a/third_party/blink/renderer/modules/mediastream/media_stream_video_track_test.cc +++ b/third_party/blink/renderer/modules/mediastream/media_stream_video_track_test.cc
@@ -639,7 +639,8 @@ Persistent<MediaStreamComponent> media_stream_component = *track; blink::MediaStreamVideoWebRtcSink webrtc_sink( - media_stream_component, new blink::MockPeerConnectionDependencyFactory(), + media_stream_component, + MakeGarbageCollected<MockPeerConnectionDependencyFactory>(), blink::scheduler::GetSingleThreadTaskRunnerForTesting()); EXPECT_EQ(webrtc_sink.GetRequiredMinFramesPerSec(), 1); @@ -666,7 +667,8 @@ // Second sink. Persistent<MediaStreamComponent> media_stream_component = *track; blink::MediaStreamVideoWebRtcSink webrtc_sink( - media_stream_component, new blink::MockPeerConnectionDependencyFactory(), + media_stream_component, + MakeGarbageCollected<MockPeerConnectionDependencyFactory>(), blink::scheduler::GetSingleThreadTaskRunnerForTesting()); EXPECT_EQ(webrtc_sink.GetRequiredMinFramesPerSec(), 1); @@ -696,7 +698,7 @@ Persistent<MediaStreamComponent> media_stream_component = *track; blink::MediaStreamVideoWebRtcSink webrtc_sink( media_stream_component, - new blink::MockPeerConnectionDependencyFactory(), + MakeGarbageCollected<MockPeerConnectionDependencyFactory>(), blink::scheduler::GetSingleThreadTaskRunnerForTesting()); EXPECT_EQ(webrtc_sink.GetRequiredMinFramesPerSec(), 1); }
diff --git a/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc b/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc index f63d23f..6e01c0a 100644 --- a/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc +++ b/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.cc
@@ -23,6 +23,7 @@ #include "third_party/blink/public/platform/modules/webrtc/webrtc_logging.h" #include "third_party/blink/public/platform/platform.h" #include "third_party/blink/public/web/web_local_frame.h" +#include "third_party/blink/renderer/core/frame/local_dom_window.h" #include "third_party/blink/renderer/core/frame/local_frame.h" #include "third_party/blink/renderer/modules/mediastream/media_stream_audio_processor.h" #include "third_party/blink/renderer/modules/mediastream/media_stream_constraints_util.h" @@ -100,7 +101,7 @@ } // namespace ProcessedLocalAudioSource::ProcessedLocalAudioSource( - LocalFrame* frame, + LocalFrame& frame, const blink::MediaStreamDevice& device, bool disable_local_echo, const blink::AudioProcessingProperties& audio_processing_properties, @@ -109,7 +110,7 @@ : blink::MediaStreamAudioSource(std::move(task_runner), true /* is_local_source */, disable_local_echo), - consumer_frame_(frame), + consumer_frame_(&frame), audio_processing_properties_(audio_processing_properties), started_callback_(std::move(started_callback)), volume_(0), @@ -210,7 +211,8 @@ // Create the MediaStreamAudioProcessor, bound to the WebRTC audio device // module. WebRtcAudioDeviceImpl* const rtc_audio_device = - PeerConnectionDependencyFactory::GetInstance()->GetWebRtcAudioDevice(); + PeerConnectionDependencyFactory::From(*consumer_frame_->DomWindow()) + .GetWebRtcAudioDevice(); if (!rtc_audio_device) { SendLogMessageWithSessionId( "EnsureSourceIsStarted() => (ERROR: no WebRTC ADM instance)"); @@ -312,8 +314,10 @@ scoped_refptr<media::AudioCapturerSource> source_to_stop(std::move(source_)); if (WebRtcAudioDeviceImpl* rtc_audio_device = - PeerConnectionDependencyFactory::GetInstance() - ->GetWebRtcAudioDevice()) { + consumer_frame_ ? PeerConnectionDependencyFactory::From( + *consumer_frame_->DomWindow()) + .GetWebRtcAudioDevice() + : nullptr) { rtc_audio_device->RemoveAudioCapturer(this); }
diff --git a/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.h b/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.h index dc037c1..5e8d321 100644 --- a/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.h +++ b/third_party/blink/renderer/modules/mediastream/processed_local_audio_source.h
@@ -43,7 +43,7 @@ // audio session ID are derived from |device_info|. |factory| must outlive // this instance. ProcessedLocalAudioSource( - LocalFrame* frame, + LocalFrame& frame, const MediaStreamDevice& device, bool disable_local_echo, const AudioProcessingProperties& audio_processing_properties,
diff --git a/third_party/blink/renderer/modules/mediastream/processed_local_audio_source_test.cc b/third_party/blink/renderer/modules/mediastream/processed_local_audio_source_test.cc index 56caecbe..232b174a 100644 --- a/third_party/blink/renderer/modules/mediastream/processed_local_audio_source_test.cc +++ b/third_party/blink/renderer/modules/mediastream/processed_local_audio_source_test.cc
@@ -14,6 +14,7 @@ #include "third_party/blink/public/platform/modules/mediastream/web_media_stream_audio_sink.h" #include "third_party/blink/public/platform/scheduler/test/renderer_scheduler_test_support.h" #include "third_party/blink/public/web/web_heap.h" +#include "third_party/blink/renderer/core/testing/sim/sim_test.h" #include "third_party/blink/renderer/modules/mediastream/processed_local_audio_source.h" #include "third_party/blink/renderer/modules/mediastream/testing_platform_support_with_mock_audio_capture_source.h" #include "third_party/blink/renderer/modules/webrtc/webrtc_audio_device_impl.h" @@ -76,13 +77,14 @@ } // namespace -class ProcessedLocalAudioSourceTest : public testing::Test { +class ProcessedLocalAudioSourceTest : public SimTest { protected: - ProcessedLocalAudioSourceTest() {} + ProcessedLocalAudioSourceTest() = default; - ~ProcessedLocalAudioSourceTest() override {} + ~ProcessedLocalAudioSourceTest() override = default; void SetUp() override { + SimTest::SetUp(); audio_source_ = MakeGarbageCollected<MediaStreamSource>( String::FromUTF8("audio_label"), MediaStreamSource::kTypeAudio, String::FromUTF8("audio_track"), false /* remote */); @@ -91,6 +93,7 @@ } void TearDown() override { + SimTest::TearDown(); audio_source_ = nullptr; audio_component_ = nullptr; WebHeap::CollectAllGarbageForTesting(); @@ -100,7 +103,7 @@ const AudioProcessingProperties& properties) { std::unique_ptr<blink::ProcessedLocalAudioSource> source = std::make_unique<blink::ProcessedLocalAudioSource>( - nullptr /* consumer_web_frame is N/A for non-browser tests */, + *MainFrame().GetFrame(), MediaStreamDevice(mojom::MediaStreamType::DEVICE_AUDIO_CAPTURE, "mock_audio_device_id", "Mock audio device", kSampleRate, kChannelLayout,
diff --git a/third_party/blink/renderer/modules/mediastream/testing_platform_support_with_mock_audio_capture_source.cc b/third_party/blink/renderer/modules/mediastream/testing_platform_support_with_mock_audio_capture_source.cc index 1ece4899..ff40353 100644 --- a/third_party/blink/renderer/modules/mediastream/testing_platform_support_with_mock_audio_capture_source.cc +++ b/third_party/blink/renderer/modules/mediastream/testing_platform_support_with_mock_audio_capture_source.cc
@@ -10,7 +10,6 @@ AudioCapturerSourceTestingPlatformSupport::NewAudioCapturerSource( WebLocalFrame* web_frame, const media::AudioSourceParameters& params) { - EXPECT_EQ(nullptr, web_frame); return mock_audio_capturer_source_; }
diff --git a/third_party/blink/renderer/modules/mediastream/track_audio_renderer.cc b/third_party/blink/renderer/modules/mediastream/track_audio_renderer.cc index 08c383b5..ce397556 100644 --- a/third_party/blink/renderer/modules/mediastream/track_audio_renderer.cc +++ b/third_party/blink/renderer/modules/mediastream/track_audio_renderer.cc
@@ -154,7 +154,7 @@ TrackAudioRenderer::TrackAudioRenderer( MediaStreamComponent* audio_component, - LocalFrame* playout_frame, + LocalFrame& playout_frame, const base::UnguessableToken& session_id, const String& device_id, base::RepeatingCallback<void()> on_render_error_callback) @@ -162,7 +162,7 @@ playout_frame_(playout_frame), session_id_(session_id), task_runner_( - playout_frame->GetTaskRunner(blink::TaskType::kInternalMedia)), + playout_frame.GetTaskRunner(blink::TaskType::kInternalMedia)), num_samples_rendered_(0), on_render_error_callback_(std::move(on_render_error_callback)), playing_(false),
diff --git a/third_party/blink/renderer/modules/mediastream/track_audio_renderer.h b/third_party/blink/renderer/modules/mediastream/track_audio_renderer.h index bd4452f..f1d3132 100644 --- a/third_party/blink/renderer/modules/mediastream/track_audio_renderer.h +++ b/third_party/blink/renderer/modules/mediastream/track_audio_renderer.h
@@ -62,7 +62,7 @@ // // Called on the main thread. TrackAudioRenderer(MediaStreamComponent* audio_component, - LocalFrame* playout_web_frame, + LocalFrame& playout_web_frame, const base::UnguessableToken& session_id, const String& device_id, base::RepeatingCallback<void()> on_render_error_callback);
diff --git a/third_party/blink/renderer/modules/mediastream/user_media_processor.cc b/third_party/blink/renderer/modules/mediastream/user_media_processor.cc index 78acb2b..6e42b3d 100644 --- a/third_party/blink/renderer/modules/mediastream/user_media_processor.cc +++ b/third_party/blink/renderer/modules/mediastream/user_media_processor.cc
@@ -1413,7 +1413,7 @@ // The audio device is not associated with screen capture and also requires // processing. return std::make_unique<blink::ProcessedLocalAudioSource>( - frame_, device, stream_controls->disable_local_echo, + *frame_, device, stream_controls->disable_local_echo, audio_processing_properties, std::move(source_ready), task_runner_); }
diff --git a/third_party/blink/renderer/modules/notifications/service_worker_registration_notifications.cc b/third_party/blink/renderer/modules/notifications/service_worker_registration_notifications.cc index 60ce4427..2d5d753 100644 --- a/third_party/blink/renderer/modules/notifications/service_worker_registration_notifications.cc +++ b/third_party/blink/renderer/modules/notifications/service_worker_registration_notifications.cc
@@ -28,7 +28,7 @@ ServiceWorkerRegistrationNotifications::ServiceWorkerRegistrationNotifications( ExecutionContext* context, ServiceWorkerRegistration* registration) - : ExecutionContextLifecycleObserver(context), registration_(registration) {} + : Supplement(*registration), ExecutionContextLifecycleObserver(context) {} ScriptPromise ServiceWorkerRegistrationNotifications::showNotification( ScriptState* script_state, @@ -103,7 +103,6 @@ } void ServiceWorkerRegistrationNotifications::Trace(Visitor* visitor) const { - visitor->Trace(registration_); visitor->Trace(loaders_); Supplement<ServiceWorkerRegistration>::Trace(visitor); ExecutionContextLifecycleObserver::Trace(visitor); @@ -149,7 +148,7 @@ DCHECK(loaders_.Contains(loader)); NotificationManager::From(GetExecutionContext()) - ->DisplayPersistentNotification(registration_->RegistrationId(), + ->DisplayPersistentNotification(GetSupplementable()->RegistrationId(), std::move(data), loader->GetResources(), WrapPersistent(resolver)); loaders_.erase(loader);
diff --git a/third_party/blink/renderer/modules/notifications/service_worker_registration_notifications.h b/third_party/blink/renderer/modules/notifications/service_worker_registration_notifications.h index 21bc998..5371ea1 100644 --- a/third_party/blink/renderer/modules/notifications/service_worker_registration_notifications.h +++ b/third_party/blink/renderer/modules/notifications/service_worker_registration_notifications.h
@@ -66,7 +66,6 @@ ScriptPromiseResolver* resolver, NotificationResourcesLoader* loader); - Member<ServiceWorkerRegistration> registration_; HeapHashSet<Member<NotificationResourcesLoader>> loaders_; DISALLOW_COPY_AND_ASSIGN(ServiceWorkerRegistrationNotifications);
diff --git a/third_party/blink/renderer/modules/payments/goods/dom_window_digital_goods.cc b/third_party/blink/renderer/modules/payments/goods/dom_window_digital_goods.cc index 3aa4b9a1..019c2f3 100644 --- a/third_party/blink/renderer/modules/payments/goods/dom_window_digital_goods.cc +++ b/third_party/blink/renderer/modules/payments/goods/dom_window_digital_goods.cc
@@ -44,6 +44,8 @@ const char DOMWindowDigitalGoods::kSupplementName[] = "DOMWindowDigitalGoods"; +DOMWindowDigitalGoods::DOMWindowDigitalGoods() : Supplement(nullptr) {} + ScriptPromise DOMWindowDigitalGoods::getDigitalGoodsService( ScriptState* script_state, LocalDOMWindow& window,
diff --git a/third_party/blink/renderer/modules/payments/goods/dom_window_digital_goods.h b/third_party/blink/renderer/modules/payments/goods/dom_window_digital_goods.h index 76b618e..26eecd23 100644 --- a/third_party/blink/renderer/modules/payments/goods/dom_window_digital_goods.h +++ b/third_party/blink/renderer/modules/payments/goods/dom_window_digital_goods.h
@@ -22,6 +22,8 @@ public: static const char kSupplementName[]; + DOMWindowDigitalGoods(); + // IDL Interface: static ScriptPromise getDigitalGoodsService(ScriptState*, LocalDOMWindow&,
diff --git a/third_party/blink/renderer/modules/payments/html_iframe_element_payments.cc b/third_party/blink/renderer/modules/payments/html_iframe_element_payments.cc index 154381ae..d1e5556 100644 --- a/third_party/blink/renderer/modules/payments/html_iframe_element_payments.cc +++ b/third_party/blink/renderer/modules/payments/html_iframe_element_payments.cc
@@ -10,7 +10,7 @@ namespace blink { -HTMLIFrameElementPayments::HTMLIFrameElementPayments() = default; +HTMLIFrameElementPayments::HTMLIFrameElementPayments() : Supplement(nullptr) {} // static const char HTMLIFrameElementPayments::kSupplementName[] =
diff --git a/third_party/blink/renderer/modules/payments/payment_app_service_worker_registration.cc b/third_party/blink/renderer/modules/payments/payment_app_service_worker_registration.cc index 6282eaf..eeb86fd2 100644 --- a/third_party/blink/renderer/modules/payments/payment_app_service_worker_registration.cc +++ b/third_party/blink/renderer/modules/payments/payment_app_service_worker_registration.cc
@@ -41,20 +41,20 @@ PaymentManager* PaymentAppServiceWorkerRegistration::paymentManager( ScriptState* script_state) { if (!payment_manager_) { - payment_manager_ = MakeGarbageCollected<PaymentManager>(registration_); + payment_manager_ = + MakeGarbageCollected<PaymentManager>(GetSupplementable()); } return payment_manager_.Get(); } void PaymentAppServiceWorkerRegistration::Trace(Visitor* visitor) const { - visitor->Trace(registration_); visitor->Trace(payment_manager_); Supplement<ServiceWorkerRegistration>::Trace(visitor); } PaymentAppServiceWorkerRegistration::PaymentAppServiceWorkerRegistration( ServiceWorkerRegistration* registration) - : registration_(registration) {} + : Supplement(*registration) {} // static const char PaymentAppServiceWorkerRegistration::kSupplementName[] =
diff --git a/third_party/blink/renderer/modules/payments/payment_app_service_worker_registration.h b/third_party/blink/renderer/modules/payments/payment_app_service_worker_registration.h index c7bf8cb..3871acd 100644 --- a/third_party/blink/renderer/modules/payments/payment_app_service_worker_registration.h +++ b/third_party/blink/renderer/modules/payments/payment_app_service_worker_registration.h
@@ -34,7 +34,6 @@ void Trace(Visitor*) const override; private: - Member<ServiceWorkerRegistration> registration_; Member<PaymentManager> payment_manager_; DISALLOW_COPY_AND_ASSIGN(PaymentAppServiceWorkerRegistration);
diff --git a/third_party/blink/renderer/modules/peerconnection/media_stream_remote_video_source_test.cc b/third_party/blink/renderer/modules/peerconnection/media_stream_remote_video_source_test.cc index 70815a0..92e0efe 100644 --- a/third_party/blink/renderer/modules/peerconnection/media_stream_remote_video_source_test.cc +++ b/third_party/blink/renderer/modules/peerconnection/media_stream_remote_video_source_test.cc
@@ -25,6 +25,7 @@ #include "third_party/blink/renderer/modules/mediastream/mock_media_stream_video_sink.h" #include "third_party/blink/renderer/modules/peerconnection/adapters/web_rtc_cross_thread_copier.h" #include "third_party/blink/renderer/modules/peerconnection/mock_peer_connection_dependency_factory.h" +#include "third_party/blink/renderer/platform/heap/impl/heap.h" #include "third_party/blink/renderer/platform/mediastream/media_stream_source.h" #include "third_party/blink/renderer/platform/testing/io_task_runner_testing_platform_support.h" #include "third_party/blink/renderer/platform/webrtc/track_observer.h" @@ -66,7 +67,8 @@ class MediaStreamRemoteVideoSourceTest : public ::testing::Test { public: MediaStreamRemoteVideoSourceTest() - : mock_factory_(new blink::MockPeerConnectionDependencyFactory()), + : mock_factory_( + MakeGarbageCollected<MockPeerConnectionDependencyFactory>()), webrtc_video_source_(blink::MockWebRtcVideoTrackSource::Create( /*supports_encoded_output=*/true)), webrtc_video_track_( @@ -166,7 +168,7 @@ } ScopedTestingPlatformSupport<IOTaskRunnerTestingPlatformSupport> platform_; - std::unique_ptr<blink::MockPeerConnectionDependencyFactory> mock_factory_; + Persistent<blink::MockPeerConnectionDependencyFactory> mock_factory_; scoped_refptr<webrtc::VideoTrackSourceInterface> webrtc_video_source_; scoped_refptr<webrtc::VideoTrackInterface> webrtc_video_track_; // |remote_source_| is owned by |source_|.
diff --git a/third_party/blink/renderer/modules/peerconnection/media_stream_video_webrtc_sink_test.cc b/third_party/blink/renderer/modules/peerconnection/media_stream_video_webrtc_sink_test.cc index 49f8a6d..50c6045 100644 --- a/third_party/blink/renderer/modules/peerconnection/media_stream_video_webrtc_sink_test.cc +++ b/third_party/blink/renderer/modules/peerconnection/media_stream_video_webrtc_sink_test.cc
@@ -9,6 +9,7 @@ #include "third_party/blink/renderer/modules/mediastream/mock_media_stream_registry.h" #include "third_party/blink/renderer/modules/mediastream/video_track_adapter_settings.h" #include "third_party/blink/renderer/modules/peerconnection/mock_peer_connection_dependency_factory.h" +#include "third_party/blink/renderer/platform/heap/impl/heap.h" #include "third_party/blink/renderer/platform/mediastream/media_stream_component.h" #include "third_party/blink/renderer/platform/testing/io_task_runner_testing_platform_support.h" @@ -38,7 +39,8 @@ protected: Persistent<MediaStreamComponent> component_; - blink::MockPeerConnectionDependencyFactory dependency_factory_; + Persistent<MockPeerConnectionDependencyFactory> dependency_factory_ = + MakeGarbageCollected<MockPeerConnectionDependencyFactory>(); private: ScopedTestingPlatformSupport<IOTaskRunnerTestingPlatformSupport> platform_; @@ -49,7 +51,7 @@ TEST_F(MediaStreamVideoWebRtcSinkTest, NoiseReductionDefaultsToNotSet) { SetVideoTrack(); blink::MediaStreamVideoWebRtcSink my_sink( - component_, &dependency_factory_, + component_, dependency_factory_.Get(), blink::scheduler::GetSingleThreadTaskRunnerForTesting()); EXPECT_TRUE(my_sink.webrtc_video_track()); EXPECT_FALSE(my_sink.SourceNeedsDenoisingForTesting());
diff --git a/third_party/blink/renderer/modules/peerconnection/mock_peer_connection_dependency_factory.cc b/third_party/blink/renderer/modules/peerconnection/mock_peer_connection_dependency_factory.cc index 51f6076a..187ff76 100644 --- a/third_party/blink/renderer/modules/peerconnection/mock_peer_connection_dependency_factory.cc +++ b/third_party/blink/renderer/modules/peerconnection/mock_peer_connection_dependency_factory.cc
@@ -335,9 +335,7 @@ }; MockPeerConnectionDependencyFactory::MockPeerConnectionDependencyFactory() - : blink::PeerConnectionDependencyFactory( - /*create_p2p_socket_dispatcher =*/false), - signaling_thread_("MockPCFactory WebRtc Signaling Thread") { + : signaling_thread_("MockPCFactory WebRtc Signaling Thread") { EnsureWebRtcAudioDeviceImpl(); CHECK(signaling_thread_.Start()); }
diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc index 82e9493..434df993 100644 --- a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc +++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.cc
@@ -33,11 +33,13 @@ #include "third_party/blink/public/web/web_document.h" #include "third_party/blink/public/web/web_local_frame.h" #include "third_party/blink/public/web/web_local_frame_client.h" +#include "third_party/blink/renderer/core/execution_context/execution_context.h" #include "third_party/blink/renderer/modules/peerconnection/rtc_error_util.h" #include "third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h" #include "third_party/blink/renderer/modules/webrtc/webrtc_audio_device_impl.h" #include "third_party/blink/renderer/platform/mediastream/media_constraints.h" #include "third_party/blink/renderer/platform/mediastream/webrtc_uma_histograms.h" +#include "third_party/blink/renderer/platform/mojo/mojo_binding_context.h" #include "third_party/blink/renderer/platform/p2p/empty_network_manager.h" #include "third_party/blink/renderer/platform/p2p/filtering_network_manager.h" #include "third_party/blink/renderer/platform/p2p/ipc_network_manager.h" @@ -67,6 +69,8 @@ namespace { +using PassKey = base::PassKey<PeerConnectionDependencyFactory>; + enum WebRTCIPHandlingPolicy { DEFAULT, DEFAULT_PUBLIC_AND_PRIVATE_INTERFACES, @@ -108,32 +112,176 @@ IpcPacketSocketFactory* ipc_psf_; }; +// Encapsulates process-wide static dependencies used by +// `PeerConnectionDependencyFactory`, namely the threads used by WebRTC. This +// avoids allocating multiple threads per factory instance, as they are +// "heavy-weight" and we don't want to create them per frame. +class PeerConnectionStaticDeps { + public: + PeerConnectionStaticDeps() + : chrome_signaling_thread_("WebRTC_Signaling"), + chrome_network_thread_("WebRTC_Network") { + if (base::FeatureList::IsEnabled(features::kWebRtcDistinctWorkerThread)) { + chrome_worker_thread_.emplace("WebRTC_Worker"); + } + } + + void EnsureChromeThreadsStarted() { + if (!chrome_signaling_thread_.IsRunning()) + chrome_signaling_thread_.Start(); + if (!chrome_network_thread_.IsRunning()) + chrome_network_thread_.Start(); + + if (chrome_worker_thread_ && !chrome_worker_thread_->IsRunning()) + chrome_worker_thread_->Start(); + + // To allow sending to the signaling/worker threads. + jingle_glue::JingleThreadWrapper::EnsureForCurrentMessageLoop(); + jingle_glue::JingleThreadWrapper::current()->set_send_allowed(true); + } + + base::WaitableEvent& InitializeWorkerThread() { + // If there is no worker thread, the event was already created SIGNALED. + if (!chrome_worker_thread_) + return init_worker_event; + + if (!worker_thread_) { + PostCrossThreadTask( + *chrome_worker_thread_->task_runner(), FROM_HERE, + CrossThreadBindOnce(&PeerConnectionStaticDeps::InitializeOnThread, + CrossThreadUnretained(this), + CrossThreadUnretained(&worker_thread_), + CrossThreadUnretained(&init_worker_event))); + } + return init_worker_event; + } + + base::WaitableEvent& InitializeNetworkThread() { + if (!network_thread_) { + PostCrossThreadTask( + *chrome_network_thread_.task_runner(), FROM_HERE, + CrossThreadBindOnce(&PeerConnectionStaticDeps::InitializeOnThread, + CrossThreadUnretained(this), + CrossThreadUnretained(&network_thread_), + CrossThreadUnretained(&init_network_event))); + } + return init_network_event; + } + + base::WaitableEvent& InitializeSignalingThread() { + if (!signaling_thread_) { + PostCrossThreadTask( + *chrome_signaling_thread_.task_runner(), FROM_HERE, + CrossThreadBindOnce(&PeerConnectionStaticDeps::InitializeOnThread, + CrossThreadUnretained(this), + CrossThreadUnretained(&signaling_thread_), + CrossThreadUnretained(&init_signaling_event))); + } + return init_signaling_event; + } + + rtc::Thread* GetSignalingThread() { return signaling_thread_; } + rtc::Thread* GetWorkerThread() { return worker_thread_; } + rtc::Thread* GetNetworkThread() { return network_thread_; } + base::Thread& GetChromeSignalingThread() { return chrome_signaling_thread_; } + base::Thread* GetChromeWorkerThread() { + return chrome_worker_thread_.has_value() ? &*chrome_worker_thread_ + : nullptr; + } + base::Thread& GetChromeNetworkThread() { return chrome_network_thread_; } + + private: + void InitializeOnThread(rtc::Thread** thread, base::WaitableEvent* event) { + jingle_glue::JingleThreadWrapper::EnsureForCurrentMessageLoop(); + jingle_glue::JingleThreadWrapper::current()->set_send_allowed(true); + if (!*thread) { + *thread = jingle_glue::JingleThreadWrapper::current(); + event->Signal(); + } + } + + // PeerConnection threads. signaling_thread_ is created from the "current" + // (main) chrome thread. + rtc::Thread* signaling_thread_ = nullptr; + rtc::Thread* worker_thread_ = nullptr; + rtc::Thread* network_thread_ = nullptr; + base::Thread chrome_signaling_thread_; + base::Optional<base::Thread> chrome_worker_thread_; + base::Thread chrome_network_thread_; + + // WaitableEvents for observing thread initialization. + base::WaitableEvent init_signaling_event{ + base::WaitableEvent::ResetPolicy::MANUAL, + base::WaitableEvent::InitialState::NOT_SIGNALED}; + base::WaitableEvent init_worker_event{ + base::WaitableEvent::ResetPolicy::MANUAL, + // If we don't create a separate worker thread, start the event as already + // signaled so it doesn't block anything. + base::FeatureList::IsEnabled(features::kWebRtcDistinctWorkerThread) + ? base::WaitableEvent::InitialState::NOT_SIGNALED + : base::WaitableEvent::InitialState::SIGNALED}; + base::WaitableEvent init_network_event{ + base::WaitableEvent::ResetPolicy::MANUAL, + base::WaitableEvent::InitialState::NOT_SIGNALED}; + + THREAD_CHECKER(thread_checker_); +}; + +PeerConnectionStaticDeps& StaticDeps() { + DEFINE_STATIC_LOCAL(PeerConnectionStaticDeps, instance, ()); + return instance; +} + +rtc::Thread* GetSignalingThread() { + return StaticDeps().GetSignalingThread(); +} +rtc::Thread* GetWorkerThread() { + return StaticDeps().GetWorkerThread(); +} +rtc::Thread* GetNetworkThread() { + return StaticDeps().GetNetworkThread(); +} +base::Thread& GetChromeSignalingThread() { + return StaticDeps().GetChromeSignalingThread(); +} +base::Thread* GetChromeWorkerThread() { + return StaticDeps().GetChromeWorkerThread(); +} +base::Thread& GetChromeNetworkThread() { + return StaticDeps().GetChromeNetworkThread(); +} + } // namespace -PeerConnectionDependencyFactory::PeerConnectionDependencyFactory( - bool create_p2p_socket_dispatcher) - : network_manager_(nullptr), - p2p_socket_dispatcher_( - create_p2p_socket_dispatcher ? new P2PSocketDispatcher() : nullptr), - chrome_signaling_thread_("WebRTC_Signaling"), - chrome_network_thread_("WebRTC_Network") { - if (base::FeatureList::IsEnabled(features::kWebRtcDistinctWorkerThread)) { - chrome_worker_thread_.emplace("WebRTC_Worker"); +// static +const char PeerConnectionDependencyFactory::kSupplementName[] = + "PeerConnectionDependencyFactory"; + +PeerConnectionDependencyFactory& PeerConnectionDependencyFactory::From( + ExecutionContext& context) { + auto* supplement = + Supplement<ExecutionContext>::From<PeerConnectionDependencyFactory>( + context); + if (!supplement) { + supplement = MakeGarbageCollected<PeerConnectionDependencyFactory>( + context, PassKey()); + ProvideTo(context, supplement); } + return *supplement; } -PeerConnectionDependencyFactory::~PeerConnectionDependencyFactory() { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - DVLOG(1) << "~PeerConnectionDependencyFactory()"; - DCHECK(!pc_factory_); -} +PeerConnectionDependencyFactory::PeerConnectionDependencyFactory( + ExecutionContext& context, + PassKey) + : Supplement(context), + ExecutionContextLifecycleObserver(&context), + network_manager_(nullptr), + p2p_socket_dispatcher_(P2PSocketDispatcher::From(context)) {} -PeerConnectionDependencyFactory* -PeerConnectionDependencyFactory::GetInstance() { - DEFINE_STATIC_LOCAL(PeerConnectionDependencyFactory, instance, - (/*create_p2p_socket_dispatcher= */ true)); - return &instance; -} +PeerConnectionDependencyFactory::PeerConnectionDependencyFactory() + : Supplement(nullptr), ExecutionContextLifecycleObserver(nullptr) {} + +PeerConnectionDependencyFactory::~PeerConnectionDependencyFactory() = default; std::unique_ptr<RTCPeerConnectionHandler> PeerConnectionDependencyFactory::CreateRTCPeerConnectionHandler( @@ -159,23 +307,20 @@ return pc_factory_; } -void PeerConnectionDependencyFactory::WillDestroyCurrentMessageLoop() { - CleanupPeerConnectionFactory(); -} - void PeerConnectionDependencyFactory::CreatePeerConnectionFactory() { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); DCHECK(!pc_factory_.get()); - DCHECK(!signaling_thread_); - DCHECK(!worker_thread_); - DCHECK(!network_thread_); DCHECK(!network_manager_); DCHECK(!socket_factory_); - DCHECK(!chrome_signaling_thread_.IsRunning()); - DCHECK(!chrome_worker_thread_ || !chrome_worker_thread_->IsRunning()); - DCHECK(!chrome_network_thread_.IsRunning()); DVLOG(1) << "PeerConnectionDependencyFactory::CreatePeerConnectionFactory()"; + StaticDeps().EnsureChromeThreadsStarted(); + base::WaitableEvent& worker_thread_started_event = + StaticDeps().InitializeWorkerThread(); + StaticDeps().InitializeNetworkThread(); + StaticDeps().InitializeSignalingThread(); + #if BUILDFLAG(RTC_USE_H264) && BUILDFLAG(ENABLE_FFMPEG_VIDEO_DECODERS) // Building /w |rtc_use_h264|, is the corresponding run-time feature enabled? if (!base::FeatureList::IsEnabled( @@ -187,11 +332,6 @@ webrtc::DisableRtcUseH264(); #endif // BUILDFLAG(RTC_USE_H264) && BUILDFLAG(ENABLE_FFMPEG_VIDEO_DECODERS) - base::CurrentThread::Get()->AddDestructionObserver(this); - // To allow sending to the signaling/worker threads. - jingle_glue::JingleThreadWrapper::EnsureForCurrentMessageLoop(); - jingle_glue::JingleThreadWrapper::current()->set_send_allowed(true); - EnsureWebRtcAudioDeviceImpl(); // Init SSL, which will be needed by PeerConnection. @@ -201,22 +341,6 @@ return; } - base::WaitableEvent start_worker_event( - base::WaitableEvent::ResetPolicy::MANUAL, - base::WaitableEvent::InitialState::NOT_SIGNALED); - if (chrome_worker_thread_) { - CHECK(chrome_worker_thread_->Start()); - PostCrossThreadTask( - *chrome_worker_thread_->task_runner().get(), FROM_HERE, - CrossThreadBindOnce( - &PeerConnectionDependencyFactory::InitializeWorkerThread, - CrossThreadUnretained(this), CrossThreadUnretained(&worker_thread_), - CrossThreadUnretained(&start_worker_event))); - } - - CHECK(chrome_signaling_thread_.Start()); - CHECK(chrome_network_thread_.Start()); - base::WaitableEvent create_network_manager_event( base::WaitableEvent::ResetPolicy::MANUAL, base::WaitableEvent::InitialState::NOT_SIGNALED); @@ -226,36 +350,34 @@ blink::features::kWebRtcHideLocalIpsWithMdns)) { // Note that MdnsResponderAdapter is created on the main thread to have // access to the connector to the service manager. + // TODO(crbug.com/1178670): Pass MojoBindingContext and use its BIB to bind. mdns_responder = std::make_unique<MdnsResponderAdapter>(); } #endif // BUILDFLAG(ENABLE_MDNS) PostCrossThreadTask( - *chrome_network_thread_.task_runner().get(), FROM_HERE, + *GetWebRtcNetworkTaskRunner(), FROM_HERE, CrossThreadBindOnce(&PeerConnectionDependencyFactory:: CreateIpcNetworkManagerOnNetworkThread, - CrossThreadUnretained(this), + WrapCrossThreadPersistent(this), CrossThreadUnretained(&create_network_manager_event), - std::move(mdns_responder), - CrossThreadUnretained(&network_thread_))); + std::move(mdns_responder))); create_network_manager_event.Wait(); - CHECK(network_thread_); + CHECK(GetNetworkThread()); // Wait for the worker thread, since `InitializeSignalingThread` needs to // refer to `worker_thread_`. - if (chrome_worker_thread_) { - start_worker_event.Wait(); - CHECK(worker_thread_); - } + worker_thread_started_event.Wait(); + CHECK(!GetChromeWorkerThread() || GetWorkerThread()); base::WaitableEvent start_signaling_event( base::WaitableEvent::ResetPolicy::MANUAL, base::WaitableEvent::InitialState::NOT_SIGNALED); PostCrossThreadTask( - *chrome_signaling_thread_.task_runner().get(), FROM_HERE, + *GetChromeSignalingThread().task_runner(), FROM_HERE, CrossThreadBindOnce( &PeerConnectionDependencyFactory::InitializeSignalingThread, - CrossThreadUnretained(this), + WrapCrossThreadPersistent(this), Platform::Current()->GetRenderingColorSpace(), Platform::Current()->MediaThreadTaskRunner(), CrossThreadUnretained(Platform::Current()->GetGpuFactories()), @@ -263,7 +385,7 @@ CrossThreadUnretained(&start_signaling_event))); start_signaling_event.Wait(); - CHECK(signaling_thread_); + CHECK(GetSignalingThread()); } void PeerConnectionDependencyFactory::InitializeSignalingThread( @@ -272,13 +394,12 @@ media::GpuVideoAcceleratorFactories* gpu_factories, media::DecoderFactory* media_decoder_factory, base::WaitableEvent* event) { - DCHECK(chrome_signaling_thread_.task_runner()->BelongsToCurrentThread()); - DCHECK(network_thread_); - DCHECK(p2p_socket_dispatcher_.get()); - - jingle_glue::JingleThreadWrapper::EnsureForCurrentMessageLoop(); - jingle_glue::JingleThreadWrapper::current()->set_send_allowed(true); - signaling_thread_ = jingle_glue::JingleThreadWrapper::current(); + DCHECK(GetChromeSignalingThread().task_runner()->BelongsToCurrentThread()); + DCHECK(GetNetworkThread()); + // The task to initialize `signaling_thread_` was posted to the same thread, + // so there is no need to wait on its event. + DCHECK(GetSignalingThread()); + DCHECK(p2p_socket_dispatcher_); net::NetworkTrafficAnnotationTag traffic_annotation = net::DefineNetworkTrafficAnnotation("webrtc_peer_connection", R"( @@ -316,8 +437,8 @@ "block it." } )"); - socket_factory_.reset(new IpcPacketSocketFactory(p2p_socket_dispatcher_.get(), - traffic_annotation)); + socket_factory_ = std::make_unique<IpcPacketSocketFactory>( + p2p_socket_dispatcher_.Get(), traffic_annotation); gpu_factories_ = gpu_factories; std::unique_ptr<webrtc::VideoEncoderFactory> webrtc_encoder_factory = @@ -343,9 +464,10 @@ } webrtc::PeerConnectionFactoryDependencies pcf_deps; - pcf_deps.worker_thread = worker_thread_ ? worker_thread_ : signaling_thread_; - pcf_deps.signaling_thread = signaling_thread_; - pcf_deps.network_thread = network_thread_; + pcf_deps.worker_thread = + GetWorkerThread() ? GetWorkerThread() : GetSignalingThread(); + pcf_deps.signaling_thread = GetSignalingThread(); + pcf_deps.network_thread = GetNetworkThread(); pcf_deps.task_queue_factory = CreateWebRtcTaskQueueFactory(); pcf_deps.call_factory = webrtc::CreateCallFactory(); pcf_deps.event_log_factory = std::make_unique<webrtc::RtcEventLogFactory>( @@ -503,8 +625,8 @@ std::make_unique<blink::EmptyNetworkManager>(network_manager_.get()); } auto port_allocator = std::make_unique<P2PPortAllocator>( - p2p_socket_dispatcher_, std::move(network_manager), socket_factory_.get(), - port_config, requesting_origin); + std::move(network_manager), socket_factory_.get(), port_config, + requesting_origin); if (IsValidPortRange(min_port, max_port)) port_allocator->SetPortRange(min_port, max_port); @@ -530,8 +652,8 @@ if (!PeerConnectionFactoryCreated()) CreatePeerConnectionFactory(); - return webrtc::VideoTrackSourceProxy::Create(signaling_thread_, - network_thread_, source) + return webrtc::VideoTrackSourceProxy::Create(GetSignalingThread(), + GetNetworkThread(), source) .get(); } @@ -557,56 +679,47 @@ return audio_device_.get(); } -void PeerConnectionDependencyFactory::InitializeWorkerThread( - rtc::Thread** thread, - base::WaitableEvent* event) { - jingle_glue::JingleThreadWrapper::EnsureForCurrentMessageLoop(); - jingle_glue::JingleThreadWrapper::current()->set_send_allowed(true); - *thread = jingle_glue::JingleThreadWrapper::current(); - event->Signal(); -} - void PeerConnectionDependencyFactory::CreateIpcNetworkManagerOnNetworkThread( base::WaitableEvent* event, - std::unique_ptr<MdnsResponderAdapter> mdns_responder, - rtc::Thread** thread) { - DCHECK(chrome_network_thread_.task_runner()->BelongsToCurrentThread()); - - jingle_glue::JingleThreadWrapper::EnsureForCurrentMessageLoop(); - jingle_glue::JingleThreadWrapper::current()->set_send_allowed(true); - *thread = jingle_glue::JingleThreadWrapper::current(); + std::unique_ptr<MdnsResponderAdapter> mdns_responder) { + DCHECK(GetChromeNetworkThread().task_runner()->BelongsToCurrentThread()); + // The task to initialize `network_thread_` was posted to the same thread, so + // there is no need to wait on its event. + DCHECK(GetNetworkThread()); network_manager_ = std::make_unique<blink::IpcNetworkManager>( - p2p_socket_dispatcher_.get(), std::move(mdns_responder)); + p2p_socket_dispatcher_.Get(), std::move(mdns_responder)); event->Signal(); } -void PeerConnectionDependencyFactory::DeleteIpcNetworkManager() { - DCHECK(chrome_network_thread_.task_runner()->BelongsToCurrentThread()); +void PeerConnectionDependencyFactory::DeleteIpcNetworkManager( + base::WaitableEvent* event) { + DCHECK(GetChromeNetworkThread().task_runner()->BelongsToCurrentThread()); network_manager_.reset(); + event->Signal(); +} + +void PeerConnectionDependencyFactory::ContextDestroyed() { + CleanupPeerConnectionFactory(); } void PeerConnectionDependencyFactory::CleanupPeerConnectionFactory() { DVLOG(1) << "PeerConnectionDependencyFactory::CleanupPeerConnectionFactory()"; pc_factory_ = nullptr; if (network_manager_) { + base::WaitableEvent event(base::WaitableEvent::ResetPolicy::MANUAL, + base::WaitableEvent::InitialState::NOT_SIGNALED); // The network manager needs to free its resources on the thread they were - // created, which is the worked thread. - if (chrome_network_thread_.IsRunning()) { - PostCrossThreadTask( - *chrome_network_thread_.task_runner().get(), FROM_HERE, - CrossThreadBindOnce( - &PeerConnectionDependencyFactory::DeleteIpcNetworkManager, - CrossThreadUnretained(this))); - // Stopping the thread will wait until all tasks have been - // processed before returning. We wait for the above task to finish before - // letting the the function continue to avoid any potential race issues. - chrome_network_thread_.Stop(); - DCHECK(!network_manager_); - } else { - NOTREACHED() << "Worker thread not running."; - } + // created, which is the network thread. + PostCrossThreadTask( + *GetWebRtcNetworkTaskRunner(), FROM_HERE, + CrossThreadBindOnce( + &PeerConnectionDependencyFactory::DeleteIpcNetworkManager, + WrapCrossThreadPersistent(this), CrossThreadUnretained(&event))); + + event.Wait(); + DCHECK(!network_manager_); } } @@ -618,8 +731,8 @@ scoped_refptr<base::SingleThreadTaskRunner> PeerConnectionDependencyFactory::GetWebRtcNetworkTaskRunner() { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - return chrome_network_thread_.IsRunning() - ? chrome_network_thread_.task_runner() + return GetChromeNetworkThread().IsRunning() + ? GetChromeNetworkThread().task_runner() : nullptr; } @@ -627,8 +740,8 @@ PeerConnectionDependencyFactory::GetWebRtcSignalingTaskRunner() { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); EnsureInitialized(); - return chrome_signaling_thread_.IsRunning() - ? chrome_signaling_thread_.task_runner() + return GetChromeSignalingThread().IsRunning() + ? GetChromeSignalingThread().task_runner() : nullptr; } @@ -668,4 +781,10 @@ PeerConnectionDependencyFactory::GetGpuFactories() { return gpu_factories_; } + +void PeerConnectionDependencyFactory::Trace(Visitor* visitor) const { + Supplement<ExecutionContext>::Trace(visitor); + ExecutionContextLifecycleObserver::Trace(visitor); + visitor->Trace(p2p_socket_dispatcher_); +} } // namespace blink
diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.h b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.h index a8806c8..1e2e7f4 100644 --- a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.h +++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.h
@@ -7,11 +7,15 @@ #include "base/macros.h" #include "base/single_thread_task_runner.h" -#include "base/task/current_thread.h" #include "base/threading/thread.h" #include "base/threading/thread_checker.h" +#include "base/types/pass_key.h" +#include "third_party/blink/renderer/core/execution_context/execution_context.h" +#include "third_party/blink/renderer/core/execution_context/execution_context_lifecycle_observer.h" #include "third_party/blink/renderer/modules/modules_export.h" #include "third_party/blink/renderer/platform/bindings/exception_state.h" +#include "third_party/blink/renderer/platform/mojo/mojo_binding_context.h" +#include "third_party/blink/renderer/platform/supplementable.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" #include "third_party/webrtc/api/peer_connection_interface.h" @@ -49,11 +53,17 @@ // Object factory for RTC PeerConnections. class MODULES_EXPORT PeerConnectionDependencyFactory - : base::CurrentThread::DestructionObserver { + : public GarbageCollected<PeerConnectionDependencyFactory>, + public Supplement<ExecutionContext>, + public ExecutionContextLifecycleObserver { public: - ~PeerConnectionDependencyFactory() override; + static const char kSupplementName[]; - static PeerConnectionDependencyFactory* GetInstance(); + static PeerConnectionDependencyFactory& From(ExecutionContext& context); + PeerConnectionDependencyFactory( + ExecutionContext& context, + base::PassKey<PeerConnectionDependencyFactory>); + ~PeerConnectionDependencyFactory() override; // Create a RTCPeerConnectionHandler object. std::unique_ptr<RTCPeerConnectionHandler> CreateRTCPeerConnectionHandler( @@ -120,8 +130,11 @@ media::GpuVideoAcceleratorFactories* GetGpuFactories(); + void Trace(Visitor*) const override; + protected: - PeerConnectionDependencyFactory(bool create_p2p_socket_dispatcher); + // Ctor for tests. + PeerConnectionDependencyFactory(); virtual const scoped_refptr<webrtc::PeerConnectionFactoryInterface>& GetPcFactory(); @@ -131,10 +144,8 @@ void EnsureWebRtcAudioDeviceImpl(); private: - // Implement base::CurrentThread::DestructionObserver. - // This makes sure the libjingle PeerConnectionFactory is released before - // the renderer message loop is destroyed. - void WillDestroyCurrentMessageLoop() override; + // ExecutionContextLifecycleObserver overrides: + void ContextDestroyed() override; // Functions related to Stun probing trial to determine how fast we could send // Stun request without being dropped by NAT. @@ -151,16 +162,13 @@ media::DecoderFactory* media_decoder_factory, base::WaitableEvent* event); - void InitializeWorkerThread(rtc::Thread** thread, base::WaitableEvent* event); - void CreateIpcNetworkManagerOnNetworkThread( base::WaitableEvent* event, - std::unique_ptr<MdnsResponderAdapter> mdns_responder, - rtc::Thread** thread); - void DeleteIpcNetworkManager(); + std::unique_ptr<MdnsResponderAdapter> mdns_responder); + void DeleteIpcNetworkManager(base::WaitableEvent* event); void CleanupPeerConnectionFactory(); - // network_manager_ must be deleted on the worker thread. The network manager + // network_manager_ must be deleted on the network thread. The network manager // uses |p2p_socket_dispatcher_|. std::unique_ptr<blink::IpcNetworkManager> network_manager_; std::unique_ptr<IpcPacketSocketFactory> socket_factory_; @@ -168,21 +176,12 @@ scoped_refptr<webrtc::PeerConnectionFactoryInterface> pc_factory_; // Dispatches all P2P sockets. - scoped_refptr<P2PSocketDispatcher> p2p_socket_dispatcher_; + Member<P2PSocketDispatcher> p2p_socket_dispatcher_; scoped_refptr<blink::WebRtcAudioDeviceImpl> audio_device_; media::GpuVideoAcceleratorFactories* gpu_factories_; - // PeerConnection threads. signaling_thread_ is created from the - // "current" chrome thread. - rtc::Thread* signaling_thread_ = nullptr; - rtc::Thread* worker_thread_ = nullptr; - rtc::Thread* network_thread_ = nullptr; - base::Thread chrome_signaling_thread_; - base::Optional<base::Thread> chrome_worker_thread_; - base::Thread chrome_network_thread_; - THREAD_CHECKER(thread_checker_); DISALLOW_COPY_AND_ASSIGN(PeerConnectionDependencyFactory);
diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory_test.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory_test.cc index 058ed4f..676ff19 100644 --- a/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory_test.cc +++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory_test.cc
@@ -13,12 +13,12 @@ class PeerConnectionDependencyFactoryTest : public ::testing::Test { public: void SetUp() override { - dependency_factory_.reset(new blink::MockPeerConnectionDependencyFactory()); + dependency_factory_ = + MakeGarbageCollected<MockPeerConnectionDependencyFactory>(); } protected: - std::unique_ptr<blink::MockPeerConnectionDependencyFactory> - dependency_factory_; + Persistent<MockPeerConnectionDependencyFactory> dependency_factory_; }; TEST_F(PeerConnectionDependencyFactoryTest, CreateRTCPeerConnectionHandler) {
diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker.cc index f30455c..d7af394 100644 --- a/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker.cc +++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker.cc
@@ -738,7 +738,8 @@ PeerConnectionTracker::PeerConnectionTracker( mojo::Remote<blink::mojom::blink::PeerConnectionTrackerHost> host, scoped_refptr<base::SingleThreadTaskRunner> main_thread_task_runner) - : peer_connection_tracker_host_(std::move(host)), + : Supplement(nullptr), + peer_connection_tracker_host_(std::move(host)), main_thread_task_runner_(std::move(main_thread_task_runner)) {} PeerConnectionTracker::~PeerConnectionTracker() {}
diff --git a/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker_test.cc b/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker_test.cc index 35c34ce..8c54721 100644 --- a/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker_test.cc +++ b/third_party/blink/renderer/modules/peerconnection/peer_connection_tracker_test.cc
@@ -16,6 +16,7 @@ #include "third_party/blink/renderer/modules/peerconnection/mock_peer_connection_dependency_factory.h" #include "third_party/blink/renderer/modules/peerconnection/mock_rtc_peer_connection_handler_client.h" #include "third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h" +#include "third_party/blink/renderer/platform/heap/impl/heap.h" #include "third_party/blink/renderer/platform/mediastream/media_constraints.h" #include "third_party/blink/renderer/platform/peerconnection/rtc_offer_options_platform.h" #include "third_party/blink/renderer/platform/peerconnection/rtc_rtp_receiver_platform.h" @@ -123,17 +124,23 @@ class MockPeerConnectionHandler : public RTCPeerConnectionHandler { public: MockPeerConnectionHandler() - : RTCPeerConnectionHandler( - &client_, - &dependency_factory_, - blink::scheduler::GetSingleThreadTaskRunnerForTesting(), - /*force_encoded_audio_insertable_streams=*/false, - /*force_encoded_video_insertable_streams=*/false) {} + : MockPeerConnectionHandler( + MakeGarbageCollected<MockPeerConnectionDependencyFactory>()) {} MOCK_METHOD0(CloseClientPeerConnection, void()); MOCK_METHOD1(OnThermalStateChange, void(mojom::blink::DeviceThermalState)); private: - blink::MockPeerConnectionDependencyFactory dependency_factory_; + explicit MockPeerConnectionHandler( + MockPeerConnectionDependencyFactory* factory) + : RTCPeerConnectionHandler( + &client_, + factory, + blink::scheduler::GetSingleThreadTaskRunnerForTesting(), + /*force_encoded_audio_insertable_streams=*/false, + /*force_encoded_video_insertable_streams=*/false), + factory_(factory) {} + + Persistent<MockPeerConnectionDependencyFactory> factory_; MockRTCPeerConnectionHandlerClient client_; };
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_certificate_generator.cc b/third_party/blink/renderer/modules/peerconnection/rtc_certificate_generator.cc index 77c2a8c..c44ff7e7 100644 --- a/third_party/blink/renderer/modules/peerconnection/rtc_certificate_generator.cc +++ b/third_party/blink/renderer/modules/peerconnection/rtc_certificate_generator.cc
@@ -10,6 +10,7 @@ #include "base/bind.h" #include "base/macros.h" #include "base/single_thread_task_runner.h" +#include "third_party/blink/renderer/core/execution_context/execution_context.h" #include "third_party/blink/renderer/modules/peerconnection/peer_connection_dependency_factory.h" #include "third_party/blink/renderer/platform/wtf/thread_safe_ref_counted.h" #include "third_party/webrtc/api/scoped_refptr.h" @@ -86,15 +87,16 @@ const rtc::KeyParams& key_params, const absl::optional<uint64_t>& expires_ms, blink::RTCCertificateCallback completion_callback, + ExecutionContext& context, scoped_refptr<base::SingleThreadTaskRunner> task_runner) { DCHECK(key_params.IsValid()); - auto* pc_dependency_factory = - blink::PeerConnectionDependencyFactory::GetInstance(); - pc_dependency_factory->EnsureInitialized(); + auto& pc_dependency_factory = + blink::PeerConnectionDependencyFactory::From(context); + pc_dependency_factory.EnsureInitialized(); scoped_refptr<RTCCertificateGeneratorRequest> request = base::MakeRefCounted<RTCCertificateGeneratorRequest>( - task_runner, pc_dependency_factory->GetWebRtcNetworkTaskRunner()); + task_runner, pc_dependency_factory.GetWebRtcNetworkTaskRunner()); request->GenerateCertificateAsync(key_params, expires_ms, std::move(completion_callback)); } @@ -104,18 +106,22 @@ void RTCCertificateGenerator::GenerateCertificate( const rtc::KeyParams& key_params, blink::RTCCertificateCallback completion_callback, + ExecutionContext& context, scoped_refptr<base::SingleThreadTaskRunner> task_runner) { - GenerateCertificateWithOptionalExpiration( - key_params, absl::nullopt, std::move(completion_callback), task_runner); + GenerateCertificateWithOptionalExpiration(key_params, absl::nullopt, + std::move(completion_callback), + context, task_runner); } void RTCCertificateGenerator::GenerateCertificateWithExpiration( const rtc::KeyParams& key_params, uint64_t expires_ms, blink::RTCCertificateCallback completion_callback, + ExecutionContext& context, scoped_refptr<base::SingleThreadTaskRunner> task_runner) { - GenerateCertificateWithOptionalExpiration( - key_params, expires_ms, std::move(completion_callback), task_runner); + GenerateCertificateWithOptionalExpiration(key_params, expires_ms, + std::move(completion_callback), + context, task_runner); } bool RTCCertificateGenerator::IsSupportedKeyParams(
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_certificate_generator.h b/third_party/blink/renderer/modules/peerconnection/rtc_certificate_generator.h index db8464f..1c0936c6 100644 --- a/third_party/blink/renderer/modules/peerconnection/rtc_certificate_generator.h +++ b/third_party/blink/renderer/modules/peerconnection/rtc_certificate_generator.h
@@ -18,6 +18,8 @@ namespace blink { +class ExecutionContext; + using RTCCertificateCallback = base::OnceCallback<void(rtc::scoped_refptr<rtc::RTCCertificate>)>; @@ -35,11 +37,13 @@ void GenerateCertificate( const rtc::KeyParams& key_params, blink::RTCCertificateCallback completion_callback, + ExecutionContext& context, scoped_refptr<base::SingleThreadTaskRunner> task_runner); void GenerateCertificateWithExpiration( const rtc::KeyParams& key_params, uint64_t expires_ms, blink::RTCCertificateCallback completion_callback, + ExecutionContext& context, scoped_refptr<base::SingleThreadTaskRunner> task_runner); // Determines if the parameters are supported by |GenerateCertificate|.
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_dtls_transport.cc b/third_party/blink/renderer/modules/peerconnection/rtc_dtls_transport.cc index f68ab13..94b752fc 100644 --- a/third_party/blink/renderer/modules/peerconnection/rtc_dtls_transport.cc +++ b/third_party/blink/renderer/modules/peerconnection/rtc_dtls_transport.cc
@@ -52,9 +52,8 @@ scoped_refptr<base::SingleThreadTaskRunner> proxy_thread = frame->GetTaskRunner(TaskType::kNetworking); scoped_refptr<base::SingleThreadTaskRunner> host_thread = - PeerConnectionDependencyFactory::GetInstance() - ->GetWebRtcNetworkTaskRunner(); - + PeerConnectionDependencyFactory::From(*context) + .GetWebRtcNetworkTaskRunner(); return DtlsTransportProxy::Create(*frame, proxy_thread, host_thread, native_transport, delegate); }
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.cc b/third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.cc index c8a127df..8e8d640b 100644 --- a/third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.cc +++ b/third_party/blink/renderer/modules/peerconnection/rtc_ice_transport.cc
@@ -86,10 +86,10 @@ scoped_refptr<base::SingleThreadTaskRunner> proxy_thread = context->GetTaskRunner(TaskType::kNetworking); - PeerConnectionDependencyFactory::GetInstance()->EnsureInitialized(); + PeerConnectionDependencyFactory::From(*context).EnsureInitialized(); scoped_refptr<base::SingleThreadTaskRunner> host_thread = - PeerConnectionDependencyFactory::GetInstance() - ->GetWebRtcNetworkTaskRunner(); + PeerConnectionDependencyFactory::From(*context) + .GetWebRtcNetworkTaskRunner(); return MakeGarbageCollected<RTCIceTransport>( context, std::move(proxy_thread), std::move(host_thread), std::make_unique<DtlsIceTransportAdapterCrossThreadFactory>(
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc index 0d0337a..08a025bd 100644 --- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc +++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection.cc
@@ -800,8 +800,8 @@ std::move(g_create_rpc_peer_connection_handler_callback_.Get()).Run(); } else { peer_handler_ = - PeerConnectionDependencyFactory::GetInstance() - ->CreateRTCPeerConnectionHandler( + PeerConnectionDependencyFactory::From(*context) + .CreateRTCPeerConnectionHandler( this, window->GetTaskRunner(TaskType::kInternalMedia), force_encoded_audio_insertable_streams_, force_encoded_video_insertable_streams_); @@ -1890,11 +1890,12 @@ ->GetTaskRunner(blink::TaskType::kInternalMedia); if (!expires) { certificate_generator->GenerateCertificate( - key_params.value(), std::move(completion_callback), task_runner); + key_params.value(), std::move(completion_callback), + *ExecutionContext::From(script_state), task_runner); } else { certificate_generator->GenerateCertificateWithExpiration( key_params.value(), expires.value(), std::move(completion_callback), - task_runner); + *ExecutionContext::From(script_state), task_runner); } return promise;
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc index 9265e14..ef34d86f 100644 --- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc +++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.cc
@@ -1980,6 +1980,7 @@ bool RTCPeerConnectionHandler::RemoveTrackPlanB( blink::RTCRtpSenderPlatform* web_sender) { + DCHECK(task_runner_->RunsTasksInCurrentSequence()); DCHECK_EQ(configuration_.sdp_semantics, webrtc::SdpSemantics::kPlanB); auto* track = web_sender->Track(); auto it = FindSender(web_sender->Id()); @@ -2324,6 +2325,7 @@ void RTCPeerConnectionHandler::TrackIceConnectionStateChange( RTCPeerConnectionHandler::IceConnectionStateVersion version, webrtc::PeerConnectionInterface::IceConnectionState state) { + DCHECK(task_runner_->RunsTasksInCurrentSequence()); if (!peer_connection_tracker_) return; switch (version) { @@ -2483,6 +2485,7 @@ webrtc::PeerConnectionInterface::SignalingState signaling_state, std::vector<blink::RtpTransceiverState> transceiver_states, bool is_remote_description) { + DCHECK(task_runner_->RunsTasksInCurrentSequence()); DCHECK_EQ(configuration_.sdp_semantics, webrtc::SdpSemantics::kUnifiedPlan); Vector<std::unique_ptr<RTCRtpTransceiverPlatform>> platform_transceivers( SafeCast<WTF::wtf_size_t>(transceiver_states.size()));
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h index 0e2e425e..44841dc 100644 --- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h +++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler.h
@@ -464,9 +464,7 @@ webrtc::PeerConnectionInterface::SignalingState previous_signaling_state_ = webrtc::PeerConnectionInterface::kStable; - // |dependency_factory_| is a raw pointer, and is valid for the lifetime of - // RenderThreadImpl. - blink::PeerConnectionDependencyFactory* const dependency_factory_ = nullptr; + const Persistent<PeerConnectionDependencyFactory> dependency_factory_; blink::WebLocalFrame* frame_ = nullptr;
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler_test.cc b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler_test.cc index dec4d8ee..6a625467 100644 --- a/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler_test.cc +++ b/third_party/blink/renderer/modules/peerconnection/rtc_peer_connection_handler_test.cc
@@ -33,6 +33,7 @@ #include "third_party/blink/public/platform/web_url.h" #include "third_party/blink/public/web/web_heap.h" #include "third_party/blink/renderer/core/frame/local_frame.h" +#include "third_party/blink/renderer/core/testing/sim/sim_test.h" #include "third_party/blink/renderer/modules/mediastream/media_stream_video_track.h" #include "third_party/blink/renderer/modules/mediastream/mock_media_stream_video_source.h" #include "third_party/blink/renderer/modules/mediastream/processed_local_audio_source.h" @@ -282,18 +283,19 @@ return native_peer_connection()->observer(); } - bool HasThermalUmaListner() const { return thermal_uma_listener(); } + bool HasThermalUmaListener() const { return thermal_uma_listener(); } }; -class RTCPeerConnectionHandlerTest : public ::testing::Test { +class RTCPeerConnectionHandlerTest : public SimTest { public: RTCPeerConnectionHandlerTest() : mock_peer_connection_(nullptr) {} void SetUp() override { + SimTest::SetUp(); mock_client_ = std::make_unique<NiceMock<MockRTCPeerConnectionHandlerClient>>(); mock_dependency_factory_ = - std::make_unique<blink::MockPeerConnectionDependencyFactory>(); + MakeGarbageCollected<MockPeerConnectionDependencyFactory>(); pc_handler_ = CreateRTCPeerConnectionHandlerUnderTest(); mock_tracker_ = MakeGarbageCollected<NiceMock<MockPeerConnectionTracker>>(); @@ -309,6 +311,7 @@ } void TearDown() override { + SimTest::TearDown(); pc_handler_ = nullptr; mock_tracker_ = nullptr; mock_dependency_factory_ = nullptr; @@ -319,7 +322,7 @@ std::unique_ptr<RTCPeerConnectionHandlerUnderTest> CreateRTCPeerConnectionHandlerUnderTest() { return std::make_unique<RTCPeerConnectionHandlerUnderTest>( - mock_client_.get(), mock_dependency_factory_.get()); + mock_client_.get(), mock_dependency_factory_.Get()); } // Creates a WebKit local MediaStream. @@ -330,7 +333,7 @@ audio_track_label, MediaStreamSource::kTypeAudio, String::FromUTF8("audio_track"), false /* remote */); auto processed_audio_source = std::make_unique<ProcessedLocalAudioSource>( - nullptr /* consumer_web_frame is N/A for non-browser tests */, + *LocalFrameRoot().GetFrame(), MediaStreamDevice(blink::mojom::MediaStreamType::DEVICE_AUDIO_CAPTURE, "mock_device_id", "Mock device", media::AudioParameters::kAudioCDSampleRate, @@ -584,8 +587,7 @@ ScopedTestingPlatformSupport<AudioCapturerSourceTestingPlatformSupport> webrtc_audio_device_platform_support_; std::unique_ptr<MockRTCPeerConnectionHandlerClient> mock_client_; - std::unique_ptr<blink::MockPeerConnectionDependencyFactory> - mock_dependency_factory_; + Persistent<MockPeerConnectionDependencyFactory> mock_dependency_factory_; Persistent<NiceMock<MockPeerConnectionTracker>> mock_tracker_; std::unique_ptr<RTCPeerConnectionHandlerUnderTest> pc_handler_; @@ -1281,7 +1283,7 @@ for (bool force_encoded_audio_insertable_streams : {true, false}) { for (bool force_encoded_video_insertable_streams : {true, false}) { auto handler = std::make_unique<RTCPeerConnectionHandlerUnderTest>( - mock_client_.get(), mock_dependency_factory_.get(), + mock_client_.get(), mock_dependency_factory_.Get(), force_encoded_audio_insertable_streams, force_encoded_video_insertable_streams); EXPECT_EQ(handler->force_encoded_audio_insertable_streams(), @@ -1349,10 +1351,10 @@ TEST_F(RTCPeerConnectionHandlerTest, ThermalStateUmaListenerCreatedWhenVideoStreamAdded) { base::HistogramTester histogram; - EXPECT_FALSE(pc_handler_->HasThermalUmaListner()); + EXPECT_FALSE(pc_handler_->HasThermalUmaListener()); MediaStreamDescriptor* local_stream = CreateLocalMediaStream("local_stream"); EXPECT_TRUE(AddStream(local_stream)); - EXPECT_TRUE(pc_handler_->HasThermalUmaListner()); + EXPECT_TRUE(pc_handler_->HasThermalUmaListener()); } } // namespace blink
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc index e654738..cf768997 100644 --- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc +++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver.cc
@@ -290,8 +290,8 @@ HeapVector<Member<RTCRtpHeaderExtensionCapability>>()); std::unique_ptr<webrtc::RtpCapabilities> rtc_capabilities = - PeerConnectionDependencyFactory::GetInstance()->GetReceiverCapabilities( - kind); + PeerConnectionDependencyFactory::From(*ExecutionContext::From(state)) + .GetReceiverCapabilities(kind); HeapVector<Member<RTCRtpCodecCapability>> codecs; codecs.ReserveInitialCapacity(
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver_impl_test.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver_impl_test.cc index a29e20e..04dce62 100644 --- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver_impl_test.cc +++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_receiver_impl_test.cc
@@ -32,12 +32,13 @@ class RTCRtpReceiverImplTest : public ::testing::Test { public: void SetUp() override { - dependency_factory_.reset(new blink::MockPeerConnectionDependencyFactory()); + dependency_factory_ = + MakeGarbageCollected<MockPeerConnectionDependencyFactory>(); main_thread_ = blink::scheduler::GetSingleThreadTaskRunnerForTesting(); track_map_ = base::MakeRefCounted<blink::WebRtcMediaStreamTrackAdapterMap>( - dependency_factory_.get(), main_thread_); + dependency_factory_.Get(), main_thread_); peer_connection_ = new rtc::RefCountedObject<blink::MockPeerConnectionImpl>( - dependency_factory_.get(), nullptr); + dependency_factory_.Get(), nullptr); } void TearDown() override { @@ -106,8 +107,7 @@ ScopedTestingPlatformSupport<IOTaskRunnerTestingPlatformSupport> platform_; - std::unique_ptr<blink::MockPeerConnectionDependencyFactory> - dependency_factory_; + Persistent<blink::MockPeerConnectionDependencyFactory> dependency_factory_; scoped_refptr<base::SingleThreadTaskRunner> main_thread_; scoped_refptr<blink::WebRtcMediaStreamTrackAdapterMap> track_map_; rtc::scoped_refptr<blink::MockPeerConnectionImpl> peer_connection_;
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc index c9a9b8f..4fac1cd6 100644 --- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc +++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender.cc
@@ -736,8 +736,8 @@ HeapVector<Member<RTCRtpHeaderExtensionCapability>>()); std::unique_ptr<webrtc::RtpCapabilities> rtc_capabilities = - PeerConnectionDependencyFactory::GetInstance()->GetSenderCapabilities( - kind); + PeerConnectionDependencyFactory::From(*ExecutionContext::From(state)) + .GetSenderCapabilities(kind); HeapVector<Member<RTCRtpCodecCapability>> codecs; codecs.ReserveInitialCapacity(
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender_impl_test.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender_impl_test.cc index 1248caa3..ae47b8b1 100644 --- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender_impl_test.cc +++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_sender_impl_test.cc
@@ -19,6 +19,7 @@ #include "third_party/blink/renderer/modules/peerconnection/mock_peer_connection_impl.h" #include "third_party/blink/renderer/modules/peerconnection/test_webrtc_stats_report_obtainer.h" #include "third_party/blink/renderer/modules/peerconnection/webrtc_media_stream_track_adapter_map.h" +#include "third_party/blink/renderer/platform/heap/impl/heap.h" #include "third_party/blink/renderer/platform/mediastream/media_stream_audio_source.h" #include "third_party/blink/renderer/platform/mediastream/media_stream_component.h" #include "third_party/blink/renderer/platform/mediastream/media_stream_source.h" @@ -37,12 +38,13 @@ class RTCRtpSenderImplTest : public ::testing::Test { public: void SetUp() override { - dependency_factory_.reset(new blink::MockPeerConnectionDependencyFactory()); + dependency_factory_ = + MakeGarbageCollected<MockPeerConnectionDependencyFactory>(); main_thread_ = blink::scheduler::GetSingleThreadTaskRunnerForTesting(); track_map_ = base::MakeRefCounted<blink::WebRtcMediaStreamTrackAdapterMap>( - dependency_factory_.get(), main_thread_); + dependency_factory_.Get(), main_thread_); peer_connection_ = new rtc::RefCountedObject<blink::MockPeerConnectionImpl>( - dependency_factory_.get(), nullptr); + dependency_factory_.Get(), nullptr); mock_webrtc_sender_ = new rtc::RefCountedObject<webrtc::MockRtpSender>(); } @@ -142,8 +144,7 @@ ScopedTestingPlatformSupport<IOTaskRunnerTestingPlatformSupport> platform_; - std::unique_ptr<blink::MockPeerConnectionDependencyFactory> - dependency_factory_; + Persistent<MockPeerConnectionDependencyFactory> dependency_factory_; scoped_refptr<base::SingleThreadTaskRunner> main_thread_; scoped_refptr<blink::WebRtcMediaStreamTrackAdapterMap> track_map_; rtc::scoped_refptr<blink::MockPeerConnectionImpl> peer_connection_;
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_transceiver_impl_test.cc b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_transceiver_impl_test.cc index f9c39fe..5f1a44f 100644 --- a/third_party/blink/renderer/modules/peerconnection/rtc_rtp_transceiver_impl_test.cc +++ b/third_party/blink/renderer/modules/peerconnection/rtc_rtp_transceiver_impl_test.cc
@@ -33,12 +33,13 @@ class RTCRtpTransceiverImplTest : public ::testing::Test { public: void SetUp() override { - dependency_factory_.reset(new blink::MockPeerConnectionDependencyFactory()); + dependency_factory_ = + MakeGarbageCollected<MockPeerConnectionDependencyFactory>(); main_task_runner_ = blink::scheduler::GetSingleThreadTaskRunnerForTesting(); track_map_ = base::MakeRefCounted<blink::WebRtcMediaStreamTrackAdapterMap>( - dependency_factory_.get(), main_task_runner_); + dependency_factory_.Get(), main_task_runner_); peer_connection_ = new rtc::RefCountedObject<blink::MockPeerConnectionImpl>( - dependency_factory_.get(), nullptr); + dependency_factory_.Get(), nullptr); } void TearDown() override { @@ -179,8 +180,7 @@ ScopedTestingPlatformSupport<IOTaskRunnerTestingPlatformSupport> platform_; protected: - std::unique_ptr<blink::MockPeerConnectionDependencyFactory> - dependency_factory_; + Persistent<MockPeerConnectionDependencyFactory> dependency_factory_; scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_; scoped_refptr<blink::WebRtcMediaStreamTrackAdapterMap> track_map_; rtc::scoped_refptr<blink::MockPeerConnectionImpl> peer_connection_;
diff --git a/third_party/blink/renderer/modules/peerconnection/rtc_sctp_transport.cc b/third_party/blink/renderer/modules/peerconnection/rtc_sctp_transport.cc index 2fedeb93..9bb3c0f 100644 --- a/third_party/blink/renderer/modules/peerconnection/rtc_sctp_transport.cc +++ b/third_party/blink/renderer/modules/peerconnection/rtc_sctp_transport.cc
@@ -64,8 +64,8 @@ : RTCSctpTransport(context, native_transport, context->GetTaskRunner(TaskType::kNetworking), - PeerConnectionDependencyFactory::GetInstance() - ->GetWebRtcNetworkTaskRunner()) {} + PeerConnectionDependencyFactory::From(*context) + .GetWebRtcNetworkTaskRunner()) {} RTCSctpTransport::RTCSctpTransport( ExecutionContext* context,
diff --git a/third_party/blink/renderer/modules/peerconnection/transceiver_state_surfacer_test.cc b/third_party/blink/renderer/modules/peerconnection/transceiver_state_surfacer_test.cc index 3fa8c41..faa1b1bd 100644 --- a/third_party/blink/renderer/modules/peerconnection/transceiver_state_surfacer_test.cc +++ b/third_party/blink/renderer/modules/peerconnection/transceiver_state_surfacer_test.cc
@@ -43,13 +43,14 @@ class TransceiverStateSurfacerTest : public ::testing::Test { public: void SetUp() override { - dependency_factory_.reset(new blink::MockPeerConnectionDependencyFactory()); + dependency_factory_ = + MakeGarbageCollected<MockPeerConnectionDependencyFactory>(); main_task_runner_ = blink::scheduler::GetSingleThreadTaskRunnerForTesting(); track_adapter_map_ = base::MakeRefCounted<blink::WebRtcMediaStreamTrackAdapterMap>( - dependency_factory_.get(), main_task_runner_); - surfacer_.reset(new TransceiverStateSurfacer(main_task_runner_, - signaling_task_runner())); + dependency_factory_.Get(), main_task_runner_); + surfacer_ = std::make_unique<TransceiverStateSurfacer>( + main_task_runner_, signaling_task_runner()); DummyExceptionStateForTesting exception_state; peer_connection_ = dependency_factory_->CreatePeerConnection( webrtc::PeerConnectionInterface::RTCConfiguration(), nullptr, nullptr, @@ -275,7 +276,7 @@ protected: scoped_refptr<webrtc::PeerConnectionInterface> peer_connection_; - std::unique_ptr<blink::MockPeerConnectionDependencyFactory> + CrossThreadPersistent<MockPeerConnectionDependencyFactory> dependency_factory_; scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_; scoped_refptr<blink::WebRtcMediaStreamTrackAdapterMap> track_adapter_map_;
diff --git a/third_party/blink/renderer/modules/peerconnection/webrtc_media_stream_track_adapter.h b/third_party/blink/renderer/modules/peerconnection/webrtc_media_stream_track_adapter.h index 405267b0..4d7f039 100644 --- a/third_party/blink/renderer/modules/peerconnection/webrtc_media_stream_track_adapter.h +++ b/third_party/blink/renderer/modules/peerconnection/webrtc_media_stream_track_adapter.h
@@ -27,6 +27,8 @@ // There are different sinks/adapters used whether the track is local or remote // and whether it is an audio or video track; this adapter hides that fact and // lets you use a single class for any type of track. +// The adapter may be created and used from either the main thread or the +// webrtc signaling thread. class MODULES_EXPORT WebRtcMediaStreamTrackAdapter : public WTF::ThreadSafeRefCounted<WebRtcMediaStreamTrackAdapter, WebRtcMediaStreamTrackAdapterTraits> { @@ -108,9 +110,10 @@ void UnregisterRemoteAudioTrackAdapterOnSignalingThread(); void FinalizeRemoteTrackDisposingOnMainThread(); - // Pointer to a |PeerConnectionDependencyFactory| owned by the |RenderThread|. - // It's valid for the lifetime of |RenderThread|. - blink::PeerConnectionDependencyFactory* const factory_; + // `factory_` is only accessed from the main thread (which owns it), but + // `this` may be constructed by the signaling thread (for remote tracks), + // making it impossible to construct a `Persistent`. + const CrossThreadPersistent<PeerConnectionDependencyFactory> factory_; scoped_refptr<base::SingleThreadTaskRunner> main_thread_; // Part of the initialization of remote tracks occurs on the signaling thread.
diff --git a/third_party/blink/renderer/modules/peerconnection/webrtc_media_stream_track_adapter_map.h b/third_party/blink/renderer/modules/peerconnection/webrtc_media_stream_track_adapter_map.h index eb3a77b..1b37a20d 100644 --- a/third_party/blink/renderer/modules/peerconnection/webrtc_media_stream_track_adapter_map.h +++ b/third_party/blink/renderer/modules/peerconnection/webrtc_media_stream_track_adapter_map.h
@@ -23,6 +23,11 @@ // creating, initializing and disposing track adapters independently of media // streams. Adapters are accessed via |AdapterRef|s, when all references to an // adapter are destroyed it is disposed and removed from the map. +// Objects of this class must be constructed on the main thread, after which +// they may be accessed from any thread. The two exceptions to that are +// `GetOrCreateLocalTrackAdapter()` that must be called from the main thread and +// `GetOrCreateRemoteTrackAdapter()` which must not be called from the main +// thread. class MODULES_EXPORT WebRtcMediaStreamTrackAdapterMap : public WTF::ThreadSafeRefCounted<WebRtcMediaStreamTrackAdapterMap> { public: @@ -135,9 +140,7 @@ // Invoke on the main thread. virtual ~WebRtcMediaStreamTrackAdapterMap(); - // Pointer to a |PeerConnectionDependencyFactory| owned by the |RenderThread|. - // It's valid for the lifetime of |RenderThread|. - blink::PeerConnectionDependencyFactory* const factory_; + const CrossThreadPersistent<PeerConnectionDependencyFactory> factory_; scoped_refptr<base::SingleThreadTaskRunner> main_thread_; mutable base::Lock lock_;
diff --git a/third_party/blink/renderer/modules/peerconnection/webrtc_media_stream_track_adapter_map_test.cc b/third_party/blink/renderer/modules/peerconnection/webrtc_media_stream_track_adapter_map_test.cc index 018b214c..ecad32a 100644 --- a/third_party/blink/renderer/modules/peerconnection/webrtc_media_stream_track_adapter_map_test.cc +++ b/third_party/blink/renderer/modules/peerconnection/webrtc_media_stream_track_adapter_map_test.cc
@@ -26,10 +26,11 @@ class WebRtcMediaStreamTrackAdapterMapTest : public ::testing::Test { public: void SetUp() override { - dependency_factory_.reset(new blink::MockPeerConnectionDependencyFactory()); + dependency_factory_ = + MakeGarbageCollected<MockPeerConnectionDependencyFactory>(); main_thread_ = blink::scheduler::GetSingleThreadTaskRunnerForTesting(); map_ = base::MakeRefCounted<blink::WebRtcMediaStreamTrackAdapterMap>( - dependency_factory_.get(), main_thread_); + dependency_factory_.Get(), main_thread_); } void TearDown() override { blink::WebHeap::CollectAllGarbageForTesting(); } @@ -109,7 +110,7 @@ protected: ScopedTestingPlatformSupport<IOTaskRunnerTestingPlatformSupport> platform_; - std::unique_ptr<blink::MockPeerConnectionDependencyFactory> + CrossThreadPersistent<MockPeerConnectionDependencyFactory> dependency_factory_; scoped_refptr<base::SingleThreadTaskRunner> main_thread_; scoped_refptr<blink::WebRtcMediaStreamTrackAdapterMap> map_;
diff --git a/third_party/blink/renderer/modules/peerconnection/webrtc_media_stream_track_adapter_test.cc b/third_party/blink/renderer/modules/peerconnection/webrtc_media_stream_track_adapter_test.cc index 75ec2c47..966ca78 100644 --- a/third_party/blink/renderer/modules/peerconnection/webrtc_media_stream_track_adapter_test.cc +++ b/third_party/blink/renderer/modules/peerconnection/webrtc_media_stream_track_adapter_test.cc
@@ -29,7 +29,8 @@ class WebRtcMediaStreamTrackAdapterTest : public ::testing::Test { public: void SetUp() override { - dependency_factory_.reset(new blink::MockPeerConnectionDependencyFactory()); + dependency_factory_ = + MakeGarbageCollected<MockPeerConnectionDependencyFactory>(); main_thread_ = blink::scheduler::GetSingleThreadTaskRunnerForTesting(); } @@ -75,7 +76,7 @@ webrtc::MediaStreamTrackInterface* webrtc_track) { track_adapter_ = blink::WebRtcMediaStreamTrackAdapter::CreateRemoteTrackAdapter( - dependency_factory_.get(), main_thread_, webrtc_track); + dependency_factory_.Get(), main_thread_, webrtc_track); } void HoldOntoAdapterReference( @@ -110,7 +111,7 @@ protected: ScopedTestingPlatformSupport<IOTaskRunnerTestingPlatformSupport> platform_; - std::unique_ptr<blink::MockPeerConnectionDependencyFactory> + CrossThreadPersistent<MockPeerConnectionDependencyFactory> dependency_factory_; scoped_refptr<base::SingleThreadTaskRunner> main_thread_; scoped_refptr<blink::WebRtcMediaStreamTrackAdapter> track_adapter_; @@ -119,7 +120,7 @@ TEST_F(WebRtcMediaStreamTrackAdapterTest, LocalAudioTrack) { track_adapter_ = blink::WebRtcMediaStreamTrackAdapter::CreateLocalTrackAdapter( - dependency_factory_.get(), main_thread_, CreateLocalAudioTrack()); + dependency_factory_.Get(), main_thread_, CreateLocalAudioTrack()); EXPECT_TRUE(track_adapter_->is_initialized()); EXPECT_TRUE(track_adapter_->track()); EXPECT_EQ(track_adapter_->track()->Source()->GetType(), @@ -139,7 +140,7 @@ TEST_F(WebRtcMediaStreamTrackAdapterTest, DISABLED_LocalVideoTrack) { track_adapter_ = blink::WebRtcMediaStreamTrackAdapter::CreateLocalTrackAdapter( - dependency_factory_.get(), main_thread_, CreateLocalVideoTrack()); + dependency_factory_.Get(), main_thread_, CreateLocalVideoTrack()); EXPECT_TRUE(track_adapter_->is_initialized()); EXPECT_TRUE(track_adapter_->track()); EXPECT_EQ(track_adapter_->track()->Source()->GetType(),
diff --git a/third_party/blink/renderer/modules/peerconnection/webrtc_set_description_observer_test.cc b/third_party/blink/renderer/modules/peerconnection/webrtc_set_description_observer_test.cc index e2ec9286..12a7ff4 100644 --- a/third_party/blink/renderer/modules/peerconnection/webrtc_set_description_observer_test.cc +++ b/third_party/blink/renderer/modules/peerconnection/webrtc_set_description_observer_test.cc
@@ -222,11 +222,12 @@ void SetUp() override { pc_ = new webrtc::MockPeerConnectionInterface; - dependency_factory_.reset(new blink::MockPeerConnectionDependencyFactory()); + dependency_factory_ = + MakeGarbageCollected<MockPeerConnectionDependencyFactory>(); main_thread_ = blink::scheduler::GetSingleThreadTaskRunnerForTesting(); track_adapter_map_ = base::MakeRefCounted<blink::WebRtcMediaStreamTrackAdapterMap>( - dependency_factory_.get(), main_thread_); + dependency_factory_.Get(), main_thread_); observer_ = base::MakeRefCounted<WebRtcSetDescriptionObserverForTest>(); observer_handler_ = std::make_unique<ObserverHandlerWrapper>( handler_type_, main_thread_, @@ -361,8 +362,7 @@ protected: scoped_refptr<webrtc::MockPeerConnectionInterface> pc_; - std::unique_ptr<blink::MockPeerConnectionDependencyFactory> - dependency_factory_; + Persistent<MockPeerConnectionDependencyFactory> dependency_factory_; scoped_refptr<base::SingleThreadTaskRunner> main_thread_; scoped_refptr<blink::WebRtcMediaStreamTrackAdapterMap> track_adapter_map_; scoped_refptr<WebRtcSetDescriptionObserverForTest> observer_;
diff --git a/third_party/blink/renderer/modules/push_messaging/service_worker_registration_push.cc b/third_party/blink/renderer/modules/push_messaging/service_worker_registration_push.cc index be8eb6c4..4470062 100644 --- a/third_party/blink/renderer/modules/push_messaging/service_worker_registration_push.cc +++ b/third_party/blink/renderer/modules/push_messaging/service_worker_registration_push.cc
@@ -12,7 +12,7 @@ ServiceWorkerRegistrationPush::ServiceWorkerRegistrationPush( ServiceWorkerRegistration* registration) - : registration_(registration) {} + : Supplement(*registration) {} ServiceWorkerRegistrationPush::~ServiceWorkerRegistrationPush() = default; @@ -39,12 +39,11 @@ PushManager* ServiceWorkerRegistrationPush::pushManager() { if (!push_manager_) - push_manager_ = MakeGarbageCollected<PushManager>(registration_); + push_manager_ = MakeGarbageCollected<PushManager>(GetSupplementable()); return push_manager_.Get(); } void ServiceWorkerRegistrationPush::Trace(Visitor* visitor) const { - visitor->Trace(registration_); visitor->Trace(push_manager_); Supplement<ServiceWorkerRegistration>::Trace(visitor); }
diff --git a/third_party/blink/renderer/modules/push_messaging/service_worker_registration_push.h b/third_party/blink/renderer/modules/push_messaging/service_worker_registration_push.h index d16bf97..d577ca9b 100644 --- a/third_party/blink/renderer/modules/push_messaging/service_worker_registration_push.h +++ b/third_party/blink/renderer/modules/push_messaging/service_worker_registration_push.h
@@ -33,7 +33,6 @@ void Trace(Visitor* visitor) const override; private: - Member<ServiceWorkerRegistration> registration_; Member<PushManager> push_manager_; DISALLOW_COPY_AND_ASSIGN(ServiceWorkerRegistrationPush);
diff --git a/third_party/blink/renderer/modules/screen_orientation/screen_screen_orientation.cc b/third_party/blink/renderer/modules/screen_orientation/screen_screen_orientation.cc index a862879..e7b5ddc 100644 --- a/third_party/blink/renderer/modules/screen_orientation/screen_screen_orientation.cc +++ b/third_party/blink/renderer/modules/screen_orientation/screen_screen_orientation.cc
@@ -38,6 +38,8 @@ const char ScreenScreenOrientation::kSupplementName[] = "ScreenScreenOrientation"; +ScreenScreenOrientation::ScreenScreenOrientation() : Supplement(nullptr) {} + void ScreenScreenOrientation::Trace(Visitor* visitor) const { visitor->Trace(orientation_); Supplement<Screen>::Trace(visitor);
diff --git a/third_party/blink/renderer/modules/screen_orientation/screen_screen_orientation.h b/third_party/blink/renderer/modules/screen_orientation/screen_screen_orientation.h index 2b83ddf..aff83ca 100644 --- a/third_party/blink/renderer/modules/screen_orientation/screen_screen_orientation.h +++ b/third_party/blink/renderer/modules/screen_orientation/screen_screen_orientation.h
@@ -24,6 +24,8 @@ static ScreenOrientation* orientation(Screen&); + ScreenScreenOrientation(); + void Trace(Visitor*) const override; private:
diff --git a/third_party/blink/renderer/modules/storage/storage_namespace.cc b/third_party/blink/renderer/modules/storage/storage_namespace.cc index 64c2342b..b10a0f2 100644 --- a/third_party/blink/renderer/modules/storage/storage_namespace.cc +++ b/third_party/blink/renderer/modules/storage/storage_namespace.cc
@@ -46,10 +46,12 @@ const char StorageNamespace::kSupplementName[] = "SessionStorageNamespace"; StorageNamespace::StorageNamespace(StorageController* controller) - : controller_(controller) {} + : Supplement(nullptr), controller_(controller) {} StorageNamespace::StorageNamespace(StorageController* controller, const String& namespace_id) - : controller_(controller), namespace_id_(namespace_id) {} + : Supplement(nullptr), + controller_(controller), + namespace_id_(namespace_id) {} // static void StorageNamespace::ProvideSessionStorageNamespaceTo(
diff --git a/third_party/blink/renderer/modules/webaudio/audio_graph_tracer.cc b/third_party/blink/renderer/modules/webaudio/audio_graph_tracer.cc index ef4f4d57..66df7cb 100644 --- a/third_party/blink/renderer/modules/webaudio/audio_graph_tracer.cc +++ b/third_party/blink/renderer/modules/webaudio/audio_graph_tracer.cc
@@ -22,7 +22,7 @@ } AudioGraphTracer::AudioGraphTracer() - : inspector_agent_(nullptr) {} + : Supplement(nullptr), inspector_agent_(nullptr) {} void AudioGraphTracer::Trace(Visitor* visitor) const { visitor->Trace(inspector_agent_);
diff --git a/third_party/blink/renderer/modules/webdatabase/database_client.cc b/third_party/blink/renderer/modules/webdatabase/database_client.cc index fc82b0db..22b31c6 100644 --- a/third_party/blink/renderer/modules/webdatabase/database_client.cc +++ b/third_party/blink/renderer/modules/webdatabase/database_client.cc
@@ -39,7 +39,8 @@ namespace blink { -DatabaseClient::DatabaseClient() : inspector_agent_(nullptr) {} +DatabaseClient::DatabaseClient() + : Supplement(nullptr), inspector_agent_(nullptr) {} void DatabaseClient::Trace(Visitor* visitor) const { visitor->Trace(inspector_agent_);
diff --git a/third_party/blink/renderer/modules/webid/navigator_web_id.cc b/third_party/blink/renderer/modules/webid/navigator_web_id.cc index 485d25d..747ccdc 100644 --- a/third_party/blink/renderer/modules/webid/navigator_web_id.cc +++ b/third_party/blink/renderer/modules/webid/navigator_web_id.cc
@@ -36,7 +36,7 @@ Supplement<Navigator>::Trace(visitor); } -NavigatorWebId::NavigatorWebId(Navigator& navigator) { +NavigatorWebId::NavigatorWebId(Navigator& navigator) : Supplement(navigator) { if (navigator.DomWindow()) { web_id_ = MakeGarbageCollected<WebId>(*navigator.DomWindow()); }
diff --git a/third_party/blink/renderer/modules/webshare/navigator_share.h b/third_party/blink/renderer/modules/webshare/navigator_share.h index be5fe4cc..ba4b042 100644 --- a/third_party/blink/renderer/modules/webshare/navigator_share.h +++ b/third_party/blink/renderer/modules/webshare/navigator_share.h
@@ -30,7 +30,7 @@ public: static const char kSupplementName[]; - NavigatorShare() = default; + NavigatorShare() : Supplement(nullptr) {} ~NavigatorShare() = default; // Gets, or creates, NavigatorShare supplement on Navigator.
diff --git a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc index aa3be98b..f0a3453 100644 --- a/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc +++ b/third_party/blink/renderer/platform/loader/fetch/resource_fetcher.cc
@@ -758,7 +758,7 @@ // Aims to count Resource only referenced from MemoryCache (i.e. what would be // dead if MemoryCache holds weak references to Resource). Currently we check - // references to Resource from ResourceClient and |m_preloads| only, because + // references to Resource from ResourceClient and `preloads_` only, because // they are major sources of references. if (resource && !resource->IsAlive() && !ContainsAsPreload(resource)) { DEFINE_RESOURCE_HISTOGRAM("Dead.");
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_context.cc b/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_context.cc index 7913b10..be473b8 100644 --- a/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_context.cc +++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/sync_load_context.cc
@@ -107,13 +107,13 @@ const WebVector<WebString>& cors_exempt_header_list, std::unique_ptr<ResourceLoadInfoNotifierWrapper> resource_load_info_notifier_wrapper) { - auto* context = new SyncLoadContext( + scoped_refptr<SyncLoadContext> context(new SyncLoadContext( request.get(), std::move(pending_url_loader_factory), response, context_for_redirect, redirect_or_response_event, abort_event, timeout, - std::move(download_to_blob_registry), loading_task_runner); + std::move(download_to_blob_registry), loading_task_runner)); context->resource_request_sender_->SendAsync( std::move(request), std::move(loading_task_runner), traffic_annotation, - loader_options, cors_exempt_header_list, base::WrapRefCounted(context), + loader_options, cors_exempt_header_list, context, context->url_loader_factory_, std::move(throttles), std::move(resource_load_info_notifier_wrapper), WebBackForwardCacheLoaderHelper());
diff --git a/third_party/blink/renderer/platform/loader/fetch/url_loader/web_resource_request_sender.cc b/third_party/blink/renderer/platform/loader/fetch/url_loader/web_resource_request_sender.cc index f99b294..15d1384 100644 --- a/third_party/blink/renderer/platform/loader/fetch/url_loader/web_resource_request_sender.cc +++ b/third_party/blink/renderer/platform/loader/fetch/url_loader/web_resource_request_sender.cc
@@ -255,6 +255,8 @@ std::unique_ptr<ResourceLoadInfoNotifierWrapper> resource_load_info_notifier_wrapper, WebBackForwardCacheLoaderHelper back_forward_cache_loader_helper) { + auto weak_this = weak_factory_.GetWeakPtr(); + CheckSchemeForReferrerPolicy(*request); #if defined(OS_ANDROID) @@ -294,6 +296,11 @@ loader_options, request.get(), client.get(), traffic_annotation, std::move(loading_task_runner), base::make_optional(std_cors_exempt_header_list)); + // TODO(https://crbug.com/1175286): Remove this mitigation when we understand + // why `this` or `request_info_` is being destroyed. + if (!weak_this || !request_info_) + return request_id; + request_info_->url_loader = std::move(url_loader); request_info_->url_loader_client = std::move(client);
diff --git a/third_party/blink/renderer/platform/mojo/DEPS b/third_party/blink/renderer/platform/mojo/DEPS index 7f097996..112c021 100644 --- a/third_party/blink/renderer/platform/mojo/DEPS +++ b/third_party/blink/renderer/platform/mojo/DEPS
@@ -23,6 +23,7 @@ "+third_party/blink/renderer/platform/context_lifecycle_notifier.h", "+third_party/blink/renderer/platform/heap_observer_set.h", "+third_party/blink/renderer/platform/heap", + "+third_party/blink/renderer/platform/supplementable.h", "+third_party/blink/renderer/platform/testing/mock_context_lifecycle_notifier.h", ]
diff --git a/third_party/blink/renderer/platform/mojo/mojo_binding_context.h b/third_party/blink/renderer/platform/mojo/mojo_binding_context.h index 1649994..fb52881 100644 --- a/third_party/blink/renderer/platform/mojo/mojo_binding_context.h +++ b/third_party/blink/renderer/platform/mojo/mojo_binding_context.h
@@ -10,6 +10,7 @@ #include "third_party/blink/public/platform/web_common.h" #include "third_party/blink/renderer/platform/context_lifecycle_notifier.h" #include "third_party/blink/renderer/platform/platform_export.h" +#include "third_party/blink/renderer/platform/supplementable.h" namespace base { class SingleThreadTaskRunner; @@ -22,12 +23,19 @@ // This class encapsulates the necessary information for binding Mojo // interfaces, to enable interfaces provided by the platform to be aware of the // context in which they are intended to be used. -class PLATFORM_EXPORT MojoBindingContext : public ContextLifecycleNotifier { +class PLATFORM_EXPORT MojoBindingContext + : public ContextLifecycleNotifier, + public Supplementable<MojoBindingContext> { public: virtual const BrowserInterfaceBrokerProxy& GetBrowserInterfaceBroker() const = 0; virtual scoped_refptr<base::SingleThreadTaskRunner> GetTaskRunner( TaskType) = 0; + + void Trace(Visitor* visitor) const override { + ContextLifecycleNotifier::Trace(visitor); + Supplementable::Trace(visitor); + } }; } // namespace blink
diff --git a/third_party/blink/renderer/platform/p2p/empty_network_manager.cc b/third_party/blink/renderer/platform/p2p/empty_network_manager.cc index 0d7be63..17b3c56 100644 --- a/third_party/blink/renderer/platform/p2p/empty_network_manager.cc +++ b/third_party/blink/renderer/platform/p2p/empty_network_manager.cc
@@ -8,16 +8,25 @@ #include "base/check_op.h" #include "base/location.h" #include "base/threading/thread_task_runner_handle.h" +#include "third_party/blink/renderer/platform/p2p/ipc_network_manager.h" #include "third_party/blink/renderer/platform/p2p/network_manager_uma.h" namespace blink { -EmptyNetworkManager::EmptyNetworkManager(rtc::NetworkManager* network_manager) - : network_manager_(network_manager) { +EmptyNetworkManager::EmptyNetworkManager(IpcNetworkManager* network_manager) + : EmptyNetworkManager(network_manager, network_manager->AsWeakPtr()) {} + +// DO NOT dereference/check `network_manager_weak` in the ctor! Doing so would +// bind its WeakFactory to the constructing thread (main thread) instead of +// the thread `this` lives in (signaling thread). +EmptyNetworkManager::EmptyNetworkManager( + rtc::NetworkManager* network_manager, + base::WeakPtr<rtc::NetworkManager> network_manager_weak) + : network_manager_(network_manager_weak) { DCHECK(network_manager); DETACH_FROM_THREAD(thread_checker_); set_enumeration_permission(ENUMERATION_BLOCKED); - network_manager_->SignalNetworksChanged.connect( + network_manager->SignalNetworksChanged.connect( this, &EmptyNetworkManager::OnNetworksChanged); } @@ -27,13 +36,17 @@ void EmptyNetworkManager::StartUpdating() { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + DCHECK(network_manager_); ++start_count_; network_manager_->StartUpdating(); } void EmptyNetworkManager::StopUpdating() { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - network_manager_->StopUpdating(); + + if (network_manager_) + network_manager_->StopUpdating(); + --start_count_; DCHECK_GE(start_count_, 0); } @@ -46,6 +59,8 @@ bool EmptyNetworkManager::GetDefaultLocalAddress( int family, rtc::IPAddress* ipaddress) const { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + DCHECK(network_manager_); return network_manager_->GetDefaultLocalAddress(family, ipaddress); }
diff --git a/third_party/blink/renderer/platform/p2p/empty_network_manager.h b/third_party/blink/renderer/platform/p2p/empty_network_manager.h index 77d43634..908b0a6 100644 --- a/third_party/blink/renderer/platform/p2p/empty_network_manager.h +++ b/third_party/blink/renderer/platform/p2p/empty_network_manager.h
@@ -18,16 +18,19 @@ namespace blink { +class FilteringNetworkManagerTest; +class IpcNetworkManager; + // A NetworkManager implementation which handles the case where local address // enumeration is not requested and just returns empty network lists. This class // is not thread safe and should only be used by WebRTC's network thread. class EmptyNetworkManager : public rtc::NetworkManagerBase, public sigslot::has_slots<> { public: - // This class is created by WebRTC's signaling thread but used by WebRTC's - // worker thread |task_runner|. + // This class is created on the main thread but used by WebRTC's worker thread + // |task_runner|. PLATFORM_EXPORT explicit EmptyNetworkManager( - rtc::NetworkManager* network_manager); + IpcNetworkManager* network_manager); PLATFORM_EXPORT ~EmptyNetworkManager() override; // rtc::NetworkManager: @@ -38,6 +41,19 @@ rtc::IPAddress* ipaddress) const override; private: + friend class FilteringNetworkManagerTest; + // We can't dereference the wrapped network manager from the construction + // thread, as that would cause it to bind to the wrong sequence. We also can't + // obtain a `WeakPtr` from an arbitrary `rtc::NetworkManager`, so we take 2 + // pointers pointing to the same instance, one is a raw pointer for use on the + // constructing thread and the other is a weak pointer for use on the worker + // thread. + // TODO(crbug.com/1191914): Simplify this, to avoid the subtleties of having + // to pass two pointers to the same object. + PLATFORM_EXPORT EmptyNetworkManager( + rtc::NetworkManager* network_manager, + base::WeakPtr<rtc::NetworkManager> network_manager_weak); + // Receive callback from the wrapped NetworkManager when the underneath // network list is changed. // @@ -55,9 +71,9 @@ // StartUpdating. int start_count_ = 0; - // |network_manager_| is just a reference, owned by - // PeerConnectionDependencyFactory. - rtc::NetworkManager* network_manager_; + // `network_manager_` is owned by the PeerConnectionDependencyFactory, that + // may be destroyed when the frame is detached. + base::WeakPtr<rtc::NetworkManager> network_manager_; base::WeakPtrFactory<EmptyNetworkManager> weak_ptr_factory_{this};
diff --git a/third_party/blink/renderer/platform/p2p/filtering_network_manager.cc b/third_party/blink/renderer/platform/p2p/filtering_network_manager.cc index d240762..7a3fd50 100644 --- a/third_party/blink/renderer/platform/p2p/filtering_network_manager.cc +++ b/third_party/blink/renderer/platform/p2p/filtering_network_manager.cc
@@ -10,15 +10,27 @@ #include "base/logging.h" #include "base/threading/thread_task_runner_handle.h" #include "media/base/media_permission.h" +#include "third_party/blink/renderer/platform/p2p/ipc_network_manager.h" #include "third_party/blink/renderer/platform/wtf/functional.h" namespace blink { FilteringNetworkManager::FilteringNetworkManager( - rtc::NetworkManager* network_manager, + IpcNetworkManager* network_manager, media::MediaPermission* media_permission, bool allow_mdns_obfuscation) - : network_manager_(network_manager), + : FilteringNetworkManager(network_manager->AsWeakPtr(), + media_permission, + allow_mdns_obfuscation) {} + +// DO NOT dereference/check `network_manager_weak` in the ctor! Doing so would +// bind its WeakFactory to the constructing thread (main thread) instead of +// the thread `this` lives in (signaling thread). +FilteringNetworkManager::FilteringNetworkManager( + base::WeakPtr<rtc::NetworkManager> network_manager_weak, + media::MediaPermission* media_permission, + bool allow_mdns_obfuscation) + : network_manager_(std::move(network_manager_weak)), media_permission_(media_permission), allow_mdns_obfuscation_(allow_mdns_obfuscation) { DETACH_FROM_THREAD(thread_checker_); @@ -53,6 +65,7 @@ void FilteringNetworkManager::StartUpdating() { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); DCHECK(started_permission_check_); + DCHECK(network_manager_); if (start_updating_time_.is_null()) { start_updating_time_ = base::TimeTicks::Now(); @@ -76,7 +89,8 @@ void FilteringNetworkManager::StopUpdating() { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - network_manager_->StopUpdating(); + if (network_manager_) + network_manager_->StopUpdating(); DCHECK_GT(start_count_, 0); --start_count_; } @@ -95,11 +109,15 @@ const { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + if (!network_manager_) + return nullptr; + // mDNS responder is set to null if we have the enumeration permission or the // mDNS obfuscation of IPs is disallowed. if (enumeration_permission() == ENUMERATION_ALLOWED || - !allow_mdns_obfuscation_) + !allow_mdns_obfuscation_) { return nullptr; + } return network_manager_->GetMdnsResponder(); } @@ -141,6 +159,8 @@ void FilteringNetworkManager::OnNetworksChanged() { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + DCHECK(network_manager_); + pending_network_update_ = false; // Update the default local addresses.
diff --git a/third_party/blink/renderer/platform/p2p/filtering_network_manager.h b/third_party/blink/renderer/platform/p2p/filtering_network_manager.h index 8243e2f..094c716 100644 --- a/third_party/blink/renderer/platform/p2p/filtering_network_manager.h +++ b/third_party/blink/renderer/platform/p2p/filtering_network_manager.h
@@ -20,6 +20,9 @@ namespace blink { +class FilteringNetworkManagerTest; +class IpcNetworkManager; + // FilteringNetworkManager exposes rtc::NetworkManager to // PeerConnectionDependencyFactory and wraps the IpcNetworkManager. It only // handles the case where multiple_routes is requested. It checks at least one @@ -36,10 +39,10 @@ class FilteringNetworkManager : public rtc::NetworkManagerBase, public sigslot::has_slots<> { public: - // This class is created by WebRTC's signaling thread but used by WebRTC's + // This class is created by WebRTC's main thread but used by WebRTC's // worker thread |task_runner|. PLATFORM_EXPORT FilteringNetworkManager( - rtc::NetworkManager* network_manager, + IpcNetworkManager* network_manager, media::MediaPermission* media_permission, bool allow_mdns_obfuscation); @@ -54,6 +57,13 @@ webrtc::MdnsResponderInterface* GetMdnsResponder() const override; private: + friend class FilteringNetworkManagerTest; + + PLATFORM_EXPORT FilteringNetworkManager( + base::WeakPtr<rtc::NetworkManager> network_manager_weak, + media::MediaPermission* media_permission, + bool allow_mdns_obfuscation); + // Check mic/camera permission. void CheckPermission(); @@ -82,11 +92,13 @@ void SendNetworksChangedSignal(); - // |network_manager_| is just a reference, owned by - // PeerConnectionDependencyFactory. - rtc::NetworkManager* network_manager_; + // `network_manager_` is owned by the PeerConnectionDependencyFactory, that + // may be destroyed when the frame is detached. + // TODO(crbug.com/1191914): Clarify the lifetime of `network_manager_` and + // `this`. + base::WeakPtr<rtc::NetworkManager> network_manager_; - // The class is created by the signaling thread but used by the worker thread. + // The class is created by the main thread but used by the worker thread. THREAD_CHECKER(thread_checker_); media::MediaPermission* media_permission_;
diff --git a/third_party/blink/renderer/platform/p2p/filtering_network_manager_test.cc b/third_party/blink/renderer/platform/p2p/filtering_network_manager_test.cc index 84d7b80..b254b1f 100644 --- a/third_party/blink/renderer/platform/p2p/filtering_network_manager_test.cc +++ b/third_party/blink/renderer/platform/p2p/filtering_network_manager_test.cc
@@ -12,6 +12,7 @@ #include "base/check.h" #include "base/memory/ref_counted.h" +#include "base/memory/weak_ptr.h" #include "base/notreached.h" #include "base/stl_util.h" #include "base/test/test_simple_task_runner.h" @@ -97,10 +98,15 @@ network_->AddIP(network_->GetBestIP()); } + base::WeakPtr<MockNetworkManager> AsWeakPtr() { + return weak_factory_.GetWeakPtr(); + } + private: bool sent_first_update_ = false; std::unique_ptr<rtc::Network> network_; std::unique_ptr<EmptyMdnsResponder> mdns_responder_; + base::WeakPtrFactory<MockNetworkManager> weak_factory_{this}; }; class MockMediaPermission : public media::MediaPermission { @@ -171,13 +177,13 @@ base_network_manager_ = std::make_unique<MockNetworkManager>(); SetNewNetworkForBaseNetworkManager(); if (multiple_routes_requested) { - network_manager_ = std::make_unique<FilteringNetworkManager>( - base_network_manager_.get(), media_permission_.get(), - allow_mdns_obfuscation_); + network_manager_.reset(new FilteringNetworkManager( + base_network_manager_->AsWeakPtr(), media_permission_.get(), + allow_mdns_obfuscation_)); network_manager_->Initialize(); } else { - network_manager_ = std::make_unique<blink::EmptyNetworkManager>( - base_network_manager_.get()); + network_manager_.reset(new EmptyNetworkManager( + base_network_manager_.get(), base_network_manager_->AsWeakPtr())); } network_manager_->SignalNetworksChanged.connect( this, &FilteringNetworkManagerTest::OnNetworksChanged);
diff --git a/third_party/blink/renderer/platform/p2p/host_address_request.h b/third_party/blink/renderer/platform/p2p/host_address_request.h index 9bb5ccf..ccd9a57 100644 --- a/third_party/blink/renderer/platform/p2p/host_address_request.h +++ b/third_party/blink/renderer/platform/p2p/host_address_request.h
@@ -12,6 +12,7 @@ #include "base/memory/ref_counted.h" #include "base/threading/thread_checker.h" #include "net/base/ip_address.h" +#include "third_party/blink/renderer/platform/heap/persistent.h" #include "third_party/blink/renderer/platform/wtf/vector.h" #include "third_party/webrtc/rtc_base/async_resolver_interface.h" @@ -20,7 +21,8 @@ class P2PSocketDispatcher; // P2PAsyncAddressResolver performs DNS hostname resolution. It's used -// to resolve addresses of STUN and relay servers. +// to resolve addresses of STUN and relay servers. It is created and lives on +// one of libjingle's threads. class P2PAsyncAddressResolver : public base::RefCountedThreadSafe<P2PAsyncAddressResolver> { public: @@ -47,7 +49,9 @@ void OnResponse(const Vector<net::IPAddress>& address); - P2PSocketDispatcher* dispatcher_; + // `P2PSocketDispatcher` is owned by the main thread, and must be accessed in + // a thread-safe way. + CrossThreadPersistent<P2PSocketDispatcher> dispatcher_; THREAD_CHECKER(thread_checker_); // State must be accessed from delegate thread only.
diff --git a/third_party/blink/renderer/platform/p2p/ipc_network_manager.cc b/third_party/blink/renderer/platform/p2p/ipc_network_manager.cc index bd0c9bc..94802a9 100644 --- a/third_party/blink/renderer/platform/p2p/ipc_network_manager.cc +++ b/third_party/blink/renderer/platform/p2p/ipc_network_manager.cc
@@ -9,6 +9,7 @@ #include <vector> #include "base/location.h" +#include "base/memory/weak_ptr.h" #include "base/metrics/histogram_macros.h" #include "base/single_thread_task_runner.h" #include "base/sys_byteorder.h" @@ -51,20 +52,27 @@ std::unique_ptr<webrtc::MdnsResponderInterface> mdns_responder) : network_list_manager_(network_list_manager), mdns_responder_(std::move(mdns_responder)) { + DETACH_FROM_THREAD(thread_checker_); + weak_this_ = weak_factory_.GetWeakPtr(); network_list_manager_->AddNetworkListObserver(this); } IpcNetworkManager::~IpcNetworkManager() { - DCHECK(!start_count_); + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); network_list_manager_->RemoveNetworkListObserver(this); } +base::WeakPtr<IpcNetworkManager> IpcNetworkManager::AsWeakPtr() { + return weak_factory_.GetWeakPtr(); +} + void IpcNetworkManager::StartUpdating() { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); if (network_list_received_) { // Post a task to avoid reentrancy. base::ThreadTaskRunnerHandle::Get()->PostTask( - FROM_HERE, WTF::Bind(&IpcNetworkManager::SendNetworksChangedSignal, - weak_factory_.GetWeakPtr())); + FROM_HERE, + WTF::Bind(&IpcNetworkManager::SendNetworksChangedSignal, weak_this_)); } else { VLOG(1) << "IpcNetworkManager::StartUpdating called; still waiting for " "network list from browser process."; @@ -73,6 +81,7 @@ } void IpcNetworkManager::StopUpdating() { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); DCHECK_GT(start_count_, 0); --start_count_; } @@ -81,6 +90,7 @@ const net::NetworkInterfaceList& list, const net::IPAddress& default_ipv4_local_address, const net::IPAddress& default_ipv6_local_address) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); // Update flag if network list received for the first time. if (!network_list_received_) { VLOG(1) << "IpcNetworkManager received network list from browser process " @@ -190,10 +200,12 @@ } webrtc::MdnsResponderInterface* IpcNetworkManager::GetMdnsResponder() const { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); return mdns_responder_.get(); } void IpcNetworkManager::SendNetworksChangedSignal() { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); SignalNetworksChanged(); }
diff --git a/third_party/blink/renderer/platform/p2p/ipc_network_manager.h b/third_party/blink/renderer/platform/p2p/ipc_network_manager.h index 8db0420..c5cbe92 100644 --- a/third_party/blink/renderer/platform/p2p/ipc_network_manager.h +++ b/third_party/blink/renderer/platform/p2p/ipc_network_manager.h
@@ -8,6 +8,7 @@ #include <memory> #include "base/memory/weak_ptr.h" +#include "third_party/blink/renderer/platform/heap/persistent.h" #include "third_party/blink/renderer/platform/p2p/network_list_manager.h" #include "third_party/blink/renderer/platform/p2p/network_list_observer.h" #include "third_party/blink/renderer/platform/platform_export.h" @@ -22,6 +23,12 @@ // IpcNetworkManager is a NetworkManager for libjingle that gets a // list of network interfaces from the browser. +// +// Threading note: +// The IpcNetworkManager is constructed on the network thread, and after that +// may only be accessed from the signaling thread. The one exception to that is +// access to slots (e.g., `NetworkManager::SignalNetworksChanged`) that are safe +// to access from any thread. class IpcNetworkManager : public rtc::NetworkManagerBase, public blink::NetworkListObserver { public: @@ -31,6 +38,8 @@ std::unique_ptr<webrtc::MdnsResponderInterface> mdns_responder); ~IpcNetworkManager() override; + base::WeakPtr<IpcNetworkManager> PLATFORM_EXPORT AsWeakPtr(); + // rtc:::NetworkManager: void StartUpdating() override; void StopUpdating() override; @@ -45,13 +54,19 @@ private: void SendNetworksChangedSignal(); - // TODO(crbug.com/787254): Consider moving NetworkListManager to Oilpan and - // avoid using a raw pointer. - blink::NetworkListManager* network_list_manager_; + // 'this' is created on the network thread, whereas the `NetworkListManager` + // is owned by the main thread, so it needs to be accessed in a thread-safe + // manner (i.e., `CrossThreadPersistent`). + CrossThreadPersistent<NetworkListManager> network_list_manager_; std::unique_ptr<webrtc::MdnsResponderInterface> mdns_responder_; int start_count_ = 0; bool network_list_received_ = false; + THREAD_CHECKER(thread_checker_); + + // Cache the weak pointer to avoid racy calls to `weak_factory_.GetWeakPtr()`. + // TODO(crbug.com/1191907): Figure out whether this is still necessary. + base::WeakPtr<IpcNetworkManager> weak_this_; base::WeakPtrFactory<IpcNetworkManager> weak_factory_{this}; };
diff --git a/third_party/blink/renderer/platform/p2p/ipc_network_manager_test.cc b/third_party/blink/renderer/platform/p2p/ipc_network_manager_test.cc index b00dc6f..f98ae10 100644 --- a/third_party/blink/renderer/platform/p2p/ipc_network_manager_test.cc +++ b/third_party/blink/renderer/platform/p2p/ipc_network_manager_test.cc
@@ -18,7 +18,9 @@ namespace { -class MockP2PSocketDispatcher : public blink::NetworkListManager { +class MockP2PSocketDispatcher + : public GarbageCollected<MockP2PSocketDispatcher>, + public NetworkListManager { public: void AddNetworkListObserver( blink::NetworkListObserver* network_list_observer) override {} @@ -26,7 +28,9 @@ void RemoveNetworkListObserver( blink::NetworkListObserver* network_list_observer) override {} - ~MockP2PSocketDispatcher() override {} + void Trace(Visitor* visitor) const override { + NetworkListManager::Trace(visitor); + } }; class EmptyMdnsResponder : public webrtc::MdnsResponderInterface { @@ -49,13 +53,13 @@ class IpcNetworkManagerTest : public testing::Test { public: IpcNetworkManagerTest() - : network_list_manager_(new MockP2PSocketDispatcher()), + : network_list_manager_(MakeGarbageCollected<MockP2PSocketDispatcher>()), network_manager_(std::make_unique<IpcNetworkManager>( - network_list_manager_.get(), + network_list_manager_.Get(), std::make_unique<EmptyMdnsResponder>())) {} protected: - std::unique_ptr<MockP2PSocketDispatcher> network_list_manager_; + Persistent<MockP2PSocketDispatcher> network_list_manager_; std::unique_ptr<IpcNetworkManager> network_manager_; };
diff --git a/third_party/blink/renderer/platform/p2p/ipc_socket_factory.h b/third_party/blink/renderer/platform/p2p/ipc_socket_factory.h index 21a0a25..e042538 100644 --- a/third_party/blink/renderer/platform/p2p/ipc_socket_factory.h +++ b/third_party/blink/renderer/platform/p2p/ipc_socket_factory.h
@@ -10,6 +10,7 @@ #include "base/compiler_specific.h" #include "base/macros.h" #include "net/traffic_annotation/network_traffic_annotation.h" +#include "third_party/blink/renderer/platform/heap/persistent.h" #include "third_party/blink/renderer/platform/platform_export.h" #include "third_party/webrtc/api/packet_socket_factory.h" @@ -19,7 +20,7 @@ // IpcPacketSocketFactory implements rtc::PacketSocketFactory // interface for libjingle using IPC-based P2P sockets. The class must -// be used on a thread that is a libjingle thread (implements +// be created and used on a thread that is a libjingle thread (implements // rtc::Thread) and also has associated base::MessageLoop. Each // socket created by the factory must be used on the thread it was // created on. @@ -48,7 +49,9 @@ rtc::AsyncResolverInterface* CreateAsyncResolver() override; private: - P2PSocketDispatcher* socket_dispatcher_; + // `P2PSocketDispatcher` is owned by the main thread, and must be accessed in + // a thread-safe way. + CrossThreadPersistent<P2PSocketDispatcher> socket_dispatcher_; const net::NetworkTrafficAnnotationTag traffic_annotation_; DISALLOW_COPY_AND_ASSIGN(IpcPacketSocketFactory);
diff --git a/third_party/blink/renderer/platform/p2p/network_list_manager.h b/third_party/blink/renderer/platform/p2p/network_list_manager.h index 0be11c05..ba9e48e3 100644 --- a/third_party/blink/renderer/platform/p2p/network_list_manager.h +++ b/third_party/blink/renderer/platform/p2p/network_list_manager.h
@@ -9,6 +9,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_NETWORK_LIST_MANAGER_H_ #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_P2P_NETWORK_LIST_MANAGER_H_ +#include "third_party/blink/renderer/platform/heap/heap.h" #include "third_party/blink/renderer/platform/platform_export.h" namespace blink { @@ -17,7 +18,7 @@ // TODO(crbug.com/787254): Verify whether this abstract class is still // needed now that its Clients have all switched to Blink. -class PLATFORM_EXPORT NetworkListManager { +class PLATFORM_EXPORT NetworkListManager : public GarbageCollectedMixin { public: // Add a new network list observer. Each observer is called // immidiately after it is registered and then later whenever @@ -30,11 +31,6 @@ // which the observer was added. virtual void RemoveNetworkListObserver( NetworkListObserver* network_list_observer) = 0; - - protected: - // Marked as protected to prevent explicit deletion, as - // P2PSocketDispatcher is not owned by IpcNetworkManager. - virtual ~NetworkListManager() {} }; } // namespace blink
diff --git a/third_party/blink/renderer/platform/p2p/port_allocator.cc b/third_party/blink/renderer/platform/p2p/port_allocator.cc index f392aac..4b18e54 100644 --- a/third_party/blink/renderer/platform/p2p/port_allocator.cc +++ b/third_party/blink/renderer/platform/p2p/port_allocator.cc
@@ -11,22 +11,18 @@ #include "base/check.h" #include "third_party/blink/public/platform/platform.h" -#include "third_party/blink/renderer/platform/p2p/socket_dispatcher.h" namespace blink { P2PPortAllocator::P2PPortAllocator( - const scoped_refptr<P2PSocketDispatcher>& socket_dispatcher, std::unique_ptr<rtc::NetworkManager> network_manager, rtc::PacketSocketFactory* socket_factory, const Config& config, const GURL& origin) : cricket::BasicPortAllocator(network_manager.get(), socket_factory), network_manager_(std::move(network_manager)), - socket_dispatcher_(socket_dispatcher), config_(config), origin_(origin) { - DCHECK(socket_dispatcher); DCHECK(network_manager_); DCHECK(socket_factory); uint32_t flags = 0;
diff --git a/third_party/blink/renderer/platform/p2p/port_allocator.h b/third_party/blink/renderer/platform/p2p/port_allocator.h index 1703c2303..018c05b 100644 --- a/third_party/blink/renderer/platform/p2p/port_allocator.h +++ b/third_party/blink/renderer/platform/p2p/port_allocator.h
@@ -15,8 +15,6 @@ namespace blink { -class P2PSocketDispatcher; - class PLATFORM_EXPORT P2PPortAllocator : public cricket::BasicPortAllocator { public: struct Config { @@ -38,8 +36,7 @@ bool enable_default_local_candidate = true; }; - P2PPortAllocator(const scoped_refptr<P2PSocketDispatcher>& socket_dispatcher, - std::unique_ptr<rtc::NetworkManager> network_manager, + P2PPortAllocator(std::unique_ptr<rtc::NetworkManager> network_manager, rtc::PacketSocketFactory* socket_factory, const Config& config, const GURL& origin); @@ -50,7 +47,6 @@ private: std::unique_ptr<rtc::NetworkManager> network_manager_; - scoped_refptr<P2PSocketDispatcher> socket_dispatcher_; Config config_; GURL origin_;
diff --git a/third_party/blink/renderer/platform/p2p/socket_client_impl.h b/third_party/blink/renderer/platform/p2p/socket_client_impl.h index a04db9a..741a19cb 100644 --- a/third_party/blink/renderer/platform/p2p/socket_client_impl.h +++ b/third_party/blink/renderer/platform/p2p/socket_client_impl.h
@@ -18,6 +18,7 @@ #include "net/traffic_annotation/network_traffic_annotation.h" #include "services/network/public/cpp/p2p_socket_type.h" #include "services/network/public/mojom/p2p.mojom-blink.h" +#include "third_party/blink/renderer/platform/heap/persistent.h" #include "third_party/blink/renderer/platform/p2p/socket_client.h" #include "third_party/blink/renderer/platform/wtf/vector.h" @@ -31,7 +32,7 @@ // P2P socket that routes all calls over Mojo. // -// The object runs on the WebRTC worker thread. +// The object is created and runs on the WebRTC worker thread. class P2PSocketClientImpl : public blink::P2PSocketClient, public network::mojom::blink::P2PSocketClient { public: @@ -100,7 +101,9 @@ void OnConnectionError(); - P2PSocketDispatcher* dispatcher_; + // `P2PSocketDispatcher` is owned by the main thread, and must be accessed in + // a thread-safe way. + CrossThreadPersistent<P2PSocketDispatcher> dispatcher_; THREAD_CHECKER(thread_checker_); int socket_id_; blink::P2PSocketClientDelegate* delegate_;
diff --git a/third_party/blink/renderer/platform/p2p/socket_dispatcher.cc b/third_party/blink/renderer/platform/p2p/socket_dispatcher.cc index 72ec477..e28d34e 100644 --- a/third_party/blink/renderer/platform/p2p/socket_dispatcher.cc +++ b/third_party/blink/renderer/platform/p2p/socket_dispatcher.cc
@@ -5,22 +5,44 @@ #include "third_party/blink/renderer/platform/p2p/socket_dispatcher.h" #include "base/memory/scoped_refptr.h" +#include "base/types/pass_key.h" #include "services/network/public/cpp/p2p_param_traits.h" -#include "third_party/blink/public/common/thread_safe_browser_interface_broker_proxy.h" +#include "third_party/blink/public/common/browser_interface_broker_proxy.h" #include "third_party/blink/public/platform/platform.h" +#include "third_party/blink/renderer/platform/heap/heap.h" +#include "third_party/blink/renderer/platform/heap/persistent.h" +#include "third_party/blink/renderer/platform/mojo/mojo_binding_context.h" #include "third_party/blink/renderer/platform/p2p/network_list_observer.h" #include "third_party/blink/renderer/platform/p2p/socket_client_impl.h" #include "third_party/blink/renderer/platform/scheduler/public/post_cross_thread_task.h" +#include "third_party/blink/renderer/platform/supplementable.h" #include "third_party/blink/renderer/platform/wtf/cross_thread_functional.h" namespace blink { -P2PSocketDispatcher::P2PSocketDispatcher() - : main_task_runner_(base::ThreadTaskRunnerHandle::Get()), - network_list_observers_( - new base::ObserverListThreadSafe<blink::NetworkListObserver>()) {} +using PassKey = base::PassKey<P2PSocketDispatcher>; -P2PSocketDispatcher::~P2PSocketDispatcher() {} +const char P2PSocketDispatcher::kSupplementName[] = "P2PSocketDispatcher"; + +// static +P2PSocketDispatcher& P2PSocketDispatcher::From(MojoBindingContext& context) { + auto* supplement = + Supplement<MojoBindingContext>::From<P2PSocketDispatcher>(context); + if (!supplement) { + supplement = MakeGarbageCollected<P2PSocketDispatcher>(context, PassKey()); + ProvideTo(context, supplement); + } + return *supplement; +} + +P2PSocketDispatcher::P2PSocketDispatcher(MojoBindingContext& context, PassKey) + : Supplement(context), + main_task_runner_(base::ThreadTaskRunnerHandle::Get()), + network_list_observers_( + new base::ObserverListThreadSafe<blink::NetworkListObserver>()), + network_notification_client_receiver_(this, &context) {} + +P2PSocketDispatcher::~P2PSocketDispatcher() = default; void P2PSocketDispatcher::AddNetworkListObserver( blink::NetworkListObserver* network_list_observer) { @@ -28,7 +50,7 @@ PostCrossThreadTask( *main_task_runner_.get(), FROM_HERE, CrossThreadBindOnce(&P2PSocketDispatcher::RequestNetworkEventsIfNecessary, - scoped_refptr<P2PSocketDispatcher>(this))); + WrapCrossThreadPersistent(this))); } void P2PSocketDispatcher::RemoveNetworkListObserver( @@ -48,14 +70,16 @@ mojo::SharedRemote<network::mojom::blink::P2PSocketManager>( std::move(p2p_socket_manager)); p2p_socket_manager_.set_disconnect_handler( - WTF::Bind(&P2PSocketDispatcher::OnConnectionError, - WTF::Unretained(this)), + ConvertToBaseOnceCallback( + CrossThreadBindOnce(&P2PSocketDispatcher::OnConnectionError, + WrapCrossThreadPersistent(this))), main_task_runner_); } + PostCrossThreadTask( *main_task_runner_.get(), FROM_HERE, CrossThreadBindOnce(&P2PSocketDispatcher::RequestInterfaceIfNecessary, - scoped_refptr<P2PSocketDispatcher>(this))); + WrapCrossThreadPersistent(this))); return p2p_socket_manager_; } @@ -81,10 +105,11 @@ } void P2PSocketDispatcher::RequestInterfaceIfNecessary() { + DCHECK(main_task_runner_->BelongsToCurrentThread()); if (!p2p_socket_manager_receiver_.is_valid()) return; - blink::Platform::Current()->GetBrowserInterfaceBroker()->GetInterface( + GetSupplementable()->GetBrowserInterfaceBroker().GetInterface( std::move(p2p_socket_manager_receiver_)); } @@ -103,7 +128,8 @@ default_ipv6_local_address_); } else { GetP2PSocketManager()->StartNetworkNotifications( - network_notification_client_receiver_.BindNewPipeAndPassRemote()); + network_notification_client_receiver_.BindNewPipeAndPassRemote( + GetSupplementable()->GetTaskRunner(TaskType::kNetworking))); } } @@ -115,13 +141,20 @@ PostCrossThreadTask( *main_task_runner_.get(), FROM_HERE, CrossThreadBindOnce(&P2PSocketDispatcher::ReconnectP2PSocketManager, - scoped_refptr<P2PSocketDispatcher>(this))); + WrapCrossThreadPersistent(this))); } void P2PSocketDispatcher::ReconnectP2PSocketManager() { network_notification_client_receiver_.reset(); GetP2PSocketManager()->StartNetworkNotifications( - network_notification_client_receiver_.BindNewPipeAndPassRemote()); + network_notification_client_receiver_.BindNewPipeAndPassRemote( + GetSupplementable()->GetTaskRunner(TaskType::kNetworking))); +} + +void P2PSocketDispatcher::Trace(Visitor* visitor) const { + Supplement::Trace(visitor); + NetworkListManager::Trace(visitor); + visitor->Trace(network_notification_client_receiver_); } } // namespace blink
diff --git a/third_party/blink/renderer/platform/p2p/socket_dispatcher.h b/third_party/blink/renderer/platform/p2p/socket_dispatcher.h index 7d75ef81..12bc534 100644 --- a/third_party/blink/renderer/platform/p2p/socket_dispatcher.h +++ b/third_party/blink/renderer/platform/p2p/socket_dispatcher.h
@@ -29,6 +29,7 @@ #include "base/memory/ref_counted.h" #include "base/observer_list_threadsafe.h" #include "base/synchronization/lock.h" +#include "base/types/pass_key.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/shared_remote.h" @@ -36,8 +37,12 @@ #include "net/base/network_interfaces.h" #include "services/network/public/cpp/p2p_socket_type.h" #include "services/network/public/mojom/p2p.mojom-blink.h" +#include "third_party/blink/renderer/platform/heap/impl/persistent.h" +#include "third_party/blink/renderer/platform/mojo/heap_mojo_receiver.h" +#include "third_party/blink/renderer/platform/mojo/mojo_binding_context.h" #include "third_party/blink/renderer/platform/p2p/network_list_manager.h" #include "third_party/blink/renderer/platform/platform_export.h" +#include "third_party/blink/renderer/platform/supplementable.h" #include "third_party/blink/renderer/platform/wtf/vector.h" namespace base { @@ -46,18 +51,22 @@ namespace blink { class NetworkListObserver; -} - -namespace blink { // This class is created on the main thread, but is used primarily on the // WebRTC worker threads. class PLATFORM_EXPORT P2PSocketDispatcher - : public base::RefCountedThreadSafe<P2PSocketDispatcher>, + : public GarbageCollected<P2PSocketDispatcher>, + public Supplement<MojoBindingContext>, public blink::NetworkListManager, public network::mojom::blink::P2PNetworkNotificationClient { public: - P2PSocketDispatcher(); + static const char kSupplementName[]; + + static P2PSocketDispatcher& From(MojoBindingContext& context); + + P2PSocketDispatcher(MojoBindingContext& context, + base::PassKey<P2PSocketDispatcher>); + ~P2PSocketDispatcher() override; // blink::NetworkListManager interface: void AddNetworkListObserver( @@ -68,11 +77,9 @@ mojo::SharedRemote<network::mojom::blink::P2PSocketManager> GetP2PSocketManager(); + void Trace(Visitor*) const override; + private: - friend class base::RefCountedThreadSafe<P2PSocketDispatcher>; - - ~P2PSocketDispatcher() override; - // network::mojom::blink::P2PNetworkNotificationClient interface. void NetworkListChanged( const Vector<net::NetworkInterface>& networks, @@ -103,8 +110,9 @@ net::IPAddress default_ipv4_local_address_; net::IPAddress default_ipv6_local_address_; - mojo::Receiver<network::mojom::blink::P2PNetworkNotificationClient> - network_notification_client_receiver_{this}; + HeapMojoReceiver<network::mojom::blink::P2PNetworkNotificationClient, + P2PSocketDispatcher> + network_notification_client_receiver_; DISALLOW_COPY_AND_ASSIGN(P2PSocketDispatcher); };
diff --git a/third_party/blink/renderer/platform/supplementable.h b/third_party/blink/renderer/platform/supplementable.h index 1ff7c996..36d81ed 100644 --- a/third_party/blink/renderer/platform/supplementable.h +++ b/third_party/blink/renderer/platform/supplementable.h
@@ -26,6 +26,7 @@ #ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_SUPPLEMENTABLE_H_ #define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SUPPLEMENTABLE_H_ +#include <cstddef> #include "base/macros.h" #include "third_party/blink/renderer/platform/heap/handle.h" #include "third_party/blink/renderer/platform/wtf/assertions.h" @@ -120,7 +121,7 @@ public: // TODO(haraken): Remove the default constructor. // All Supplement objects should be instantiated with |supplementable_|. - Supplement() {} + explicit Supplement(std::nullptr_t) {} explicit Supplement(T& supplementable) : supplementable_(&supplementable) {}
diff --git a/third_party/blink/renderer/platform/webrtc/webrtc_video_frame_adapter.cc b/third_party/blink/renderer/platform/webrtc/webrtc_video_frame_adapter.cc index 971c2e07..ec354dc 100644 --- a/third_party/blink/renderer/platform/webrtc/webrtc_video_frame_adapter.cc +++ b/third_party/blink/renderer/platform/webrtc/webrtc_video_frame_adapter.cc
@@ -306,8 +306,6 @@ scoped_refptr<media::VideoFrame> WebRtcVideoFrameAdapter::GetOrWrapFrameForSize( const ScaledBufferSize& size) const { - if (size == full_size_) - return frame_; double requested_scale_factor = static_cast<double>(size.natural_size.width()) / size.visible_rect.width();
diff --git a/third_party/blink/renderer/platform/webrtc/webrtc_video_frame_adapter_test.cc b/third_party/blink/renderer/platform/webrtc/webrtc_video_frame_adapter_test.cc index 1130071..d5bec32d 100644 --- a/third_party/blink/renderer/platform/webrtc/webrtc_video_frame_adapter_test.cc +++ b/third_party/blink/renderer/platform/webrtc/webrtc_video_frame_adapter_test.cc
@@ -253,6 +253,53 @@ EXPECT_EQ(adapted_frame, frame_360p); } +TEST(WebRtcVideoFrameAdapterTest, + MapPreScaledFrameEvenIfOriginalFrameHasSoftAppliedScaling) { + std::vector<webrtc::VideoFrameBuffer::Type> kNv12 = { + webrtc::VideoFrameBuffer::Type::kNV12}; + const gfx::Size kSize720p(1280, 720); + const gfx::Rect kRect720p(0, 0, 1280, 720); + const gfx::Size kSize360p(640, 360); + const gfx::Rect kRect360p(0, 0, 640, 360); + + // The strictness of the mock ensures no additional scaling. + scoped_refptr<MockSharedResources> resources = + new testing::StrictMock<MockSharedResources>(); + + auto frame_720p = CreateTestFrame(kSize720p, kRect720p, kSize720p, + media::VideoFrame::STORAGE_OWNED_MEMORY, + media::VideoPixelFormat::PIXEL_FORMAT_NV12); + auto frame_360p = CreateTestFrame(kSize360p, kRect360p, kSize360p, + media::VideoFrame::STORAGE_OWNED_MEMORY, + media::VideoPixelFormat::PIXEL_FORMAT_NV12); + + // Soft-apply scaling of |frame_720p| so that its natural size is 360p. + // Because the soft-applied frame is still backed by a 720p coded size frame, + // we should still prefer to map |frame_360p| when mapping at 360p size. + scoped_refptr<media::VideoFrame> soft_scaled_frame = + media::VideoFrame::WrapVideoFrame(frame_720p, frame_720p->format(), + kRect720p, kSize360p); + + rtc::scoped_refptr<WebRtcVideoFrameAdapter> multi_buffer( + new rtc::RefCountedObject<WebRtcVideoFrameAdapter>( + soft_scaled_frame, + std::vector<scoped_refptr<media::VideoFrame>>({frame_360p}), + resources)); + + // The adapter should reflect the natural size, not the coded size. + EXPECT_EQ(multi_buffer->width(), kSize360p.width()); + EXPECT_EQ(multi_buffer->height(), kSize360p.height()); + + // Mapping produces a frame of the correct size. + auto mapped_frame = multi_buffer->GetMappedFrameBuffer(kNv12); + EXPECT_EQ(mapped_frame->width(), kSize360p.width()); + EXPECT_EQ(mapped_frame->height(), kSize360p.height()); + // The mapping above should be backed by |frame_360p|. + auto adapted_frame = multi_buffer->GetAdaptedVideoBufferForTesting( + WebRtcVideoFrameAdapter::ScaledBufferSize(kRect720p, kSize360p)); + EXPECT_EQ(adapted_frame, frame_360p); +} + TEST(WebRtcVideoFrameAdapterTest, MapScaledFrameScalesFromClosestFrame) { std::vector<webrtc::VideoFrameBuffer::Type> kNv12 = { webrtc::VideoFrameBuffer::Type::kNV12};
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 20e2b35..89ddd3c 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -737,30 +737,18 @@ crbug.com/722287 external/wpt/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-rtl-002.html [ Failure ] crbug.com/722287 external/wpt/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-vertWM-001.html [ Failure ] crbug.com/722287 external/wpt/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-vertWM-002.html [ Failure ] -crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-001.html [ Failure ] -crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-002.html [ Failure ] -crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-001.html [ Failure ] -crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-002.html [ Failure ] -crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-001.html [ Failure ] -crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-002.html [ Failure ] -crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-003.html [ Failure ] -crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-004.html [ Failure ] -crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-001.html [ Failure ] -crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-002.html [ Failure ] -crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-003.html [ Failure ] -crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-004.html [ Failure ] -crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-001.html [ Failure ] -crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-002.html [ Failure ] -crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-001.html [ Failure ] -crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-002.html [ Failure ] -crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-001.html [ Failure ] -crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-002.html [ Failure ] -crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-003.html [ Failure ] -crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-004.html [ Failure ] -crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-001.html [ Failure ] -crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-002.html [ Failure ] -crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-003.html [ Failure ] -crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-004.html [ Failure ] +crbug.com/1192763 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-002.html [ Failure ] +crbug.com/1192763 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-002.html [ Failure ] +crbug.com/1192763 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-003.html [ Failure ] +crbug.com/1192763 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-004.html [ Failure ] +crbug.com/1192763 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-003.html [ Failure ] +crbug.com/1192763 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-004.html [ Failure ] +crbug.com/1192763 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-002.html [ Failure ] +crbug.com/1192763 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-002.html [ Failure ] +crbug.com/1192763 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-003.html [ Failure ] +crbug.com/1192763 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-004.html [ Failure ] +crbug.com/1192763 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-003.html [ Failure ] +crbug.com/1192763 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-004.html [ Failure ] # [css-ui] # Layout team disagrees with the spec for this particular test. @@ -3503,6 +3491,30 @@ crbug.com/885175 external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-002.html [ Skip ] crbug.com/885175 external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-004.html [ Skip ] crbug.com/885175 external/wpt/css/css-grid/alignment/grid-self-alignment-baseline-with-grid-003.html [ Skip ] +crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-last-baseline-001.html [ Failure ] +crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-last-baseline-002.html [ Failure ] +crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-last-baseline-001.html [ Failure ] +crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-last-baseline-002.html [ Failure ] +crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-001.html [ Failure ] +crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-002.html [ Failure ] +crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-003.html [ Failure ] +crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-004.html [ Failure ] +crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-001.html [ Failure ] +crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-002.html [ Failure ] +crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-003.html [ Failure ] +crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-004.html [ Failure ] +crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-last-baseline-001.html [ Failure ] +crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-last-baseline-002.html [ Failure ] +crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-last-baseline-001.html [ Failure ] +crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-last-baseline-002.html [ Failure ] +crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-001.html [ Failure ] +crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-002.html [ Failure ] +crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-003.html [ Failure ] +crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-004.html [ Failure ] +crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-001.html [ Failure ] +crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-002.html [ Failure ] +crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-003.html [ Failure ] +crbug.com/885175 external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-004.html [ Failure ] # Baseline Content-Alignment is not implemented yet for CSS Grid Layout crbug.com/764235 external/wpt/css/css-grid/alignment/grid-item-content-baseline-001.html [ Skip ] @@ -3555,6 +3567,18 @@ ### Tests failing with LayoutNGGrid enabled: crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/absolute-positioning-grid-container-parent-001.html [ Failure ] +crbug.com/1192752 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-001.html [ Failure ] +crbug.com/1192752 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-001.html [ Failure ] +crbug.com/1192752 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-001.html [ Failure ] +crbug.com/1192752 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-002.html [ Failure ] +crbug.com/1192752 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-001.html [ Failure ] +crbug.com/1192752 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-002.html [ Failure ] +crbug.com/1192752 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-001.html [ Failure ] +crbug.com/1192752 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-001.html [ Failure ] +crbug.com/1192752 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-001.html [ Failure ] +crbug.com/1192752 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-002.html [ Failure ] +crbug.com/1192752 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-001.html [ Failure ] +crbug.com/1192752 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-002.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-gaps-001.html [ Crash Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-gaps-rtl-001.html [ Crash Failure ] crbug.com/1045599 virtual/layout-ng-grid/external/wpt/css/css-grid/abspos/grid-positioned-items-implicit-grid-001.html [ Crash ]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-001-ref.html index 36b570f..cb6d12be 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-001-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-001-ref.html
@@ -54,7 +54,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> @@ -78,7 +77,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-001.html index a3ee9b4..8fd4eca3 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-001.html
@@ -55,7 +55,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="align-self: baseline"></div></div> - <div class="container"><div style="align-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="align-self: center"></div></div> @@ -79,7 +78,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="align-self: baseline"></div></div> - <div class="container"><div style="align-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="align-self: center"></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-002-ref.html index 40dd0f2f..4197dc5 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-002-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-002-ref.html
@@ -53,7 +53,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> @@ -77,7 +76,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-002.html index 61f84a6d..a78dfc4 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-002.html
@@ -54,7 +54,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="align-self: baseline"></div></div> - <div class="container"><div style="align-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="align-self: center"></div></div> @@ -78,7 +77,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="align-self: baseline"></div></div> - <div class="container"><div style="align-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="align-self: center"></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-001-ref.html index a14d630..06d9d36 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-001-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-001-ref.html
@@ -57,8 +57,6 @@ <!-- <baseline-position> --> <div class="container"><img src="support/colors-8x16.png" class="alignStart"><!--baseline--></div> - <div class="container"><img src="support/colors-8x16.png" - class="alignEnd"><!--last baseline--></div> <br> <!-- <self-position>, part 1: --> <div class="container"><img src="support/colors-8x16.png" @@ -97,8 +95,6 @@ <!-- <baseline-position> --> <div class="container"><img src="support/colors-8x16.png" class="alignStart"><!--baseline--></div> - <div class="container"><img src="support/colors-8x16.png" - class="alignEnd"><!--last baseline--></div> <br> <!-- <self-position>, part 1: --> <div class="container"><img src="support/colors-8x16.png"
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-001.html index f703721..cb590660 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-001.html
@@ -56,8 +56,6 @@ <!-- <baseline-position> --> <div class="container"><img src="support/colors-8x16.png" style="align-self: baseline"></div> - <div class="container"><img src="support/colors-8x16.png" - style="align-self: last baseline"></div> <br> <!-- <self-position>, part 1 --> <div class="container"><img src="support/colors-8x16.png" @@ -96,8 +94,6 @@ <!-- <baseline-position> --> <div class="container"><img src="support/colors-8x16.png" style="align-self: baseline"></div> - <div class="container"><img src="support/colors-8x16.png" - style="align-self: last baseline"></div> <br> <!-- <self-position>, part 1 --> <div class="container"><img src="support/colors-8x16.png"
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-002-ref.html index ea15f8de..a31ac1d6 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-002-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-002-ref.html
@@ -56,8 +56,6 @@ <!-- <baseline-position> --> <div class="container"><img src="support/colors-8x16.png" class="alignStart"><!--baseline--></div> - <div class="container"><img src="support/colors-8x16.png" - class="alignEnd"><!--last baseline--></div> <br> <!-- <self-position>, part 1: --> <div class="container"><img src="support/colors-8x16.png" @@ -96,8 +94,6 @@ <!-- <baseline-position> --> <div class="container"><img src="support/colors-8x16.png" class="alignStart"><!--baseline--></div> - <div class="container"><img src="support/colors-8x16.png" - class="alignEnd"><!--last baseline--></div> <br> <!-- <self-position>, part 1: --> <div class="container"><img src="support/colors-8x16.png"
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-002.html index 61cce17..f3cc794a 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-002.html
@@ -55,8 +55,6 @@ <!-- <baseline-position> --> <div class="container"><img src="support/colors-8x16.png" style="align-self: baseline"></div> - <div class="container"><img src="support/colors-8x16.png" - style="align-self: last baseline"></div> <br> <!-- <self-position>, part 1 --> <div class="container"><img src="support/colors-8x16.png" @@ -95,8 +93,6 @@ <!-- <baseline-position> --> <div class="container"><img src="support/colors-8x16.png" style="align-self: baseline"></div> - <div class="container"><img src="support/colors-8x16.png" - style="align-self: last baseline"></div> <br> <!-- <self-position>, part 1 --> <div class="container"><img src="support/colors-8x16.png"
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-last-baseline-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-last-baseline-001-ref.html new file mode 100644 index 0000000..37655b0 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-last-baseline-001-ref.html
@@ -0,0 +1,57 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Reference</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <style> + .container { + display: block; + padding: 1px 2px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + height: 40px; + width: 22px; + } + .small > .container { + height: 2px; + width: 4px; + margin-bottom: 20px; /* to reduce overlap between overflowing images */ + } + + .container > * { + margin-left: 3px; + display: block; + } + .big .alignStart { margin-top: 2px; } + .big .alignCenter { margin-top: 9px; } + .big .alignEnd { margin-top: 16px; } + .small .alignStart { margin-top: 0px; } + .small .alignCenter { margin-top: -7px; } + .small .alignEnd { margin-top: -14px; } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-align-self --> + <div class="big"> + <div class="container"><img src="support/colors-8x16.png" + class="alignEnd"><!--last baseline--></div> + </div> + <div class="small"> + <div class="container"><img src="support/colors-8x16.png" + class="alignEnd"><!--last baseline--></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-last-baseline-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-last-baseline-001.html new file mode 100644 index 0000000..35fb55c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-last-baseline-001.html
@@ -0,0 +1,56 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Test: Static position of abspos replaced children in a grid container, with various "align-self" values</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid/#abspos-items"> + <link rel="match" href="grid-abspos-staticpos-align-self-img-last-baseline-001-ref.html"> + <style> + .container { + display: grid; + padding: 1px 2px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + position: relative; + } + br { clear: both } + + .big > .container { + height: 40px; + width: 22px; + grid: 2px 30px 2px / 3px 14px 3px; + } + .small > .container { + grid: 0px 2px 0px / 3px 2px 3px; + height: 2px; + width: 4px; + margin-bottom: 20px; /* to reduce overlap between overflowing images */ + } + + .container > * { + position: absolute; + grid-area: 2 / 2 / 3 / 3; + } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-align-self --> + <div class="big"> + <div class="container"><img src="support/colors-8x16.png" + style="align-self: last baseline"></div> + </div> + <div class="small"> + <div class="container"><img src="support/colors-8x16.png" + style="align-self: last baseline"></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-last-baseline-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-last-baseline-002-ref.html new file mode 100644 index 0000000..76d52fd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-last-baseline-002-ref.html
@@ -0,0 +1,56 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Reference</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <style> + .container { + display: block; + padding: 1px 2px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + height: 40px; + width: 22px; + } + .small > .container { + height: 2px; + width: 4px; + margin-bottom: 20px; /* to reduce overlap between overflowing images */ + } + + .container > * { + display: block; + } + .big .alignStart { margin-top: 0px; } + .big .alignCenter { margin-top: 13px; } + .big .alignEnd { margin-top: 26px; } + .small .alignStart { margin-top: 0px; } + .small .alignCenter { margin-top: -6px; } + .small .alignEnd { margin-top: -12px; } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-align-self --> + <div class="big"> + <div class="container"><img src="support/colors-8x16.png" + class="alignEnd"><!--last baseline--></div> + </div> + <div class="small"> + <div class="container"><img src="support/colors-8x16.png" + class="alignEnd"><!--last baseline--></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-last-baseline-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-last-baseline-002.html new file mode 100644 index 0000000..0287815 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-img-last-baseline-002.html
@@ -0,0 +1,55 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Test: Static position of abspos replaced children in a static-pos grid container, with various "align-self" values</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid/#abspos-items"> + <link rel="match" href="grid-abspos-staticpos-align-self-img-last-baseline-002-ref.html"> + <style> + .container { + display: grid; + padding: 1px 2px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + height: 40px; + width: 22px; + grid: 2px 30px 2px / 3px 14px 3px; + } + .small > .container { + grid: 0px 2px 0px / 3px 2px 3px; + height: 2px; + width: 4px; + margin-bottom: 20px; /* to reduce overlap between overflowing images */ + } + + .container > * { + position: absolute; + grid-area: 2 / 2 / 3 / 3; + } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-align-self --> + <div class="big"> + <div class="container"><img src="support/colors-8x16.png" + style="align-self: last baseline"></div> + </div> + <div class="small"> + <div class="container"><img src="support/colors-8x16.png" + style="align-self: last baseline"></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-last-baseline-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-last-baseline-001-ref.html new file mode 100644 index 0000000..6bc5ba4f --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-last-baseline-001-ref.html
@@ -0,0 +1,56 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Reference</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <style> + .container { + display: block; + padding: 1px 2px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + height: 30px; + width: 22px; + } + .small > .container { + height: 2px; + width: 4px; + } + + .container > * { + background: teal; + height: 6px; + width: 8px; + margin-left: 3px; + } + .big .alignStart { margin-top: 2px; } + .big .alignCenter { margin-top: 9px; } + .big .alignEnd { margin-top: 16px; } + .small .alignStart { margin-top: 0px; } + .small .alignCenter { margin-top: -2px; } + .small .alignEnd { margin-top: -4px; } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-align-self --> + <div class="big"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> + <div class="small"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-last-baseline-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-last-baseline-001.html new file mode 100644 index 0000000..da6ce34a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-last-baseline-001.html
@@ -0,0 +1,57 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Test: Static position of abspos children in a grid container, with various "align-self" values</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid/#abspos-items"> + <link rel="match" href="grid-abspos-staticpos-align-self-last-baseline-001-ref.html"> + <style> + .container { + display: grid; + padding: 1px 2px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + align-items: center; /* To exercise 'align-self: auto' on children */ + position: relative; + } + br { clear: both } + + .big > .container { + height: 30px; + width: 22px; + grid: 2px 20px 2px / 3px 14px 3px; + } + .small > .container { + grid: 0px 2px 0px / 3px 2px 3px; + height: 2px; + width: 4px; + } + + .container > * { + position: absolute; + grid-area: 2 / 2 / 3 / 3; + background: teal; + height: 6px; + width: 8px; + } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-align-self --> + <div class="big"> + <div class="container"><div style="align-self: last baseline"></div></div> + </div> + <div class="small"> + <div class="container"><div style="align-self: last baseline"></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-last-baseline-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-last-baseline-002-ref.html new file mode 100644 index 0000000..f1ca180 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-last-baseline-002-ref.html
@@ -0,0 +1,51 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Reference</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <style> + .container { + display: block; + padding: 1px 2px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + height: 30px; + width: 22px; + } + .small > .container { + height: 2px; + width: 4px; + } + + .container > * { + background: teal; + height: 6px; + width: 8px; + } + .big .alignEnd { margin-top: 26px; } + .small .alignEnd { margin-top: -2px; } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-align-self --> + <div class="big"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> + <div class="small"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-last-baseline-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-last-baseline-002.html new file mode 100644 index 0000000..54fb9ae --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-last-baseline-002.html
@@ -0,0 +1,56 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Test: Static position of abspos children in a static-pos grid container, with various "align-self" values</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid/#abspos-items"> + <link rel="match" href="grid-abspos-staticpos-align-self-last-baseline-002-ref.html"> + <style> + .container { + display: grid; + padding: 1px 2px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + align-items: center; /* To exercise 'align-self: auto' on children */ + } + br { clear: both } + + .big > .container { + height: 30px; + width: 22px; + grid: 2px 20px 2px / 3px 14px 3px; + } + .small > .container { + grid: 0px 2px 0px / 3px 2px 3px; + height: 2px; + width: 4px; + } + + .container > * { + position: absolute; + grid-area: 2 / 2 / 3 / 3; + background: teal; + height: 6px; + width: 8px; + } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-align-self --> + <div class="big"> + <div class="container"><div style="align-self: last baseline"></div></div> + </div> + <div class="small"> + <div class="container"><div style="align-self: last baseline"></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-001-ref.html index 671b315..a5ad3a3 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-001-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-001-ref.html
@@ -56,7 +56,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> @@ -82,7 +81,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-001.html index 1b64da3..31def24 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-001.html
@@ -55,7 +55,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="align-self: baseline"></div></div> - <div class="container"><div style="align-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="align-self: center"></div></div> @@ -81,7 +80,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="align-self: baseline"></div></div> - <div class="container"><div style="align-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="align-self: center"></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-002-ref.html index 671b315..a5ad3a3 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-002-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-002-ref.html
@@ -56,7 +56,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> @@ -82,7 +81,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-002.html index 931f7ec..21936e9 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-002.html
@@ -56,7 +56,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="align-self: baseline"></div></div> - <div class="container"><div style="align-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="align-self: center"></div></div> @@ -82,7 +81,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="align-self: baseline"></div></div> - <div class="container"><div style="align-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="align-self: center"></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-003-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-003-ref.html index cadaadd..50239d5f 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-003-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-003-ref.html
@@ -56,7 +56,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> @@ -82,7 +81,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-003.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-003.html index b37639c9..e53bd19 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-003.html
@@ -54,7 +54,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="align-self: baseline"></div></div> - <div class="container"><div style="align-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="align-self: center"></div></div> @@ -80,7 +79,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="align-self: baseline"></div></div> - <div class="container"><div style="align-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="align-self: center"></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-004-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-004-ref.html index cadaadd..50239d5f 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-004-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-004-ref.html
@@ -56,7 +56,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> @@ -82,7 +81,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-004.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-004.html index bb4335f..1280542 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-004.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-004.html
@@ -55,7 +55,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="align-self: baseline"></div></div> - <div class="container"><div style="align-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="align-self: center"></div></div> @@ -81,7 +80,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="align-self: baseline"></div></div> - <div class="container"><div style="align-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="align-self: center"></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-001-ref.html new file mode 100644 index 0000000..9c838e9e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-001-ref.html
@@ -0,0 +1,58 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Reference</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <style> + .container { + display: block; + padding: 1px 2px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + height: 30px; + width: 22px; + } + .small > .container { + height: 2px; + width: 4px; + } + + .container > * { + background: teal; + height: 6px; + width: 8px; + } + .big > .container > * { margin-left: 11px; } + .small > .container > * { margin-left: -7px; } + + .big .alignStart { margin-top: 2px; } + .big .alignCenter { margin-top: 9px; } + .big .alignEnd { margin-top: 16px; } + .small .alignStart { margin-top: 0px; } + .small .alignCenter { margin-top: -2px; } + .small .alignEnd { margin-top: -4px; } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-align-self --> + <div class="big"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> + <div class="small"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-001.html new file mode 100644 index 0000000..8804a39 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-001.html
@@ -0,0 +1,57 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Test: Static position of abspos children in a RTL grid container, with various "align-self" values</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid/#abspos-items"> + <link rel="match" href="grid-abspos-staticpos-align-self-rtl-last-baseline-001-ref.html"> + <style> + .container { + display: grid; + direction: rtl; + padding: 1px 2px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + position: relative; + } + br { clear: both } + + .big > .container { + height: 30px; + width: 22px; + grid: 2px 20px 2px / 3px 14px 3px; + } + .small > .container { + grid: 0px 2px 0px / 3px 2px 3px; + height: 2px; + width: 4px; + } + + .container > * { + position: absolute; + grid-area: 2 / 2 / 3 / 3; + background: teal; + height: 6px; + width: 8px; + } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-align-self --> + <div class="big"> + <div class="container"><div style="align-self: last baseline"></div></div> + </div> + <div class="small"> + <div class="container"><div style="align-self: last baseline"></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-002-ref.html new file mode 100644 index 0000000..9c838e9e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-002-ref.html
@@ -0,0 +1,58 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Reference</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <style> + .container { + display: block; + padding: 1px 2px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + height: 30px; + width: 22px; + } + .small > .container { + height: 2px; + width: 4px; + } + + .container > * { + background: teal; + height: 6px; + width: 8px; + } + .big > .container > * { margin-left: 11px; } + .small > .container > * { margin-left: -7px; } + + .big .alignStart { margin-top: 2px; } + .big .alignCenter { margin-top: 9px; } + .big .alignEnd { margin-top: 16px; } + .small .alignStart { margin-top: 0px; } + .small .alignCenter { margin-top: -2px; } + .small .alignEnd { margin-top: -4px; } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-align-self --> + <div class="big"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> + <div class="small"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-002.html new file mode 100644 index 0000000..e63bfa28 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-002.html
@@ -0,0 +1,58 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Test: Static position of abspos LTR children in a RTL grid container, with various "align-self" values</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid/#abspos-items"> + <link rel="match" href="grid-abspos-staticpos-align-self-rtl-last-baseline-002-ref.html"> + <style> + .container { + display: grid; + direction: rtl; + padding: 1px 2px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + position: relative; + } + br { clear: both } + + .big > .container { + height: 30px; + width: 22px; + grid: 2px 20px 2px / 3px 14px 3px; + } + .small > .container { + grid: 0px 2px 0px / 3px 2px 3px; + height: 2px; + width: 4px; + } + + .container > * { + position: absolute; + direction: ltr; + grid-area: 2 / 2 / 3 / 3; + background: teal; + height: 6px; + width: 8px; + } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-align-self --> + <div class="big"> + <div class="container"><div style="align-self: last baseline"></div></div> + </div> + <div class="small"> + <div class="container"><div style="align-self: last baseline"></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-003-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-003-ref.html new file mode 100644 index 0000000..ff60b13 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-003-ref.html
@@ -0,0 +1,58 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Reference</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <style> + .container { + display: block; + padding: 1px 2px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + height: 30px; + width: 22px; + } + .small > .container { + height: 2px; + width: 4px; + } + + .container > * { + background: teal; + height: 6px; + width: 8px; + } + .big > .container > * { margin-left: 14px; } + .small > .container > * { margin-left: -4px; } + + .big .alignStart { margin-top: 0px; } + .big .alignCenter { margin-top: 13px; } + .big .alignEnd { margin-top: 26px; } + .small .alignStart { margin-top: 0px; } + .small .alignCenter { margin-top: -1px; } + .small .alignEnd { margin-top: -2px; } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-align-self --> + <div class="big"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> + <div class="small"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-003.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-003.html new file mode 100644 index 0000000..7f07b135 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-003.html
@@ -0,0 +1,56 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Test: Static position of abspos children in a RTL static-pos grid container, with various "align-self" values</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid/#abspos-items"> + <link rel="match" href="grid-abspos-staticpos-align-self-rtl-last-baseline-003-ref.html"> + <style> + .container { + display: grid; + direction: rtl; + padding: 1px 2px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + height: 30px; + width: 22px; + grid: 2px 20px 2px / 3px 14px 3px; + } + .small > .container { + grid: 0px 2px 0px / 3px 2px 3px; + height: 2px; + width: 4px; + } + + .container > * { + position: absolute; + grid-area: 2 / 2 / 3 / 3; + background: teal; + height: 6px; + width: 8px; + } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-align-self --> + <div class="big"> + <div class="container"><div style="align-self: last baseline"></div></div> + </div> + <div class="small"> + <div class="container"><div style="align-self: last baseline"></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-004-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-004-ref.html new file mode 100644 index 0000000..ff60b13 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-004-ref.html
@@ -0,0 +1,58 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Reference</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <style> + .container { + display: block; + padding: 1px 2px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + height: 30px; + width: 22px; + } + .small > .container { + height: 2px; + width: 4px; + } + + .container > * { + background: teal; + height: 6px; + width: 8px; + } + .big > .container > * { margin-left: 14px; } + .small > .container > * { margin-left: -4px; } + + .big .alignStart { margin-top: 0px; } + .big .alignCenter { margin-top: 13px; } + .big .alignEnd { margin-top: 26px; } + .small .alignStart { margin-top: 0px; } + .small .alignCenter { margin-top: -1px; } + .small .alignEnd { margin-top: -2px; } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-align-self --> + <div class="big"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> + <div class="small"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-004.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-004.html new file mode 100644 index 0000000..b40e604 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-rtl-last-baseline-004.html
@@ -0,0 +1,57 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Test: Static position of abspos LTR children in a RTL static-pos grid container, with various "align-self" values</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid/#abspos-items"> + <link rel="match" href="grid-abspos-staticpos-align-self-rtl-last-baseline-004-ref.html"> + <style> + .container { + display: grid; + direction: rtl; + padding: 1px 2px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + height: 30px; + width: 22px; + grid: 2px 20px 2px / 3px 14px 3px; + } + .small > .container { + grid: 0px 2px 0px / 3px 2px 3px; + height: 2px; + width: 4px; + } + + .container > * { + position: absolute; + direction: ltr; + grid-area: 2 / 2 / 3 / 3; + background: teal; + height: 6px; + width: 8px; + } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-align-self --> + <div class="big"> + <div class="container"><div style="align-self: last baseline"></div></div> + </div> + <div class="small"> + <div class="container"><div style="align-self: last baseline"></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-001-ref.html index 37575f0..dd151d46 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-001-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-001-ref.html
@@ -55,7 +55,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> @@ -81,7 +80,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-001.html index ffac903..2feeb2c3a 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-001.html
@@ -56,7 +56,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="align-self: baseline"></div></div> - <div class="container"><div style="align-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="align-self: center"></div></div> @@ -82,7 +81,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="align-self: baseline"></div></div> - <div class="container"><div style="align-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="align-self: center"></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-002-ref.html index ce217e7f..60bd0cec 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-002-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-002-ref.html
@@ -55,7 +55,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> @@ -81,7 +80,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-002.html index c636a4b..659f6b7 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-002.html
@@ -57,7 +57,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="align-self: baseline"></div></div> - <div class="container"><div style="align-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="align-self: center"></div></div> @@ -83,7 +82,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="align-self: baseline"></div></div> - <div class="container"><div style="align-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="align-self: center"></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-003-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-003-ref.html index 7eca626..b8deb03 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-003-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-003-ref.html
@@ -54,7 +54,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> @@ -80,7 +79,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-003.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-003.html index d719b0e3..61bdc04 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-003.html
@@ -55,7 +55,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="align-self: baseline"></div></div> - <div class="container"><div style="align-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="align-self: center"></div></div> @@ -81,7 +80,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="align-self: baseline"></div></div> - <div class="container"><div style="align-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="align-self: center"></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-004-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-004-ref.html index 66d0d29..95060a7 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-004-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-004-ref.html
@@ -54,7 +54,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> @@ -80,7 +79,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-004.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-004.html index 2eba8574..84e9265a 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-004.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-004.html
@@ -56,7 +56,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="align-self: baseline"></div></div> - <div class="container"><div style="align-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="align-self: center"></div></div> @@ -82,7 +81,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="align-self: baseline"></div></div> - <div class="container"><div style="align-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="align-self: center"></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-001-ref.html new file mode 100644 index 0000000..abd41fc --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-001-ref.html
@@ -0,0 +1,57 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Reference</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <style> + .container { + display: block; + padding: 2px 1px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + width: 30px; + height: 22px; + } + .small > .container { + width: 2px; + height: 4px; + margin-right: 10px; /* To avoid overlap between overflowing kids */ + } + + .container > * { + background: teal; + width: 6px; + height: 8px; + margin-top: 3px; + } + .big .alignStart { margin-left: 22px; } + .big .alignCenter { margin-left: 15px; } + .big .alignEnd { margin-left: 8px; } + .small .alignStart { margin-left: -4px; } + .small .alignCenter { margin-left: -2px; } + .small .alignEnd { margin-left: 0px; } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-align-self --> + <div class="big"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> + <div class="small"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-001.html new file mode 100644 index 0000000..be1bc8c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-001.html
@@ -0,0 +1,58 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Test: Static position of abspos children in a vertical-rl grid container, with various "align-self" values</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid/#abspos-items"> + <link rel="match" href="grid-abspos-staticpos-align-self-vertWM-last-baseline-001-ref.html"> + <style> + .container { + display: grid; + writing-mode: vertical-rl; + padding: 2px 1px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + position: relative; + } + br { clear: both } + + .big > .container { + width: 30px; + height: 22px; + grid: 2px 20px 2px / 3px 14px 3px; + } + .small > .container { + grid: 0px 2px 0px / 3px 2px 3px; + width: 2px; + height: 4px; + margin-right: 10px; /* To avoid overlap between overflowing kids */ + } + + .container > * { + position: absolute; + grid-area: 2 / 2 / 3 / 3; + background: teal; + width: 6px; + height: 8px; + } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-align-self --> + <div class="big"> + <div class="container"><div style="align-self: last baseline"></div></div> + </div> + <div class="small"> + <div class="container"><div style="align-self: last baseline"></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-002-ref.html new file mode 100644 index 0000000..abd41fc --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-002-ref.html
@@ -0,0 +1,57 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Reference</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <style> + .container { + display: block; + padding: 2px 1px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + width: 30px; + height: 22px; + } + .small > .container { + width: 2px; + height: 4px; + margin-right: 10px; /* To avoid overlap between overflowing kids */ + } + + .container > * { + background: teal; + width: 6px; + height: 8px; + margin-top: 3px; + } + .big .alignStart { margin-left: 22px; } + .big .alignCenter { margin-left: 15px; } + .big .alignEnd { margin-left: 8px; } + .small .alignStart { margin-left: -4px; } + .small .alignCenter { margin-left: -2px; } + .small .alignEnd { margin-left: 0px; } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-align-self --> + <div class="big"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> + <div class="small"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-002.html new file mode 100644 index 0000000..26e1b8d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-002.html
@@ -0,0 +1,59 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Test: Static position of abspos horizontal-tb children in a vertical-rl grid container, with various "align-self" values</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid/#abspos-items"> + <link rel="match" href="grid-abspos-staticpos-align-self-vertWM-last-baseline-002-ref.html"> + <style> + .container { + display: grid; + writing-mode: vertical-rl; + padding: 2px 1px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + position: relative; + } + br { clear: both } + + .big > .container { + width: 30px; + height: 22px; + grid: 2px 20px 2px / 3px 14px 3px; + } + .small > .container { + grid: 0px 2px 0px / 3px 2px 3px; + width: 2px; + height: 4px; + margin-right: 10px; /* To avoid overlap between overflowing kids */ + } + + .container > * { + position: absolute; + writing-mode: horizontal-tb; + grid-area: 2 / 2 / 3 / 3; + background: teal; + width: 6px; + height: 8px; + } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-align-self --> + <div class="big"> + <div class="container"><div style="align-self: last baseline"></div></div> + </div> + <div class="small"> + <div class="container"><div style="align-self: last baseline"></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-003-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-003-ref.html new file mode 100644 index 0000000..41da802a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-003-ref.html
@@ -0,0 +1,56 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Reference</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <style> + .container { + display: block; + padding: 2px 1px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + width: 30px; + height: 22px; + } + .small > .container { + width: 2px; + height: 4px; + margin-right: 10px; /* To avoid overlap between overflowing kids */ + } + + .container > * { + background: teal; + width: 6px; + height: 8px; + } + .big .alignStart { margin-left: 24px; } + .big .alignCenter { margin-left: 11px; } + .big .alignEnd { margin-left: -2px; } + .small .alignStart { margin-left: -4px; } + .small .alignCenter { margin-left: -3px; } + .small .alignEnd { margin-left: -2px; } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-align-self --> + <div class="big"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> + <div class="small"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-003.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-003.html new file mode 100644 index 0000000..7023e2ef --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-003.html
@@ -0,0 +1,57 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Test: Static position of abspos children in a vertical-rl static-pos grid container, with various "align-self" values</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid/#abspos-items"> + <link rel="match" href="grid-abspos-staticpos-align-self-vertWM-last-baseline-003-ref.html"> + <style> + .container { + display: grid; + writing-mode: vertical-rl; + padding: 2px 1px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + width: 30px; + height: 22px; + grid: 2px 20px 2px / 3px 14px 3px; + } + .small > .container { + grid: 0px 2px 0px / 3px 2px 3px; + width: 2px; + height: 4px; + margin-right: 10px; /* To avoid overlap between overflowing kids */ + } + + .container > * { + position: absolute; + grid-area: 2 / 2 / 3 / 3; + background: teal; + width: 6px; + height: 8px; + } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-align-self --> + <div class="big"> + <div class="container"><div style="align-self: last baseline"></div></div> + </div> + <div class="small"> + <div class="container"><div style="align-self: last baseline"></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-004-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-004-ref.html new file mode 100644 index 0000000..41da802a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-004-ref.html
@@ -0,0 +1,56 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Reference</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <style> + .container { + display: block; + padding: 2px 1px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + width: 30px; + height: 22px; + } + .small > .container { + width: 2px; + height: 4px; + margin-right: 10px; /* To avoid overlap between overflowing kids */ + } + + .container > * { + background: teal; + width: 6px; + height: 8px; + } + .big .alignStart { margin-left: 24px; } + .big .alignCenter { margin-left: 11px; } + .big .alignEnd { margin-left: -2px; } + .small .alignStart { margin-left: -4px; } + .small .alignCenter { margin-left: -3px; } + .small .alignEnd { margin-left: -2px; } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-align-self --> + <div class="big"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> + <div class="small"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-004.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-004.html new file mode 100644 index 0000000..e39e6b39 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-align-self-vertWM-last-baseline-004.html
@@ -0,0 +1,58 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Test: Static position of abspos horizontal-tb children in a static-pos vertical-rl grid container, with various "align-self" values</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid/#abspos-items"> + <link rel="match" href="grid-abspos-staticpos-align-self-vertWM-last-baseline-004-ref.html"> + <style> + .container { + display: grid; + writing-mode: vertical-rl; + padding: 2px 1px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + width: 30px; + height: 22px; + grid: 2px 20px 2px / 3px 14px 3px; + } + .small > .container { + grid: 0px 2px 0px / 3px 2px 3px; + width: 2px; + height: 4px; + margin-right: 10px; /* To avoid overlap between overflowing kids */ + } + + .container > * { + position: absolute; + writing-mode: horizontal-tb; + grid-area: 2 / 2 / 3 / 3; + background: teal; + width: 6px; + height: 8px; + } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-align-self --> + <div class="big"> + <div class="container"><div style="align-self: last baseline"></div></div> + </div> + <div class="small"> + <div class="container"><div style="align-self: last baseline"></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-001-ref.html index 6d197e4..982e0c6 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-001-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-001-ref.html
@@ -55,7 +55,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> @@ -81,7 +80,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-001.html index cd934bd..3f9a59f 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-001.html
@@ -56,7 +56,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> @@ -82,7 +81,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-002-ref.html index f7396ed..a5e8aad 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-002-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-002-ref.html
@@ -54,7 +54,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> @@ -80,7 +79,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-002.html index 1d72ae8e..d0b60756 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-002.html
@@ -55,7 +55,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> @@ -81,7 +80,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-001-ref.html index 78d62121..29a2961 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-001-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-001-ref.html
@@ -57,8 +57,6 @@ <!-- <baseline-position> --> <div class="container"><img src="support/colors-8x16.png" class="alignStart"><!--baseline--></div> - <div class="container"><img src="support/colors-8x16.png" - class="alignEnd"><!--last baseline--></div> <br> <!-- <self-position>, part 1: --> <div class="container"><img src="support/colors-8x16.png" @@ -97,8 +95,6 @@ <!-- <baseline-position> --> <div class="container"><img src="support/colors-8x16.png" class="alignStart"><!--baseline--></div> - <div class="container"><img src="support/colors-8x16.png" - class="alignEnd"><!--last baseline--></div> <br> <!-- <self-position>, part 1: --> <div class="container"><img src="support/colors-8x16.png"
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-001.html index a860ae6..d402fd8 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-001.html
@@ -56,8 +56,6 @@ <!-- <baseline-position> --> <div class="container"><img src="support/colors-8x16.png" style="justify-self: baseline"></div> - <div class="container"><img src="support/colors-8x16.png" - style="justify-self: last baseline"></div> <br> <!-- <self-position>, part 1 --> <div class="container"><img src="support/colors-8x16.png" @@ -96,8 +94,6 @@ <!-- <baseline-position> --> <div class="container"><img src="support/colors-8x16.png" style="justify-self: baseline"></div> - <div class="container"><img src="support/colors-8x16.png" - style="justify-self: last baseline"></div> <br> <!-- <self-position>, part 1 --> <div class="container"><img src="support/colors-8x16.png"
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-002-ref.html index e71555d4..7a96945 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-002-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-002-ref.html
@@ -56,8 +56,6 @@ <!-- <baseline-position> --> <div class="container"><img src="support/colors-8x16.png" class="alignStart"><!--baseline--></div> - <div class="container"><img src="support/colors-8x16.png" - class="alignEnd"><!--last baseline--></div> <br> <!-- <self-position>, part 1: --> <div class="container"><img src="support/colors-8x16.png" @@ -96,8 +94,6 @@ <!-- <baseline-position> --> <div class="container"><img src="support/colors-8x16.png" class="alignStart"><!--baseline--></div> - <div class="container"><img src="support/colors-8x16.png" - class="alignEnd"><!--last baseline--></div> <br> <!-- <self-position>, part 1: --> <div class="container"><img src="support/colors-8x16.png"
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-002.html index 6483421..be0ea35 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-002.html
@@ -55,8 +55,6 @@ <!-- <baseline-position> --> <div class="container"><img src="support/colors-8x16.png" style="justify-self: baseline"></div> - <div class="container"><img src="support/colors-8x16.png" - style="justify-self: last baseline"></div> <br> <!-- <self-position>, part 1 --> <div class="container"><img src="support/colors-8x16.png" @@ -95,8 +93,6 @@ <!-- <baseline-position> --> <div class="container"><img src="support/colors-8x16.png" style="justify-self: baseline"></div> - <div class="container"><img src="support/colors-8x16.png" - style="justify-self: last baseline"></div> <br> <!-- <self-position>, part 1 --> <div class="container"><img src="support/colors-8x16.png"
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-last-baseline-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-last-baseline-001-ref.html new file mode 100644 index 0000000..401cc7c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-last-baseline-001-ref.html
@@ -0,0 +1,57 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Reference</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <style> + .container { + display: block; + padding: 2px 1px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + width: 40px; + height: 22px; + } + .small > .container { + width: 2px; + height: 4px; + margin-bottom: 20px; /* to reduce overlap between overflowing images */ + } + + .container > * { + margin-top: 3px; + display: block; + } + .big .alignStart { margin-left: 2px; } + .big .alignCenter { margin-left: 13px; } + .big .alignEnd { margin-left: 24px; } + .small .alignStart { margin-left: 0px; } + .small .alignCenter { margin-left: -3px; } + .small .alignEnd { margin-left: -6px; } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-justify-self --> + <div class="big"> + <div class="container"><img src="support/colors-8x16.png" + class="alignEnd"><!--last baseline--></div> + </div> + <div class="small"> + <div class="container"><img src="support/colors-8x16.png" + class="alignEnd"><!--last baseline--></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-last-baseline-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-last-baseline-001.html new file mode 100644 index 0000000..76e8a62c --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-last-baseline-001.html
@@ -0,0 +1,56 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Test: Static position of abspos replaced children in a grid container, with various "justify-self" values</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid/#abspos-items"> + <link rel="match" href="grid-abspos-staticpos-justify-self-img-last-baseline-001-ref.html"> + <style> + .container { + display: grid; + padding: 2px 1px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + position: relative; + } + br { clear: both } + + .big > .container { + width: 40px; + height: 22px; + grid: 3px 14px 3px / 2px 30px 2px; + } + .small > .container { + grid: 3px 2px 3px / 0px 2px 0px; + width: 2px; + height: 4px; + margin-bottom: 20px; /* to reduce overlap between overflowing images */ + } + + .container > * { + position: absolute; + grid-area: 2 / 2 / 3 / 3; + } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-justify-self --> + <div class="big"> + <div class="container"><img src="support/colors-8x16.png" + style="justify-self: last baseline"></div> + </div> + <div class="small"> + <div class="container"><img src="support/colors-8x16.png" + style="justify-self: last baseline"></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-last-baseline-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-last-baseline-002-ref.html new file mode 100644 index 0000000..a466297 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-last-baseline-002-ref.html
@@ -0,0 +1,56 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Reference</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <style> + .container { + display: block; + padding: 2px 1px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + width: 40px; + height: 22px; + } + .small > .container { + width: 2px; + height: 4px; + margin-bottom: 20px; /* to reduce overlap between overflowing images */ + } + + .container > * { + display: block; + } + .big .alignStart { margin-left: 0px; } + .big .alignCenter { margin-left: 17px; } + .big .alignEnd { margin-left: 34px; } + .small .alignStart { margin-left: 0px; } + .small .alignCenter { margin-left: -2px; } + .small .alignEnd { margin-left: -4px; } + </style> +</head> +<body> + <div class="big"> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-justify-self --> + <div class="container"><img src="support/colors-8x16.png" + class="alignEnd"><!--last baseline--></div> + </div> + <div class="small"> + <div class="container"><img src="support/colors-8x16.png" + class="alignEnd"><!--last baseline--></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-last-baseline-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-last-baseline-002.html new file mode 100644 index 0000000..7f7c898 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-img-last-baseline-002.html
@@ -0,0 +1,55 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Test: Static position of abspos replaced children in a static-pos grid container, with various "justify-self" values</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid/#abspos-items"> + <link rel="match" href="grid-abspos-staticpos-justify-self-img-last-baseline-002-ref.html"> + <style> + .container { + display: grid; + padding: 2px 1px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + width: 40px; + height: 22px; + grid: 3px 14px 3px / 2px 30px 2px; + } + .small > .container { + grid: 3px 2px 3px / 0px 2px 0px; + width: 2px; + height: 4px; + margin-bottom: 20px; /* to reduce overlap between overflowing images */ + } + + .container > * { + position: absolute; + grid-area: 2 / 2 / 3 / 3; + } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-justify-self --> + <div class="big"> + <div class="container"><img src="support/colors-8x16.png" + style="justify-self: last baseline"></div> + </div> + <div class="small"> + <div class="container"><img src="support/colors-8x16.png" + style="justify-self: last baseline"></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-last-baseline-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-last-baseline-001-ref.html new file mode 100644 index 0000000..d19b165 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-last-baseline-001-ref.html
@@ -0,0 +1,57 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Reference</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <style> + .container { + display: block; + padding: 2px 1px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + width: 30px; + height: 22px; + } + .small > .container { + width: 2px; + height: 4px; + margin-right: 10px; /* To avoid overlap between overflowing kids */ + } + + .container > * { + background: teal; + width: 6px; + height: 8px; + margin-top: 3px; + } + .big .alignStart { margin-left: 2px; } + .big .alignCenter { margin-left: 9px; } + .big .alignEnd { margin-left: 16px; } + .small .alignStart { margin-left: 0px; } + .small .alignCenter { margin-left: -2px; } + .small .alignEnd { margin-left: -4px; } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-justify-self --> + <div class="big"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> + <div class="small"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-last-baseline-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-last-baseline-001.html new file mode 100644 index 0000000..2328268a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-last-baseline-001.html
@@ -0,0 +1,58 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Test: Static position of abspos children in a grid container, with various "justify-self" values</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid/#abspos-items"> + <link rel="match" href="grid-abspos-staticpos-justify-self-last-baseline-001-ref.html"> + <style> + .container { + display: grid; + padding: 2px 1px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + justify-items: center; /* To exercise 'justify-self: auto' on children */ + position: relative; + } + br { clear: both } + + .big > .container { + width: 30px; + height: 22px; + grid: 3px 14px 3px / 2px 20px 2px; + } + .small > .container { + grid: 3px 2px 3px / 0px 2px 0px; + width: 2px; + height: 4px; + margin-right: 10px; /* To avoid overlap between overflowing kids */ + } + + .container > * { + position: absolute; + grid-area: 2 / 2 / 3 / 3; + background: teal; + width: 6px; + height: 8px; + } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-justify-self --> + <div class="big"> + <div class="container"><div style="justify-self: last baseline"></div></div> + </div> + <div class="small"> + <div class="container"><div style="justify-self: last baseline"></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-last-baseline-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-last-baseline-002-ref.html new file mode 100644 index 0000000..44cc7886 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-last-baseline-002-ref.html
@@ -0,0 +1,56 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Reference</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <style> + .container { + display: block; + padding: 2px 1px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + width: 30px; + height: 22px; + } + .small > .container { + width: 2px; + height: 4px; + margin-right: 10px; /* To avoid overlap between overflowing kids */ + } + + .container > * { + background: teal; + width: 6px; + height: 8px; + } + .big .alignStart { margin-left: 0px; } + .big .alignCenter { margin-left: 13px; } + .big .alignEnd { margin-left: 26px; } + .small .alignStart { margin-left: 0px; } + .small .alignCenter { margin-left: -1px; } + .small .alignEnd { margin-left: -2px; } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-justify-self --> + <div class="big"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> + <div class="small"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-last-baseline-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-last-baseline-002.html new file mode 100644 index 0000000..4ae8b5d --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-last-baseline-002.html
@@ -0,0 +1,57 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Test: Static position of abspos children in a static-pos grid container, with various "justify-self" values</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid/#abspos-items"> + <link rel="match" href="grid-abspos-staticpos-justify-self-last-baseline-002-ref.html"> + <style> + .container { + display: grid; + padding: 2px 1px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + justify-items: center; /* To exercise 'justify-self: auto' on children */ + } + br { clear: both } + + .big > .container { + width: 30px; + height: 22px; + grid: 3px 14px 3px / 2px 20px 2px; + } + .small > .container { + grid: 3px 2px 3px / 0px 2px 0px; + width: 2px; + height: 4px; + margin-right: 10px; /* To avoid overlap between overflowing kids */ + } + + .container > * { + position: absolute; + grid-area: 2 / 2 / 3 / 3; + background: teal; + width: 6px; + height: 8px; + } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-justify-self --> + <div class="big"> + <div class="container"><div style="justify-self: last baseline"></div></div> + </div> + <div class="small"> + <div class="container"><div style="justify-self: last baseline"></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-001-ref.html index 8e5db1e..32c9ed2 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-001-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-001-ref.html
@@ -55,7 +55,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> @@ -81,7 +80,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-001.html index f8f3586..3080c49 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-001.html
@@ -56,7 +56,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> @@ -82,7 +81,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-002-ref.html index c7176a7..4dea207 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-002-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-002-ref.html
@@ -55,7 +55,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> @@ -81,7 +80,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-002.html index 528f294..4c3a4a84 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-002.html
@@ -57,7 +57,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> @@ -83,7 +82,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-003-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-003-ref.html index 8c88ad97b..22dd4bfb 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-003-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-003-ref.html
@@ -54,7 +54,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> @@ -80,7 +79,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-003.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-003.html index 8343b14..f27bb62 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-003.html
@@ -55,7 +55,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> @@ -81,7 +80,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-004-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-004-ref.html index 3e4c100..fde33cf 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-004-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-004-ref.html
@@ -54,7 +54,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> @@ -80,7 +79,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-004.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-004.html index c098cc0..a8647bb 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-004.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-004.html
@@ -56,7 +56,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> @@ -82,7 +81,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-001-ref.html new file mode 100644 index 0000000..d051371 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-001-ref.html
@@ -0,0 +1,57 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Reference</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <style> + .container { + display: block; + padding: 2px 1px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + width: 30px; + height: 22px; + } + .small > .container { + width: 2px; + height: 4px; + margin-right: 10px; /* To avoid overlap between overflowing kids */ + } + + .container > * { + background: teal; + width: 6px; + height: 8px; + margin-top: 3px; + } + .big .alignStart { margin-left: 22px; } + .big .alignCenter { margin-left: 15px; } + .big .alignEnd { margin-left: 8px; } + .small .alignStart { margin-left: -4px; } + .small .alignCenter { margin-left: -2px; } + .small .alignEnd { margin-left: 0px; } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-justify-self --> + <div class="big"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> + <div class="small"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-001.html new file mode 100644 index 0000000..1f2be10 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-001.html
@@ -0,0 +1,58 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Test: Static position of abspos children in a RTL grid container, with various "justify-self" values</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid/#abspos-items"> + <link rel="match" href="grid-abspos-staticpos-justify-self-rtl-last-baseline-001-ref.html"> + <style> + .container { + display: grid; + direction: rtl; + padding: 2px 1px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + position: relative; + } + br { clear: both } + + .big > .container { + width: 30px; + height: 22px; + grid: 3px 14px 3px / 2px 20px 2px; + } + .small > .container { + grid: 3px 2px 3px / 0px 2px 0px; + width: 2px; + height: 4px; + margin-right: 10px; /* To avoid overlap between overflowing kids */ + } + + .container > * { + position: absolute; + grid-area: 2 / 2 / 3 / 3; + background: teal; + width: 6px; + height: 8px; + } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-justify-self --> + <div class="big"> + <div class="container"><div style="justify-self: last baseline"></div></div> + </div> + <div class="small"> + <div class="container"><div style="justify-self: last baseline"></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-002-ref.html new file mode 100644 index 0000000..d051371 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-002-ref.html
@@ -0,0 +1,57 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Reference</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <style> + .container { + display: block; + padding: 2px 1px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + width: 30px; + height: 22px; + } + .small > .container { + width: 2px; + height: 4px; + margin-right: 10px; /* To avoid overlap between overflowing kids */ + } + + .container > * { + background: teal; + width: 6px; + height: 8px; + margin-top: 3px; + } + .big .alignStart { margin-left: 22px; } + .big .alignCenter { margin-left: 15px; } + .big .alignEnd { margin-left: 8px; } + .small .alignStart { margin-left: -4px; } + .small .alignCenter { margin-left: -2px; } + .small .alignEnd { margin-left: 0px; } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-justify-self --> + <div class="big"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> + <div class="small"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-002.html new file mode 100644 index 0000000..519c96f --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-002.html
@@ -0,0 +1,59 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Test: Static position of abspos LTR children in a RTL grid container, with various "justify-self" values</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid/#abspos-items"> + <link rel="match" href="grid-abspos-staticpos-justify-self-rtl-last-baseline-002-ref.html"> + <style> + .container { + display: grid; + direction: rtl; + padding: 2px 1px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + position: relative; + } + br { clear: both } + + .big > .container { + width: 30px; + height: 22px; + grid: 3px 14px 3px / 2px 20px 2px; + } + .small > .container { + grid: 3px 2px 3px / 0px 2px 0px; + width: 2px; + height: 4px; + margin-right: 10px; /* To avoid overlap between overflowing kids */ + } + + .container > * { + position: absolute; + direction: ltr; + grid-area: 2 / 2 / 3 / 3; + background: teal; + width: 6px; + height: 8px; + } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-justify-self --> + <div class="big"> + <div class="container"><div style="justify-self: last baseline"></div></div> + </div> + <div class="small"> + <div class="container"><div style="justify-self: last baseline"></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-003-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-003-ref.html new file mode 100644 index 0000000..240803b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-003-ref.html
@@ -0,0 +1,56 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Reference</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <style> + .container { + display: block; + padding: 2px 1px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + width: 30px; + height: 22px; + } + .small > .container { + width: 2px; + height: 4px; + margin-right: 10px; /* To avoid overlap between overflowing kids */ + } + + .container > * { + background: teal; + width: 6px; + height: 8px; + } + .big .alignStart { margin-left: 24px; } + .big .alignCenter { margin-left: 11px; } + .big .alignEnd { margin-left: -2px; } + .small .alignStart { margin-left: -4px; } + .small .alignCenter { margin-left: -3px; } + .small .alignEnd { margin-left: -2px; } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-justify-self --> + <div class="big"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> + <div class="small"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-003.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-003.html new file mode 100644 index 0000000..90af5052 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-003.html
@@ -0,0 +1,57 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Test: Static position of abspos children in a RTL static-pos grid container, with various "justify-self" values</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid/#abspos-items"> + <link rel="match" href="grid-abspos-staticpos-justify-self-rtl-last-baseline-003-ref.html"> + <style> + .container { + display: grid; + direction: rtl; + padding: 2px 1px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + width: 30px; + height: 22px; + grid: 3px 14px 3px / 2px 20px 2px; + } + .small > .container { + grid: 3px 2px 3px / 0px 2px 0px; + width: 2px; + height: 4px; + margin-right: 10px; /* To avoid overlap between overflowing kids */ + } + + .container > * { + position: absolute; + grid-area: 2 / 2 / 3 / 3; + background: teal; + width: 6px; + height: 8px; + } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-justify-self --> + <div class="big"> + <div class="container"><div style="justify-self: last baseline"></div></div> + </div> + <div class="small"> + <div class="container"><div style="justify-self: last baseline"></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-004-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-004-ref.html new file mode 100644 index 0000000..240803b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-004-ref.html
@@ -0,0 +1,56 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Reference</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <style> + .container { + display: block; + padding: 2px 1px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + width: 30px; + height: 22px; + } + .small > .container { + width: 2px; + height: 4px; + margin-right: 10px; /* To avoid overlap between overflowing kids */ + } + + .container > * { + background: teal; + width: 6px; + height: 8px; + } + .big .alignStart { margin-left: 24px; } + .big .alignCenter { margin-left: 11px; } + .big .alignEnd { margin-left: -2px; } + .small .alignStart { margin-left: -4px; } + .small .alignCenter { margin-left: -3px; } + .small .alignEnd { margin-left: -2px; } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-justify-self --> + <div class="big"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> + <div class="small"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-004.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-004.html new file mode 100644 index 0000000..66df456 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-rtl-last-baseline-004.html
@@ -0,0 +1,58 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Test: Static position of abspos LTR children in a RTL static-pos grid container, with various "justify-self" values</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid/#abspos-items"> + <link rel="match" href="grid-abspos-staticpos-justify-self-rtl-last-baseline-004-ref.html"> + <style> + .container { + display: grid; + direction: rtl; + padding: 2px 1px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + width: 30px; + height: 22px; + grid: 3px 14px 3px / 2px 20px 2px; + } + .small > .container { + grid: 3px 2px 3px / 0px 2px 0px; + width: 2px; + height: 4px; + margin-right: 10px; /* To avoid overlap between overflowing kids */ + } + + .container > * { + position: absolute; + direction: ltr; + grid-area: 2 / 2 / 3 / 3; + background: teal; + width: 6px; + height: 8px; + } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-justify-self --> + <div class="big"> + <div class="container"><div style="justify-self: last baseline"></div></div> + </div> + <div class="small"> + <div class="container"><div style="justify-self: last baseline"></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-001-ref.html index 9fff3eab..1914d55 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-001-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-001-ref.html
@@ -57,7 +57,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> @@ -83,7 +82,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-001.html index 3d91ad9c..ef5af10 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-001.html
@@ -55,7 +55,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> @@ -81,7 +80,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-002-ref.html index 9fff3eab..1914d55 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-002-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-002-ref.html
@@ -57,7 +57,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> @@ -83,7 +82,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-002.html index b983a75..bed8a0a 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-002.html
@@ -56,7 +56,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> @@ -82,7 +81,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-003-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-003-ref.html index c0d0b78..230caa4e 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-003-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-003-ref.html
@@ -56,7 +56,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> @@ -82,7 +81,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-003.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-003.html index d938a12..2626c49 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-003.html
@@ -54,7 +54,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> @@ -80,7 +79,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-004-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-004-ref.html index c0d0b78..230caa4e 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-004-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-004-ref.html
@@ -56,7 +56,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div> @@ -82,7 +81,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div class="alignStart"><!--baseline--></div></div> - <div class="container"><div class="alignEnd"><!--last baseline--></div></div> <br> <!-- <self-position>, part 1: --> <div class="container"><div class="alignCenter"><!--center--></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-004.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-004.html index a4cbea83..4574da3a 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-004.html +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-004.html
@@ -55,7 +55,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div> @@ -81,7 +80,6 @@ <br> <!-- <baseline-position> --> <div class="container"><div style="justify-self: baseline"></div></div> - <div class="container"><div style="justify-self: last baseline"></div></div> <br> <!-- <self-position>, part 1 --> <div class="container"><div style="justify-self: center"></div></div>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-001-ref.html new file mode 100644 index 0000000..7857835 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-001-ref.html
@@ -0,0 +1,59 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Reference</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <style> + .container { + display: block; + padding: 1px 2px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + height: 30px; + width: 22px; + } + .small > .container { + height: 2px; + width: 4px; + } + + .container > * { + background: teal; + height: 6px; + width: 8px; + margin-top: 3px; + } + .big > .container > * { margin-left: 11px; } + .small > .container > * { margin-left: -7px; } + + .big .alignStart { margin-top: 2px; } + .big .alignCenter { margin-top: 9px; } + .big .alignEnd { margin-top: 16px; } + .small .alignStart { margin-top: 0px; } + .small .alignCenter { margin-top: -2px; } + .small .alignEnd { margin-top: -4px; } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-align-self --> + <div class="big"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> + <div class="small"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-001.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-001.html new file mode 100644 index 0000000..f7ada7a --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-001.html
@@ -0,0 +1,57 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Test: Static position of abspos children in a vertical-rl grid container, with various "justify-self" values</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid/#abspos-items"> + <link rel="match" href="grid-abspos-staticpos-justify-self-vertWM-last-baseline-001-ref.html"> + <style> + .container { + display: grid; + writing-mode: vertical-rl; + padding: 1px 2px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + position: relative; + } + br { clear: both } + + .big > .container { + height: 30px; + width: 22px; + grid: 3px 14px 3px / 2px 20px 2px; + } + .small > .container { + grid: 3px 2px 3px / 0px 2px 0px; + height: 2px; + width: 4px; + } + + .container > * { + position: absolute; + grid-area: 2 / 2 / 3 / 3; + background: teal; + height: 6px; + width: 8px; + } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-justify-self --> + <div class="big"> + <div class="container"><div style="justify-self: last baseline"></div></div> + </div> + <div class="small"> + <div class="container"><div style="justify-self: last baseline"></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-002-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-002-ref.html new file mode 100644 index 0000000..fb1c5fd --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-002-ref.html
@@ -0,0 +1,59 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Reference</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <style> + .container { + display: block; + padding: 1px 2px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + height: 30px; + width: 22px; + } + .small > .container { + height: 2px; + width: 4px; + } + + .container > * { + background: teal; + height: 6px; + width: 8px; + margin-top: 3px; + } + .big > .container > * { margin-left: 11px; } + .small > .container > * { margin-left: -7px; } + + .big .alignStart { margin-top: 2px; } + .big .alignCenter { margin-top: 9px; } + .big .alignEnd { margin-top: 16px; } + .small .alignStart { margin-top: 0px; } + .small .alignCenter { margin-top: -2px; } + .small .alignEnd { margin-top: -4px; } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-justify-self --> + <div class="big"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> + <div class="small"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-002.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-002.html new file mode 100644 index 0000000..aa1303d3 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-002.html
@@ -0,0 +1,58 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Test: Static position of abspos horizontal-tb children in a vertical-rl grid container, with various "justify-self" values</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid/#abspos-items"> + <link rel="match" href="grid-abspos-staticpos-justify-self-vertWM-last-baseline-002-ref.html"> + <style> + .container { + display: grid; + writing-mode: vertical-rl; + padding: 1px 2px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + position: relative; + } + br { clear: both } + + .big > .container { + height: 30px; + width: 22px; + grid: 3px 14px 3px / 2px 20px 2px; + } + .small > .container { + grid: 3px 2px 3px / 0px 2px 0px; + height: 2px; + width: 4px; + } + + .container > * { + position: absolute; + writing-mode: horizontal-tb; + grid-area: 2 / 2 / 3 / 3; + background: teal; + height: 6px; + width: 8px; + } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-justify-self --> + <div class="big"> + <div class="container"><div style="justify-self: last baseline"></div></div> + </div> + <div class="small"> + <div class="container"><div style="justify-self: last baseline"></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-003-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-003-ref.html new file mode 100644 index 0000000..41555d5e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-003-ref.html
@@ -0,0 +1,58 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Reference</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <style> + .container { + display: block; + padding: 1px 2px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + height: 30px; + width: 22px; + } + .small > .container { + height: 2px; + width: 4px; + } + + .container > * { + background: teal; + height: 6px; + width: 8px; + } + .big > .container > * { margin-left: 14px; } + .small > .container > * { margin-left: -4px; } + + .big .alignStart { margin-top: 0px; } + .big .alignCenter { margin-top: 13px; } + .big .alignEnd { margin-top: 26px; } + .small .alignStart { margin-top: 0px; } + .small .alignCenter { margin-top: -1px; } + .small .alignEnd { margin-top: -2px; } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-justify-self --> + <div class="big"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> + <div class="small"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-003.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-003.html new file mode 100644 index 0000000..4ab166e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-003.html
@@ -0,0 +1,56 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Test: Static position of abspos children in a vertical-rl static-pos grid container, with various "justify-self" values</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid/#abspos-items"> + <link rel="match" href="grid-abspos-staticpos-justify-self-vertWM-last-baseline-003-ref.html"> + <style> + .container { + display: grid; + writing-mode: vertical-rl; + padding: 1px 2px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + height: 30px; + width: 22px; + grid: 3px 14px 3px / 2px 20px 2px; + } + .small > .container { + grid: 3px 2px 3px / 0px 2px 0px; + height: 2px; + width: 4px; + } + + .container > * { + position: absolute; + grid-area: 2 / 2 / 3 / 3; + background: teal; + height: 6px; + width: 8px; + } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-justify-self --> + <div class="big"> + <div class="container"><div style="justify-self: last baseline"></div></div> + </div> + <div class="small"> + <div class="container"><div style="justify-self: last baseline"></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-004-ref.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-004-ref.html new file mode 100644 index 0000000..41555d5e --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-004-ref.html
@@ -0,0 +1,58 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Reference</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <style> + .container { + display: block; + padding: 1px 2px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + height: 30px; + width: 22px; + } + .small > .container { + height: 2px; + width: 4px; + } + + .container > * { + background: teal; + height: 6px; + width: 8px; + } + .big > .container > * { margin-left: 14px; } + .small > .container > * { margin-left: -4px; } + + .big .alignStart { margin-top: 0px; } + .big .alignCenter { margin-top: 13px; } + .big .alignEnd { margin-top: 26px; } + .small .alignStart { margin-top: 0px; } + .small .alignCenter { margin-top: -1px; } + .small .alignEnd { margin-top: -2px; } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-justify-self --> + <div class="big"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> + <div class="small"> + <div class="container"><div class="alignEnd"><!--last baseline--></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-004.html b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-004.html new file mode 100644 index 0000000..26e7e66 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-grid/abspos/grid-abspos-staticpos-justify-self-vertWM-last-baseline-004.html
@@ -0,0 +1,57 @@ +<!DOCTYPE html> +<!-- + Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ +--> +<html> +<head> + <meta charset="utf-8"> + <title>CSS Test: Static position of abspos horizontal-tb children in a vertical-rl static-pos grid container, with various "justify-self" values</title> + <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> + <link rel="help" href="https://drafts.csswg.org/css-grid/#abspos-items"> + <link rel="match" href="grid-abspos-staticpos-justify-self-vertWM-last-baseline-004-ref.html"> + <style> + .container { + display: grid; + writing-mode: vertical-rl; + padding: 1px 2px; + border: 1px solid black; + background: yellow; + margin-bottom: 5px; + margin-right: 5px; + float: left; /* For testing in "rows" of containers */ + } + br { clear: both } + + .big > .container { + height: 30px; + width: 22px; + grid: 3px 14px 3px / 2px 20px 2px; + } + .small > .container { + grid: 3px 2px 3px / 0px 2px 0px; + height: 2px; + width: 4px; + } + + .container > * { + position: absolute; + writing-mode: horizontal-tb; + grid-area: 2 / 2 / 3 / 3; + background: teal; + height: 6px; + width: 8px; + } + </style> +</head> +<body> + <!-- The last baseline value, from + https://www.w3.org/TR/css-align-3/#propdef-justify-self --> + <div class="big"> + <div class="container"><div style="justify-self: last baseline"></div></div> + </div> + <div class="small"> + <div class="container"><div style="justify-self: last baseline"></div></div> + </div> +</body> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/trailing-ideographic-space-break-spaces-001-ref.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/trailing-ideographic-space-break-spaces-001-ref.html index ad629e9..293f752 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/trailing-ideographic-space-break-spaces-001-ref.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/reference/trailing-ideographic-space-break-spaces-001-ref.html
@@ -3,7 +3,10 @@ <title>CSS test reference</title> <link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com"/> <style> - div { white-space: pre; } + div { + white-space: pre; + line-height: 1; + } </style> <p>Test passes if the characters below are arranged in pairs with a empty line in between.</p>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-break-spaces-001.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-break-spaces-001.html index 2ab5edff..9ecfdb3 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-break-spaces-001.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-break-spaces-001.html
@@ -10,6 +10,7 @@ div { width: 3em; white-space: break-spaces; + line-height: 1; } </style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-break-spaces-002.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-break-spaces-002.html index 423dd8e..587f4e0 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-break-spaces-002.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-break-spaces-002.html
@@ -10,6 +10,7 @@ div { width: 3em; white-space: break-spaces; + line-height: 1; } </style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-break-spaces-003.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-break-spaces-003.html index fe09ba7..08eacdd 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-break-spaces-003.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-break-spaces-003.html
@@ -10,6 +10,7 @@ div { width: 3em; white-space: break-spaces; + line-height: 1; } </style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-break-spaces-004.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-break-spaces-004.html index bdc042e..e9c32cf 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-break-spaces-004.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-break-spaces-004.html
@@ -10,6 +10,7 @@ div { width: 3em; white-space: break-spaces; + line-height: 1; } </style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-break-spaces-005.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-break-spaces-005.html index 2d31870..a8c68aa 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-break-spaces-005.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-break-spaces-005.html
@@ -10,6 +10,7 @@ div { width: 3em; white-space: break-spaces; + line-height: 1; } </style>
diff --git a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-break-spaces-006.html b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-break-spaces-006.html index 5ac80ad..e43d7c8 100644 --- a/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-break-spaces-006.html +++ b/third_party/blink/web_tests/external/wpt/css/css-text/white-space/trailing-ideographic-space-break-spaces-006.html
@@ -10,6 +10,7 @@ div { width: 3em; white-space: break-spaces; + line-height: 1; } </style>
diff --git a/third_party/blink/web_tests/http/tests/devtools/oopif/oopif-presentation-console-messages.js b/third_party/blink/web_tests/http/tests/devtools/oopif/oopif-presentation-console-messages.js index 6c62af52..a50d445 100644 --- a/third_party/blink/web_tests/http/tests/devtools/oopif/oopif-presentation-console-messages.js +++ b/third_party/blink/web_tests/http/tests/devtools/oopif/oopif-presentation-console-messages.js
@@ -9,11 +9,19 @@ await TestRunner.loadModule('console'); await TestRunner.loadTestModule('console_test_runner'); await TestRunner.showPanel('console'); - function dumpMessage(prefix, message) { - TestRunner.addResult(`Line Message was ${prefix}: ${message.uiSourceCode().url()} ${message.level()} '${message.text()}':${message.lineNumber()}:${message.columnNumber()}`); + function dumpMessage(prefix, message, url) { + TestRunner.addResult(`Line Message was ${prefix}: ${url} ${ + message.level()} '${message.text()}':${message.lineNumber()}:${ + message.columnNumber()}`); } - TestRunner.addSniffer(Workspace.UISourceCode.prototype, 'addLineMessage', (level, text, lineNumber, columnNumber, message) => dumpMessage('added', message), true); - TestRunner.addSniffer(Workspace.UISourceCode.prototype, 'removeMessage', message => dumpMessage('removed', message), true); + TestRunner.addSniffer( + Workspace.UISourceCode.prototype, 'addMessage', function(message) { + dumpMessage('added', message, this.url()); + }, true); + TestRunner.addSniffer( + Workspace.UISourceCode.prototype, 'removeMessage', function(message) { + dumpMessage('removed', message, this.url()); + }, true); TestRunner.addResult('\nNavigating main frame'); await TestRunner.navigatePromise('resources/error.html');
diff --git a/third_party/node/node.gni b/third_party/node/node.gni new file mode 100644 index 0000000..fc2bc48 --- /dev/null +++ b/third_party/node/node.gni
@@ -0,0 +1,30 @@ +# Copyright 2021 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//build/config/python.gni") + +template("node") { + # TODO(crbug.com/1112471): Get this to run cleanly under Python 3. + python2_action(target_name) { + forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY) + forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) + + # Declare dependencies to all involved tools. + inputs += [ + "//third_party/node/node.py", + "//third_party/node/node_modules.py", + "//third_party/node/node_modules.tar.gz.sha1", + ] + + if (is_linux || is_chromeos) { + inputs += [ "//third_party/node/linux/node-linux-x64.tar.gz.sha1" ] + } + if (is_win) { + inputs += [ "//third_party/node/win/node.exe.sha1" ] + } + if (is_mac) { + inputs += [ "//third_party/node/mac/node-darwin-x64.tar.gz.sha1" ] + } + } +}
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 69d8126..0738ae1f 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -44430,6 +44430,7 @@ <int value="-1466990325" label="CrosCompUpdates:enabled"/> <int value="-1466862366" label="TouchToFillAndroid:enabled"/> <int value="-1466759286" label="TabModalJsDialog:disabled"/> + <int value="-1466600231" label="WakeOnWifiAllowed:enabled"/> <int value="-1465172796" label="CCTModule:disabled"/> <int value="-1464832541" label="EnableFuzzyAppSearch:disabled"/> <int value="-1463489219" label="OfflinePagesCTSuppressNotifications:enabled"/> @@ -48182,6 +48183,7 @@ <int value="1923496816" label="AssistantIntentTranslateInfo:disabled"/> <int value="1923780021" label="PrivacyReorderedAndroid:enabled"/> <int value="1924192543" label="ProactiveTabFreezeAndDiscard:enabled"/> + <int value="1924773264" label="WakeOnWifiAllowed:disabled"/> <int value="1925213304" label="FillingAcrossAffiliatedWebsites:enabled"/> <int value="1925627218" label="FullscreenToolbarReveal:disabled"/> <int value="1926524951" label="SystemWebApps:disabled"/> @@ -71222,10 +71224,13 @@ <int value="0" label="Signin primary account"/> <int value="1" label="Add secondary account"/> <int value="2" label="Reauthentication"/> - <int value="3" label="Unlock profile"/> + <int value="3" label="Unlock profile (deprecated 03-2021)"/> <int value="4" label="Typed URL with unknown reason"/> <int value="5" label="Signin primary account with force-sign-in policy enabled"/> + <int value="6" + label="Login and acquire a login scope token without actually signing + into any profiles on Chrome."/> </enum> <enum name="SigninReauthResult">
diff --git a/tools/typescript/ts_library.gni b/tools/typescript/ts_library.gni index 7938a324..4baa76cb 100644 --- a/tools/typescript/ts_library.gni +++ b/tools/typescript/ts_library.gni
@@ -2,8 +2,10 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. +import("//third_party/node/node.gni") + template("ts_library") { - action(target_name) { + node(target_name) { script = "//tools/typescript/ts_library.py" forward_variables_from(invoker,
diff --git a/ui/base/ime/chromeos/input_method_chromeos.cc b/ui/base/ime/chromeos/input_method_chromeos.cc index bed98b5e..527e2a4 100644 --- a/ui/base/ime/chromeos/input_method_chromeos.cc +++ b/ui/base/ime/chromeos/input_method_chromeos.cc
@@ -648,18 +648,12 @@ void InputMethodChromeOS::CommitText( const std::u16string& text, TextInputClient::InsertTextCursorBehavior cursor_behavior) { - if (text.empty()) - return; - // We need to receive input method result even if the text input type is // TEXT_INPUT_TYPE_NONE, to make sure we can always send correct // character for each key event to the focused text input client. if (!GetTextInputClient()) return; - if (text.empty()) - return; - if (!CanComposeInline()) { // Hides the candidate window for preedit text. UpdateCompositionText(CompositionText(), 0, false);
diff --git a/ui/base/ime/chromeos/input_method_chromeos_unittest.cc b/ui/base/ime/chromeos/input_method_chromeos_unittest.cc index 37af964..de0d0cf7 100644 --- a/ui/base/ime/chromeos/input_method_chromeos_unittest.cc +++ b/ui/base/ime/chromeos/input_method_chromeos_unittest.cc
@@ -1276,4 +1276,16 @@ EXPECT_EQ(fake_text_input_client.selection(), gfx::Range(3, 3)); } +TEST_F(InputMethodChromeOSTest, CommitTextReplacesSelection) { + FakeTextInputClient fake_text_input_client(TEXT_INPUT_TYPE_TEXT); + fake_text_input_client.SetTextAndSelection(u"hello", gfx::Range(0, 5)); + InputMethodChromeOS ime(this); + ime.SetFocusedTextInputClient(&fake_text_input_client); + + ime.CommitText( + u"", TextInputClient::InsertTextCursorBehavior::kMoveCursorAfterText); + + EXPECT_EQ(fake_text_input_client.text(), u""); +} + } // namespace ui
diff --git a/ui/base/ime/fake_text_input_client.cc b/ui/base/ime/fake_text_input_client.cc index 3c01928..e5593e9 100644 --- a/ui/base/ime/fake_text_input_client.cc +++ b/ui/base/ime/fake_text_input_client.cc
@@ -39,7 +39,7 @@ void FakeTextInputClient::InsertText( const std::u16string& text, TextInputClient::InsertTextCursorBehavior cursor_behavior) { - text_.insert(selection_.start(), text); + text_.replace(selection_.start(), selection_.length(), text); if (cursor_behavior == TextInputClient::InsertTextCursorBehavior::kMoveCursorAfterText) {
diff --git a/weblayer/browser/ads_page_load_metrics_observer_browsertest.cc b/weblayer/browser/ads_page_load_metrics_observer_browsertest.cc index b6f5cd0..70e90bb 100644 --- a/weblayer/browser/ads_page_load_metrics_observer_browsertest.cc +++ b/weblayer/browser/ads_page_load_metrics_observer_browsertest.cc
@@ -189,8 +189,9 @@ scoped_feature_list_.InitWithFeaturesAndParameters( {{subresource_filter::kAdsInterventionsEnforced, {}}, {subresource_filter::kAdTagging, {}}, - {features::kHeavyAdIntervention, {}}, - {features::kHeavyAdPrivacyMitigations, {{"host-threshold", "3"}}}}, + {heavy_ad_intervention::features::kHeavyAdIntervention, {}}, + {heavy_ad_intervention::features::kHeavyAdPrivacyMitigations, + {{"host-threshold", "3"}}}}, {}); }
diff --git a/weblayer/browser/browsing_data_remover_delegate.cc b/weblayer/browser/browsing_data_remover_delegate.cc index 93aec16..22d17ad 100644 --- a/weblayer/browser/browsing_data_remover_delegate.cc +++ b/weblayer/browser/browsing_data_remover_delegate.cc
@@ -81,7 +81,7 @@ } if (remove_mask & DATA_TYPE_AD_INTERVENTIONS) { - HeavyAdService* heavy_ad_service = + heavy_ad_intervention::HeavyAdService* heavy_ad_service = HeavyAdServiceFactory::GetForBrowserContext(browser_context_); if (heavy_ad_service->heavy_ad_blocklist()) { heavy_ad_service->heavy_ad_blocklist()->ClearBlockList(delete_begin,
diff --git a/weblayer/browser/heavy_ad_service_factory.cc b/weblayer/browser/heavy_ad_service_factory.cc index 1d4f55e3..ea9b501 100644 --- a/weblayer/browser/heavy_ad_service_factory.cc +++ b/weblayer/browser/heavy_ad_service_factory.cc
@@ -11,9 +11,9 @@ namespace weblayer { // static -HeavyAdService* HeavyAdServiceFactory::GetForBrowserContext( - content::BrowserContext* context) { - return static_cast<HeavyAdService*>( +heavy_ad_intervention::HeavyAdService* +HeavyAdServiceFactory::GetForBrowserContext(content::BrowserContext* context) { + return static_cast<heavy_ad_intervention::HeavyAdService*>( GetInstance()->GetServiceForBrowserContext(context, true)); } @@ -32,7 +32,7 @@ KeyedService* HeavyAdServiceFactory::BuildServiceInstanceFor( content::BrowserContext* context) const { - return new HeavyAdService(); + return new heavy_ad_intervention::HeavyAdService(); } content::BrowserContext* HeavyAdServiceFactory::GetBrowserContextToUse(
diff --git a/weblayer/browser/heavy_ad_service_factory.h b/weblayer/browser/heavy_ad_service_factory.h index 2d1ab08d..2f016ae 100644 --- a/weblayer/browser/heavy_ad_service_factory.h +++ b/weblayer/browser/heavy_ad_service_factory.h
@@ -12,7 +12,9 @@ class BrowserContext; } +namespace heavy_ad_intervention { class HeavyAdService; +} namespace weblayer { @@ -22,7 +24,8 @@ HeavyAdServiceFactory& operator=(const HeavyAdServiceFactory&) = delete; // Gets the HeavyAdService instance for |context|. - static HeavyAdService* GetForBrowserContext(content::BrowserContext* context); + static heavy_ad_intervention::HeavyAdService* GetForBrowserContext( + content::BrowserContext* context); static HeavyAdServiceFactory* GetInstance();